Commit a4cf43ad by wjd

Merge branch 'jianxiang' into 'debug'

Jianxiang

See merge request iot-project-js/doorlock!37
parents 4ba9f97d e15b833b
{ {
"loading": "loading...", "loading": "数据加载中...",
"scroll": { "scroll": {
"clickToLoadMore": "上拉加载更多", "clickToLoadMore": "上拉加载更多",
"loading": "loading" "loading": "loading"
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"openNotify": "开启推送通知", "openNotify": "开启推送通知",
"reBound": "重新绑定", "reBound": "重新绑定",
"saveQRcode": "保存二维码到相册", "saveQRcode": "保存二维码到相册",
"unbind": "解", "unbind": "解除授权",
"deleteUser": "删除该用户", "deleteUser": "删除该用户",
"qrcodeReset": "重新生成二维码", "qrcodeReset": "重新生成二维码",
"add": "添加", "add": "添加",
...@@ -30,12 +30,13 @@ ...@@ -30,12 +30,13 @@
"iSee": "我知道了", "iSee": "我知道了",
"unbindDoorlock": "解绑门锁", "unbindDoorlock": "解绑门锁",
"finish": "完成", "finish": "完成",
"cancel": "取消" "cancel": "取消",
"search": "搜索"
}, },
"dialog":{ "dialog":{
"confirm": "确认", "confirm": "确认",
"cancel": "取消", "cancel": "取消",
"unbind": "解", "unbind": "解除授权",
"delete": "删除" "delete": "删除"
}, },
"title":{ "title":{
...@@ -51,15 +52,15 @@ ...@@ -51,15 +52,15 @@
"editName": "修改名称", "editName": "修改名称",
"qrcode": "生成绑定二维码", "qrcode": "生成绑定二维码",
"addDevice": "添加设备", "addDevice": "添加设备",
"scanCodeAdd": "扫描绑定设备", "scanCodeAdd": "扫码添加设备",
"wifiAddHelp": "配置Wi-Fi", "wifiAddHelp": "配网添加设备",
"wifiAdd": "连接Wi-Fi", "wifiAdd": "搜索设备",
"bindUserHelp": "ID-姓名绑定", "bindUserHelp": "ID-姓名绑定",
"bindUser": "绑定用户", "bindUser": "绑定用户",
"userList": "用户列表", "userList": "用户列表",
"doorlockUser": "门锁用户", "doorlockUser": "门锁用户",
"addUser": "添加用户", "addUser": "添加用户",
"inviteBind": "邀请绑定", "inviteBind": "邀请授权",
"unlockInfo": "关联开锁信息", "unlockInfo": "关联开锁信息",
"myInfo": "个人信息", "myInfo": "个人信息",
"editNickname": "修改昵称", "editNickname": "修改昵称",
...@@ -116,9 +117,10 @@ ...@@ -116,9 +117,10 @@
"newMsgDoorlock": "门锁最新消息", "newMsgDoorlock": "门锁最新消息",
"doorLockRinging": "门铃响了", "doorLockRinging": "门铃响了",
"defaultNewMsg": "您尚未绑定门锁", "defaultNewMsg": "您尚未绑定门锁",
"noNewMsg": "门锁休息中", "noNewMsg": "暂无开门记录",
"bindDoorlock": "绑定门锁", "bindDoorlock": "绑定门锁",
"use": "使用" "use": "使用",
"networkError": "检测到您网络连接异常,请关闭APP重新打开后再次尝试"
}, },
"opendoorRecord":{ "opendoorRecord":{
"noRecordTip": "暂无记录", "noRecordTip": "暂无记录",
...@@ -162,8 +164,8 @@ ...@@ -162,8 +164,8 @@
"alarmMsgPush": "报警消息推送", "alarmMsgPush": "报警消息推送",
"opendoorMsgPush": "开门消息推送", "opendoorMsgPush": "开门消息推送",
"unbindDialogTip": "确认解除绑定", "unbindDialogTip": "确认解除绑定",
"unbindSuccess": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解成功", "unbindSuccess": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定成功",
"unbindFailue": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解失败" "unbindFailue": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解除绑定失败"
}, },
"editName":{ "editName":{
"nameInputTip": "请输入门锁名称", "nameInputTip": "请输入门锁名称",
...@@ -181,25 +183,31 @@ ...@@ -181,25 +183,31 @@
"helpCont4": "4.绑定失败则需要重新生成二维码进行绑定" "helpCont4": "4.绑定失败则需要重新生成二维码进行绑定"
}, },
"addDevice": { "addDevice": {
"scanCodeAdd": "扫描绑定设备", "scanCodeAdd": "扫码添加",
"wifiAdd": "配置Wi-Fi", "wifiAdd": "配网添加",
"scanCodeAddTip": "注:扫描门锁主人分享的邀请授权二维码,完成添加。",
"wifiAddTip": "注:门锁尚未联网时,配置门锁联网信息,完成添加。",
"loading": "loading", "loading": "loading",
"bindSuccess": "绑定成功", "bindSuccess": "绑定成功",
"bindFailure": "绑定失败", "bindFailure": "绑定失败",
"reBindDevice": "请重新绑定" "reBindDevice": "请重新绑定",
"addDeviceTip": "扫描授权设备:受邀用户扫描“邀请授权”二维码。配置Wi-Fi:激活智能锁,激活成功后默认成为门锁管理员。",
"openCameraTip": "摄像头权限被关闭,请开启权限后重试",
"openCamera": "去开启"
}, },
"wifiAddHelp": { "wifiAddHelp": {
"helpTitle": "配置WIFI说明:", "helpTitle": "配置Wi-Fi说明:",
"helpCont1": "确认设备端进入配网模式(详情操作请见产品说明书)", "helpCont1": "确认设备端进入配网模式(详情操作请见产品说明书)",
"helpCont2": "点击页面下方“开始配置Wi-Fi”按钮,进入WiFi配网页面", "helpCont2": "点击页面下方“开始配置Wi-Fi”按钮,输入正确Wi-Fi密码后开始搜索设备",
"helpCont3": "输入Wi-Fi密码,点击“连接”,等待锁端响应,至配网成功。", "helpCont3": "当系统搜索到设备后,设备将会连接Wi-Fi并完成激活",
"helpCont4": "(提示:如果指纹锁已经绑定过用户,重新绑定成功后会清除之前所有绑定信息)" "helpCont4": "提示:重新配网后,系统将会自动解除已授权用户"
}, },
"wifiAdd": { "wifiAdd": {
"unbindWifiTip": "当前无Wi-Fi", "unbindWifiTip": "当前无Wi-Fi",
"wifiBinding": "正在连接网络...", "wifiBinding": "正在搜索设备...",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备...", "wifiBindSuccess": "设备正在连接Wi-Fi...",
"deviceActivating": "Wi-Fi连接成功,正在激活设备...", "wifiBindFailue": "设备连接Wi-Fi失败",
"deviceActivating": "正在等待设备激活...",
"deviceActivateSuccess":"激活成功", "deviceActivateSuccess":"激活成功",
"deviceActivateFailure":"激活失败", "deviceActivateFailure":"激活失败",
"bindTimeout":"连接超时", "bindTimeout":"连接超时",
...@@ -255,15 +263,15 @@ ...@@ -255,15 +263,15 @@
}, },
"doorlockUser":{ "doorlockUser":{
"name": "昵称:", "name": "昵称:",
"inviteBind": "邀请绑定", "inviteBind": "邀请授权",
"bindUnlockInfo": "关联开锁信息", "bindUnlockInfo": "关联开锁信息",
"editUsername": "编辑用户昵称", "editUsername": "编辑用户昵称",
"opendoorRecord": "历史开门记录", "opendoorRecord": "历史开门记录",
"unbindDialogTip": "<img src='../../resources/image/green_unbind_icon.png'>解后,该用户不能对门锁下的信息进行查看", "unbindDialogTip": "<img src='../../resources/image/green_unbind_icon.png'>解除授权后,该用户不能对门锁下的信息进行查看",
"deleteUserDialogTip": "删除后,用户对应的开锁id取消关联,同时失去信息查看权限。", "deleteUserDialogTip": "删除后,用户对应的开锁id取消关联,同时失去信息查看权限。",
"unbindSuccess": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解成功", "unbindSuccess": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权成功",
"unbindFailue": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解失败", "unbindFailue": "<img src='../../resources/image/green_unbindSuccess_icon.png'>解除授权失败",
"guideStep1Tip1": "邀请绑定成功", "guideStep1Tip1": "邀请授权成功",
"guideStep1Tip2": "(受邀用户可查看开门记录,报警记录等<br>相关门锁信息)", "guideStep1Tip2": "(受邀用户可查看开门记录,报警记录等<br>相关门锁信息)",
"guideStep3Tip": "关联后可了解<br>该用户的开门情况", "guideStep3Tip": "关联后可了解<br>该用户的开门情况",
"deleteSuccess": "删除成功", "deleteSuccess": "删除成功",
...@@ -286,10 +294,11 @@ ...@@ -286,10 +294,11 @@
"cont1": "受邀用户登录“U智锁”APP", "cont1": "受邀用户登录“U智锁”APP",
"cont2": "选择“扫描绑定设备”", "cont2": "选择“扫描绑定设备”",
"cont3": "扫描上方二维码完成绑定", "cont3": "扫描上方二维码完成绑定",
"tip": "注: 二维码有效时间为10分钟,过期请重新生成" "tip": "注: 二维码有效时间为10分钟,过期请",
"buttonText": "重新生成",
"userTip": "授权用户仅可查看开门、报警等记录,无法进行远程开门操作。"
}, },
"unlockInfo":{ "unlockInfo":{
"bindUnlockInfo": "已关联的开锁信息",
"noInfoTip": "尚未关联开锁信息", "noInfoTip": "尚未关联开锁信息",
"bindSoon": "快速关联", "bindSoon": "快速关联",
"passwordOpenDoor": "密码", "passwordOpenDoor": "密码",
...@@ -300,11 +309,14 @@ ...@@ -300,11 +309,14 @@
"appRemoteOpenDoor": "app远程", "appRemoteOpenDoor": "app远程",
"hijackingAlarm": "劫持指纹", "hijackingAlarm": "劫持指纹",
"setHijack": "设为劫持", "setHijack": "设为劫持",
"setHijackTip": "确认设为劫持指纹?设定后使用该指纹开锁时,门锁用户将会收到劫持报警", "bindUnlockInfo": "关联",
"bindedLockInfo": "已关联的开锁信息",
"addInfoSuccess": "关联开锁信息成功",
"setHijackTip": "确定设为劫持指纹? 设定成功后用该指<br>纹开锁时,系统将会视为劫持报警。",
"cancelHijack": "取消劫持", "cancelHijack": "取消劫持",
"cancelHijackTip": "确认取消劫持指纹?取消后,门锁用户不再收到劫持报警", "cancelHijackTip": "确定取消劫持指纹? 取消后用该指纹开<br>锁时,系统将会视为正常开锁。",
"cancelAssociated": "取消关联", "cancelAssociated": "取消关联",
"cancelAssociatedTip": "取消关联后,开门历史记录中将不再显示关联的用户信息。", "cancelAssociatedTip": "取消关联后,开门记录中将不再显示关联的用户信息。",
"cancelAssociatedSuccess": "取消关联成功", "cancelAssociatedSuccess": "取消关联成功",
"cancelAssociatedFailue": "取消关联失败", "cancelAssociatedFailue": "取消关联失败",
"setHijackSuccess": "设为劫持指纹成功", "setHijackSuccess": "设为劫持指纹成功",
...@@ -349,7 +361,7 @@ ...@@ -349,7 +361,7 @@
"oldPasswordInputTipAgain": "请再次输入旧密码" "oldPasswordInputTipAgain": "请再次输入旧密码"
}, },
"request":{ "request":{
"error": "请求发送失败", "error": "数据加载失败",
"initError": "初始化失败,请关闭APP重试" "initError": "初始化失败,请关闭APP重试"
}, },
"deviceList":{ "deviceList":{
......
...@@ -46,8 +46,10 @@ export default { ...@@ -46,8 +46,10 @@ export default {
"maxlength": 12, "maxlength": 12,
"minlength": 6 "minlength": 6
}, },
"ringBell_timeout": 300, "pushMsg_timeout": 300,
"intervalTime": 3, "intervalTime": 3,
//小红点超时时间,24小时之前的新消息没有小红点提示
"newMsg_timeout": 86400,
"getHistoryTime": 10, "getHistoryTime": 10,
"audioUrl": "../../resources/audio/tipSound.mp3", "audioUrl": "../../resources/audio/tipSound.mp3",
// "audioUrl": "_www/resources/audio/tipSound.mp3" // "audioUrl": "_www/resources/audio/tipSound.mp3"
......
...@@ -46,7 +46,7 @@ uPublic.recalc = function () { ...@@ -46,7 +46,7 @@ uPublic.recalc = function () {
recalc = function () { recalc = function () {
var clientWidth = docEl.clientWidth; var clientWidth = docEl.clientWidth;
if (!clientWidth) return; if (!clientWidth) return;
docEl.style.fontSize = parseInt(clientWidth / 10, 10) + 'px'; docEl.style.fontSize = clientWidth / 10 + 'px';
}; };
window.addEventListener(resizeEvt, recalc, false); window.addEventListener(resizeEvt, recalc, false);
recalc(); recalc();
......
...@@ -11,7 +11,6 @@ import {iot, uPublic, uComponents} from '../../public/public.js'; ...@@ -11,7 +11,6 @@ import {iot, uPublic, uComponents} from '../../public/public.js';
iot.ready(init); iot.ready(init);
function init() { function init() {
console.log("init" + new Date().getTime());
//通用 dialog、loading组件 //通用 dialog、loading组件
uPublic.componentsInit(['u-dialog','u-loading','u-process']); uPublic.componentsInit(['u-dialog','u-loading','u-process']);
// uPublic.closeSlideBack(); // uPublic.closeSlideBack();
...@@ -24,17 +23,7 @@ function init() { ...@@ -24,17 +23,7 @@ function init() {
}, },
mounted(){ mounted(){
let self = this; let self = this;
if (plus.os.name == 'Android') { resolve(self);
iot.permission.checkPermission(['CAMERA'], function (res) {
console.log('success', res);
console.log("openScanCode"+ new Date().getTime());
openScanCode(self);
}, function (err) {
console.log('error', err);
});
}else{
openScanCode(self);
}
window.addEventListener('returnPage',() => { window.addEventListener('returnPage',() => {
self.noticeTipShowFlag = !iot.native.isNotifycationOpen(); self.noticeTipShowFlag = !iot.native.isNotifycationOpen();
scanCodeSuccess(self); scanCodeSuccess(self);
...@@ -74,6 +63,45 @@ function initComponentsConfig() { ...@@ -74,6 +63,45 @@ function initComponentsConfig() {
} }
} }
function resolve(self){
if(plus.os.name == 'Android') {
iot.permission.checkPermission(['CAMERA'], function (res) {
console.log('success', res);
console.log("openScanCode"+ new Date().getTime());
openScanCode(self);
}, function (err) {
console.log('error', err);
plus.nativeUI.confirm(Vue.t("addDevice.openCameraTip"), (e)=>{
if(e.index == 0){
iot.native.toAppSetting();
}
backTap(self);
},{"title": "","buttons": [Vue.t("addDevice.openCamera"),Vue.t("btn.cancel")]});
});
}else{
let isFistOpenCamera = iot.storage.getMap('isFistOpenCamera');
if(isFistOpenCamera){
iot.permission.checkPermission(['CAMERA'], function (res) {
console.log('success', res);
console.log("openScanCode"+ new Date().getTime());
openScanCode(self);
}, function (err) {
console.log('error', err);
plus.nativeUI.confirm(Vue.t("addDevice.openCameraTip"), (e)=>{
if(e.index == 0){
iot.native.toAppSetting();
}
backTap(self);
},{"title": "","buttons": [Vue.t("addDevice.openCamera"),Vue.t("btn.cancel")]});
});
}else{
openScanCode(self);
iot.storage.setMap('isFistOpenCamera', true,() => {
}, (err) => {});
}
}
}
//tap < //tap <
function backTap(self){ function backTap(self){
iot.utils.closeScanBarcode(self.barcode); iot.utils.closeScanBarcode(self.barcode);
...@@ -81,13 +109,18 @@ function backTap(self){ ...@@ -81,13 +109,18 @@ function backTap(self){
} }
function openScanCode(self){ function openScanCode(self){
let bcidBg = '#3a3d54';
// alert(plus.os.name);
if(plus.os.name == 'iOS'){
bcidBg = '#3a3d5400';
}
self.barcode = iot.utils.scanBarcode({ self.barcode = iot.utils.scanBarcode({
data: { data: {
id: 'bcid', id: 'bcid',
styles: { styles: {
frameColor: '#00ffff', frameColor: '#00ffff',
scanbarColor: '#00ffff', scanbarColor: '#00ffff',
background: '#3a3d54' background: bcidBg
} }
}, },
success: (response) => { success: (response) => {
......
...@@ -88,7 +88,7 @@ function initComponentsConfig() { ...@@ -88,7 +88,7 @@ function initComponentsConfig() {
connectButton: { connectButton: {
initParam: { initParam: {
class: 'custom-button', class: 'custom-button',
text: Vue.t('btn.connect') text: Vue.t('btn.search')
} }
}, },
dialog: { dialog: {
...@@ -162,10 +162,10 @@ function connectButtonTap(self){ ...@@ -162,10 +162,10 @@ function connectButtonTap(self){
if(self.countDownText <= 0){ if(self.countDownText <= 0){
console.log("innnnn"); console.log("innnnn");
window.clearInterval(self.timeout); window.clearInterval(self.timeout);
addFailue(self); addFailue(self, Vue.t('wifiAdd.bindTimeout'));
} }
},1000); },1000);
uComponents.showProcess(self, 0, Vue.t('addDevice.loading'), [{ uComponents.showProcess(self, 0, Vue.t('wifiAdd.wifiBinding'), [{
"class": 'custom-process-button custom-process-cancelButton', 'text': Vue.t('btn.cancel'), 'callback': () => { "class": 'custom-process-button custom-process-cancelButton', 'text': Vue.t('btn.cancel'), 'callback': () => {
uComponents.hideProcess(self); uComponents.hideProcess(self);
window.clearInterval(self.timeout); window.clearInterval(self.timeout);
...@@ -230,7 +230,7 @@ function connectButtonTap(self){ ...@@ -230,7 +230,7 @@ function connectButtonTap(self){
if (window.iotDebug) { if (window.iotDebug) {
iotDebug.upload(iot,'配网失败'); iotDebug.upload(iot,'配网失败');
} }
addFailue(self); addFailue(self,Vue.t('wifiAdd.wifiBindFailue'));
} }
}); });
iot.business.sds.findDevices({ iot.business.sds.findDevices({
...@@ -418,14 +418,14 @@ function bind(self, deviceId, productId){ ...@@ -418,14 +418,14 @@ function bind(self, deviceId, productId){
}); });
} }
function addFailue(self){ function addFailue(self, addFailueReason = Vue.t('wifiAdd.deviceActivateFailure')){
//停止配网 //停止配网
iot.business.sds.stopFindDevices({ iot.business.sds.stopFindDevices({
success: (response) => {}, success: (response) => {},
error: (error) => {} error: (error) => {}
}); });
window.clearInterval(self.timeout); window.clearInterval(self.timeout);
uComponents.showProcess(self, 2, Vue.t('wifiAdd.deviceActivateFailure'), [{ uComponents.showProcess(self, 2, addFailueReason, [{
"class": 'custom-process-button', 'text': Vue.t('addDevice.reBindDevice'), 'callback': () => { "class": 'custom-process-button', 'text': Vue.t('addDevice.reBindDevice'), 'callback': () => {
//激活失败 //激活失败
uComponents.hideProcess(self); uComponents.hideProcess(self);
......
...@@ -81,8 +81,10 @@ function init() { ...@@ -81,8 +81,10 @@ function init() {
batteryState: '', batteryState: '',
//电量百分比 //电量百分比
batteryPercent: 100, batteryPercent: 100,
//响铃时间 //消息时间
ringingTime: null, msgTime: null,
//消息文本提示
msgText: '',
//门铃是否响起 //门铃是否响起
doorbellRingingFlag: false, doorbellRingingFlag: false,
ringTime: null, ringTime: null,
...@@ -110,6 +112,10 @@ function init() { ...@@ -110,6 +112,10 @@ function init() {
opendoorRecordFlag: false, opendoorRecordFlag: false,
securityAlarmFlag: false, securityAlarmFlag: false,
hijackAlarmFlag: false, hijackAlarmFlag: false,
msgClass: "default_img",
warmingShowFlag: false,
normalApertureShow: false,
warmingApertureShow: false,
//是否显示远程开门页面 //是否显示远程开门页面
remoteOpendoorShowFlag: false, remoteOpendoorShowFlag: false,
//远程开门密码 //远程开门密码
...@@ -218,11 +224,17 @@ function init() { ...@@ -218,11 +224,17 @@ function init() {
setBatteryPercent(percent){ setBatteryPercent(percent){
this.batteryPercent = percent; this.batteryPercent = percent;
}, },
getRingingTime(){ getMsgTime(){
return this.ringingTime; return this.msgTime;
}, },
setRingingTime(time){ setMsgTime(time){
this.ringingTime = time this.msgTime = time
},
getMsgText(){
return this.msgText;
},
setMsgText(text){
this.msgText = text;
}, },
getDoorbellRingingFlag(){ getDoorbellRingingFlag(){
return this.doorbellRingingFlag; return this.doorbellRingingFlag;
...@@ -272,6 +284,30 @@ function init() { ...@@ -272,6 +284,30 @@ function init() {
setLockInfo(info){ setLockInfo(info){
this.lockInfo = info; this.lockInfo = info;
}, },
getMsgClass(){
return this.msgClass;
},
setMsgClass(src){
this.msgClass = src;
},
getWarmingShowFlag(){
return this.warmingShowFlag;
},
setWarmingShowFlag(flag){
this.warmingShowFlag = flag;
},
getNormalApertureShow(){
return this.normalApertureShow;
},
setNormalApertureShow(flag){
this.normalApertureShow = flag;
},
getWarmingApertureShow(){
return this.warmingApertureShow;
},
setWarmingApertureShow(flag){
this.warmingApertureShow = flag;
},
getRemoteOpendoorShowFlag(){ getRemoteOpendoorShowFlag(){
return this.remoteOpendoorShowFlag; return this.remoteOpendoorShowFlag;
}, },
...@@ -493,7 +529,12 @@ function getDevices(self){ ...@@ -493,7 +529,12 @@ function getDevices(self){
if (window.iotDebug) { if (window.iotDebug) {
iotDebug.upload(iot,'获取设备信息'); iotDebug.upload(iot,'获取设备信息');
} }
uPublic.openRequestErrorAlert(self); // uPublic.openRequestErrorAlert(self);
uComponents.openAlert(self, Vue.t('device.networkError'), {
text: Vue.t('btn.iSee'), callback: function () {
plus.runtime.quit();
}
});
uComponents.hideLoading(self); uComponents.hideLoading(self);
}, },
complete: () => {} complete: () => {}
...@@ -575,7 +616,16 @@ function getLockInfoSuccess(self, data){ ...@@ -575,7 +616,16 @@ function getLockInfoSuccess(self, data){
}); });
//存储历史、安全、劫持记录的时间 //存储历史、安全、劫持记录的时间
let historyRecord = data.info.history; let historyRecord = data.info.history;
if((historyRecord.open.length != 0) || Boolean(historyRecord.alarm) || Boolean(historyRecord.notify)){
updateHistoryMap(self, historyRecord);
}else{
iot.storage.delMaps(['historyId','history'], (response) => {
console.log(response);
updateHistoryMap(self, historyRecord); updateHistoryMap(self, historyRecord);
}, (error) => {
console.log(error);
});
}
//拼接首页滚动的三条记录 //拼接首页滚动的三条记录
getTreenRecord(self, data.info.history.open); getTreenRecord(self, data.info.history.open);
}else{ }else{
...@@ -665,7 +715,7 @@ async function updateHistoryMap(self, historyRecord){ ...@@ -665,7 +715,7 @@ async function updateHistoryMap(self, historyRecord){
let now = moment(new Date()).unix(); let now = moment(new Date()).unix();
if(openHistory.length && oldHistory.open.time < moment(openHistory[0].time).unix() && now - moment(openHistory[0].time).unix() < 3600){ if(openHistory.length && oldHistory.open.time < moment(openHistory[0].time).unix() && now - moment(openHistory[0].time).unix() < config.newMsg_timeout){
newHistory.open.time = moment(openHistory[0].time).unix(); newHistory.open.time = moment(openHistory[0].time).unix();
newHistory.open.isReadFlag = false; newHistory.open.isReadFlag = false;
let record = openHistory; let record = openHistory;
...@@ -692,9 +742,11 @@ async function updateHistoryMap(self, historyRecord){ ...@@ -692,9 +742,11 @@ async function updateHistoryMap(self, historyRecord){
let historyType = ['alarm','notify']; let historyType = ['alarm','notify'];
for(let i=0 ; i < historyType.length; i++){ for(let i=0 ; i < historyType.length; i++){
if(historyRecord.hasOwnProperty(historyType[i]) && oldHistory[historyType[i]].time < moment(historyRecord[historyType[i]]).unix() && now - moment(historyRecord[historyType[i]]).unix() < 3600){ if(historyRecord.hasOwnProperty(historyType[i]) && oldHistory[historyType[i]].time < moment(historyRecord[historyType[i]]).unix() && now - moment(historyRecord[historyType[i]]).unix() < config.newMsg_timeout){
newHistory[historyType[i]].time = moment(historyRecord[historyType[i]]).unix() newHistory[historyType[i]].time = moment(historyRecord[historyType[i]]).unix();
newHistory[historyType[i]].isReadFlag = false; newHistory[historyType[i]].isReadFlag = false;
console.log(moment(historyRecord[historyType[i]]).unix());
} }
} }
...@@ -711,6 +763,28 @@ async function updateHistoryMap(self, historyRecord){ ...@@ -711,6 +763,28 @@ async function updateHistoryMap(self, historyRecord){
self.securityAlarmFlag = !response.notify.isReadFlag; self.securityAlarmFlag = !response.notify.isReadFlag;
self.hijackAlarmFlag = !response.alarm.isReadFlag; self.hijackAlarmFlag = !response.alarm.isReadFlag;
self.opendoorRecordFlag = !response.open.isReadFlag; self.opendoorRecordFlag = !response.open.isReadFlag;
console.log(self.securityAlarmFlag);
if(self.hijackAlarmFlag == true){
if(historyRecord.alarm){
//显示劫持报警
setMsgStatus(self, true, "hijack_img", false, true, moment(historyRecord.alarm,"YYYY-MM-DD hh:mm:ss").format("HH:mm"), Vue.t('device.hijackAlarm'));
}else{
//显示劫持报警
setMsgStatus(self, true, "hijack_img", false, true, moment.unix(response.alarm.time).format("HH:mm"), Vue.t('device.hijackAlarm'));
}
}else if(self.securityAlarmFlag == true){
if(historyRecord.notify){
//显示安全报警
setMsgStatus(self, true, "securityAlarm_img", false, true, moment(historyRecord.notify,"YYYY-MM-DD hh:mm:ss").format("HH:mm"), Vue.t('device.securityAlarm'));
}else{
//显示安全报警
setMsgStatus(self, true, "securityAlarm_img", false, true, moment.unix(response.notify.time).format("HH:mm"), Vue.t('device.securityAlarm'));
}
}else{
if((self.getMsgClass() == 'hijack_img') || (self.getMsgClass() == 'securityAlarm_img')){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
}
}, () => { }, () => {
}); });
} }
...@@ -883,6 +957,9 @@ async function sdsDataPorcessing(self, data){ ...@@ -883,6 +957,9 @@ async function sdsDataPorcessing(self, data){
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
self.setRemoteOpendoorShowFlag(false); self.setRemoteOpendoorShowFlag(false);
if(self.getMsgClass() == 'remoteOpendoor_img'){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
window.clearTimeout(self.remoteTime); window.clearTimeout(self.remoteTime);
uComponents.hideCommLoading(self); uComponents.hideCommLoading(self);
} }
...@@ -890,6 +967,9 @@ async function sdsDataPorcessing(self, data){ ...@@ -890,6 +967,9 @@ async function sdsDataPorcessing(self, data){
}else{ }else{
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
if(self.getMsgClass() == 'remoteOpendoor_img'){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
} }
break; break;
} }
...@@ -920,9 +1000,8 @@ function setBatteryPercentAndIcon(self, value){ ...@@ -920,9 +1000,8 @@ function setBatteryPercentAndIcon(self, value){
function setBellRing(self, time){ function setBellRing(self, time){
let now = moment(new Date(), "YYYY-MM-DD hh:mm:ss"); let now = moment(new Date(), "YYYY-MM-DD hh:mm:ss");
time = moment(time, "YYYY-MM-DD hh:mm:ss"); time = moment(time, "YYYY-MM-DD hh:mm:ss");
if(now.diff(time,'seconds') < config.ringBell_timeout && now.diff(time,'seconds') >= 0){ if(now.diff(time,'seconds') < config.pushMsg_timeout && now.diff(time,'seconds') >= 0){
self.setRingingTime(now.format("HH:mm")); ringBell(self, time);
ringBell(self);
} }
} }
...@@ -931,22 +1010,51 @@ function setRemoteOpendoor(self, time){ ...@@ -931,22 +1010,51 @@ function setRemoteOpendoor(self, time){
let now = moment(new Date(), "YYYY-MM-DD hh:mm:ss"); let now = moment(new Date(), "YYYY-MM-DD hh:mm:ss");
time = moment(time, "YYYY-MM-DD hh:mm:ss"); time = moment(time, "YYYY-MM-DD hh:mm:ss");
console.log(now.diff(time,'seconds')); console.log(now.diff(time,'seconds'));
if(now.diff(time,'seconds') < config.remote_timeout && now.diff(time,'seconds') >= 0){ if(now.diff(time,'seconds') < config.pushMsg_timeout && now.diff(time,'seconds') >= 0){
self.setValueRemoteOpendoor(true); self.setValueRemoteOpendoor(true);
self.setRemoteOpendoorDisabledFlag(false); self.setRemoteOpendoorDisabledFlag(false);
//停止响铃
stopDoorbellRing(self);
setMsgStatus(self, false, "remoteOpendoor_img", true, false, time.format("HH:mm"), Vue.t('device.remoteOpendoor'));
// //设置当前为普通状态
// self.setWarmingShowFlag(false);
// //更换icon
// self.setMsgIconSrc("../../resources/image/green_remoteOpendoor_icon.png");
// //开启普通动画效果
// self.setNormalApertureShow(true);
// self.setMsgTime(time.format("HH:mm"));
// self.setMsgText(Vue.t('device.remoteOpendoor'));
setTimeout(function(){ setTimeout(function(){
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
if(self.getMsgClass() == 'remoteOpendoor_img'){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
},(config.remote_timeout-now.diff(time,'seconds'))*1000); },(config.remote_timeout-now.diff(time,'seconds'))*1000);
} }
} }
//设置信息提示
function setMsgStatus(self, warmingShow, imgClass, normalAperture, warmingAperture, msgTime, msgText){
//设置当前为普通状态
self.setWarmingShowFlag(warmingShow);
//更换icon
self.setMsgClass(imgClass);
//开启普通动画效果
self.setNormalApertureShow(normalAperture);
self.setWarmingApertureShow(warmingAperture);
self.setMsgTime(msgTime);
self.setMsgText(msgText);
}
//设置远程开门样式 //设置远程开门样式
function setRemoteOpenDoorLoading(self, status, text, buttonText){ function setRemoteOpenDoorLoading(self, status, text, buttonText){
switch(status){ switch(status){
case 1: case 1:
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
setMsgStatus(self,false, "default_img", false, false, '', '');
case 2: case 2:
window.clearTimeout(self.remoteTime); window.clearTimeout(self.remoteTime);
uComponents.changeCommButtonText(self, buttonText); uComponents.changeCommButtonText(self, buttonText);
...@@ -958,18 +1066,10 @@ function setRemoteOpenDoorLoading(self, status, text, buttonText){ ...@@ -958,18 +1066,10 @@ function setRemoteOpenDoorLoading(self, status, text, buttonText){
} }
//响铃动画和铃声设置 //响铃动画和铃声设置
function ringBell(self){ function ringBell(self, time){
// window.clearInterval(self.time);
// window.clearTimeout(self.timeout);
// let i = 0;
// simpleRingBell(self,i);
// self.setRingTime(config.ring_time);
// self.time = setInterval(function(){
// i++;
// simpleRingBell(self,i);
// },config.await_time*2);
if(self.getDoorbellRingingFlag() === false){ if(self.getDoorbellRingingFlag() === false){
self.setDoorbellRingingFlag(true); self.setDoorbellRingingFlag(true);
setMsgStatus(self, false, "doorbell_img", true, false, time.format("HH:mm"), Vue.t('device.doorLockRinging'));
let p = plus.audio.createPlayer(config.audioUrl); let p = plus.audio.createPlayer(config.audioUrl);
self.timeout = setTimeout(() => { self.timeout = setTimeout(() => {
p = plus.audio.createPlayer(config.audioUrl); p = plus.audio.createPlayer(config.audioUrl);
...@@ -990,6 +1090,7 @@ function ringBell(self){ ...@@ -990,6 +1090,7 @@ function ringBell(self){
console.log(self.timeout); console.log(self.timeout);
self.timeout = setTimeout(() => { self.timeout = setTimeout(() => {
self.setDoorbellRingingFlag(false); self.setDoorbellRingingFlag(false);
self.setNormalApertureShow(false);
console.log(self.timeout); console.log(self.timeout);
},1500); },1500);
},2000); },2000);
...@@ -997,41 +1098,6 @@ function ringBell(self){ ...@@ -997,41 +1098,6 @@ function ringBell(self){
} }
} }
//铃声和动画循环一遍
//function simpleRingBell(self,i){
// window.clearTimeout(self.timeout);
// self.setDoorbellRingingFlag(true);
// let p = plus.audio.createPlayer(config.audioUrl);
// p.play( function () {
// console.log( "Audio play success!" );
// }, function ( e ) {
// console.log( "Audio play error: " + e.message );
// });
//
// self.timeout = setTimeout(function(){
// p = plus.audio.createPlayer(config.audioUrl);
// p.play( function () {
// console.log( "Audio play success!" );
// }, function ( e ) {
// console.log( "Audio play error: " + e.message );
// });
// window.clearTimeout(self.timeout);
// self.timeout = setTimeout(function(){
// self.setDoorbellRingingFlag(false);
// window.clearTimeout(self.timeout);
// if(i>=1){
// window.clearInterval(self.time);
// }
// },1500);
// if(i>=1){
// window.clearInterval(self.time);
// }
// },500);
// if(i>=1){
// window.clearInterval(self.time);
// }
//}
function pushAction(self, msg) { function pushAction(self, msg) {
var payload = msg.payload; var payload = msg.payload;
if (typeof payload == 'string') { if (typeof payload == 'string') {
...@@ -1169,6 +1235,9 @@ function remoteOpendoorTap(self){ ...@@ -1169,6 +1235,9 @@ function remoteOpendoorTap(self){
text: Vue.t('dialog.confirm'), callback: function () { text: Vue.t('dialog.confirm'), callback: function () {
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
if(self.getMsgClass() == 'remoteOpendoor_img'){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
} }
}); });
} }
...@@ -1199,6 +1268,7 @@ function doorlockManageTap(self){ ...@@ -1199,6 +1268,7 @@ function doorlockManageTap(self){
//tap 门铃(停止响铃) //tap 门铃(停止响铃)
function stopDoorbellRing(self){ function stopDoorbellRing(self){
self.setDoorbellRingingFlag(false); self.setDoorbellRingingFlag(false);
self.setNormalApertureShow(false);
self.setRingTime(0); self.setRingTime(0);
window.clearInterval(self.time); window.clearInterval(self.time);
window.clearTimeout(self.timeout); window.clearTimeout(self.timeout);
...@@ -1307,6 +1377,9 @@ function confirmButtonTap(self){ ...@@ -1307,6 +1377,9 @@ function confirmButtonTap(self){
self.setRemoteOpendoorShowFlag(false); self.setRemoteOpendoorShowFlag(false);
self.setValueRemoteOpendoor(false); self.setValueRemoteOpendoor(false);
self.setRemoteOpendoorDisabledFlag(true); self.setRemoteOpendoorDisabledFlag(true);
if(self.getMsgClass() == 'remoteOpendoor_img'){
setMsgStatus(self, false, "default_img", false, false, '', '');
}
} }
}); });
} }
......
...@@ -38,10 +38,10 @@ function init() { ...@@ -38,10 +38,10 @@ function init() {
this.extras = iot.navigator.getExtras(); this.extras = iot.navigator.getExtras();
this.role = this.extras.role; this.role = this.extras.role;
let self = this; let self = this;
window.addEventListener('returnPage',function(event){ // window.addEventListener('returnPage',function(event){
console.log("returnPage"); // console.log("returnPage");
getUserInfo(self); // getUserInfo(self);
}); // });
getUserInfo(this); getUserInfo(this);
let opener = plus.webview.currentWebview().opener(); let opener = plus.webview.currentWebview().opener();
if(opener.id == 'addUser'){ if(opener.id == 'addUser'){
...@@ -505,12 +505,31 @@ function iSeeButtonTap(self){ ...@@ -505,12 +505,31 @@ function iSeeButtonTap(self){
//删除用户 //删除用户
function deleteUser(self){ function deleteUser(self){
uComponents.showLoading(self); uComponents.showLoading(self);
if(self.info.auids){
iot.business.sds.unbindByManager({ iot.business.sds.unbindByManager({
data: { data: {
uuid: self.extras.uuid, uuid: self.extras.uuid,
destAuid: self.info.auids destAuid: self.info.auids
}, },
success: (response) => { success: (response) => {
deleteCloudeUser(self);
},
error: (error) => {
console.log(error);
uComponents.openAlert(self, Vue.t('doorlockUser.deleteFailure'), {
text: Vue.t('btn.confirm'), callback: function () {
}
});
},
complete: () => {
}
});
}else{
deleteCloudeUser(self);
}
}
function deleteCloudeUser(self){
iot.business.api.sendCustom('lock/delLockUser',{ iot.business.api.sendCustom('lock/delLockUser',{
data: { data: {
rel_id: self.extras.id, rel_id: self.extras.id,
...@@ -539,15 +558,4 @@ function deleteUser(self){ ...@@ -539,15 +558,4 @@ function deleteUser(self){
uComponents.hideLoading(self); uComponents.hideLoading(self);
} }
}); });
},
error: (error) => {
console.log(error);
uComponents.openAlert(self, Vue.t('doorlockUser.deleteFailure'), {
text: Vue.t('btn.confirm'), callback: function () {
}
});
},
complete: () => {
}
});
} }
...@@ -81,8 +81,8 @@ function backTap(){ ...@@ -81,8 +81,8 @@ function backTap(){
} }
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();
} }
...@@ -142,7 +142,7 @@ function createQrcode(self, qrKey){ ...@@ -142,7 +142,7 @@ function createQrcode(self, qrKey){
console.log(qr.style); console.log(qr.style);
setTimeout(() => { setTimeout(() => {
self.setQrCodeDisabled(true); self.setQrCodeDisabled(true);
},qrcode_timeout); },config.qrcode_timeout);
} }
}); });
} }
...@@ -30,7 +30,7 @@ function init() { ...@@ -30,7 +30,7 @@ function init() {
noHistoryTip: Vue.t('unlockInfo.noHistoryTip'), noHistoryTip: Vue.t('unlockInfo.noHistoryTip'),
tipShowFlag: true, tipShowFlag: true,
infoList: [], infoList: [],
newUnlockInfo: false
// list: [], // list: [],
// pullup: false, // pullup: false,
// loadText: Vue.t('scroll.clickToLoadMore'), // loadText: Vue.t('scroll.clickToLoadMore'),
...@@ -45,9 +45,8 @@ function init() { ...@@ -45,9 +45,8 @@ function init() {
this.role = this.extras.role; this.role = this.extras.role;
console.log(this.extras); console.log(this.extras);
let self = this; let self = this;
this.lockItems = [{text: Vue.t('unlockInfo.bindSoon')},{text: Vue.t('unlockInfo.bindUnlockInfo')}]; this.lockItems = [{text: Vue.t('unlockInfo.bindSoon')},{text: Vue.t('unlockInfo.bindedLockInfo')}];
itemChange(this, this.selectItem); itemChange(this, this.selectItem);
// this.setLoadShowFlag(this.infoList.length); // this.setLoadShowFlag(this.infoList.length);
// let ulistDom = this.$refs.infoList; // let ulistDom = this.$refs.infoList;
// ulistDom.onscroll = function () { // ulistDom.onscroll = function () {
...@@ -85,6 +84,12 @@ function init() { ...@@ -85,6 +84,12 @@ function init() {
setInfoList(list){ setInfoList(list){
this.infoList = list; this.infoList = list;
}, },
getNewUnlockInfo(){
return this.newUnlockInfo;
},
setNewUnlockInfo(info){
this.newUnlockInfo = info;
},
//tap < //tap <
onBackTap(){ onBackTap(){
backTap(); backTap();
...@@ -327,6 +332,7 @@ function itemChange(self, key){ ...@@ -327,6 +332,7 @@ function itemChange(self, key){
getTodayReccord(self); getTodayReccord(self);
}else if(key == 1){ }else if(key == 1){
//获取已关联的开门记录 //获取已关联的开门记录
self.setNewUnlockInfo(false);
getBindedLockInfo(self); getBindedLockInfo(self);
} }
self.setSelectItem(key); self.setSelectItem(key);
...@@ -357,7 +363,7 @@ function getTodayReccord(self){ ...@@ -357,7 +363,7 @@ function getTodayReccord(self){
value: data[i].id, value: data[i].id,
title: 'ID:'+data[i].openId, title: 'ID:'+data[i].openId,
subtitle: moment(data[i].time).format("HH:mm")+' '+Vue.t('opendoorRecord.'+config.openDoorMode[data[i].mode]+''), subtitle: moment(data[i].time).format("HH:mm")+' '+Vue.t('opendoorRecord.'+config.openDoorMode[data[i].mode]+''),
buttons: [{"imgSrc": "../../resources/image/green_addUnlckInfo_icon.png"}] buttons: [{"text": Vue.t('unlockInfo.bindUnlockInfo')}]
} }
} }
self.setInfoList(list); self.setInfoList(list);
...@@ -385,12 +391,10 @@ function addButtonTap(self, index){ ...@@ -385,12 +391,10 @@ function addButtonTap(self, index){
success: (response) => { success: (response) => {
console.log(response); console.log(response);
if(response.data.success){ if(response.data.success){
uComponents.openConfirm(self, Vue.t('addUnlockInfo.addInfoSuccess'), uComponents.openAlert(self, Vue.t('unlockInfo.addInfoSuccess'),
{text: Vue.t('addUnlockInfo.stay'), callback: function () { {text: Vue.t('btn.confirm'), callback: function () {
getTodayReccord(self); getTodayReccord(self);
}}, self.setNewUnlockInfo(true);
{text: Vue.t('addUnlockInfo.bindedUnlockInfo'), callback: function () {
itemChange(self, 1);
}}); }});
}else{} }else{}
}, },
......
...@@ -29,13 +29,15 @@ function init() { ...@@ -29,13 +29,15 @@ function init() {
if(window.iotDebug){ if(window.iotDebug){
iotDebug.push('start: Debug'); iotDebug.push('start: Debug');
} }
resolve(this); console.log(iot.business.user.isLogin());
if(iot.business.user.isLogin()){
document.addEventListener("resume", () => { loginButtonTap(this);
if(!this.showLoginButtonFlag){
resolve(this);
} }
}, false); // document.addEventListener("resume", () => {
// if(!this.showLoginButtonFlag){
// resolve(this);
// }
// }, false);
}, },
methods:{ methods:{
getShowLoginButtonFlag(){ getShowLoginButtonFlag(){
...@@ -81,21 +83,49 @@ function initComponentsConfig() { ...@@ -81,21 +83,49 @@ function initComponentsConfig() {
} }
} }
function resolve(self){ //function resolve(self){
// if (plus.os.name == 'Android') {
// iot.permission.checkPermission(['READ_EXTERNAL_STORAGE'], function (res) {
// console.log('success', res);
// loginButtonTap(self);
// }, function (err) {
// console.log('error', err);
// //已禁用,跳到系统设置页面
// iot.native.toAppSetting();
// });
// }else{
// loginButtonTap(self);
// }
//}
//sds登陆
function loginButtonTap(self){
if (plus.os.name == 'Android') { if (plus.os.name == 'Android') {
iot.permission.checkPermission(['READ_EXTERNAL_STORAGE'], function (res) { iot.permission.checkPermission(['READ_EXTERNAL_STORAGE'], function (res) {
console.log('success', res); console.log('success', res);
loginButtonTap(self); openSdsLogin(self);
}, function (err) { }, function (err) {
console.log('error', err); console.log('error', err);
//已禁用,跳到系统设置页面
// plus.nativeUI.confirm('需要文件读取权限', (e)=>{
// if(e.index == 1){
// //确认
// iot.native.toAppSetting();
// }else if(e.index == 1){
// //取消
// uComponents.hideloading(self);
// }
// },{ "title":"权限请求",
// "buttons":["取消","确定"],
// "verticalAlign":"center"});
}); });
}else{ }else{
loginButtonTap(self); openSdsLogin(self);
} }
} }
//sds登陆 function openSdsLogin(self){
function loginButtonTap(self){
iot.business.sds.checkSDSInit({ iot.business.sds.checkSDSInit({
data: {}, data: {},
success: (response) => { success: (response) => {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -5,25 +5,35 @@ ...@@ -5,25 +5,35 @@
// .noBottomGradient(); // .noBottomGradient();
.addDevice li{ .addDevice li{
margin: 10px; margin: 44px 44px 0 44px;
border: 1px solid;/*no*/ border: 1px solid;/*no*/
border-radius: 5px; border-radius: 5px;
color: @ADDDEVICE-TEXT-COLOR; color: @ADDDEVICE-TEXT-COLOR;
font-size: @ADDDEVICE-TEXT-FONTSIZE; font-size: @ADDDEVICE-TEXT-FONTSIZE;
height: 214px; height: 150px;
line-height: 214px; line-height: 150px;
padding-left: 58px; padding-left: 58px;
&:nth-child(1) img{
width: 90px;
height: 90px;
margin-right: 40px;
}
&:nth-child(2) img{
width: 135px;
height: 64px;
margin-right: 25px;
}
.tap_row(@ADDDEVICE-ROW-ACTIVE-BG); .tap_row(@ADDDEVICE-ROW-ACTIVE-BG);
font-size: 16px;
}
.addDevice p{
width: 100%;
font-size: 12px;
line-height: 32px;
color: #cfcfd1;
text-align: center;
}
.scanAdd img{
width: 70px;
height: 70px;
margin-right: 40px;
}
.wifiAdd img{
width: 105px;
height: 50px;
margin-right: 5px;
} }
//产品型号 //产品型号
...@@ -65,6 +75,22 @@ ...@@ -65,6 +75,22 @@
//配置Wi-Fi //配置Wi-Fi
.wifiAddHelp{ .wifiAddHelp{
.help(); .help();
position: relative;
li{
text-indent: 0;
&:last-child{
color: #FFF;
padding-left: 36px;
&:before{
color: #00FFFF;
content:'\e648';
.iconfont(16px);
line-height: 2;
position: absolute;
left: 12px;
}
}
}
} }
.u-button(); .u-button();
...@@ -195,6 +221,7 @@ ...@@ -195,6 +221,7 @@
bottom: 0; bottom: 0;
left: 0; left: 0;
width: 100%; width: 100%;
background: rgba(0,0,0,0);
} }
.noticeContent{ .noticeContent{
......
...@@ -99,16 +99,24 @@ ...@@ -99,16 +99,24 @@
height: 100%; height: 100%;
border-radius: 50%; border-radius: 50%;
} }
p{ div{
position: absolute; position: absolute;
top: 30px; top: 30px;
left: 0; left: 0;
right: 0; right: 0;
margin: 0 auto; margin: 0 auto;
.bgImgSize(40px,40px,"green_doorbell_icon.png",center,cover); // .bgImgSize(40px,40px,"green_default_icon.png",center,cover);
width: 40px;
height: 40px;
background-size: 40px 40px;
.transform-origin(center 5px); .transform-origin(center 5px);
} }
} }
.active{
div{
.animation(shake 1s linear infinite);
}
}
} }
.doorbellTip{ .doorbellTip{
position: absolute; position: absolute;
...@@ -123,6 +131,83 @@ ...@@ -123,6 +131,83 @@
} }
} }
.wifiRemote{
display: none;
}
.default_img{
.bgImg("green_default_icon.png");
}
.doorbell_img{
.bgImg("green_doorbell_icon.png");
}
.remoteOpendoor_img{
.bgImg("green_remoteOpendoor_icon.png");
.wifiRemote{
display: block;
.margin_center(30px,30px);
left: 6px;
li{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
border: 2px solid #00FFFF;/*no*/
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: transparent;
border-radius: 60px;
.animation(stretchdelay 1.5s infinite);
&:nth-child(1){
width: 100%;
height: 100%;
.animation-delay(-0.9s);
}
&:nth-child(2){
width: 20px;
height: 20px;
.animation-delay(-1.2s);
}
&:nth-child(3){
width: 10px;
height: 10px;
}
}
}
}
.hijack_img{
.bgImg("red_hijack_icon.png");
}
.securityAlarm_img{
.bgImg("red_securityAlarm_icon.png");
&:before{
content: '';
width: 100%;
height: 100%;
display: block;
position: absolute;
.bgImgSize(40px,40px,"red_securityAlarmLight_icon.png",center,cover);
.animation(alarmLight 2.5s linear infinite);
}
}
.redDoorbellBg{
.linear-gradient(#ff4799,#fff,#fff,#fff,#ff4799);
background: linear-gradient(#ff4799,#fff,#fff,#fff,#ff4799);
.doorbellCircle{
background-color: #2f283a;
.doorbell{
border: 2px solid #ff4799;/*no*/
}
}
}
.active .doorbellCircle .doorbell{ .active .doorbellCircle .doorbell{
&:before, &:before,
&:after{ &:after{
...@@ -131,11 +216,27 @@ ...@@ -131,11 +216,27 @@
&:after{ &:after{
.animation-delay(-1s); .animation-delay(-1s);
} }
p{ }
.animation(shake 1s linear infinite);
.warmingActive .doorbellCircle .doorbell{
&:before,
&:after{
.animation(redAperture 2s linear infinite);
}
&:after{
.animation-delay(-1s);
} }
} }
.keyframes(redAperture,{
0%{
.box-shadow(0 0 0 0 rgba(255,71,153,1));
}
100%{
.box-shadow(0 0 0 10px rgba(255,71,153,0));
}
});
.keyframes(shake,{ .keyframes(shake,{
0%,50%,100%{ 0%,50%,100%{
.transform(rotate(0deg)); .transform(rotate(0deg));
...@@ -148,6 +249,41 @@ ...@@ -148,6 +249,41 @@
} }
}); });
.keyframes(remoteOpendoor,{
0%{
background-position: 0 0;
}
33.33%{
background-position: -37.5px 0;
}
66.66%{
background-position: -75px 0;
}
100% {
background-position: 0 0;
}
});
.keyframes(stretchdelay,{
0%,
100% {
border-right-color: transparent;
}
40% {
border-right-color: #00FFFF;
}
});
.keyframes(alarmLight,{
0%,
100%{
opacity: 1;
}
50% {
opacity: 0.5;
}
});
.batteryState{ .batteryState{
text-align: right; text-align: right;
padding-right: 25px; padding-right: 25px;
...@@ -424,14 +560,21 @@ ...@@ -424,14 +560,21 @@
} }
} }
.newMsg .custom-switch:before{ .newMsg .custom-switch{
content: '\e681'; .u-switch-handle{
position: relative;
&:after{
content: '';
position: absolute; position: absolute;
top: 0; top: 3.55px;
right: 104px; right: 3.55px;
.iconfont(@NEWMSG-ICON-FONTSIZE); width: 9px;/*no*/
color: @NEWMSG-ICON-COLOR; height: 9px;/*no*/
border-radius: 50%;
background-color: #fc2168;
z-index: 3; z-index: 3;
}
}
} }
.followServiceNumber-dialog{ .followServiceNumber-dialog{
......
...@@ -200,6 +200,29 @@ ...@@ -200,6 +200,29 @@
} }
} }
} }
.tip{
span{
display: inline;
border-radius: 0;
border-width: 0 0 1px 0;/*no*/
background: none;
outline: none;
margin: 0;
padding: 0;
}
}
}
.invite-usertip{
margin: 41px 42px 0 62px;
&:before{
color: #00FFFF;
content:'\e648';
.iconfont(16px);
line-height: 2;
position: absolute;
left: 41px;
}
} }
.unbindState-dialog(); .unbindState-dialog();
......
...@@ -72,6 +72,19 @@ ...@@ -72,6 +72,19 @@
background-color: transparent; background-color: transparent;
} }
} }
.newMsg {
&:before{
content: '';
position: absolute;
top: 9px;
right: 22px;
width: 7px;/*no*/
height: 7px;/*no*/
border-radius: 50%;
background-color: #fc2168;
z-index: 3;
}
}
.active{ .active{
color: #fff; color: #fff;
&:after{ &:after{
...@@ -114,6 +127,8 @@ ...@@ -114,6 +127,8 @@
float: left; float: left;
padding: 10px; padding: 10px;
margin: 0 5px; margin: 0 5px;
color: #00f8dd;
font-size: 14px;
img{ img{
width: 23px; width: 23px;
height: 23px; height: 23px;
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
.user-list-title{ .user-list-title{
font-size: @USERLIST-TITLE-FONTSIZE; font-size: @USERLIST-TITLE-FONTSIZE;
.text_oneRow_ellipsis(); .text_oneRow_ellipsis();
margin-bottom: 5px; // margin-bottom: 5px;
} }
//昵称 //昵称
.user-list-subtitle span{ .user-list-subtitle span{
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
@BLACK_OPACITY: fade(@C_BLACK,90%); @BLACK_OPACITY: fade(@C_BLACK,90%);
@BLACK_OPACITY_1: fade(@C_BLACK,40%); @BLACK_OPACITY_1: fade(@C_BLACK,40%);
@WHITE_OPACITY: fade(@C_WHITE,0); @WHITE_OPACITY: fade(@C_WHITE,0);
@BLUE_OPACITY: fade(@C_BLACK,90%); @BLUE_OPACITY: fade(@C_BLUE_2,80%);
@GRAY_OPACITY: fade(@C_GRAY_2,5%); @GRAY_OPACITY: fade(@C_GRAY_2,5%);
//font-sizes //font-sizes
......
{"loading":"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":"取消"},"dialog":{"confirm":"确认","cancel":"取消","unbind":"解绑","delete":"删除"},"title":{"login":"登录","register":"注册","forgetPassword":"忘记密码","device":"U智锁","opendoorRecord":"开门记录","alarmInfo":"报警记录","remoteOpendoor":"远程开门","hijackRecord":"劫持记录","doorlockManage":"门锁管理","editName":"修改名称","qrcode":"生成绑定二维码","addDevice":"添加设备","scanCodeAdd":"扫描绑定设备","wifiAddHelp":"配置Wi-Fi","wifiAdd":"连接Wi-Fi","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":"使用"},"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":"配置Wi-Fi","loading":"loading","bindSuccess":"绑定成功","bindFailure":"绑定失败","reBindDevice":"请重新绑定"},"wifiAddHelp":{"helpTitle":"配置WIFI说明:","helpCont1":"确认设备端进入配网模式(详情操作请见产品说明书)","helpCont2":"点击页面下方“开始配置Wi-Fi”按钮,进入WiFi配网页面","helpCont3":"输入Wi-Fi密码,点击“连接”,等待锁端响应,至配网成功。","helpCont4":"(提示:如果指纹锁已经绑定过用户,重新绑定成功后会清除之前所有绑定信息)"},"wifiAdd":{"unbindWifiTip":"当前无Wi-Fi","wifiBinding":"正在连接网络...","wifiBindSuccess":"Wi-Fi连接成功,正在激活设备...","deviceActivating":"Wi-Fi连接成功,正在激活设备...","deviceActivateSuccess":"激活成功","deviceActivateFailure":"激活失败","bindTimeout":"连接超时","passwordInputTip":"请输入Wi-Fi密码","remindTitle":"配置Wi-Fi提醒:","remindCont1":"1. 请确保Wi-Fi信号良好","remindCont2":"2. 本产品暂不支持5GHz无线网络","noticeTip":"检测到您还未开启通知,将无法及时<br>接收安全推送","countDownText":"{0}s","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":"管理员"},"inviteBind":{"qrcodeExpireTip":"二维码已过期,请重新生成","title":"绑定方法:","cont1":"受邀用户登录“U智锁”APP","cont2":"选择“扫描绑定设备”","cont3":"扫描上方二维码完成绑定","tip":"注: 二维码有效时间为10分钟,过期请重新生成"},"unlockInfo":{"bindUnlockInfo":"已关联的开锁信息","noInfoTip":"尚未关联开锁信息","bindSoon":"快速关联","passwordOpenDoor":"密码","fingerprintOpenDoor":"指纹","ICcardOpenDoor":"IC卡","remoteOpenDoor":"遥控器","keyOpenDoor":"钥匙","appRemoteOpenDoor":"app远程","hijackingAlarm":"劫持指纹","setHijack":"设为劫持","setHijackTip":"确认设为劫持指纹?设定后使用该指纹开锁时,门锁用户将会收到劫持报警","cancelHijack":"取消劫持","cancelHijackTip":"确认取消劫持指纹?取消后,门锁用户不再收到劫持报警","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":"请输入中文、字母和数字"}} {"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","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":"管理员"},"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 \ No newline at end of file
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -447,30 +447,39 @@ p { ...@@ -447,30 +447,39 @@ p {
} }
.addDevice li { .addDevice li {
margin: 0.267rem; margin: 1.173rem 1.173rem 0 1.173rem;
border: 1px solid; border: 1px solid;
border-radius: 0.133rem; border-radius: 0.133rem;
color: #00ffff; color: #00ffff;
font-size: 0.48rem; font-size: 0.48rem;
height: 5.707rem; height: 4rem;
line-height: 5.707rem; line-height: 4rem;
padding-left: 1.547rem; padding-left: 1.547rem;
font-size: 0.427rem;
} }
.addDevice li:nth-child(1) img { .addDevice li:active {
width: 2.4rem; background-color: #153D4C;
height: 2.4rem; }
margin-right: 1.067rem;
.addDevice p {
width: 100%;
font-size: 0.32rem;
line-height: 0.853rem;
color: #cfcfd1;
text-align: center;
} }
.addDevice li:nth-child(2) img { .scanAdd img {
width: 3.6rem; width: 1.867rem;
height: 1.707rem; height: 1.867rem;
margin-right: 0.667rem; margin-right: 1.067rem;
} }
.addDevice li:active { .wifiAdd img {
background-color: #153D4C; width: 2.8rem;
height: 1.333rem;
margin-right: 0.133rem;
} }
.u-list { .u-list {
...@@ -614,6 +623,7 @@ p { ...@@ -614,6 +623,7 @@ p {
.wifiAddHelp { .wifiAddHelp {
margin: 0.8rem 1.013rem 1.547rem; margin: 0.8rem 1.013rem 1.547rem;
position: relative;
} }
.wifiAddHelp li { .wifiAddHelp li {
...@@ -631,6 +641,27 @@ p { ...@@ -631,6 +641,27 @@ p {
margin-bottom: 0.907rem; margin-bottom: 0.907rem;
} }
.wifiAddHelp li {
text-indent: 0;
}
.wifiAddHelp li:last-child {
color: #FFF;
padding-left: 0.96rem;
}
.wifiAddHelp li:last-child:before {
color: #00FFFF;
content: '\e648';
font-family: iconfont;
font-size: 0.427rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
line-height: 2;
position: absolute;
left: 0.32rem;
}
.u-button { .u-button {
width: 6.4rem; width: 6.4rem;
color: #fff; color: #fff;
...@@ -1133,6 +1164,7 @@ p { ...@@ -1133,6 +1164,7 @@ p {
bottom: 0; bottom: 0;
left: 0; left: 0;
width: 100%; width: 100%;
background: rgba(0, 0, 0, 0);
} }
.noticeContent { .noticeContent {
......
...@@ -26,12 +26,14 @@ ...@@ -26,12 +26,14 @@
</div> </div>
<div class="content"> <div class="content">
<ul class="addDevice"> <ul class="addDevice">
<v-touch tag="li" v-on:tap="onScanAddTap"> <v-touch class="scanAdd" tag="li" v-on:tap="onScanAddTap">
<img src="../../resources/image/scanCodeAdd.png">{{ $t('addDevice.scanCodeAdd') }} <img src="../../resources/image/scanCodeAdd.png">{{ $t('addDevice.scanCodeAdd') }}
</v-touch> </v-touch>
<v-touch tag="li" v-on:tap="onWifiAddTap"> <p>{{ $t('addDevice.scanCodeAddTip') }}</p>
<v-touch class="wifiAdd" tag="li" v-on:tap="onWifiAddTap">
<img src="../../resources/image/wifiAdd.png">{{ $t('addDevice.wifiAdd') }} <img src="../../resources/image/wifiAdd.png">{{ $t('addDevice.wifiAdd') }}
</v-touch> </v-touch>
<p>{{ $t('addDevice.wifiAddTip') }}</p>
</ul> </ul>
</div> </div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog> <u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -881,7 +881,7 @@ p { ...@@ -881,7 +881,7 @@ p {
} }
.custom-comm-loading { .custom-comm-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-comm-loading .u-comm-loading-button { .custom-comm-loading .u-comm-loading-button {
...@@ -1038,7 +1038,7 @@ p { ...@@ -1038,7 +1038,7 @@ p {
border-radius: 50%; border-radius: 50%;
} }
.doorbellBg .doorbellCircle .doorbell p { .doorbellBg .doorbellCircle .doorbell div {
position: absolute; position: absolute;
top: 0.8rem; top: 0.8rem;
left: 0; left: 0;
...@@ -1046,13 +1046,16 @@ p { ...@@ -1046,13 +1046,16 @@ p {
margin: 0 auto; margin: 0 auto;
width: 1.067rem; width: 1.067rem;
height: 1.067rem; height: 1.067rem;
background: url("../../resources/image/green_doorbell_icon.png") no-repeat center; background-size: 1.067rem 1.067rem;
-webkit-background-size: cover;
background-size: cover;
-webkit-transform-origin: center 0.133rem; -webkit-transform-origin: center 0.133rem;
transform-origin: center 0.133rem; transform-origin: center 0.133rem;
} }
.doorbellBg .doorbellCircle .active div {
-webkit-animation: shake 1s linear infinite;
animation: shake 1s linear infinite;
}
.doorbellBg .doorbellTip { .doorbellBg .doorbellTip {
position: absolute; position: absolute;
bottom: 0.453rem; bottom: 0.453rem;
...@@ -1066,6 +1069,106 @@ p { ...@@ -1066,6 +1069,106 @@ p {
margin-right: 0.267rem; margin-right: 0.267rem;
} }
.wifiRemote {
display: none;
}
.default_img {
background-image: url("../../resources/image/green_default_icon.png");
}
.doorbell_img {
background-image: url("../../resources/image/green_doorbell_icon.png");
}
.remoteOpendoor_img {
background-image: url("../../resources/image/green_remoteOpendoor_icon.png");
}
.remoteOpendoor_img .wifiRemote {
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 0.8rem;
height: 0.8rem;
margin: auto;
left: 0.16rem;
}
.remoteOpendoor_img .wifiRemote li {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
border: 2px solid #00FFFF;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: transparent;
border-radius: 1.6rem;
-webkit-animation: stretchdelay 1.5s infinite;
animation: stretchdelay 1.5s infinite;
}
.remoteOpendoor_img .wifiRemote li:nth-child(1) {
width: 100%;
height: 100%;
-webkit-animation-delay: -0.9s;
animation-delay: -0.9s;
}
.remoteOpendoor_img .wifiRemote li:nth-child(2) {
width: 0.533rem;
height: 0.533rem;
-webkit-animation-delay: -1.2s;
animation-delay: -1.2s;
}
.remoteOpendoor_img .wifiRemote li:nth-child(3) {
width: 0.267rem;
height: 0.267rem;
}
.hijack_img {
background-image: url("../../resources/image/red_hijack_icon.png");
}
.securityAlarm_img {
background-image: url("../../resources/image/red_securityAlarm_icon.png");
}
.securityAlarm_img:before {
content: '';
width: 100%;
height: 100%;
display: block;
position: absolute;
width: 1.067rem;
height: 1.067rem;
background: url("../../resources/image/red_securityAlarmLight_icon.png") no-repeat center;
-webkit-background-size: cover;
background-size: cover;
-webkit-animation: alarmLight 2.5s linear infinite;
animation: alarmLight 2.5s linear infinite;
}
.redDoorbellBg {
background: -webkit-linear-gradient(#ff4799, #fff, #fff, #fff, #ff4799);
background: linear-gradient(#ff4799, #fff, #fff, #fff, #ff4799);
}
.redDoorbellBg .doorbellCircle {
background-color: #2f283a;
}
.redDoorbellBg .doorbellCircle .doorbell {
border: 2px solid #ff4799;
}
.active .doorbellCircle .doorbell:before, .active .doorbellCircle .doorbell:before,
.active .doorbellCircle .doorbell:after { .active .doorbellCircle .doorbell:after {
-webkit-animation: aperture 2s linear infinite; -webkit-animation: aperture 2s linear infinite;
...@@ -1077,9 +1180,39 @@ p { ...@@ -1077,9 +1180,39 @@ p {
animation-delay: -1s; animation-delay: -1s;
} }
.active .doorbellCircle .doorbell p { .warmingActive .doorbellCircle .doorbell:before,
-webkit-animation: shake 1s linear infinite; .warmingActive .doorbellCircle .doorbell:after {
animation: shake 1s linear infinite; -webkit-animation: redAperture 2s linear infinite;
animation: redAperture 2s linear infinite;
}
.warmingActive .doorbellCircle .doorbell:after {
-webkit-animation-delay: -1s;
animation-delay: -1s;
}
@-webkit-keyframes redAperture {
0% {
-webkit-box-shadow: 0 0 0 0 #ff4799;
box-shadow: 0 0 0 0 #ff4799;
}
100% {
-webkit-box-shadow: 0 0 0 0.267rem rgba(255, 71, 153, 0);
box-shadow: 0 0 0 0.267rem rgba(255, 71, 153, 0);
}
}
@keyframes redAperture {
0% {
-webkit-box-shadow: 0 0 0 0 #ff4799;
box-shadow: 0 0 0 0 #ff4799;
}
100% {
-webkit-box-shadow: 0 0 0 0.267rem rgba(255, 71, 153, 0);
box-shadow: 0 0 0 0.267rem rgba(255, 71, 153, 0);
}
} }
@-webkit-keyframes shake { @-webkit-keyframes shake {
...@@ -1116,6 +1249,82 @@ p { ...@@ -1116,6 +1249,82 @@ p {
} }
} }
@-webkit-keyframes remoteOpendoor {
0% {
background-position: 0 0;
}
33.33% {
background-position: -1rem 0;
}
66.66% {
background-position: -2rem 0;
}
100% {
background-position: 0 0;
}
}
@keyframes remoteOpendoor {
0% {
background-position: 0 0;
}
33.33% {
background-position: -1rem 0;
}
66.66% {
background-position: -2rem 0;
}
100% {
background-position: 0 0;
}
}
@-webkit-keyframes stretchdelay {
0%, 100% {
border-right-color: transparent;
}
40% {
border-right-color: #00FFFF;
}
}
@keyframes stretchdelay {
0%, 100% {
border-right-color: transparent;
}
40% {
border-right-color: #00FFFF;
}
}
@-webkit-keyframes alarmLight {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
@keyframes alarmLight {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.batteryState { .batteryState {
text-align: right; text-align: right;
padding-right: 0.667rem; padding-right: 0.667rem;
...@@ -1534,16 +1743,19 @@ p { ...@@ -1534,16 +1743,19 @@ p {
background-position: -0.72rem 0; background-position: -0.72rem 0;
} }
.newMsg .custom-switch:before { .newMsg .custom-switch .u-switch-handle {
content: '\e681'; position: relative;
}
.newMsg .custom-switch .u-switch-handle:after {
content: '';
position: absolute; position: absolute;
top: 0; top: 0.095rem;
right: 2.773rem; right: 0.095rem;
font-family: iconfont; width: 9px;
font-size: 0.427rem; height: 9px;
-webkit-font-smoothing: antialiased; border-radius: 50%;
line-height: 1; background-color: #fc2168;
color: #fc2168;
z-index: 3; z-index: 3;
} }
...@@ -1641,7 +1853,7 @@ p { ...@@ -1641,7 +1853,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1051; z-index: 1051;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.u-notification .u-notification-box { .u-notification .u-notification-box {
......
...@@ -28,13 +28,20 @@ ...@@ -28,13 +28,20 @@
<div class="content"> <div class="content">
<div class="topCpnt"> <div class="topCpnt">
<div v-show="lockId"> <div v-show="lockId">
<v-touch tag="div" class="doorbellBg" v-bind:class="{ active: doorbellRingingFlag }" v-on:tap="onStopDoorbellRing()"> <v-touch tag="div" class="doorbellBg" v-bind:class="[{ redDoorbellBg: warmingShowFlag },{ active: normalApertureShow },{warmingActive: warmingApertureShow}]" v-on:tap="onStopDoorbellRing()">
<div class="doorbellCircle"> <div class="doorbellCircle">
<div class="doorbell"> <div class="doorbell" v-bind:class="{ active: doorbellRingingFlag }">
<p></p> <!--<img :src="msgIconSrc">-->
<div :class=" msgClass ">
<ul class="wifiRemote">
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div> </div>
</div> </div>
<div class="doorbellTip"><span>{{ ringingTime }}</span>{{ ringingTime ? $t('device.doorLockRinging'):'' }}</div> <div class="doorbellTip"><span>{{ msgTime }}</span>{{ msgText }}</div>
</v-touch> </v-touch>
<p class="batteryState" :class="[{yellowWarning: batteryPercent<=20},{redWarning: batteryPercent<10}]"><span v-html="batteryState" ></span><span>{{ batteryPercent }}%</span></p> <p class="batteryState" :class="[{yellowWarning: batteryPercent<=20},{redWarning: batteryPercent<10}]"><span v-html="batteryState" ></span><span>{{ batteryPercent }}%</span></p>
</div> </div>
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -1031,7 +1031,7 @@ p { ...@@ -1031,7 +1031,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1051; z-index: 1051;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.unbindState-dialog div { .unbindState-dialog div {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -835,7 +835,7 @@ p { ...@@ -835,7 +835,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
text-align: center; text-align: center;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.inviteBind li p span { .inviteBind li p span {
...@@ -861,6 +861,32 @@ p { ...@@ -861,6 +861,32 @@ p {
background-color: #00ffff; background-color: #00ffff;
} }
.inviteBind .tip span {
display: inline;
border-radius: 0;
border-width: 0 0 1px 0;
background: none;
outline: none;
margin: 0;
padding: 0;
}
.invite-usertip {
margin: 1.093rem 1.12rem 0 1.653rem;
}
.invite-usertip:before {
color: #00FFFF;
content: '\e648';
font-family: iconfont;
font-size: 0.427rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
line-height: 2;
position: absolute;
left: 1.093rem;
}
.unbindState-dialog { .unbindState-dialog {
position: fixed; position: fixed;
top: 0; top: 0;
...@@ -868,7 +894,7 @@ p { ...@@ -868,7 +894,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1051; z-index: 1051;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.unbindState-dialog div { .unbindState-dialog div {
...@@ -911,7 +937,7 @@ p { ...@@ -911,7 +937,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1051; z-index: 1051;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.guide-dialog .guideStep1 { .guide-dialog .guideStep1 {
......
...@@ -28,8 +28,9 @@ ...@@ -28,8 +28,9 @@
<div class="content"> <div class="content">
<ul class="userInfoLink"> <ul class="userInfoLink">
<li class="userInfo" > <li class="userInfo" >
<img class="userInfo-image" v-if="userInfo.image && userInfo.role == 0" v-bind:src="userInfo.image"> <img class="userInfo-image" v-bind:src="userInfo.image">
<img class="userInfo-subimage" 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">-->
<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,13 +31,13 @@ ...@@ -31,13 +31,13 @@
<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-if="item.image && item.role == 0" v-bind:src="item.image"> <img class="user-list-image" v-bind:src="item.image">
<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">
<img class="user-list-subimage" v-if="item.image && item.role != 0" v-bind:src="item.image"> <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> <span v-if="item.subtitle">{{ item.subtitle }}</span>
</p> </p>-->
</div> </div>
</v-touch> </v-touch>
<div class="user-list-button"> <div class="user-list-button">
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<p>{{ $t('title.inviteBind') }}</p> <p>{{ $t('title.inviteBind') }}</p>
</div> </div>
<div class="content"> <div class="content">
<p class="invite-usertip">{{ $t('inviteBind.userTip') }}</p>
<ul class="inviteBind"> <ul class="inviteBind">
<li class="qrcode"> <li class="qrcode">
<canvas ref="qrcode"></canvas> <canvas ref="qrcode"></canvas>
...@@ -33,13 +34,13 @@ ...@@ -33,13 +34,13 @@
<span>{{ $t('inviteBind.qrcodeExpireTip') }}</span> <span>{{ $t('inviteBind.qrcodeExpireTip') }}</span>
</p> </p>
</li> </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 class="title">{{ $t('inviteBind.title') }}</li>
<li><span>&#xe6c1;</span>{{ $t('inviteBind.cont1') }}</li> <li><span>&#xe6c1;</span>{{ $t('inviteBind.cont1') }}</li>
<li><span>&#xe6c0;</span>{{ $t('inviteBind.cont2') }}</li> <li><span>&#xe6c0;</span>{{ $t('inviteBind.cont2') }}</li>
<li class="noBorder"><span>&#xe6c2;</span>{{ $t('inviteBind.cont3') }}</li> <li class="noBorder"><span>&#xe6c2;</span>{{ $t('inviteBind.cont3') }}</li>
<li class="tip">{{ $t('inviteBind.tip') }}</li>
</ul> </ul>
<u-button :init-param="componentsConfig.qrcodeButton.initParam" v-on:u-button-tap="onQRcodeButtonTap"></u-button> <!--<u-button :init-param="componentsConfig.qrcodeButton.initParam" v-on:u-button-tap="onQRcodeButtonTap"></u-button>-->
</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>
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -645,6 +645,18 @@ p { ...@@ -645,6 +645,18 @@ p {
background-color: transparent; background-color: transparent;
} }
.tab .newMsg:before {
content: '';
position: absolute;
top: 0.24rem;
right: 0.587rem;
width: 7px;
height: 7px;
border-radius: 50%;
background-color: #fc2168;
z-index: 3;
}
.tab .active { .tab .active {
color: #fff; color: #fff;
} }
...@@ -705,6 +717,8 @@ p { ...@@ -705,6 +717,8 @@ p {
float: left; float: left;
padding: 0.267rem; padding: 0.267rem;
margin: 0 0.133rem; margin: 0 0.133rem;
color: #00f8dd;
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 img {
...@@ -1143,7 +1157,7 @@ p { ...@@ -1143,7 +1157,7 @@ p {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1051; z-index: 1051;
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.guide-dialog .guideStep1 { .guide-dialog .guideStep1 {
......
...@@ -29,12 +29,12 @@ ...@@ -29,12 +29,12 @@
<!--<p class="title">{{ $t('unlockInfo.bindUnlockInfo') }}</p>--> <!--<p class="title">{{ $t('unlockInfo.bindUnlockInfo') }}</p>-->
<ul class="tab"> <ul class="tab">
<v-touch tag="li" v-for="(item, key, index) in lockItems" v-text="lockItems[key].text" <v-touch tag="li" v-for="(item, key, index) in lockItems" v-text="lockItems[key].text"
:class="{active: (selectItem == key)}" v-on:tap="onItemChange(key)"> :class="[{active: (selectItem == key)},{newMsg: newUnlockInfo && (key == 1)}]" v-on:tap="onItemChange(key)">
</v-touch> </v-touch>
</ul> </ul>
<!--<u-swipe-list ref="uswipelist" :init-param="componentsConfig.unlockInfoList.initParam" <!--<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>--> v-on:u-swipe-list-button-tap="onUnlockInfoListButtonTap(arguments[0],arguments[1])"></u-swipe-list>-->
<div class="infoList-list" ref="infoList" > <div class="infoList-list" ref="infoList">
<ul class="infoList-list-scroll" v-show="infoList.length"> <ul class="infoList-list-scroll" v-show="infoList.length">
<li class="infoList-list-row" v-for="(item, index) in infoList"> <li class="infoList-list-row" v-for="(item, index) in infoList">
<div class="infoList-list-handle"> <div class="infoList-list-handle">
...@@ -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" v-on:tap="onImgButtonTap(index, buttonIndex)"> <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)">
<img :src="button.imgSrc"> <img :src="button.imgSrc" v-show="button.imgSrc">
{{ button.text }}
</v-touch> </v-touch>
</div> </div>
</li> </li>
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
...@@ -495,7 +495,6 @@ p { ...@@ -495,7 +495,6 @@ p {
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
margin-bottom: 0.133rem;
} }
.user-list-scroll .user-list-row .user-list-handle .user-list-subtitle span { .user-list-scroll .user-list-row .user-list-handle .user-list-subtitle span {
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div id="app" v-cloak> <div id="app" v-cloak>
<div class="guideBg"> <div class="guideBg">
<u-button :init-param="componentsConfig.loginButton.initParam" v-on:u-button-tap="onLoginButtonTap" v-show="showLoginButtonFlag"></u-button> <u-button :init-param="componentsConfig.loginButton.initParam" v-on:u-button-tap="onLoginButtonTap"></u-button>
</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>
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
...@@ -100,7 +100,7 @@ p { ...@@ -100,7 +100,7 @@ p {
} }
.custom-loading { .custom-loading {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-loading .u-loading-box { .custom-loading .u-loading-box {
...@@ -303,7 +303,7 @@ p { ...@@ -303,7 +303,7 @@ p {
} }
.custom-dialog { .custom-dialog {
background-color: rgba(0, 0, 0, 0.9); background-color: rgba(36, 38, 53, 0.8);
} }
.custom-dialog .u-dialog-box { .custom-dialog .u-dialog-box {
......
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