Commit 0cc3fe84 by 朱建香

文件目录更改

parent 6170ebf6
dev/node_modules dev/node_modules
custom/custom01/dev/node_modules
web/lib/js/p.js web/lib/js/p.js
web/lib/js/p.js.map web/lib/js/p.js.map
...@@ -15,3 +17,16 @@ web/view/*/*.map ...@@ -15,3 +17,16 @@ web/view/*/*.map
web/view/*/*.js web/view/*/*.js
web/custom/custom01/lib/js/p.js
web/custom/custom01/lib/js/p.js.map
web/custom/custom01/lib/dist
web/custom/custom01/view/*.map
web/custom/custom01/view/*.js
web/custom/custom01/view/*/*.map
web/custom/custom01/view/*/*.js
\ No newline at end of file
...@@ -33,5 +33,14 @@ ...@@ -33,5 +33,14 @@
<arguments>1.0-name-matches-false-false-node_modules</arguments> <arguments>1.0-name-matches-false-false-node_modules</arguments>
</matcher> </matcher>
</filter> </filter>
<filter>
<id>1520415145697</id>
<name></name>
<type>26</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-node_modules</arguments>
</matcher>
</filter>
</filteredResources> </filteredResources>
</projectDescription> </projectDescription>
...@@ -8,4 +8,8 @@ projectMethods.changeTimeline = function (vmObj, list) { ...@@ -8,4 +8,8 @@ projectMethods.changeTimeline = function (vmObj, list) {
vmObj.$refs.timeline.changeList(list); vmObj.$refs.timeline.changeList(list);
}; };
export {projectMethods} projectMethods.changeList = function (vmObj, list) {
\ No newline at end of file vmObj.$refs.list.changeList(list);
};
export default projectMethods
\ No newline at end of file
...@@ -29,6 +29,7 @@ export default { ...@@ -29,6 +29,7 @@ export default {
"GET_MSG_INTERVAL": 5000, "GET_MSG_INTERVAL": 5000,
"wifi_add_timeout": 150000, "wifi_add_timeout": 150000,
"add_wifi_timeout": 90, "add_wifi_timeout": 90,
"findWifiTimeout": 60000,
// "active_device_timeout": 30, // "active_device_timeout": 30,
//门铃晃动间隔时间 //门铃晃动间隔时间
"await_time": 3000, "await_time": 3000,
...@@ -51,7 +52,7 @@ export default { ...@@ -51,7 +52,7 @@ export default {
"intervalTime": 3, "intervalTime": 3,
//小红点超时时间,24小时之前的新消息没有小红点提示 //小红点超时时间,24小时之前的新消息没有小红点提示
"newMsg_timeout": 86400, "newMsg_timeout": 86400,
"getHistoryTime": 10, "getHistoryTimes": 3,
"audioUrl": "../../resources/audio/tipSound.mp3", "audioUrl": "../../resources/audio/tipSound.mp3",
// "audioUrl": "_www/resources/audio/tipSound.mp3" // "audioUrl": "_www/resources/audio/tipSound.mp3"
} }
\ No newline at end of file
var manage = 1; //1为正式地址,0为96地址
var modelManage = 0; //1为正式"USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK",0为UGEN_SECURITY_SMARTDOOR_YJ2017
//(1,1)为正式版, (1,0)为内测版, (0,1)为96版
export default { export default {
// "url": "https://cloud.iot.u-gen.net/", "url": manage ? "https://cloud.iot.u-gen.net/" : "http://192.168.2.96:20000",
"url": "http://192.168.2.96:20000", "model": modelManage ? "USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK" : "UGEN_SECURITY_SMARTDOOR_YJ2017",
// "model": "UGEN_SECURITY_SMARTDOOR_YJ2017" "appId": modelManage ? "10004" : "20004",
"model": "USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK" "appSecret": modelManage ? "10004" : "20004"
} }
\ No newline at end of file
import androidNotify from '../view/c_android-notify.vue'; import androidNotify from '../view/c_android-notify.vue';
import gridList from '../view/c_grid-list.vue'; import gridList from '../view/c_grid-list.vue';
import list from '../view/c_list.vue';
import timeline from '../view/c_timeline.vue'; import timeline from '../view/c_timeline.vue';
import updateApp from '../view/c_update-app.vue'; import updateApp from '../view/c_update-app.vue';
var components = { var components = {
'android-notify': androidNotify, 'android-notify': androidNotify,
'grid-list': gridList, 'grid-list': gridList,
'list': list,
'timeline': timeline, 'timeline': timeline,
'update-app': updateApp 'update-app': updateApp
}; };
......
...@@ -12,8 +12,8 @@ const iot = new UIOT({ ...@@ -12,8 +12,8 @@ const iot = new UIOT({
lang: ['zh', 'en'], lang: ['zh', 'en'],
vue: Vue, vue: Vue,
i18n: VueI18n, i18n: VueI18n,
appId: '10004', appId: defaultConfig.appId,
appSecret: '10004', appSecret: defaultConfig.appSecret,
wx: { wx: {
appId: '' appId: ''
}, },
......
class Update{
constructor(curV,newV,url) {//当前版本号、最新版本号以及获取最新安装包地址
this.curV = curV;
this.newV = newV;
this.url = url;
}
startUpdate(){
if(this.curV != this.newV){
console.log("需要更新...");
this.downWgt();
}else{
console.log("不需要更新");
alert("不需要更新");
return ;
}
}
downWgt(){
plus.nativeUI.showWaiting("下载wgt文件...");
this.onDownloadStart();
plus.downloader.createDownload( this.url, {filename:"_doc/update/"}, (d,status)=>{
if ( status == 200 ) {
this.onDownloadSuccess();
console.log("下载wgt成功:"+d.filename);
this.installWgt(d.filename); // 安装wgt包
} else {
console.log("下载wgt失败!");
this.onError(status);
plus.nativeUI.alert("下载wgt失败!");
}
plus.nativeUI.closeWaiting();
}).start();
}
installWgt(path){
this.onInstallStart();
plus.nativeUI.showWaiting("安装wgt文件...");
plus.runtime.install(path,{force: true},()=>{ //强制安装 不进行版本校验
plus.nativeUI.closeWaiting();
console.log("安装wgt文件成功!");
this.onInstallSuccess();
plus.nativeUI.alert("应用资源更新完成!",()=>{
plus.runtime.restart();
});
},(e)=>{
plus.nativeUI.closeWaiting();
this.onError(e);
console.log("安装wgt文件失败["+e.code+"]:"+e.message);
plus.nativeUI.alert("安装wgt文件失败["+e.code+"]:"+e.message);
});
}
onDownloadStart(){
console.log(`download wgt file start`);
}
onDownloadSuccess(){
console.log(`download wgt file success`);
}
onError(){
console.log(`operate onError`);
}
onInstallStart(){
console.log(`install wgt file start`);
}
onInstallSuccess(){
console.log(`install wgt file success`);
}
}
export default Update;
\ No newline at end of file
...@@ -181,7 +181,7 @@ function connectButtonTap(self){ ...@@ -181,7 +181,7 @@ function connectButtonTap(self){
model: defaultConfig.model, model: defaultConfig.model,
ssid: self.getTextWiFiName(), ssid: self.getTextWiFiName(),
wifiPwd: self.getTextPassword(), wifiPwd: self.getTextPassword(),
timeout: 20000 timeout: config.findWifiTimeout
}, },
success: (response) => { success: (response) => {
console.log("findWifi"); console.log("findWifi");
...@@ -462,7 +462,7 @@ function addSuccess(self){ ...@@ -462,7 +462,7 @@ function addSuccess(self){
// needClose: true // needClose: true
// }); // });
iot.navigator.openWindow({ iot.navigator.openWindow({
url: '../device/index.html', url: '../../custom/custom01/view/device/index.html',
id: 'device', id: 'device',
extras: { extras: {
needClose: true needClose: true
...@@ -479,7 +479,7 @@ function addSuccess(self){ ...@@ -479,7 +479,7 @@ function addSuccess(self){
needClose: true needClose: true
}); });
iot.navigator.openWindow({ iot.navigator.openWindow({
url: '../device/index.html', url: '../../custom/custom01/view/device/index.html',
id: 'device', id: 'device',
extras: { extras: {
needClose: true needClose: true
......
/**
* list.vue
* Version: 0.1
* User: shz
* Date: 2017-06-20
* Copyright(c) 2017. U-GEN Tech.Co,Ltd. All Rights Reserved.
* list
*/
<template>
<div class="u-list" v-bind:class="initClass">
<ul class="u-list-scroll" v-show="list.length">
<v-touch tag="li" class="u-list-row" v-for="(item, index) in list" :key="index"
v-bind:class="[item.class, {disabled: item.disabled}]" v-on:tap="onTapRow(index)">
<img class="u-list-left-image" v-if="item.leftImage" v-bind:src="item.leftImage">
<p class="u-list-left-bg-image" v-bind:class="item.imgClass" v-else-if="item.imgClass"></p>
<span class="u-list-left-icon" v-else-if="item.leftIcon" v-html="item.leftIcon"></span>
<div>
<p class="u-list-title">{{ item.title }}</p>
<p class="u-list-subtitle" v-if="item.subtitle">{{ item.subtitle }}</p>
</div>
<span class="u-list-right-text" v-if="item.rightText">{{ item.rightText }}</span>
<span class="u-list-right-icon" v-if="(item.rightIcon || item.disabled !== true)"
v-html="item.rightIcon"></span>
<img class="u-list-right-image" v-else-if="(item.rightImage || item.disabled !== true)"
v-bind:src="item.rightImage">
</v-touch>
<v-touch tag="li" class="u-list-load" v-on:tap="onTapLoad" v-show="loadShowFlag">
<span class="u-list-load-animation" v-show="loadFlag"></span>
{{ loadText }}
</v-touch>
</ul>
<p class="u-list-tip" v-show="tipShowFlag && (list.length == 0)">{{ tip }}</p>
</div>
</template>
<script>
export default {
props: ['initParam'],
data() {
return {
// 组件初始化列表
list: this.initParam.list || [],
// 组件初始化样式
initClass: this.initParam.class,
// 组件初始化无数据显示文字
tip: this.initParam.tip,
pagesize: this.initParam.pagesize,
pullup: this.initParam.pullup || false,
loadText: Vue.t('scroll.clickToLoadMore'),
// loading是否显示
loadShowFlag: false,
// 是否在loading
loadFlag: false,
tipShowFlag: false
}
},
mounted() {
this.setLoadShowFlag(this.list.length);
let ulistDom = this.$el;
let self = this;
ulistDom.onscroll = function () {
//在一些特殊情况下ulistDom.scrollHeight和ulistDom.offsetHeight + ulistDom.scrollTop会相差1px,这里考虑1px的误差
if (!self.loadFlag && self.pullup && (ulistDom.scrollHeight - (ulistDom.offsetHeight + ulistDom.scrollTop)) <= 1) {
self.loadText = Vue.t('scroll.loading');
self.loadFlag = true;
self.$emit('u-list-load');
}
}
},
methods: {
setLoadShowFlag(number) {
this.loadShowFlag = (number >= this.pagesize);
},
onTapRow(index) {
tapRow(this, index);
},
onTapLoad() {
tapLoad(this);
},
changeList(list) {
changeList(this, list);
}
}
}
// 通知事件和当前点击列表选项下标
function tapRow(self, index) {
if (self.list[index].disabled !== true) {
self.$emit('u-list-tap', index);
}
}
// 通知点击加载更多事件
function tapLoad(self) {
// loading
if (!self.loadFlag && !self.pullup) {
self.$emit('u-list-load');
self.loadText = Vue.t('scroll.loading');
self.loadFlag = true;
}
}
// 修改list组件列表
function changeList(self, list) {
let array = Array.isArray(list) ? list : [];
self.tipShowFlag = (array.length === 0);
self.setLoadShowFlag(array.length - self.list.length);
self.list = array;
self.$nextTick(function () {
self.loadText = Vue.t('scroll.clickToLoadMore');
self.loadFlag = false;
});
}
</script>
\ No newline at end of file
...@@ -10,11 +10,13 @@ const PAGE_SIZE = 10; ...@@ -10,11 +10,13 @@ const PAGE_SIZE = 10;
import moment from 'moment'; import moment from 'moment';
import config from '../../public/config.js'; import config from '../../public/config.js';
import {iot, uPublic, uComponents} from '../../public/public.js'; import {iot, uPublic, uComponents} from '../../public/public.js';
import projectMethods from '../../public/components.js';
iot.ready(init); iot.ready(init);
function init() { function init() {
//通用 list、dialog、loading组件 //通用 list、dialog、loading组件
uPublic.componentsInit(['u-list','u-dialog','u-loading']); uPublic.componentsInit(['u-list','u-dialog','u-loading']);
uPublic.componentsExtend(['list']);
uPublic.closeSlideBack(); uPublic.closeSlideBack();
const app = new Vue({ const app = new Vue({
data:{ data:{
...@@ -125,7 +127,8 @@ function resolve(self) { ...@@ -125,7 +127,8 @@ function resolve(self) {
for(let i=0; i<record.length; i++){ for(let i=0; i<record.length; i++){
list[i] = { list[i] = {
value: record[i].openId, value: record[i].openId,
leftImage: '../../resources/image/green_alarmInfo'+record[i].mode+'_icon.png', // leftImage: '../../resources/image/green_alarmInfo'+record[i].mode+'_icon.png',
imgClass: 'u-list-left-bg-alarm_'+record[i].mode,
subtitle: Vue.t('alarmInfo.'+config.alarmMode[record[i].mode]+''), subtitle: Vue.t('alarmInfo.'+config.alarmMode[record[i].mode]+''),
rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss") rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss")
}; };
...@@ -135,7 +138,7 @@ function resolve(self) { ...@@ -135,7 +138,7 @@ function resolve(self) {
self.setStartId(record[record.length-1].id); self.setStartId(record[record.length-1].id);
} }
//更新列表数据 //更新列表数据
uComponents.changeList(self, self.getList()); projectMethods.changeList(self, self.getList());
}else{ }else{
} }
uComponents.hideLoading(self); uComponents.hideLoading(self);
...@@ -156,11 +159,11 @@ function backTap(){ ...@@ -156,11 +159,11 @@ function backTap(){
} }
//重写mui.back //重写mui.back
mui.back = function(){ //mui.back = function(){
iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{}); // iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{});
console.log("fire"); // console.log("fire");
iot.navigator.back(); // iot.navigator.back();
} //}
//tap 点击加载更多 //tap 点击加载更多
function listLoad(self) { function listLoad(self) {
......
...@@ -10,12 +10,14 @@ import moment from 'moment'; ...@@ -10,12 +10,14 @@ import moment from 'moment';
const PAGE_SIZE = 10; const PAGE_SIZE = 10;
import config from '../../public/config.js'; import config from '../../public/config.js';
import {iot, uPublic, uComponents} from '../../public/public.js'; import {iot, uPublic, uComponents} from '../../public/public.js';
import projectMethods from '../../public/components.js';
iot.ready(init); iot.ready(init);
function init() { function init() {
//通用 list、dialog、loading组件 //通用 list、dialog、loading组件
uPublic.componentsInit(['u-list','u-dialog','u-loading']); uPublic.componentsInit(['u-list','u-dialog','u-loading']);
uPublic.componentsExtend(['list']);
uPublic.closeSlideBack(); uPublic.closeSlideBack();
const app = new Vue({ const app = new Vue({
data:{ data:{
...@@ -135,7 +137,8 @@ function initComponentsConfig() { ...@@ -135,7 +137,8 @@ function initComponentsConfig() {
list[i] = { list[i] = {
value: record[i].openId, value: record[i].openId,
title: "ID:"+record[i].openId, title: "ID:"+record[i].openId,
leftImage: '../../resources/image/green_hijackMode20_icon.png', // leftImage: '../../resources/image/green_hijackMode20_icon.png',
imgClass: 'u-list-left-bg-hijack',
subtitle: Vue.t('hijackRecord.'+config.hijackMode[record[i].mode]+''), subtitle: Vue.t('hijackRecord.'+config.hijackMode[record[i].mode]+''),
// title: ('ID:'+record[i].id), // title: ('ID:'+record[i].id),
rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss") rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss")
...@@ -153,7 +156,7 @@ function initComponentsConfig() { ...@@ -153,7 +156,7 @@ function initComponentsConfig() {
self.setStartId(record[record.length-1].id); self.setStartId(record[record.length-1].id);
} }
//更新列表数据 //更新列表数据
uComponents.changeList(self, self.getList()); projectMethods.changeList(self, self.getList());
}else{ }else{
} }
uComponents.hideLoading(self); uComponents.hideLoading(self);
...@@ -174,11 +177,11 @@ function backTap(){ ...@@ -174,11 +177,11 @@ function backTap(){
} }
//重写mui.back //重写mui.back
mui.back = function(){ //mui.back = function(){
iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{}); // iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{});
console.log("fire"); // console.log("fire");
iot.navigator.back(); // iot.navigator.back();
} //}
//tap 点击加载更多 //tap 点击加载更多
function listLoad(self) { function listLoad(self) {
......
...@@ -140,8 +140,6 @@ function init() { ...@@ -140,8 +140,6 @@ function init() {
notificationListener(this); notificationListener(this);
//获取设备信息 //获取设备信息
getDevices(this); getDevices(this);
//注册监听上报
// registerPushListener(this);
unotify.getCid((response) => { unotify.getCid((response) => {
console.log(response); console.log(response);
},(error) => { },(error) => {
...@@ -513,6 +511,7 @@ function initComponentsConfig() { ...@@ -513,6 +511,7 @@ function initComponentsConfig() {
} }
} }
//根据用户信息获取设备
function getDevices(self){ function getDevices(self){
iot.business.sds.getDevicesByUser({ iot.business.sds.getDevicesByUser({
success: (response) => { success: (response) => {
...@@ -545,6 +544,7 @@ function getDevices(self){ ...@@ -545,6 +544,7 @@ function getDevices(self){
}); });
} }
//获取设备成功,获取设备详细信息
function getDevicesSuccess(self, data){ function getDevicesSuccess(self, data){
self.mac = data[0].mac; self.mac = data[0].mac;
self.deviceId = data[0].sn; self.deviceId = data[0].sn;
...@@ -571,6 +571,7 @@ function getDevicesSuccess(self, data){ ...@@ -571,6 +571,7 @@ function getDevicesSuccess(self, data){
} }
} }
//从云端获取该设备详细信息
function getLockInfo(self){ function getLockInfo(self){
console.log("getLockInfo"); console.log("getLockInfo");
iot.business.api.sendCustom('lock/getLockInfo',{ iot.business.api.sendCustom('lock/getLockInfo',{
...@@ -597,6 +598,7 @@ function getLockInfo(self){ ...@@ -597,6 +598,7 @@ function getLockInfo(self){
}); });
} }
//获取设备成功,更改页面渲染
function getLockInfoSuccess(self, data){ function getLockInfoSuccess(self, data){
//判断云端是否绑定 //判断云端是否绑定
if(data.lock_id){ if(data.lock_id){
...@@ -608,6 +610,7 @@ function getLockInfoSuccess(self, data){ ...@@ -608,6 +610,7 @@ function getLockInfoSuccess(self, data){
self.setRole(data.role); self.setRole(data.role);
//判断是否第一次获取门锁信息 //判断是否第一次获取门锁信息
// if(self.isFirstGetLockInfo){ // if(self.isFirstGetLockInfo){
loopGetLockInfo(self, 10, 999, false);
getDeviceStatus(self); getDeviceStatus(self);
// self.setIsFirstGetLockInfo(false); // self.setIsFirstGetLockInfo(false);
// } // }
...@@ -824,8 +827,8 @@ function initDeviceInfo(self){ ...@@ -824,8 +827,8 @@ function initDeviceInfo(self){
setMsgStatus(self, false, "default_img", false, false, '', ''); setMsgStatus(self, false, "default_img", false, false, '', '');
} }
async function loopGetLockInfo(self, delay, timeout){ //轮训获取门锁记录
async function loopGetLockInfo(self, delay, times, needStop){
let oldHistoryId = null; let oldHistoryId = null;
try{ try{
let historyId = await iot.storage.getMap('historyId'); let historyId = await iot.storage.getMap('historyId');
...@@ -849,12 +852,16 @@ async function loopGetLockInfo(self, delay, timeout){ ...@@ -849,12 +852,16 @@ async function loopGetLockInfo(self, delay, timeout){
return iot.business.api.send('lock/getNewInfo', urlParams, true, false); return iot.business.api.send('lock/getNewInfo', urlParams, true, false);
// return plus.push.getClientInfo().clientid; // return plus.push.getClientInfo().clientid;
}, },
times: 3, times: times,
interval:{ interval:{
delay: config.intervalTime*1000, delay: delay*1000,
cb: { cb: {
success: (response) => { success: (response) => {
console.log('intervalcbSuccess:'+JSON.stringify(response)); console.log('intervalcbSuccess:'+JSON.stringify(response));
if(!needStop){
let historyRecord = response.data.history;
updateHistoryMap(self, historyRecord);
}
}, },
error: (error) => { error: (error) => {
console.log('intervalcbError:'+JSON.stringify(error)); console.log('intervalcbError:'+JSON.stringify(error));
...@@ -882,9 +889,10 @@ async function loopGetLockInfo(self, delay, timeout){ ...@@ -882,9 +889,10 @@ async function loopGetLockInfo(self, delay, timeout){
if(oldHistoryId != newHistoryId){ if(oldHistoryId != newHistoryId){
iot.storage.setMap('historyId', newHistoryId, (res) => { iot.storage.setMap('historyId', newHistoryId, (res) => {
console.log(res); console.log(res);
oldHistoryId = newHistoryId;
}, () => { }, () => {
}); });
return true; return needStop;
} }
} }
} }
...@@ -904,6 +912,7 @@ function setValueOfSwitch(self, flag){ ...@@ -904,6 +912,7 @@ function setValueOfSwitch(self, flag){
self.valueDoorlockManage = !flag; self.valueDoorlockManage = !flag;
} }
//sds监听
function registerPushListener(self){ function registerPushListener(self){
iot.business.sds.registerPushListener({ iot.business.sds.registerPushListener({
success: (response) => { success: (response) => {
...@@ -950,7 +959,7 @@ async function sdsDataPorcessing(self, data){ ...@@ -950,7 +959,7 @@ async function sdsDataPorcessing(self, data){
case '3': case '3':
//防撬、试错、欠电报警 //防撬、试错、欠电报警
//轮循获取最新的历史记录 //轮循获取最新的历史记录
loopGetLockInfo(self, config.intervalTime, config.getHistoryTime); loopGetLockInfo(self, config.intervalTime, config.getHistoryTimes, true);
break; break;
} }
break; break;
...@@ -962,7 +971,7 @@ async function sdsDataPorcessing(self, data){ ...@@ -962,7 +971,7 @@ async function sdsDataPorcessing(self, data){
setRemoteOpenDoorLoading(self, 1, Vue.t('remoteOpendoor.openDoorSuccess'), Vue.t('btn.confirm')); setRemoteOpenDoorLoading(self, 1, Vue.t('remoteOpendoor.openDoorSuccess'), Vue.t('btn.confirm'));
case '1': case '1':
//轮循获取最新的历史记录 //轮循获取最新的历史记录
loopGetLockInfo(self, config.intervalTime, config.getHistoryTime); loopGetLockInfo(self, config.intervalTime, config.getHistoryTimes, true);
break; break;
case '5': case '5':
//远程开门失败 //远程开门失败
...@@ -1182,6 +1191,7 @@ function bindDoorlockTap(){ ...@@ -1182,6 +1191,7 @@ function bindDoorlockTap(){
function opendoorRecordTap(self){ function opendoorRecordTap(self){
if(self.valueOpendoorRecord){ if(self.valueOpendoorRecord){
self.opendoorRecordFlag = false; self.opendoorRecordFlag = false;
setMsgStatus(self, false, "default_img", false, false, '', '');
iot.navigator.openWindow({ iot.navigator.openWindow({
url: './opendoorRecord.html', url: './opendoorRecord.html',
id: 'opendoorRecord', id: 'opendoorRecord',
...@@ -1196,6 +1206,7 @@ function opendoorRecordTap(self){ ...@@ -1196,6 +1206,7 @@ function opendoorRecordTap(self){
function securityAlarmTap(self){ function securityAlarmTap(self){
if(self.valueSecurityAlarm){ if(self.valueSecurityAlarm){
self.securityAlarmFlag = false; self.securityAlarmFlag = false;
setMsgStatus(self, false, "default_img", false, false, '', '');
iot.navigator.openWindow({ iot.navigator.openWindow({
url: './alarmInfo.html', url: './alarmInfo.html',
id: 'alarmInfo', id: 'alarmInfo',
...@@ -1210,6 +1221,7 @@ function securityAlarmTap(self){ ...@@ -1210,6 +1221,7 @@ function securityAlarmTap(self){
function hijackAlarmTap(self){ function hijackAlarmTap(self){
if(self.valueHijackAlarm){ if(self.valueHijackAlarm){
self.hijackAlarmFlag = false; self.hijackAlarmFlag = false;
setMsgStatus(self, false, "default_img", false, false, '', '');
iot.navigator.openWindow({ iot.navigator.openWindow({
url: './hijackRecord.html', url: './hijackRecord.html',
id: 'hijackRecord', id: 'hijackRecord',
......
...@@ -10,11 +10,13 @@ import moment from 'moment'; ...@@ -10,11 +10,13 @@ import moment from 'moment';
const PAGE_SIZE = 10; const PAGE_SIZE = 10;
import config from '../../public/config.js'; import config from '../../public/config.js';
import {iot, uPublic, uComponents} from '../../public/public.js'; import {iot, uPublic, uComponents} from '../../public/public.js';
import projectMethods from '../../public/components.js';
iot.ready(init); iot.ready(init);
function init() { function init() {
//通用 list、dialog、loading组件 //通用 list、dialog、loading组件
uPublic.componentsInit(['u-list','u-dialog','u-loading']); uPublic.componentsInit(['u-list','u-dialog','u-loading']);
uPublic.componentsExtend(['list']);
uPublic.closeSlideBack(); uPublic.closeSlideBack();
const app = new Vue({ const app = new Vue({
data:{ data:{
...@@ -121,11 +123,11 @@ function backTap(){ ...@@ -121,11 +123,11 @@ function backTap(){
} }
//重写mui.back //重写mui.back
mui.back = function(){ //mui.back = function(){
iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{}); // iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{});
console.log("fire"); // console.log("fire");
iot.navigator.back(); // iot.navigator.back();
} //}
//tap 点击加载更多 //tap 点击加载更多
function listLoad(self) { function listLoad(self) {
...@@ -200,7 +202,8 @@ function setListData(self, response){ ...@@ -200,7 +202,8 @@ function setListData(self, response){
list[i] = { list[i] = {
value: record[i].openId, value: record[i].openId,
title: ((record[i].mode == 30 ) || (record[i].mode == 5 )) ? '':"ID:"+record[i].openId, title: ((record[i].mode == 30 ) || (record[i].mode == 5 )) ? '':"ID:"+record[i].openId,
leftImage: '../../resources/image/green_opendoor'+record[i].mode+'_icon.png', // leftImage: '../../resources/image/green_opendoor'+record[i].mode+'_icon.png',
imgClass: 'u-list-left-bg-image_'+record[i].mode,
subtitle: Vue.t('opendoorRecord.'+config.openDoorMode[record[i].mode]+''), subtitle: Vue.t('opendoorRecord.'+config.openDoorMode[record[i].mode]+''),
rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss") rightText: moment(record[i].time).format("YYYY.MM.DD HH:mm:ss")
}; };
...@@ -217,7 +220,7 @@ function setListData(self, response){ ...@@ -217,7 +220,7 @@ function setListData(self, response){
self.setStartId(record[record.length-1].id); self.setStartId(record[record.length-1].id);
} }
//更新列表数据 //更新列表数据
uComponents.changeList(self, self.getList()); projectMethods.changeList(self, self.getList());
console.log("in"); console.log("in");
}else{ }else{
} }
......
...@@ -16,7 +16,7 @@ function init() { ...@@ -16,7 +16,7 @@ function init() {
let opener = plus.webview.currentWebview().opener(); let opener = plus.webview.currentWebview().opener();
if(opener.id == 'addUser'){ if(opener.id == 'addUser'){
setTimeout(function () { setTimeout(function () {
opener.close(); plus.webview.close(opener,"none",0,{});
}, 500); }, 500);
} }
const app = new Vue({ const app = new Vue({
...@@ -302,6 +302,9 @@ function getUserInfo(self){ ...@@ -302,6 +302,9 @@ function getUserInfo(self){
let data = uPublic.checkResponseData(response.data); let data = uPublic.checkResponseData(response.data);
console.log(data); console.log(data);
if(data){ if(data){
if(data.user_id != self.extras){
iot.navigator.fire(plus.webview.getWebviewById('doorlockUsers'),'returnPage',{});
}
self.setInfo(data); self.setInfo(data);
setUserInfo(self, data); setUserInfo(self, data);
if(self.role == 0){ if(self.role == 0){
...@@ -329,7 +332,7 @@ function getUserInfo(self){ ...@@ -329,7 +332,7 @@ function getUserInfo(self){
//设置用户信息 //设置用户信息
function setUserInfo(self, data){ function setUserInfo(self, data){
self.userInfo = { self.userInfo = {
image: data.role == 0 ? '../../resources/image/green_admin_icon.png' : data.user_id == null ? '../../resources/image/gray_unbindHead_icon.png' : '../../resources/image/green_bindHead_icon.png', imgClass: data.role == 0 ? 'userInfo-image-admin' : data.user_id == null ? 'userInfo-image-unbind' : 'userInfo-image-bind',
role: data.role, role: data.role,
title: data.nickname, title: data.nickname,
subtitle: '' subtitle: ''
...@@ -549,6 +552,9 @@ function checkUser(self, callback){ ...@@ -549,6 +552,9 @@ function checkUser(self, callback){
let data = uPublic.checkResponseData(response.data); let data = uPublic.checkResponseData(response.data);
console.log(data); console.log(data);
if(data){ if(data){
if(data.user_id != self.extras){
iot.navigator.fire(plus.webview.getWebviewById('doorlockUsers'),'returnPage',{});
}
callback(data); callback(data);
}else{} }else{}
}, },
......
...@@ -180,9 +180,9 @@ function setUserData(self, data){ ...@@ -180,9 +180,9 @@ function setUserData(self, data){
list[i] = { list[i] = {
value: data[i].id, value: data[i].id,
role: data[i].role, role: data[i].role,
image: data[i].role == 0 ? '../../resources/image/green_admin_icon.png' : data[i].user_id == null ? '../../resources/image/gray_unbindHead_icon.png' : '../../resources/image/green_bindHead_icon.png', imgClass: data[i].role == 0 ? 'user-list-image-admin' : data[i].user_id == null ? 'user-list-image-unbind' : 'user-list-image-bind',
title: data[i].nickname, title: data[i].nickname,
subtitle: data[i].hasOwnProperty('username') ? Vue.t('userList.binded'):Vue.t('userList.unbind') subtitle: data[i].user_id ? Vue.t('userList.binded'):Vue.t('userList.unbind')
} }
} }
console.log(data); console.log(data);
...@@ -223,7 +223,7 @@ function onTapUserList(self, listIndex) { ...@@ -223,7 +223,7 @@ function onTapUserList(self, listIndex) {
extras: { extras: {
id: self.getUserListData()[listIndex].id, id: self.getUserListData()[listIndex].id,
uuid: self.extras.uuid, uuid: self.extras.uuid,
// account: self.getUserListData()[listIndex].account, userId: self.getUserListData()[listIndex].user_id,
lockId: self.extras.lockId, lockId: self.extras.lockId,
role: self.extras.role role: self.extras.role
} }
......
...@@ -184,7 +184,7 @@ function getBindedLockInfo(self){ ...@@ -184,7 +184,7 @@ function getBindedLockInfo(self){
title: Vue.t('unlockInfo.'+config.openDoorMode[data[i].mode]+'')+j+'', title: Vue.t('unlockInfo.'+config.openDoorMode[data[i].mode]+'')+j+'',
subtitle: 'ID:'+data[i].openId, subtitle: 'ID:'+data[i].openId,
// buttons: self.extras.role ? [] : [{'text': data[i].mode == 20 ? Vue.t('unlockInfo.cancelHijack') : data[i].mode == 2 ? Vue.t('unlockInfo.setHijack') : ''},{'text': Vue.t('unlockInfo.cancelAssociated')}] // buttons: self.extras.role ? [] : [{'text': data[i].mode == 20 ? Vue.t('unlockInfo.cancelHijack') : data[i].mode == 2 ? Vue.t('unlockInfo.setHijack') : ''},{'text': Vue.t('unlockInfo.cancelAssociated')}]
buttons: self.extras.role ? [] : (data[i].mode == 20 || data[i].mode == 2) ? [{"imgSrc": data[i].mode == 20 ? "../../resources/image/green_deleteHijack_icon.png" : "../../resources/image/green_setHijack_icon.png"},{"imgSrc": "../../resources/image/green_deleteUnlockInfo_icon.png"}] : [{"imgSrc": null},{"imgSrc": "../../resources/image/green_deleteUnlockInfo_icon.png"}] buttons: self.extras.role ? [] : (data[i].mode == 20 || data[i].mode == 2) ? [{"imgClass": data[i].mode == 20 ? "button-image-deleteHijack" : "button-image-setHijack"},{"imgClass": "button-image-deleteUnlockInfo"}] : [{"imgClass": null},{"imgClass": "button-image-deleteUnlockInfo"}]
}; };
j++; j++;
lastMode = data[i].mode; lastMode = data[i].mode;
......
...@@ -207,6 +207,8 @@ function cloudsLogin(self, id){ ...@@ -207,6 +207,8 @@ function cloudsLogin(self, id){
} }
iot.navigator.openWindow({ iot.navigator.openWindow({
url: '../device/index.html', url: '../device/index.html',
// url: '../../custom/custom01/view/device/index.html',
// url: './loading.html',
id: 'device', id: 'device',
styles: { styles: {
popGesture: 'none' popGesture: 'none'
......
/**
* v_login.js
* Version: 0.1
* User: wy
* Date: 2017-09-06
* Copyright(c) 2017. U-GEN Tech.Co,Ltd. All Rights Reserved.
* 登录页面
*/
import {iot, uPublic, uComponents} from '../../public/public.js';
import Update from '../../public/update.js';
iot.ready(init);
function init() {
//通用 input、按钮、dialog、loading组件
uPublic.componentsInit(['u-loading']);
const app = new Vue({
data:{
//配置组件
componentsConfig: initComponentsConfig()
},
mounted(){
resolve(this);
},
methods:{
}
}).$mount('#app');
}
//配置组件参数
function initComponentsConfig() {
return {
loading: {
initParam: {
class: 'custom-loading'
}
}
}
}
function resolve(self){
console.log(self)
uComponents.showloading(self);
cheackSdsDevice(self);
}
//检验在sds中,该用户是否绑定设备
function cheackSdsDeviceExit(self){
uComponents.showLoading();
iot.business.sds.getDevicesByUser({
success: (response) => {
console.log(response);
let data = uPublic.checkResponseData(response.data);
if(data){
//sds,绑定关系已存在
cheackCloudDeviceExit(self, data.sn);
}else{
//sds,关系不存在
linkToAddDevice();
}
},
error: (error) => {
console.log(error);
uPublic.openRequestErrorAlert(self);
uComponents.hideLoading(self);
},
complete: () => {}
});
}
//检验在云端中,该用户是否绑定设备
function cheackCloudDeviceExit(self, deviceId){
iot.business.api.send('lock/getDeviceProductId', {
data: {
device_id: deviceId
},
success: (response) => {
console.log(response);
let data = uPublic.checkResponseData(response.data);
if(data){
//云端,绑定关系已存在
linkToIndex(self,data);
}else{
//云端,关系不存在
linkToAddDevice();
}
},
error: (error) => {
console.log(error);
uComponents.hideLoading(self);
},
complete: () => {}
});
}
//页面跳转到首页
async function linkToIndex(self, data){
let updateInfo = await iot.storage.getMap('updateInfo');
let newUpdateInfo = data.updateInfo;
for(let i=0; i<newUpdateInfo.length; i++){
let curVersion = newUpdateInfo[i].version;
let oldVersion = '0.0.0';
for(let j=0; j<updateInfo.length; j++){
if(newUpdateInfo[i].product_id == updateInfo[j].product_id){
oldVersion = updateInfo[j].version
}
}
// 这里传入Update参数
let update = new Update(curVersion,oldVersion,newUpdateInfo.url);
// 重写 update中的方法,在下面方法中可以对更新app的相关生命周期进行操作
update.onDownloadStart = ()=>{
console.log("index page log onDownloadStart");
uComponents.hideLoading(self);
}
update.onDownloadSuccess = ()=>{
console.log("index page log onDownloadSuccess");
}
update.onInstallStart = ()=>{
console.log("index page log onInstallStart");
}
update.onInstallSuccess = ()=>{
console.log("index page log onInstallSuccess");
//资源包安装成功,跳转到首页
iot.navigator.openWindow({
url: '../device/index.html',
id: 'device',
styles: {
popGesture: 'none'
},
extras: {
needClose: true
}
});
//更新app缓存的productId和对应版本
iot.storage.setMap('updateInfo', newUpdateInfo, (response) => {
console.log(res);
}, () => {});
}
update.onError = ()=>{
console.log("index page log onError");
uComponents.hideLoading(self);
}
update.startUpdate();
console.log(update);
}
}
//页面跳转到添加设备页面
function linkToAddDevice(){
iot.navigator.openWindow({
url: '../addDevice/index.html',
id: 'device',
styles: {
popGesture: 'none'
},
extras: {
needClose: true
}
});
}
{"loading":"数据加载中...","scroll":{"clickToLoadMore":"上拉加载更多","loading":"loading"},"btn":{"confirm":"确定","guideLogin":"账号/密码登录","login":"登录","getCode":"获取验证码","register":"注册","logout":"退出系统","save":"保存","qrcode":"生成二维码","wifiAdd":"开始配置Wi-Fi","connect":"连接","bindUser":"绑定姓名","bind":"我要绑定","startNow":"立即体验","ignore":"暂不开启","openNotify":"开启推送通知","reBound":"重新绑定","saveQRcode":"保存二维码到相册","unbind":"解除授权","deleteUser":"删除该用户","qrcodeReset":"重新生成二维码","add":"添加","next":"下一步","iSee":"我知道了","unbindDoorlock":"解绑门锁","finish":"完成","cancel":"取消","search":"搜索"},"dialog":{"confirm":"确认","cancel":"取消","unbind":"解除授权","delete":"删除"},"title":{"login":"登录","register":"注册","forgetPassword":"忘记密码","device":"U智锁","opendoorRecord":"开门记录","alarmInfo":"报警记录","remoteOpendoor":"远程开门","hijackRecord":"劫持记录","doorlockManage":"门锁管理","editName":"修改名称","qrcode":"生成绑定二维码","addDevice":"添加设备","scanCodeAdd":"扫码添加设备","wifiAddHelp":"配网添加设备","wifiAdd":"搜索设备","bindUserHelp":"ID-姓名绑定","bindUser":"绑定用户","userList":"用户列表","doorlockUser":"门锁用户","addUser":"添加用户","inviteBind":"邀请授权","unlockInfo":"关联开锁信息","myInfo":"个人信息","editNickname":"修改昵称","editPassword":"修改密码","addUnlockInfo":"关联开锁ID","deviceList":"产品型号"},"guide":{"footer":"指纹改变生活"},"login":{"telInputTip":"请输入手机号","passwordInputTip":"请输入密码","register":"快速注册","forgetPassword":"忘记密码","failure":"登陆失败","defaultUser":"用户{0}","error":{"telNull":"请输入手机号","passWordNull":"请输入密码"}},"register":{"telInputTip":"请输入手机号","codeInputTip":"请输入验证码","passwordInputTip":"请输入6位登录密码","error":{"telNull":"请输入手机号","codeNull":"请输入验证码","passWordNull":"请输入密码"}},"forgetPassword":{"telInputTip":"请输入手机号","codeInputTip":"请输入验证码","passwordInputTip":"请输入6位登录密码","error":{"telNull":"请输入手机号","codeNull":"请输入验证码","passWordNull":"请输入密码"}},"device":{"opendoorRecord":"开门记录","securityAlarm":"安全报警","doorlockUser":"门锁用户","remoteOpendoor":"远程开门","hijackAlarm":"劫持报警","doorlockManage":"门锁管理","followTitle":"关注服务号","followCont1":"关注 “i智信” 微信服务号可随时随地掌握设备动态<br>再也不担心错过重要通知,赶紧按下方提示试试吧","followCont2":"1.保存二维码-2.用微信从<span>相册选取扫码</span>-3.关注","laterFollow":"稍后关注","newMsgDoorlock":"门锁最新消息","doorLockRinging":"门铃响了","defaultNewMsg":"您尚未绑定门锁","noNewMsg":"暂无开门记录","bindDoorlock":"绑定门锁","use":"使用","networkError":"检测到您网络连接异常,请关闭APP重新打开后再次尝试"},"opendoorRecord":{"noRecordTip":"暂无记录","passwordOpenDoor":"密码开门","fingerprintOpenDoor":"指纹开门","ICcardOpenDoor":"IC卡开门","remoteOpenDoor":"遥控器开门","keyOpenDoor":"钥匙开门","hijackingAlarm":"劫持报警","appRemoteOpenDoor":"app远程开门"},"alarmInfo":{"noInfoTip":"暂无信息","tamperAlarm":"防撬报警","trialAlarm":"试错报警","powerAlarm":"欠电报警"},"remoteOpendoor":{"loading":"远程开门中","passwordInputTip":"请输入远程开门密码","openDoorSuccess":"远程开门成功","openDoorFailure":"远程开门失败","remoteTimeout":"远程开门超时","remoteOpendoorAgain":"请尝试重试","offlineTip":"设备已离线,收到远程开门请求后,请尽快处理","textlengthTip":"密码长度为6~12位数字","error":{"noPasswordTip":"远程密码不能为空"}},"hijackRecord":{"noRecordTip":"暂无记录","hijackingAlarm":"劫持指纹报警"},"doorlockManage":{"name":"名称","logoutDialogTip":"确定要退出系统吗?","defaultNickname":"门锁","isClearRecord":"清除所有信息","doorbellMsgPush":"门铃消息推送","alarmMsgPush":"报警消息推送","opendoorMsgPush":"开门消息推送","unbindDialogTip":"确认解除绑定","unbindSuccess":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定成功","unbindFailue":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定失败"},"editName":{"nameInputTip":"请输入设备名称","nickNameInputTip":"请输入用户名","editNameSuccess":"修改名称成功","editNameFailue":"修改名称失败","error":{"nameCanNotBeBlank":"设备名称不能为空","nicknameCanNotBeBlank":"用户名不能为空"}},"qrcode":{"helpTitle":"注意事项:","helpCont1":"1.仅超级管理员(通过Wi-Fi配网绑定的用户为超级管理员)可以生成绑定二维码","helpCont2":"2.二维码有效时间为10分钟且只能使用一次","helpCont3":"3.用户只需要扫描该二维码即可绑定指纹锁","helpCont4":"4.绑定失败则需要重新生成二维码进行绑定"},"addDevice":{"scanCodeAdd":"扫码添加","wifiAdd":"配网添加","scanCodeAddTip":"注:扫描门锁主人分享的邀请授权二维码,完成添加。","wifiAddTip":"注:门锁尚未联网时,配置门锁联网信息,完成添加。","loading":"loading","bindSuccess":"绑定成功","bindFailure":"绑定失败","reBindDevice":"请重新绑定","addDeviceTip":"扫描授权设备:受邀用户扫描“邀请授权”二维码。配置Wi-Fi:激活智能锁,激活成功后默认成为门锁管理员。","openCameraTip":"摄像头权限被关闭,请开启权限后重试","openCamera":"去开启"},"wifiAddHelp":{"helpTitle":"配置Wi-Fi说明:","helpCont1":"确认设备端进入配网模式(详情操作请见产品说明书)","helpCont2":"点击页面下方“开始配置Wi-Fi”按钮,输入正确Wi-Fi密码后开始搜索设备","helpCont3":"当系统搜索到设备后,设备将会连接Wi-Fi并完成激活","helpCont4":"提示:重新配网后,系统将会自动解除已授权用户"},"wifiAdd":{"unbindWifiTip":"当前无Wi-Fi","wifiBinding":"正在搜索设备...","wifiBindSuccess":"设备正在连接Wi-Fi...","wifiBindFailue":"设备连接Wi-Fi失败","deviceActivating":"正在等待设备激活...","deviceActivateSuccess":"激活成功","deviceActivateFailure":"激活失败","bindTimeout":"连接超时","passwordInputTip":"请输入Wi-Fi密码","remindTitle":"配置Wi-Fi提醒:","remindCont1":"1. 请确保Wi-Fi信号良好","remindCont2":"2. 本产品暂不支持5GHz无线网络","noticeTip":"检测到您还未开启通知,将无法及时<br>接收安全推送","countDownText":"{0}s","defaultNickName":"主用户","error":{}},"bindUserHelp":{"helpTitle":"配对姓名说明:","helpCont1":"1.在指纹锁上录入指纹、密码、卡并获得相应ID","helpCont2":"2.通过姓名绑定将该ID绑定对应用户姓名","helpCont3":"3.绑定成功后,开门记录中将会显示已绑定的用户姓名","helpCont4":"4.用户姓名信息只保存在APP端,不影响锁端设置","boundUser":"查看已绑定ID姓名"},"bindUser":{"editHeadTip":"点击编辑用户头像","nameTitle":"姓名","fingerprintIDTitle":"指纹ID","passwordIDTitle":"密码ID","ICCardIDTitle":"IC卡ID","requiredInputTip":"(必填)","optionalInputTip":"(选填)","error":{}},"commstatusLoading":{"connectSuccess":"Wi-Fi连接成功,正在绑定...","bindSuccess":"绑定成功","bindFailed":"绑定失败"},"userList":{"name":"昵称:","noUserTip":"暂无用户","defaultName":"管理员","binded":"已绑定","unbind":"未绑定"},"addUser":{"nameInputTip":"请为门锁用户创建显示昵称","addUserSuccess":"添加用户成功","addUserFailure":"添加用户失败","error":{"nameCanNotEmpty":"用户名不能为空"}},"doorlockUser":{"name":"昵称:","inviteBind":"邀请授权","bindUnlockInfo":"关联开锁信息","editUsername":"编辑用户昵称","opendoorRecord":"历史开门记录","unbindDialogTip":"<img src='../../resources/image/green_unbind_icon.png'>解除授权后,该用户不能对门锁下的信息进行查看","deleteUserDialogTip":"删除后,用户对应的开锁id取消关联,同时失去信息查看权限。","unbindSuccess":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权成功","unbindFailue":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权失败","guideStep1Tip1":"邀请授权成功","guideStep1Tip2":"(受邀用户可查看开门记录,报警记录等<br>相关门锁信息)","guideStep3Tip":"关联后可了解<br>该用户的开门情况","deleteSuccess":"删除成功","deleteFailure":"删除失败","defaultName":"管理员","bindedTip":"当前用户已授权,不可重复授权"},"inviteBind":{"qrcodeExpireTip":"二维码已过期,请重新生成","title":"绑定方法:","cont1":"受邀用户登录“U智锁”APP","cont2":"选择“扫描绑定设备”","cont3":"扫描上方二维码完成绑定","tip":"注: 二维码有效时间为10分钟,过期请","buttonText":"重新生成","userTip":"授权用户仅可查看开门、报警等记录,无法进行远程开门操作。"},"unlockInfo":{"noInfoTip":"尚未关联开锁信息","bindSoon":"快速关联","passwordOpenDoor":"密码","fingerprintOpenDoor":"指纹","ICcardOpenDoor":"IC卡","remoteOpenDoor":"遥控器","keyOpenDoor":"钥匙","appRemoteOpenDoor":"app远程","hijackingAlarm":"劫持指纹","setHijack":"设为劫持","bindUnlockInfo":"关联","bindedLockInfo":"已关联的开锁信息","addInfoSuccess":"关联开锁信息成功","setHijackTip":"确定设为劫持指纹? 设定成功后用该指<br>纹开锁时,系统将会视为劫持报警。","cancelHijack":"取消劫持","cancelHijackTip":"确定取消劫持指纹? 取消后用该指纹开<br>锁时,系统将会视为正常开锁。","cancelAssociated":"取消关联","cancelAssociatedTip":"取消关联后,开门记录中将不再显示关联的用户信息。","cancelAssociatedSuccess":"取消关联成功","cancelAssociatedFailue":"取消关联失败","setHijackSuccess":"设为劫持指纹成功","setHijackFailue":"设为劫持指纹失败","cancelHijackSuccess":"取消劫持指纹成功","cancelHijackFailue":"取消劫持指纹失败","unlockInfoListTip":"暂无关联信息","noHistoryTip":"今日尚无未关联的开门记录"},"addUnlockInfo":{"opendoorMode":"选择要关联的开锁方式","fingerprint":"指纹","password":"密码","icCard":"IC卡","key":"钥匙","remote":"遥控器","hijackFingerprint":"劫持指纹","opendoorRecord":"选择要关联的开锁ID","tip":"仅显示未绑定开门记录","addInfoSuccess":"关联开锁信息成功","addInfoFailue":"关联开锁信息失败","noRecordTip":"暂无记录","setHijackSwitch":"设为劫持指纹","guideStep1Tip":"选择需要添加关联的开门方式","guideStep3Tip":"根据开门记录中的开门时间,选择关联的<br>开门ID<span>(一个ID只能被一个用户绑定)</span>","guideStep5Tip":"使用劫持指纹开门时,会以报警形式<br>通知到该门锁名下的其他绑定用户","bindedUnlockInfo":"查看已关联信息","stay":"继续关联"},"myInfo":{"editNickname":"修改昵称","editPassword":"修改密码","logoutDialogTip":"确定要退出系统吗?"},"editNickname":{"nickNameInputTip":"请输入昵称","nickNameTypeTip":"请输入中文、字母和数字"},"editPassword":{"newPasswordInputTip":"请输入新密码","oldPasswordInputTip":"请输入旧密码","oldPasswordInputTipAgain":"请再次输入旧密码"},"request":{"error":"数据加载失败","initError":"初始化失败,请关闭APP重试"},"deviceList":{"model":"型号:","noDeviceTip":"暂无产品型号"},"notice":{"tip":"您还未开启通知,将无法及时接收安全推送!","button":"去开启"},"help":{"title":"如何解决安卓手机收不到消息提醒?","contTip":"因部分安卓系统会在锁屏时自动清理后台运行的应用导致无法及时通知,需根据引导进行以下设置后即可随时随地收到消息推送。","contTitle":"如何设置:","contSubtitle1":"1.设置自启动","contText1-1":"安卓5.0以上系统需要设置应用自启动,未加入自启动的应用在杀进程或重新开机后无法推送通知。","contText1-2":"在软件授权管理或启动管理中(通常在手机管家或设置菜单中)找到本app并开启自启动。","step":"操作步骤:","contSubtitle2":"2.设置后台保活","contText2-1":"安卓7.0以上系统需要设置受保护的后台应用,未设置的应用在设备进入睡眠后会自动杀掉,只有手动开启应用才能恢复消息推送。","contText2-2":"在设置中找到电量与性能,点击受保护的后台应用,找到本app并开启保护。","contText3-1":"安卓手机须将应用加入白名单中,否则清理后台杀掉应用进程后,只有手动开启应用才能恢复消息推送。","contText3-2":"启动本app后打开多任务页面(清理后台应用的页面),将本app加入白名单。"},"androidNotify":{"toSettingTitle":"开启系统通知","toSettingsub":"去开启","checkSetting":"检查Android系统设置","IKonw":"我已阅读","checkSettingsubTitle":"部分安卓系统的手机在开启通知后仍无法收到推送信息,您可以依次检查以下几项设置","step1Title":"1. 应用是否设置为自启动状态","step1content":"操作步骤:在软件授权管理或启动管理中(通常在手机管家或设置菜单中)找到本APP并开启自启动。","step2Title":"2. 应用是否已开启后台保护","step2content":"操作步骤:在设置中找到电量与性能,点击受保护的后台应用,找到本APP并开启保护。","step3Title":"3. 是否已将应用加入系统白名单","step3content":"操作步骤:启动本APP后打开多任务页面(清理后台应用的页面),将本APP加入白名单。","endSetting":"保存设置并开启应用","toIndex":"进入首页"},"newFeature":{"newVersion":"您有新的版本更新","tip":"版本更新","update":"更新","miss":"暂不更新"},"textTip":{"textType":"请输入中文、字母和数字"}}
\ No newline at end of file
{"loading":"数据加载中...","scroll":{"clickToLoadMore":"上拉加载更多","loading":"loading"},"btn":{"confirm":"确定","guideLogin":"账号/密码登录","login":"登录","getCode":"获取验证码","register":"注册","logout":"退出系统","save":"保存","qrcode":"生成二维码","wifiAdd":"开始配置Wi-Fi","connect":"连接","bindUser":"绑定姓名","bind":"我要绑定","startNow":"立即体验","ignore":"暂不开启","openNotify":"开启推送通知","reBound":"重新绑定","saveQRcode":"保存二维码到相册","unbind":"解除授权","deleteUser":"删除该用户","qrcodeReset":"重新生成二维码","add":"添加","next":"下一步","iSee":"我知道了","unbindDoorlock":"解绑门锁","finish":"完成","cancel":"取消","search":"搜索"},"dialog":{"confirm":"确认","cancel":"取消","unbind":"解除授权","delete":"删除"},"title":{"login":"登录","register":"注册","forgetPassword":"忘记密码","device":"U智锁","opendoorRecord":"开门记录","alarmInfo":"报警记录","remoteOpendoor":"远程开门","hijackRecord":"劫持记录","doorlockManage":"门锁管理","editName":"修改名称","qrcode":"生成绑定二维码","addDevice":"添加设备","scanCodeAdd":"扫码添加设备","wifiAddHelp":"配网添加设备","wifiAdd":"搜索设备","bindUserHelp":"ID-姓名绑定","bindUser":"绑定用户","userList":"用户列表","doorlockUser":"门锁用户","addUser":"添加用户","inviteBind":"邀请授权","unlockInfo":"关联开锁信息","myInfo":"个人信息","editNickname":"修改昵称","editPassword":"修改密码","addUnlockInfo":"关联开锁ID","deviceList":"产品型号"},"guide":{"footer":"指纹改变生活"},"login":{"telInputTip":"请输入手机号","passwordInputTip":"请输入密码","register":"快速注册","forgetPassword":"忘记密码","failure":"登陆失败","defaultUser":"用户{0}","error":{"telNull":"请输入手机号","passWordNull":"请输入密码"}},"register":{"telInputTip":"请输入手机号","codeInputTip":"请输入验证码","passwordInputTip":"请输入6位登录密码","error":{"telNull":"请输入手机号","codeNull":"请输入验证码","passWordNull":"请输入密码"}},"forgetPassword":{"telInputTip":"请输入手机号","codeInputTip":"请输入验证码","passwordInputTip":"请输入6位登录密码","error":{"telNull":"请输入手机号","codeNull":"请输入验证码","passWordNull":"请输入密码"}},"device":{"opendoorRecord":"开门记录","securityAlarm":"安全报警","doorlockUser":"门锁用户","remoteOpendoor":"远程开门","hijackAlarm":"劫持报警","doorlockManage":"门锁管理","followTitle":"关注服务号","followCont1":"关注 “i智信” 微信服务号可随时随地掌握设备动态<br>再也不担心错过重要通知,赶紧按下方提示试试吧","followCont2":"1.保存二维码-2.用微信从<span>相册选取扫码</span>-3.关注","laterFollow":"稍后关注","newMsgDoorlock":"门锁最新消息","doorLockRinging":"门铃响了","defaultNewMsg":"您尚未绑定门锁","noNewMsg":"暂无开门记录","bindDoorlock":"绑定门锁","use":"使用","networkError":"检测到您网络连接异常,请关闭APP重新打开后再次尝试"},"opendoorRecord":{"noRecordTip":"暂无记录","passwordOpenDoor":"密码开门","fingerprintOpenDoor":"指纹开门","ICcardOpenDoor":"IC卡开门","remoteOpenDoor":"遥控器开门","keyOpenDoor":"钥匙开门","hijackingAlarm":"劫持报警","appRemoteOpenDoor":"app远程开门"},"alarmInfo":{"noInfoTip":"暂无信息","tamperAlarm":"防撬报警","trialAlarm":"试错报警","powerAlarm":"欠电报警"},"remoteOpendoor":{"loading":"远程开门中","passwordInputTip":"请输入远程开门密码","openDoorSuccess":"远程开门成功","openDoorFailure":"远程开门失败","remoteTimeout":"远程开门超时","remoteOpendoorAgain":"请尝试重试","offlineTip":"设备已离线,收到远程开门请求后,请尽快处理","textlengthTip":"密码长度为6~12位数字","error":{"noPasswordTip":"远程密码不能为空"}},"hijackRecord":{"noRecordTip":"暂无记录","hijackingAlarm":"劫持指纹报警"},"doorlockManage":{"name":"名称","logoutDialogTip":"确定要退出系统吗?","defaultNickname":"门锁","isClearRecord":"清除所有信息","doorbellMsgPush":"门铃消息推送","alarmMsgPush":"报警消息推送","opendoorMsgPush":"开门消息推送","unbindDialogTip":"确认解除绑定","unbindSuccess":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定成功","unbindFailue":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定失败"},"editName":{"nameInputTip":"请输入设备名称","nickNameInputTip":"请输入用户名","editNameSuccess":"修改名称成功","editNameFailue":"修改名称失败","error":{"nameCanNotBeBlank":"设备名称不能为空","nicknameCanNotBeBlank":"用户名不能为空"}},"qrcode":{"helpTitle":"注意事项:","helpCont1":"1.仅超级管理员(通过Wi-Fi配网绑定的用户为超级管理员)可以生成绑定二维码","helpCont2":"2.二维码有效时间为10分钟且只能使用一次","helpCont3":"3.用户只需要扫描该二维码即可绑定指纹锁","helpCont4":"4.绑定失败则需要重新生成二维码进行绑定"},"addDevice":{"scanCodeAdd":"扫码添加","wifiAdd":"配网添加","scanCodeAddTip":"注:扫描门锁主人分享的邀请授权二维码,完成添加。","wifiAddTip":"注:门锁尚未联网时,配置门锁联网信息,完成添加。","loading":"loading","bindSuccess":"绑定成功","bindFailure":"绑定失败","reBindDevice":"请重新绑定","addDeviceTip":"扫描授权设备:受邀用户扫描“邀请授权”二维码。配置Wi-Fi:激活智能锁,激活成功后默认成为门锁管理员。","openCameraTip":"摄像头权限被关闭,请开启权限后重试","openCamera":"去开启"},"wifiAddHelp":{"helpTitle":"配置Wi-Fi说明:","helpCont1":"确认设备端进入配网模式(详情操作请见产品说明书)","helpCont2":"点击页面下方“开始配置Wi-Fi”按钮,输入正确Wi-Fi密码后开始搜索设备","helpCont3":"当系统搜索到设备后,设备将会连接Wi-Fi并完成激活","helpCont4":"提示:重新配网后,系统将会自动解除已授权用户"},"wifiAdd":{"unbindWifiTip":"当前无Wi-Fi","wifiBinding":"正在搜索设备...","wifiBindSuccess":"设备正在连接Wi-Fi...","wifiBindFailue":"设备连接Wi-Fi失败","deviceActivating":"正在等待设备激活...","deviceActivateSuccess":"激活成功","deviceActivateFailure":"激活失败","bindTimeout":"连接超时","passwordInputTip":"请输入Wi-Fi密码","remindTitle":"配置Wi-Fi提醒:","remindCont1":"1. 请确保Wi-Fi信号良好","remindCont2":"2. 本产品暂不支持5GHz无线网络","noticeTip":"检测到您还未开启通知,将无法及时<br>接收安全推送","countDownText":"{0}s","defaultNickName":"主用户","error":{}},"bindUserHelp":{"helpTitle":"配对姓名说明:","helpCont1":"1.在指纹锁上录入指纹、密码、卡并获得相应ID","helpCont2":"2.通过姓名绑定将该ID绑定对应用户姓名","helpCont3":"3.绑定成功后,开门记录中将会显示已绑定的用户姓名","helpCont4":"4.用户姓名信息只保存在APP端,不影响锁端设置","boundUser":"查看已绑定ID姓名"},"bindUser":{"editHeadTip":"点击编辑用户头像","nameTitle":"姓名","fingerprintIDTitle":"指纹ID","passwordIDTitle":"密码ID","ICCardIDTitle":"IC卡ID","requiredInputTip":"(必填)","optionalInputTip":"(选填)","error":{}},"commstatusLoading":{"connectSuccess":"Wi-Fi连接成功,正在绑定...","bindSuccess":"绑定成功","bindFailed":"绑定失败"},"userList":{"name":"昵称:","noUserTip":"暂无用户","defaultName":"管理员","binded":"已绑定","unbind":"未绑定"},"addUser":{"nameInputTip":"请为门锁用户创建显示昵称","addUserSuccess":"添加用户成功","addUserFailure":"添加用户失败","error":{"nameCanNotEmpty":"用户名不能为空"}},"doorlockUser":{"name":"昵称:","inviteBind":"邀请授权","bindUnlockInfo":"关联开锁信息","editUsername":"编辑用户昵称","opendoorRecord":"历史开门记录","unbindDialogTip":"<img src='../../resources/image/green_unbind_icon.png'>解除授权后,该用户不能对门锁下的信息进行查看","deleteUserDialogTip":"删除后,用户对应的开锁id取消关联,同时失去信息查看权限。","unbindSuccess":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权成功","unbindFailue":"<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权失败","guideStep1Tip1":"邀请授权成功","guideStep1Tip2":"(受邀用户可查看开门记录,报警记录等<br>相关门锁信息)","guideStep3Tip":"关联后可了解<br>该用户的开门情况","deleteSuccess":"删除成功","deleteFailure":"删除失败","defaultName":"管理员","bindedTip":"当前用户已授权,不可重复授权"},"inviteBind":{"qrcodeExpireTip":"二维码已过期,请重新生成","title":"绑定方法:","cont1":"受邀用户登录“U智锁”APP","cont2":"选择“扫描绑定设备”","cont3":"扫描上方二维码完成绑定","tip":"注: 二维码有效时间为10分钟,过期请","buttonText":"重新生成","userTip":"授权用户仅可查看开门、报警等记录,无法进行远程开门操作。"},"unlockInfo":{"noInfoTip":"尚未关联开锁信息","bindSoon":"快速关联","passwordOpenDoor":"密码","fingerprintOpenDoor":"指纹","ICcardOpenDoor":"IC卡","remoteOpenDoor":"遥控器","keyOpenDoor":"钥匙","appRemoteOpenDoor":"app远程","hijackingAlarm":"劫持指纹","setHijack":"设为劫持","bindUnlockInfo":"关联","bindedLockInfo":"已关联的开锁信息","addInfoSuccess":"关联开锁信息成功","setHijackTip":"确定设为劫持指纹? 设定成功后用该指<br>纹开锁时,系统将会视为劫持报警。","cancelHijack":"取消劫持","cancelHijackTip":"确定取消劫持指纹? 取消后用该指纹开<br>锁时,系统将会视为正常开锁。","cancelAssociated":"取消关联","cancelAssociatedTip":"取消关联后,开门记录中将不再显示关联的用户信息。","cancelAssociatedSuccess":"取消关联成功","cancelAssociatedFailue":"取消关联失败","setHijackSuccess":"设为劫持指纹成功","setHijackFailue":"设为劫持指纹失败","cancelHijackSuccess":"取消劫持指纹成功","cancelHijackFailue":"取消劫持指纹失败","unlockInfoListTip":"暂无关联信息","noHistoryTip":"今日尚无未关联的开门记录"},"addUnlockInfo":{"opendoorMode":"选择要关联的开锁方式","fingerprint":"指纹","password":"密码","icCard":"IC卡","key":"钥匙","remote":"遥控器","hijackFingerprint":"劫持指纹","opendoorRecord":"选择要关联的开锁ID","tip":"仅显示未绑定开门记录","addInfoSuccess":"关联开锁信息成功","addInfoFailue":"关联开锁信息失败","noRecordTip":"暂无记录","setHijackSwitch":"设为劫持指纹","guideStep1Tip":"选择需要添加关联的开门方式","guideStep3Tip":"根据开门记录中的开门时间,选择关联的<br>开门ID<span>(一个ID只能被一个用户绑定)</span>","guideStep5Tip":"使用劫持指纹开门时,会以报警形式<br>通知到该门锁名下的其他绑定用户","bindedUnlockInfo":"查看已关联信息","stay":"继续关联"},"myInfo":{"editNickname":"修改昵称","editPassword":"修改密码","logoutDialogTip":"确定要退出系统吗?"},"editNickname":{"nickNameInputTip":"请输入昵称","nickNameTypeTip":"请输入中文、字母和数字"},"editPassword":{"newPasswordInputTip":"请输入新密码","oldPasswordInputTip":"请输入旧密码","oldPasswordInputTipAgain":"请再次输入旧密码"},"request":{"error":"数据加载失败","initError":"初始化失败,请关闭APP重试"},"deviceList":{"model":"型号:","noDeviceTip":"暂无产品型号"},"notice":{"tip":"您还未开启通知,将无法及时接收安全推送!","button":"去开启"},"help":{"title":"如何解决安卓手机收不到消息提醒?","contTip":"因部分安卓系统会在锁屏时自动清理后台运行的应用导致无法及时通知,需根据引导进行以下设置后即可随时随地收到消息推送。","contTitle":"如何设置:","contSubtitle1":"1.设置自启动","contText1-1":"安卓5.0以上系统需要设置应用自启动,未加入自启动的应用在杀进程或重新开机后无法推送通知。","contText1-2":"在软件授权管理或启动管理中(通常在手机管家或设置菜单中)找到本app并开启自启动。","step":"操作步骤:","contSubtitle2":"2.设置后台保活","contText2-1":"安卓7.0以上系统需要设置受保护的后台应用,未设置的应用在设备进入睡眠后会自动杀掉,只有手动开启应用才能恢复消息推送。","contText2-2":"在设置中找到电量与性能,点击受保护的后台应用,找到本app并开启保护。","contText3-1":"安卓手机须将应用加入白名单中,否则清理后台杀掉应用进程后,只有手动开启应用才能恢复消息推送。","contText3-2":"启动本app后打开多任务页面(清理后台应用的页面),将本app加入白名单。"},"androidNotify":{"toSettingTitle":"开启系统通知","toSettingsub":"去开启","checkSetting":"检查Android系统设置","IKonw":"我已阅读","checkSettingsubTitle":"部分安卓系统的手机在开启通知后仍无法收到推送信息,您可以依次检查以下几项设置","step1Title":"1. 应用是否设置为自启动状态","step1content":"操作步骤:在软件授权管理或启动管理中(通常在手机管家或设置菜单中)找到本APP并开启自启动。","step2Title":"2. 应用是否已开启后台保护","step2content":"操作步骤:在设置中找到电量与性能,点击受保护的后台应用,找到本APP并开启保护。","step3Title":"3. 是否已将应用加入系统白名单","step3content":"操作步骤:启动本APP后打开多任务页面(清理后台应用的页面),将本APP加入白名单。","endSetting":"保存设置并开启应用","toIndex":"进入首页"},"newFeature":{"newVersion":"您有新的版本更新","tip":"版本更新","update":"更新","miss":"暂不更新"},"textTip":{"textType":"请输入中文、字母和数字"}}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/recordList.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.alarmInfo') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<list ref="list" :init-param="componentsConfig.alarmInfoList.initParam" v-on:u-list-load="onListLoad()"></list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./alarmInfo.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/recordList.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.hijackRecord') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<list ref="list" :init-param="componentsConfig.hijackRecordList.initParam" v-on:u-list-load="onListLoad()"></list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./hijackRecord.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/device.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../../../lib/js/start.js"></script>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onLogoutButtonTap">&#xe6ce;</v-touch>
<p>{{ $t('title.device') }}</p>
</div>
<div class="content">
<div class="topCpnt">
<div v-show="lockId">
<v-touch tag="div" class="doorbellBg" v-bind:class="[{ redDoorbellBg: warmingShowFlag },{ active: normalApertureShow },{warmingActive: warmingApertureShow}]" v-on:tap="onStopDoorbellRing()">
<div class="doorbellCircle">
<div class="doorbell" v-bind:class="{ active: doorbellRingingFlag }">
<!--<img :src="msgIconSrc">-->
<div :class=" msgClass ">
<ul class="wifiRemote">
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>
</div>
<div class="doorbellTip"><span>{{ msgTime }}</span>{{ msgText }}</div>
</v-touch>
<p class="batteryState" :class="[{yellowWarning: batteryPercent<=20},{redWarning: batteryPercent<10}]"><span v-html="batteryState" ></span><span>{{ batteryPercent }}%</span></p>
</div>
<v-touch tag="div" v-show="!lockId" class="bindDoorlock" v-on:tap="onBindDoorlockTap">
<p>{{ $t('device.bindDoorlock') }}</p>
</v-touch>
</div>
<div class="deviceHandle">
<p class="title" v-if="lockId">{{ $t('device.newMsgDoorlock') }}</p>
<u-marquee ref="umarquee" :active="activeFlag" :init-param="componentsConfig.marquee.initParam"></u-marquee>
<div class="switchGroup">
<div class="guoupRow">
<!-- 开门记录 -->
<div class="col-xs-6 opendoorRecord" v-bind:class="{newMsg: opendoorRecordFlag}">
<u-switch :value="valueOpendoorRecord" :disabled="opendoorRecordDisabledFlag" :init-param="componentsConfig.opendoorRecordSwitch.initParam" v-on:u-switch-tap="onOpendoorRecordTap"></u-switch>
</div>
<!-- 安全报警 -->
<div class="col-xs-6 securityAlarm" v-bind:class="{newMsg: securityAlarmFlag}">
<u-switch :value="valueSecurityAlarm" :disabled="securityAlarmDisabledFlag" :init-param="componentsConfig.securityAlarmSwitch.initParam" v-on:u-switch-tap="onSecurityAlarmTap"></u-switch>
</div>
</div>
<div class="guoupRow">
<!-- 门锁用户 -->
<div class="col-xs-6 doorlockUser">
<u-switch :value="valueDoorlockUser" :disabled="doorlockUserDisabledFlag" :init-param="componentsConfig.doorlockUserSwitch.initParam" v-on:u-switch-tap="onDoorlockUserTap"></u-switch>
</div>
<!-- 劫持报警 -->
<div class="col-xs-6 hijackAlarm" v-bind:class="{newMsg: hijackAlarmFlag}">
<u-switch :value="valueHijackAlarm" :disabled="hijackAlarmDisabledFlag" :init-param="componentsConfig.hijackAlarmSwitch.initParam" v-on:u-switch-tap="onHijackAlarmTap"></u-switch>
</div>
</div>
<div class="guoupRow">
<!-- 远程开门 -->
<div class="col-xs-6 remoteOpendoor" v-bind:class="{newMsg: remoteOpendoorFlag}">
<u-switch :value="valueRemoteOpendoor && !role" :disabled="remoteOpendoorDisabledFlag || role" :init-param="componentsConfig.remoteOpendoorSwitch.initParam" v-on:u-switch-tap="onRemoteOpendoorTap"></u-switch>
</div>
<!-- 门锁管理 -->
<div class="col-xs-6 doorlockManage" >
<u-switch :value="valueDoorlockManage" :disabled="doorlockManageDisabledFlag" :init-param="componentsConfig.doorlockManageSwitch.initParam" v-on:u-switch-tap="onDoorlockManageTap"></u-switch>
</div>
</div>
</div>
</div>
</div>
<transition name="fade">
<div class="followServiceNumber-dialog" v-show="followShowFlag">
<div class="followServiceNumber-dialog-box">
<ul class="">
<li>{{ $t('device.followTitle') }}</li>
<li v-html="$t('device.followCont1')"></li>
<li v-html="$t('device.followCont2')"></li>
<li>
<p></p>
</li>
</ul>
<u-button :init-param="componentsConfig.saveQRcodeButton.initParam" v-on:u-button-tap="onSaveQRcodeButtonTap"></u-button>
<p class="linkText"><v-touch tag="span" v-on:tap="onLaterFollowTap">{{ $t('device.laterFollow') }}</v-touch></p>
</div>
</div>
</transition>
<transition name="fade">
<div class="remoteOpendoorPage" v-show="remoteOpendoorShowFlag">
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.remoteOpendoor') }}</p>
</div>
<div class="content">
<div class="inputBox">
<u-text :init-param="componentsConfig.passwordInput.initParam" :text="textPassword"
v-on:u-text-change="onPasswordChange(arguments[0])"
v-on:u-text-match-minlength="onPasswordMatchlength(arguments[0])"></u-text>
<p class="errorTip" v-if="textErrorTip">{{ textErrorTip }}</p>
</div>
<u-button :init-param="componentsConfig.confirmButton.initParam" v-on:u-button-tap="onConfirmButtonTap"></u-button>
</div>
<u-comm-loading ref="ucommloading" :init-param="componentsConfig.ucommloading.initParam" v-on:u-comm-loading-tap="onCommLoadingButtonTap()">
<p class="loader"></p>
<p class="icon"></p>
</u-comm-loading>
</div>
</transition>
<!--<update-app :show-flag="true"></update-app>-->
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./index.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/notify.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../../../lib/js/start.js"></script>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body>
<div id="content" v-cloak>
<android-notify :to-index="onNotifyToIndex"> </android-notify>
</div>
<script type="text/javascript" src="notify.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/recordList.css">
<link rel="stylesheet" type="text/css" href="./recordList.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.opendoorRecord') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<list ref="list" :init-param="componentsConfig.opendoorRecordList.initParam" v-on:u-list-load="onListLoad()"></list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./opendoorRecord.js" defer async></script>
</body>
</html>
\ No newline at end of file
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_3 {
background-image: url("../../resources/image/green_unbind_icon.png");
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/device/device.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.remoteOpendoor') }}</p>
</div>
<div class="content">
<div class="inputBox">
<u-text :init-param="componentsConfig.passwordInput.initParam" :text="textPassword"
v-on:u-text-change="onPasswordChange(arguments[0])"></u-text>
<p class="errorTip" v-if="textErrorTip">{{ textErrorTip }}</p>
</div>
<u-button :init-param="componentsConfig.confirmButton.initParam" v-on:u-button-tap="onConfirmButtonTap"></u-button>
</div>
<u-comm-loading ref="ucommstatusloading" :text="textLoading" :status="status"
:init-param="componentsConfig.ucommstatusloading.initParam" v-on:u-commstatus-loading-tap="onCommstatusLoadingButtonTap()">
<p class="loader"></p>
<p class="icon"></p>
</u-comm-loading>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./remoteOpendoor.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/unlockInfo.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.addUnlockInfo') }}</p>
</div>
<div class="content">
<div class="opendoorMode">
<p class="title">{{ $t('addUnlockInfo.opendoorMode') }}</p>
<ul class="modeSelect">
<v-touch tag="li" v-bind:class="{active: item.mode == selectedMode}" v-for="item in waysOpenDoor" v-on:tap="onSelectOpenDoorModeTap(item.mode)">
{{ item.text }}
</ul>
</div>
<div class="opendoorRecord">
<p class="title">{{ $t('addUnlockInfo.opendoorRecord') }}</p>
<u-select ref="uselect" :value="recordSelectIndex" :init-param="componentsConfig.recordSelect.initParam"
v-on:u-select-change="onRecordSelectChange(arguments[0])"></u-select>
<div class="position">
<p class="tip">{{ $t('addUnlockInfo.tip') }}</p>
<u-switch :value="valueSetHijack" v-show="recordSelectList.length && selectedMode == 2"
:init-param="componentsConfig.setHijackSwitch.initParam" v-on:u-switch-tap="onSetHijackTap(arguments[0])"></u-switch>
</div>
</div>
<u-button :init-param="componentsConfig.addButton.initParam" :disabled="!recordSelectList.length" v-on:u-button-tap="onAddButtonTap"></u-button>
</div>
<transition name="fade">
<div class="guide-dialog" v-show="guideShowFlag">
<transition name="fade">
<div class="guideStep1" v-show="guideStep1ShowFlag">
<div class="guideStep1Cont">
<p class="title">{{ $t('addUnlockInfo.opendoorMode') }}</p>
<ul class="modeSelect">
<li class="active">{{ $t('addUnlockInfo.fingerprint') }}</li>
<li>{{ $t('addUnlockInfo.password') }}</li>
<li>{{ $t('addUnlockInfo.icCard') }}</li>
<li>{{ $t('addUnlockInfo.remote') }}</li>
</ul>
</div>
<div class="guideStep1Tip">
{{ $t('addUnlockInfo.guideStep1Tip') }}
</div>
</div>
</transition>
<transition name="fade">
<div class="guideStep2" v-show="guideStep2ShowFlag">
<u-button :init-param="componentsConfig.nextButton.initParam" v-on:u-button-tap="onNextButtonTap"></u-button>
</div>
</transition>
<transition name="fade">
<div class="guideStep3" v-show="guideStep3ShowFlag">
<div class="guideStep3Tip" v-html="$t('addUnlockInfo.guideStep3Tip')"></div>
<div class="guideStep3Cont">
<ul>
<li class="active">
<p>16:35</p>
<p>ID:001</p>
</li>
<li>
<p>15:33</p>
<p>ID:002</p>
</li>
</ul>
</div>
</div>
</transition>
<transition name="fade">
<div class="guideStep4" v-show="guideStep4ShowFlag">
<u-button :init-param="componentsConfig.nextButton.initParam" v-on:u-button-tap="onNextStepButtonTap"></u-button>
</div>
</transition>
<transition name="fade">
<div class="guideStep5" v-show="guideStep5ShowFlag">
<div class="guideStep5Tip" v-html="$t('addUnlockInfo.guideStep5Tip')"></div>
<div class="guideStep5Cont">
<p>{{ $t('addUnlockInfo.setHijackSwitch') }}</p>
</div>
</div>
</transition>
<transition name="fade">
<div class="guideStep6" v-show="guideStep6ShowFlag">
<u-button :init-param="componentsConfig.iSeeButton.initParam" v-on:u-button-tap="onISeeButtonTap"></u-button>
</div>
</transition>
</div>
</transition>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./addUnlockInfo.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/userList.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.addUser') }}</p>
</div>
<div class="content">
<div class="inputBox">
<u-text :init-param="componentsConfig.nameInput.initParam" :text="textName"
v-on:u-text-change="onNameChange(arguments[0])"></u-text>
<p class="errorTip" v-if="textErrorTip">{{ textErrorTip }}</p>
</div>
<u-button :init-param="componentsConfig.confirmButton.initParam" v-on:u-button-tap="onConfirmButtonTap"></u-button>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./addUser.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/doorlockUser.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.doorlockUser') }}</p>
</div>
<div class="content">
<ul class="userInfoLink">
<li class="userInfo" >
<p class="userInfo-image" v-bind:class="userInfo.imgClass"></p>
<!--<img class="userInfo-image" v-bind:src="userInfo.image">-->
<!--<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image">
<img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">-->
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
<u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
</li>
<v-touch tag="li" v-on:tap="onBindUnlockInfoTap" v-show="!role">{{ $t('doorlockUser.bindUnlockInfo') }}</v-touch>
<v-touch tag="li" v-bind:class="[{disabled: isFirstAddUser}]" v-on:tap="onEditNameTap" v-show="!role">{{ $t('doorlockUser.editUsername') }}</v-touch>
<v-touch tag="li" v-bind:class="[{disabled: isFirstAddUser}]" v-on:tap="onOpendoorRecordTap">{{ $t('doorlockUser.opendoorRecord') }}</v-touch>
</ul>
<u-button :disabled="isFirstAddUser" :init-param="componentsConfig.deleteUserButton.initParam" v-on:u-button-tap="onDeleteUserButtonTap" v-show="!role && userInfo.role != 0"></u-button>
</div>
<!--<transition name="fade">
<v-touch tag="div" class="unbindState-dialog" v-show="stateShowFlag" v-on:tap="onUnbindStateDialogTap">
<div>
<img :src="imageSrc">{{ textBindTip }}
</div>
</v-touch>
</transition> -->
<transition name="fade">
<div class="guide-dialog" v-show="guideShowFlag">
<transition name="fade">
<div class="guideStep1" v-show="guideStep1ShowFlag">
<div class="guideStep1Cont">
<p class="userInfo-image" v-bind:class="userInfo.imgClass"></p>
<!--<img class="userInfo-image" v-bind:src="userInfo.image">-->
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
<u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
</div>
<div class="guideStep1Tip">
<p>{{ $t('doorlockUser.guideStep1Tip1') }}</p>
<p v-html="$t('doorlockUser.guideStep1Tip2')"></p>
</div>
</div>
</transition>
<transition name="fade">
<div class="guideStep2" v-show="guideStep2ShowFlag">
<u-button :init-param="componentsConfig.nextButton.initParam" v-on:u-button-tap="onNextButtonTap"></u-button>
</div>
</transition>
<transition name="fade">
<div class="guideStep3" v-show="guideStep3ShowFlag">
<div class="guideStep3Cont">
<p>{{ $t('doorlockUser.bindUnlockInfo') }}</p>
</div>
<div class="guideStep3Tip" v-html="$t('doorlockUser.guideStep3Tip')"></div>
</div>
</transition>
<transition name="fade">
<div class="guideStep4" v-show="guideStep4ShowFlag">
<u-button :init-param="componentsConfig.iSeeButton.initParam" v-on:u-button-tap="onISeeButtonTap"></u-button>
</div>
</transition>
</div>
</transition>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./doorlockUser.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/doorlockUser.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.editName') }}</p>
<v-touch tag="span" class="header-right" v-on:tap="onSaveTap" v-show="!role">{{ $t('btn.save') }}</v-touch>
</div>
<div class="content">
<div class="inputBox">
<u-text :init-param="componentsConfig.nameInput.initParam" :text="textName"
v-on:u-text-change="onNameChange(arguments[0])"></u-text>
<p class="errorTip" v-if="textErrorTip">{{ textErrorTip }}</p>
</div>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./editName.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/userList.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.doorlockUser') }}</p>
<v-touch tag="span" class="header-right icon" v-on:tap="onAddUserTap" v-show="!role">&#xe600;</v-touch>
</div>
<div class="user-list">
<ul class="user-list-scroll" v-show="userList.length">
<v-touch tag="li" class="user-list-row" v-for="(item, index) in userList" :key="index" >
<v-touch tag="div" class="user-list-handle"
v-on:tap="onTapUserList(index)">
<!--<img class="user-list-image" v-bind:src="item.image">-->
<p class="user-list-image" v-bind:class="item.imgClass"></p>
<div>
<p class="user-list-title" v-bind:class="{'currentUser': userListData[index].user_id == currentId }" >{{ item.title == (null || '')? $t('userList.defaultName'):item.title}}</p>
<!--<p class="user-list-subtitle">
<img class="user-list-subimage" v-if="item.image && item.role != 0" v-bind:src="item.image">
<span v-if="item.subtitle">{{ item.subtitle }}</span>
</p>-->
</div>
</v-touch>
<div class="user-list-button">
<v-touch tag="div" v-on:tap="onTapButton(index)">&#xe66d;</v-touch>
</div>
</v-touch>
<v-touch tag="li" class="user-list-load" v-on:tap="onTapLoad" v-show="loadShowFlag">{{ loadText }}</v-touch>
</ul>
<p class="user-list-tip" v-show="(userList.length == 0)">{{ tip }}</p>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./index.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/doorlockUser.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../../../lib/js/start.js"></script>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.inviteBind') }}</p>
</div>
<div class="content">
<p class="invite-usertip">{{ $t('inviteBind.userTip') }}</p>
<ul class="inviteBind">
<li class="qrcode">
<canvas ref="qrcode"></canvas>
<p v-show="qrCodeDisabled">
<span>{{ $t('inviteBind.qrcodeExpireTip') }}</span>
</p>
</li>
<li class="tip">{{ $t('inviteBind.tip') }}<v-touch tag="span" v-on:tap="onQRcodeButtonTap">{{ $t('inviteBind.buttonText') }}</v-touch></li>
<li class="title">{{ $t('inviteBind.title') }}</li>
<li><span>&#xe6c1;</span>{{ $t('inviteBind.cont1') }}</li>
<li><span>&#xe6c0;</span>{{ $t('inviteBind.cont2') }}</li>
<li class="noBorder"><span>&#xe6c2;</span>{{ $t('inviteBind.cont3') }}</li>
</ul>
<!--<u-button :init-param="componentsConfig.qrcodeButton.initParam" v-on:u-button-tap="onQRcodeButtonTap"></u-button>-->
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./inviteBind.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="../../../../view/doorlockUsers/unlockInfo.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<!--<script type="text/javascript" src="../../../../lib/js/start.js"></script>-->
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<div class="header">
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.unlockInfo') }}</p>
<!--<v-touch tag="span" class="header-right" v-on:tap="onAddTap" v-show="!role">{{ $t('btn.add') }}</v-touch>-->
</div>
<div class="content">
<!--<p class="title">{{ $t('unlockInfo.bindUnlockInfo') }}</p>-->
<ul class="tab">
<v-touch tag="li" v-for="(item, key, index) in lockItems" v-text="lockItems[key].text"
:class="[{active: (selectItem == key)},{newMsg: newUnlockInfo && (key == 1)}]" v-on:tap="onItemChange(key)">
</v-touch>
</ul>
<!--<u-swipe-list ref="uswipelist" :init-param="componentsConfig.unlockInfoList.initParam"
v-on:u-swipe-list-button-tap="onUnlockInfoListButtonTap(arguments[0],arguments[1])"></u-swipe-list>-->
<div class="infoList-list" ref="infoList">
<ul class="infoList-list-scroll" v-show="infoList.length">
<li class="infoList-list-row" v-for="(item, index) in infoList">
<div class="infoList-list-handle">
<p class="infoList-list-title">{{ item.title }}</p>
<p class="infoList-list-subtitle">{{ item.subtitle }}</p>
</div>
<div class="infoList-list-button">
<v-touch tag="div" class="infoList-list-buttonCont" v-for="(button, buttonIndex) in item.buttons" v-show="button.imgClass || button.text" v-on:tap="onImgButtonTap(index, buttonIndex)">
<!--<img :src="button.imgSrc" v-show="button.imgSrc">-->
<p v-bind:class="button.imgClass" v-show="button.imgClass"></p>
{{ button.text }}
</v-touch>
</div>
</li>
<!--<v-touch tag="li" class="infoList-list-load" v-on:tap="onTapLoad" v-show="loadShowFlag">
<span class="infoList-list-load-animation" v-show="loadFlag"></span>
{{ loadText }}
</v-touch>-->
</ul>
<p class="infoList-list-tip" v-bind:class="{'noHistory-list-tip':selectItem == 0}" v-show="tipShowFlag && (infoList.length == 0)">{{ selectItem == 0 ? noHistoryTip : unlockInfoListTip }}</p>
</div>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./unlockInfo.js" defer async></script>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -12,11 +12,46 @@ ...@@ -12,11 +12,46 @@
.u-list-scroll .u-list-row{ .u-list-scroll .u-list-row{
height: 75px; height: 75px;
padding: 0 38px 0 41px; padding: 0 38px 0 41px;
.u-list-left-image{ .u-list-left-bg-image{
width: 30px; width: 30px;
height: 30px; height: 30px;
.background-size(cover);
background-position: center;
margin-right: 33px; margin-right: 33px;
} }
.u-list-left-bg-image_1{
.bgImg("green_opendoor1_icon.png");
}
.u-list-left-bg-image_2{
.bgImg("green_opendoor2_icon.png");
}
.u-list-left-bg-image_3{
.bgImg("green_opendoor3_icon.png");
}
.u-list-left-bg-image_4{
.bgImg("green_opendoor4_icon.png");
}
.u-list-left-bg-image_5{
.bgImg("green_opendoor5_icon.png");
}
.u-list-left-bg-image_30{
.bgImg("green_opendoor30_icon.png");
}
.u-list-left-bg-alarm_1{
.bgImg("green_alarmInfo1_icon.png");
}
.u-list-left-bg-alarm_2{
.bgImg("green_alarmInfo2_icon.png");
}
.u-list-left-bg-alarm_3{
.bgImg("green_alarmInfo3_icon.png");
}
.u-list-left-bg-hijack{
.bgImg("green_hijackMode20_icon.png");
}
.u-list-title{ .u-list-title{
font-size: @CUSTOM-LIST-COMPONENT-TITLE-FONTSIZE; font-size: @CUSTOM-LIST-COMPONENT-TITLE-FONTSIZE;
line-height: 20px; line-height: 20px;
......
...@@ -63,7 +63,22 @@ ...@@ -63,7 +63,22 @@
width: 27px; width: 27px;
height: 27px; height: 27px;
margin-right: 14px; margin-right: 14px;
.background-size(cover);
background-position: center;
} }
.userInfo-image-admin{
.bgImg("green_admin_icon.png");
}
.userInfo-image-unbind{
.bgImg("gray_unbindHead_icon.png");
}
.userInfo-image-bind{
.bgImg("green_bindHead_icon.png");
}
> div{ > div{
.flex(); .flex();
min-width: 0; min-width: 0;
...@@ -72,7 +87,9 @@ ...@@ -72,7 +87,9 @@
font-size: @USERINFOLINK-TITLE-FONTSIZE; font-size: @USERINFOLINK-TITLE-FONTSIZE;
.text_oneRow_ellipsis(); .text_oneRow_ellipsis();
position: relative; position: relative;
padding-right: 104px; display: inline-block;
max-width: 200px;
vertical-align: middle;
// > icon // > icon
// &:after{ // &:after{
// content: '\e6a7'; // content: '\e6a7';
...@@ -241,14 +258,33 @@ ...@@ -241,14 +258,33 @@
font-size: @USERINFOLINK-TITLE-FONTSIZE; font-size: @USERINFOLINK-TITLE-FONTSIZE;
.text_oneRow_ellipsis(); .text_oneRow_ellipsis();
position: relative; position: relative;
padding-right: 104px; display: inline-block;
max-width: 200px;
vertical-align: middle;
} }
//管理员头像 //管理员头像
.userInfo-image{ .userInfo-image{
width: 27px; width: 27px;
height: 27px; height: 27px;
margin-right: 14px; margin-right: 14px;
.background-size(cover);
background-position: center;
display: inline-block;
vertical-align: middle;
} }
.userInfo-image-admin{
.bgImg("green_admin_icon.png");
}
.userInfo-image-unbind{
.bgImg("gray_unbindHead_icon.png");
}
.userInfo-image-bind{
.bgImg("green_bindHead_icon.png");
}
//绑定/未绑定 头像 //绑定/未绑定 头像
.userInfo-subimage{ .userInfo-subimage{
width: 20px; width: 20px;
......
...@@ -129,9 +129,23 @@ ...@@ -129,9 +129,23 @@
margin: 0 5px; margin: 0 5px;
color: #00f8dd; color: #00f8dd;
font-size: 14px; font-size: 14px;
img{ p{
width: 23px; width: 23px;
height: 23px; height: 23px;
.background-size(cover);
background-position: center;
}
.button-image-setHijack{
.bgImg("green_setHijack_icon.png");
}
.button-image-deleteHijack{
.bgImg("green_deleteHijack_icon.png");
}
.button-image-deleteUnlockInfo{
.bgImg("green_deleteUnlockInfo_icon.png");
} }
} }
} }
......
...@@ -30,7 +30,21 @@ ...@@ -30,7 +30,21 @@
width: 27px; width: 27px;
height: 27px; height: 27px;
margin-right: 14px; margin-right: 14px;
background-size: cover;
background-position: center;
} }
.user-list-image-admin{
.bgImg("green_admin_icon.png");
}
.user-list-image-unbind{
.bgImg("gray_unbindHead_icon.png");
}
.user-list-image-bind{
.bgImg("green_bindHead_icon.png");
}
div{ div{
.flex(); .flex();
min-width: 0; min-width: 0;
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }} <v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch> <span></span></v-touch>
</div> </div>
<u-list ref="ulist" :init-param="componentsConfig.alarmInfoList.initParam" v-on:u-list-load="onListLoad()"></u-list> <list ref="list" :init-param="componentsConfig.alarmInfoList.initParam" v-on:u-list-load="onListLoad()"></list>
</div> </div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog> <u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading> <u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }} <v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch> <span></span></v-touch>
</div> </div>
<u-list ref="ulist" :init-param="componentsConfig.hijackRecordList.initParam" v-on:u-list-load="onListLoad()"></u-list> <list ref="list" :init-param="componentsConfig.hijackRecordList.initParam" v-on:u-list-load="onListLoad()"></list>
</div> </div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog> <u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading> <u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }} <v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch> <span></span></v-touch>
</div> </div>
<u-list ref="ulist" :init-param="componentsConfig.opendoorRecordList.initParam" v-on:u-list-load="onListLoad()"></u-list> <list ref="list" :init-param="componentsConfig.opendoorRecordList.initParam" v-on:u-list-load="onListLoad()"></list>
</div> </div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog> <u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading> <u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
......
...@@ -545,12 +545,55 @@ p { ...@@ -545,12 +545,55 @@ p {
padding: 0 1.013rem 0 1.093rem; padding: 0 1.013rem 0 1.093rem;
} }
.custom-list .u-list-scroll .u-list-row .u-list-left-image { .custom-list .u-list-scroll .u-list-row .u-list-left-bg-image {
width: 0.8rem; width: 0.8rem;
height: 0.8rem; height: 0.8rem;
-webkit-background-size: cover;
background-size: cover;
background-position: center;
margin-right: 0.88rem; margin-right: 0.88rem;
} }
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_1 {
background-image: url("../../resources/image/green_opendoor1_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_2 {
background-image: url("../../resources/image/green_opendoor2_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_3 {
background-image: url("../../resources/image/green_opendoor3_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_4 {
background-image: url("../../resources/image/green_opendoor4_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_5 {
background-image: url("../../resources/image/green_opendoor5_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-image_30 {
background-image: url("../../resources/image/green_opendoor30_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-alarm_1 {
background-image: url("../../resources/image/green_alarmInfo1_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-alarm_2 {
background-image: url("../../resources/image/green_alarmInfo2_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-alarm_3 {
background-image: url("../../resources/image/green_alarmInfo3_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-left-bg-hijack {
background-image: url("../../resources/image/green_hijackMode20_icon.png");
}
.custom-list .u-list-scroll .u-list-row .u-list-title { .custom-list .u-list-scroll .u-list-row .u-list-title {
font-size: 0.427rem; font-size: 0.427rem;
line-height: 0.533rem; line-height: 0.533rem;
......
...@@ -696,6 +696,21 @@ p { ...@@ -696,6 +696,21 @@ p {
width: 0.72rem; width: 0.72rem;
height: 0.72rem; height: 0.72rem;
margin-right: 0.373rem; margin-right: 0.373rem;
-webkit-background-size: cover;
background-size: cover;
background-position: center;
}
.userInfoLink li.userInfo .userInfo-image-admin {
background-image: url("../../resources/image/green_admin_icon.png");
}
.userInfoLink li.userInfo .userInfo-image-unbind {
background-image: url("../../resources/image/gray_unbindHead_icon.png");
}
.userInfoLink li.userInfo .userInfo-image-bind {
background-image: url("../../resources/image/green_bindHead_icon.png");
} }
.userInfoLink li.userInfo > div { .userInfoLink li.userInfo > div {
...@@ -711,7 +726,9 @@ p { ...@@ -711,7 +726,9 @@ p {
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
position: relative; position: relative;
padding-right: 2.773rem; display: inline-block;
max-width: 5.333rem;
vertical-align: middle;
} }
.userInfoLink li.userInfo .userInfo-subtitle { .userInfoLink li.userInfo .userInfo-subtitle {
...@@ -958,13 +975,32 @@ p { ...@@ -958,13 +975,32 @@ p {
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
position: relative; position: relative;
padding-right: 2.773rem; display: inline-block;
max-width: 5.333rem;
vertical-align: middle;
} }
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-image { .guide-dialog .guideStep1 .guideStep1Cont .userInfo-image {
width: 0.72rem; width: 0.72rem;
height: 0.72rem; height: 0.72rem;
margin-right: 0.373rem; margin-right: 0.373rem;
-webkit-background-size: cover;
background-size: cover;
background-position: center;
display: inline-block;
vertical-align: middle;
}
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-image-admin {
background-image: url("../../resources/image/green_admin_icon.png");
}
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-image-unbind {
background-image: url("../../resources/image/gray_unbindHead_icon.png");
}
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-image-bind {
background-image: url("../../resources/image/green_bindHead_icon.png");
} }
.guide-dialog .guideStep1 .guideStep1Cont .userInfo-subimage { .guide-dialog .guideStep1 .guideStep1Cont .userInfo-subimage {
......
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
<div class="content"> <div class="content">
<ul class="userInfoLink"> <ul class="userInfoLink">
<li class="userInfo" > <li class="userInfo" >
<img class="userInfo-image" v-bind:src="userInfo.image"> <p class="userInfo-image" v-bind:class="userInfo.imgClass"></p>
<!--<img class="userInfo-image" v-bind:src="userInfo.image">-->
<!--<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image"> <!--<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image">
<img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">--> <img class="userInfo-subimage" v-if="userInfo.image && userInfo.role != 0" v-bind:src="userInfo.image">-->
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span> <span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
...@@ -53,7 +54,8 @@ ...@@ -53,7 +54,8 @@
<transition name="fade"> <transition name="fade">
<div class="guideStep1" v-show="guideStep1ShowFlag"> <div class="guideStep1" v-show="guideStep1ShowFlag">
<div class="guideStep1Cont"> <div class="guideStep1Cont">
<img class="userInfo-image" v-bind:src="userInfo.image"> <p class="userInfo-image" v-bind:class="userInfo.imgClass"></p>
<!--<img class="userInfo-image" v-bind:src="userInfo.image">-->
<span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span> <span class="userInfo-title">{{ userInfo.title == (null || '') ? $t('doorlockUser.defaultName') : userInfo.title}}</span>
<u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button> <u-button :init-param="componentsConfig.bindButton.initParam" class="userInfo-toBind" v-on:u-button-tap="onBindButtonTap" v-show="bindShowFlag && !role"></u-button>
<u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button> <u-button :init-param="componentsConfig.unbindButton.initParam" v-on:u-button-tap="onUnbindButtonTap" v-show="(unbindShowFlag && !role && userInfo.role != 0)"></u-button>
......
...@@ -31,7 +31,8 @@ ...@@ -31,7 +31,8 @@
<v-touch tag="li" class="user-list-row" v-for="(item, index) in userList" :key="index" > <v-touch tag="li" class="user-list-row" v-for="(item, index) in userList" :key="index" >
<v-touch tag="div" class="user-list-handle" <v-touch tag="div" class="user-list-handle"
v-on:tap="onTapUserList(index)"> v-on:tap="onTapUserList(index)">
<img class="user-list-image" v-bind:src="item.image"> <!--<img class="user-list-image" v-bind:src="item.image">-->
<p class="user-list-image" v-bind:class="item.imgClass"></p>
<div> <div>
<p class="user-list-title" v-bind:class="{'currentUser': userListData[index].user_id == currentId }" >{{ item.title == (null || '')? $t('userList.defaultName'):item.title}}</p> <p class="user-list-title" v-bind:class="{'currentUser': userListData[index].user_id == currentId }" >{{ item.title == (null || '')? $t('userList.defaultName'):item.title}}</p>
<!--<p class="user-list-subtitle"> <!--<p class="user-list-subtitle">
......
...@@ -721,9 +721,24 @@ p { ...@@ -721,9 +721,24 @@ p {
font-size: 0.373rem; font-size: 0.373rem;
} }
.infoList-list .infoList-list-scroll .infoList-list-row .infoList-list-button .infoList-list-buttonCont img { .infoList-list .infoList-list-scroll .infoList-list-row .infoList-list-button .infoList-list-buttonCont p {
width: 0.613rem; width: 0.613rem;
height: 0.613rem; height: 0.613rem;
-webkit-background-size: cover;
background-size: cover;
background-position: center;
}
.infoList-list .infoList-list-scroll .infoList-list-row .infoList-list-button .infoList-list-buttonCont .button-image-setHijack {
background-image: url("../../resources/image/green_setHijack_icon.png");
}
.infoList-list .infoList-list-scroll .infoList-list-row .infoList-list-button .infoList-list-buttonCont .button-image-deleteHijack {
background-image: url("../../resources/image/green_deleteHijack_icon.png");
}
.infoList-list .infoList-list-scroll .infoList-list-row .infoList-list-button .infoList-list-buttonCont .button-image-deleteUnlockInfo {
background-image: url("../../resources/image/green_deleteUnlockInfo_icon.png");
} }
.infoList-list .infoList-list-scroll .infoList-list-row:after { .infoList-list .infoList-list-scroll .infoList-list-row:after {
......
...@@ -42,8 +42,9 @@ ...@@ -42,8 +42,9 @@
<p class="infoList-list-subtitle">{{ item.subtitle }}</p> <p class="infoList-list-subtitle">{{ item.subtitle }}</p>
</div> </div>
<div class="infoList-list-button"> <div class="infoList-list-button">
<v-touch tag="div" class="infoList-list-buttonCont" v-for="(button, buttonIndex) in item.buttons" v-show="button.imgSrc || button.text" v-on:tap="onImgButtonTap(index, buttonIndex)"> <v-touch tag="div" class="infoList-list-buttonCont" v-for="(button, buttonIndex) in item.buttons" v-show="button.imgClass || button.text" v-on:tap="onImgButtonTap(index, buttonIndex)">
<img :src="button.imgSrc" v-show="button.imgSrc"> <!--<img :src="button.imgSrc" v-show="button.imgSrc">-->
<p v-bind:class="button.imgClass" v-show="button.imgClass"></p>
{{ button.text }} {{ button.text }}
</v-touch> </v-touch>
</div> </div>
......
...@@ -481,6 +481,20 @@ p { ...@@ -481,6 +481,20 @@ p {
width: 0.72rem; width: 0.72rem;
height: 0.72rem; height: 0.72rem;
margin-right: 0.373rem; margin-right: 0.373rem;
background-size: cover;
background-position: center;
}
.user-list-scroll .user-list-row .user-list-handle .user-list-image-admin {
background-image: url("../../resources/image/green_admin_icon.png");
}
.user-list-scroll .user-list-row .user-list-handle .user-list-image-unbind {
background-image: url("../../resources/image/gray_unbindHead_icon.png");
}
.user-list-scroll .user-list-row .user-list-handle .user-list-image-bind {
background-image: url("../../resources/image/green_bindHead_icon.png");
} }
.user-list-scroll .user-list-row .user-list-handle div { .user-list-scroll .user-list-row .user-list-handle div {
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="./login.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../lib/js/UIOT.js"></script>
</head>
<body ontouchstart="">
<div id="app" v-cloak>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
<script type="text/javascript" src="./loading.js" defer async></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Webview Example</title>
<script type="text/javascript" src="../../lib/js/start.js"></script>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../lib/js/UIOT.js"></script>
<script type="text/javascript" src="../../lib/js/SDSPlugin.js"></script>
</head>
<body style="width:100%; height: 100%; background: #FFFFFF;">
<div id="app" v-cloak>
<v-touch tag="div" v-on:tap="onBeginLoopTap">开始调用loop</v-touch>
</div>
<script type="text/javascript" src="./notify.js" defer async></script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment