Commit 824c0d85 by wjd

Merge branch 'zjx' into 'test/96'

Zjx

See merge request iot-project-js/doorlock!18
parents 341e1778 51b2aef1
......@@ -141,6 +141,8 @@
"openDoorFailure": "远程开门失败",
"remoteTimeout": "远程开门超时",
"remoteOpendoorAgain": "请尝试重试",
"offlineTip": "设备已离线,收到远程开门请求后,请尽快处理",
"textlengthTip": "密码长度为6~12位数字",
"error": {
"noPasswordTip": "远程密码不能为空"
}
......@@ -193,9 +195,9 @@
},
"wifiAdd": {
"unbindWifiTip": "当前无Wi-Fi",
"wifiBinding": "配网中",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备",
"deviceActivating": "Wi-Fi连接成功,正在激活设备",
"wifiBinding": "正在连接网络...",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备...",
"deviceActivating": "Wi-Fi连接成功,正在激活设备...",
"deviceActivateSuccess":"激活成功",
"deviceActivateFailure":"激活失败",
"bindTimeout":"连接超时",
......@@ -204,6 +206,7 @@
"remindCont1": "1. 请确保Wi-Fi信号良好",
"remindCont2": "2. 本产品暂不支持5GHz无线网络",
"noticeTip": "检测到您还未开启通知,将无法及时<br>接收安全推送",
"countDownText": "{0}s",
"error": {
}
......@@ -241,7 +244,7 @@
"unbind": "未绑定"
},
"addUser":{
"nameInputTip": "请输入您想添加的用户名",
"nameInputTip": "请为门锁用户创建显示昵称",
"addUserSuccess": "添加用户成功",
"addUserFailure": "添加用户失败",
"error": {
......@@ -284,7 +287,7 @@
},
"unlockInfo":{
"bindUnlockInfo": "已关联的开锁信息",
"noInfoTip": "当前无绑定开锁ID,请添加",
"noInfoTip": "尚未关联开锁信息",
"passwordOpenDoor": "密码",
"fingerprintOpenDoor": "指纹",
"ICcardOpenDoor": "IC卡",
......
......@@ -141,6 +141,8 @@
"openDoorFailure": "远程开门失败",
"remoteTimeout": "远程开门超时",
"remoteOpendoorAgain": "请尝试重试",
"offlineTip": "设备已离线,收到远程开门请求后,请尽快处理",
"textlengthTip": "密码长度为6~12位数字",
"error": {
"noPasswordTip": "远程密码不能为空"
}
......@@ -193,9 +195,9 @@
},
"wifiAdd": {
"unbindWifiTip": "当前无Wi-Fi",
"wifiBinding": "配网中",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备",
"deviceActivating": "Wi-Fi连接成功,正在激活设备",
"wifiBinding": "正在连接网络...",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备...",
"deviceActivating": "Wi-Fi连接成功,正在激活设备...",
"deviceActivateSuccess":"激活成功",
"deviceActivateFailure":"激活失败",
"bindTimeout":"连接超时",
......@@ -204,6 +206,7 @@
"remindCont1": "1. 请确保Wi-Fi信号良好",
"remindCont2": "2. 本产品暂不支持5GHz无线网络",
"noticeTip": "检测到您还未开启通知,将无法及时<br>接收安全推送",
"countDownText": "{0}s",
"error": {
}
......@@ -241,7 +244,7 @@
"unbind": "未绑定"
},
"addUser":{
"nameInputTip": "请输入您想添加的用户名",
"nameInputTip": "请为门锁用户创建显示昵称",
"addUserSuccess": "添加用户成功",
"addUserFailure": "添加用户失败",
"error": {
......@@ -284,7 +287,7 @@
},
"unlockInfo":{
"bindUnlockInfo": "已关联的开锁信息",
"noInfoTip": "当前无绑定开锁ID,请添加",
"noInfoTip": "尚未关联开锁信息",
"passwordOpenDoor": "密码",
"fingerprintOpenDoor": "指纹",
"ICcardOpenDoor": "IC卡",
......
......@@ -27,13 +27,15 @@ export default {
"model": "USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK",
"GET_MSG_INTERVAL": 5000,
"wifi_add_timeout": 150000,
"add_wifi_timeout": 60,
"active_device_timeout": 30,
//门铃晃动间隔时间
"await_time": 3000,
//门铃晃动次数
"shake_times": 3,
//门锁晃动总时间
"ring_time": 12000,
"remote_opendoor_timeout": 30000,
"remote_opendoor_timeout": 15000,
//二维码失效时间
"qrcode_timeout": 600000,
"remote_timeout": 120,
......@@ -41,7 +43,8 @@ export default {
"maxlength": 16
},
"password":{
"maxlength": 6
"maxlength": 12,
"minlength": 6
},
"ringBell_timeout": 300,
"intervalTime": 3,
......
export default {
"url": "http://192.168.2.96:20000",
"model": "USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK"
"url": "https://cloud.iot.u-gen.net/",
// "url": "http://192.168.2.96:20000",
"model": "UGEN_SECURITY_SMARTDOOR_YJ2017"
// "model": "USMARTLOCK_SECURITY_SMARTDOOR_SMART_LOCK"
}
\ No newline at end of file
......@@ -12,8 +12,8 @@ const iot = new UIOT({
lang: ['zh', 'en'],
vue: Vue,
i18n: VueI18n,
appId: '10004',
appSecret: '10004',
appId: '20004',
appSecret: '20004',
wx: {
appId: ''
},
......
......@@ -39,6 +39,9 @@ function init() {
self.noticeTipShowFlag = !iot.native.isNotifycationOpen();
scanCodeSuccess(self);
});
plus.key.addEventListener('backbutton',function(){
iot.utils.closeScanBarcode(self.barcode);
},false);
},
methods:{
//tap <
......@@ -73,9 +76,8 @@ function initComponentsConfig() {
//tap <
function backTap(self){
iot.navigator.back();
console.log(self.barcode);
iot.utils.closeScanBarcode(self.barcode);
iot.navigator.aback();
}
function openScanCode(self){
......@@ -246,7 +248,8 @@ function scanCodeFailue(self){
"class": 'custom-process-button', 'text': Vue.t('addDevice.reBindDevice'), 'callback': () => {
//激活失败
uComponents.hideProcess(self);
uComponents.showProcess(self, 0, Vue.t('addDevice.loading'));
iot.utils.closeScanBarcode(self.barcode);
// uComponents.showProcess(self, 0, Vue.t('addDevice.loading'));
openScanCode(self);
}
}]);
......
......@@ -24,7 +24,11 @@ function init() {
//配置组件
componentsConfig: initComponentsConfig(),
noticeTipShowFlag: false,
timeout: null
timeout: null,
countDownText: config.add_wifi_timeout,
wifiAddSuccess: false,
activeSuccess: false,
activing: false
},
mounted(){
resolve(this);
......@@ -148,6 +152,23 @@ function backTap(){
//tap 连接
function connectButtonTap(self){
self.countDownText = config.add_wifi_timeout;
self.activing = false;
let countDown = setInterval(() => {
self.countDownText --;
if((self.countDownText <= 0) && (self.wifiAddSuccess == false)){
window.clearInterval(countDown);
addFailue(self);
// iot.business.sds.stopFindWIFI({
// success: (response) => {},
// error: (error) => {}
// });
iot.business.sds.stopFindDevices({
success: (response) => {},
error: (error) => {}
});
}
},1000);
if(self.getTextWiFiName() == null || self.getTextWiFiName().trim() == ''){
self.setTextErrorTip(Vue.t('wifiAdd.unbindWifiTip'));
}else if(self.getTextPassword() == null || self.getTextPassword().trim() == ''){
......@@ -204,6 +225,7 @@ function connectButtonTap(self){
iot.business.sds.findDevices({
success: (response) => {
console.log('findDevices');
console.log(response);
if(window.iotDebug){
iotDebug.push('end: 找设备'+JSON.stringify(response));
}
......@@ -218,6 +240,23 @@ function connectButtonTap(self){
if (window.iotDebug) {
iotDebug.upload(iot,'激活中');
}
self.wifiAddSuccess = true;
if(self.activing == false){
self.countDownText = config.active_device_timeout;
window.clearInterval(countDown);
countDown = setInterval(() => {
self.countDownText --;
if((self.countDownText <= 0) && (self.activeSuccess == false)){
window.clearInterval(countDown);
addFailue(self);
iot.business.sds.stopFindDevices({
success: (response) => {},
error: (error) => {}
});
}
},1000);
self.activing = true;
}
uComponents.showProcess(self, 0, Vue.t('wifiAdd.deviceActivating'));
}else if(response.data == "joined success"){
if(window.iotDebug){
......@@ -227,7 +266,27 @@ function connectButtonTap(self){
iotDebug.upload(iot,'激活成功');
}
let deviceId = response.info.sn;
unbind(self, deviceId, productId);
// unbind(self, deviceId, productId);
bind(self, deviceId, productId);
iot.business.sds.setDeviceStatus({
data: {
uuid: response.info.uuid,
setParams: {
'action': {
'value': 'regiserSuccess'
}
}
},
success: (response) => {
//激活成功
console.log(response);
},
error: (error) => {
console.log(error);
uPublic.openRequestErrorAlert(self);
},
complete(){}
});
}else if(response.data == "fail"){
//连接失败
if(window.iotDebug){
......@@ -256,15 +315,15 @@ function connectButtonTap(self){
}
});
}
self.timeout = setTimeout(function (){
console.log("timeout");
window.clearTimeout(self.timeout);
addFailue(self);
iot.business.sds.stopFindDevices({
success: (response) => {},
error: (error) => {}
});
},config.wifi_add_timeout);
// self.timeout = setTimeout(function (){
// console.log("timeout");
// window.clearTimeout(self.timeout);
// addFailue(self);
// iot.business.sds.stopFindDevices({
// success: (response) => {},
// error: (error) => {}
// });
// },config.wifi_add_timeout);
}
//云端绑定之前先解绑
......@@ -313,6 +372,7 @@ function bind(self, deviceId, productId){
let data = response.data;
if(data.success){
addSuccess(self);
self.activeSuccess = true;
}
if(window.iotDebug){
iotDebug.push('end: 绑定成功'+JSON.stringify(response));
......
......@@ -15,6 +15,8 @@ import {iot, uPublic, uComponents} from '../../public/public.js';
import uloop from '../../public/uloop.js';
import unotify from '../../public/unotify.js';
const ON_LINE = 'on';
const OFF_LINE = 'off';
iot.ready(init);
function init() {
uPublic.closeSlideBack();
......@@ -89,7 +91,7 @@ function init() {
//最新消息
newMsg: [],
//是否第一次获取门锁信息
isFirstGetLockInfo: true,
// isFirstGetLockInfo: true,
opendoorRecordFlag: false,
securityAlarmFlag: false,
hijackAlarmFlag: false,
......@@ -107,7 +109,8 @@ function init() {
//门铃总计时器
timeout: null,
//远程开门计时器
remoteTime: null
remoteTime: null,
boolPasswordMinlength: false
},
mounted(){
//显示loading
......@@ -117,7 +120,7 @@ function init() {
//获取设备信息
getDevices(this);
//注册监听上报
registerPushListener(this);
// registerPushListener(this);
unotify.getCid((response) => {
console.log(response);
},(error) => {
......@@ -129,12 +132,18 @@ function init() {
//获取设备信息
getDevices(self);
//注册监听上报
registerPushListener(self);
// registerPushListener(self);
if(event.detail.needClose){
iot.navigator.closeAllBesidesItself();
}
});
// ringBell(self);
// setTimeout(() => {
// ringBell(self);
// setTimeout(() =>{
// ringBell(self);
// },1000);
// },1000);
},
methods:{
setValueRemoteOpendoor(value){
......@@ -224,12 +233,12 @@ function init() {
setUuid(){
this.uuid = id;
},
getIsFirstGetLockInfo(){
return this.isFirstGetLockInfo;
},
setIsFirstGetLockInfo(flag){
this.isFirstGetLockInfo = flag
},
// getIsFirstGetLockInfo(){
// return this.isFirstGetLockInfo;
// },
// setIsFirstGetLockInfo(flag){
// this.isFirstGetLockInfo = flag
// },
getLockId(){
return this.lockId;
},
......@@ -326,6 +335,9 @@ function init() {
//tap 停止闪铃
onStopDoorbellRing(){
stopDoorbellRing(this);
},
onPasswordMatchlength(value){
passwordMatchlength(this, value);
}
}
}).$mount('#app');
......@@ -421,7 +433,8 @@ function initComponentsConfig() {
class: 'custom-text',
icon: '&#xe64d;',
placeholder: Vue.t('remoteOpendoor.passwordInputTip'),
maxlength: config.password.maxlength
maxlength: config.password.maxlength,
minlength: config.password.minlength
}
},
ucommloading: {
......@@ -533,10 +546,10 @@ function getLockInfoSuccess(self, data){
self.setLockId(data.lock_id);
self.setRole(data.role);
//判断是否第一次获取门锁信息
if(self.isFirstGetLockInfo){
// if(self.isFirstGetLockInfo){
getDeviceStatus(self);
self.setIsFirstGetLockInfo(false);
}
// self.setIsFirstGetLockInfo(false);
// }
//存储最后一条历史记录的ID
let historyId = null
historyId = data.info.historyId ? data.info.historyId : null;
......@@ -591,6 +604,10 @@ function getDeviceStatus(self){
let data = uPublic.checkResponseData(response.data);
if(data){
setBatteryPercentAndIcon(self, data.BatteryPercentage.value);
iot.storage.setMap('onLineState', data.onlineState.value, (response) => {
console.log(res);
}, () => {});
registerPushListener(self);
}
},
error: (error) => {
......@@ -806,10 +823,12 @@ function registerPushListener(self){
}
//sds消息处理方法
function sdsDataPorcessing(self, data){
async function sdsDataPorcessing(self, data){
let onlineState = await iot.storage.getMap('onLineState');
console.log(data);
//设置电量百分比和icon
setBatteryPercentAndIcon(self, data.BatteryPercentage.value);
if(onlineState == data.onlineState.value){
switch(data.action.value){
case 'notify':
switch(data.notify_type.value){
......@@ -847,13 +866,18 @@ function sdsDataPorcessing(self, data){
}
break;
}
}else{
iot.storage.setMap('onLineState', data.onlineState.value, (response) => {
console.log(res);
}, () => {});
}
}
//设置电量百分比、电量icon
function setBatteryPercentAndIcon(self, value){
console.log('setBatteryPercentAndIcon'+value);
self.setBatteryPercent(value);
let state = 0;
let state = 5;
if(value >= 10){
//向上取整
state = config.powerIcon[Math.ceil(value/20)];
......@@ -906,51 +930,79 @@ function setRemoteOpenDoorLoading(self, status, text, buttonText){
//响铃动画和铃声设置
function ringBell(self){
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);
}
//铃声和动画循环一遍
function simpleRingBell(self,i){
window.clearTimeout(self.timeout);
// 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){
self.setDoorbellRingingFlag(true);
let p = plus.audio.createPlayer(config.audioUrl);
self.timeout = setTimeout(() => {
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(){
console.log(self.timeout);
self.timeout = setTimeout(() => {
console.log("in2");
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(){
console.log(self.timeout);
self.timeout = setTimeout(() => {
self.setDoorbellRingingFlag(false);
window.clearTimeout(self.timeout);
if(i>=1){
window.clearInterval(self.time);
}
},config.await_time*3/5);
if(i>=1){
window.clearInterval(self.time);
}
},config.await_time*2/5);
if(i>=1){
window.clearInterval(self.time);
console.log(self.timeout);
},1500);
},2000);
},500);
}
}
//铃声和动画循环一遍
//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) {
var payload = msg.payload;
if (typeof payload == 'string') {
......@@ -1070,10 +1122,32 @@ function doorlockUserTap(self){
//tap 远程开门
function remoteOpendoorTap(self){
iot.business.sds.getDeviceStatus({
data: {
uuid: self.uuid
},
success: (response) => {
console.log(response);
let data = uPublic.checkResponseData(response.data);
if(data){
if(data.onlineState.value == ON_LINE){
if(self.valueRemoteOpendoor){
self.setTextPassword('');
self.setRemoteOpendoorShowFlag(true);
}
}else{
uComponents.openAlert(self, Vue.t('remoteOpendoor.offlineTip'), {
text: Vue.t('dialog.confirm'), callback: function () {
}
});
}
}
},
error: (error) => {
console.log(error);
uPublic.openRequestErrorAlert(self);
}
});
}
//tap 门锁管理
......@@ -1121,19 +1195,35 @@ function passwordChange(self,text){
console.log('passwordChange: ' + self.textPassword);
}
//获取远程密码是否达到最小长度
function passwordMatchlength(self, bool) {
console.log(bool);
self.boolPasswordMinlength = bool;
}
//tap 确定(远程开门密码)
function confirmButtonTap(self){
iot.business.sds.getDeviceStatus({
data: {
uuid: self.uuid
},
success: (response) => {
console.log(response);
let data = uPublic.checkResponseData(response.data);
if(data){
if(data.onlineState.value == ON_LINE){
if(self.boolPasswordMinlength){
if(self.getTextPassword() == null || self.getTextPassword().trim() == ''){
self.setTextErrorTip(Vue.t('remoteOpendoor.error.noPasswordTip'));
}else{
uComponents.showCommLoading(self);
setRemoteOpenDoorLoading(self, 0, Vue.t('remoteOpendoor.loading'));
let keyIv = crypto.enkey(self.mac.replace(/:/g,''));
// console.log(keyIv);
// console.log(keyIv);
let pwd = crypto.encode(self.getTextPassword(), keyIv);
// console.log(pwd);
// let msg = crypto.decode(pwd, keyIv);
// console.log(msg);
// console.log(pwd);
// let msg = crypto.decode(pwd, keyIv);
// console.log(msg);
iot.business.sds.setDeviceStatus({
data: {
uuid: self.getUuid(),
......@@ -1169,6 +1259,25 @@ function confirmButtonTap(self){
setRemoteOpenDoorLoading(self, 2, Vue.t('remoteOpendoor.remoteTimeout'), Vue.t('remoteOpendoor.remoteOpendoorAgain'));
}
},config.remote_opendoor_timeout);
}else{
uComponents.openAlert(self, Vue.t('remoteOpendoor.textlengthTip'), {
text: Vue.t('dialog.confirm'), callback: function () {
}
});
}
}else{
uComponents.openAlert(self, Vue.t('remoteOpendoor.offlineTip'), {
text: Vue.t('dialog.confirm'), callback: function () {
}
});
}
}else{}
},
error: (error) => {
console.log(error);
uPublic.openRequestErrorAlert(self);
}
});
}
//tap comm-loading ‘确认’
......
......@@ -256,15 +256,52 @@
}
}
.u-process{
.u-process-content{
.loader{
&:before{
.transform(translateZ(0) scale(0.7));
}
}
}
}
.u-process.u-process-status-0{
.u-process-content{
.loading{
position: relative;
.loading-text{
position: absolute;
left: 0;
top: 0;
font-size: 16px;
line-height: 3.750em;
width: 100%;
text-align: center;
}
}
}
}
.u-process.u-process-status-1{
.u-process-content{
top: 200px;
.loading{
.loading-text{
display: none;
}
}
}
}
.u-process.u-process-status-2{
.u-process-content{
top: 200px;
.loading{
.loading-text{
display: none;
}
}
}
}
......@@ -1122,6 +1122,11 @@ p {
}
}
.u-process-content .loader:before {
-webkit-transform: translateZ(0) scale(0.7);
transform: translateZ(0) scale(0.7);
}
.scanContent {
position: fixed;
top: 1.173rem;
......@@ -1197,10 +1202,37 @@ p {
background-color: transparent;
}
.u-process .u-process-content .loader:before {
-webkit-transform: translateZ(0) scale(0.7);
transform: translateZ(0) scale(0.7);
}
.u-process.u-process-status-0 .u-process-content .loading {
position: relative;
}
.u-process.u-process-status-0 .u-process-content .loading .loading-text {
position: absolute;
left: 0;
top: 0;
font-size: 0.427rem;
line-height: 3.750em;
width: 100%;
text-align: center;
}
.u-process.u-process-status-1 .u-process-content {
top: 5.333rem;
}
.u-process.u-process-status-1 .u-process-content .loading .loading-text {
display: none;
}
.u-process.u-process-status-2 .u-process-content {
top: 5.333rem;
}
.u-process.u-process-status-2 .u-process-content .loading .loading-text {
display: none;
}
\ No newline at end of file
......@@ -48,7 +48,10 @@
<p class="icon"></p>
</u-comm-loading> -->
<u-process ref="uprocess" :init-param="componentsConfig.processLoading.initParam">
<div class="loading">
<p class="loader"></p>
<p class="loading-text">{{ $t('wifiAdd.countDownText',[countDownText]) }}</p>
</div>
<p class="icon"></p>
<p class="noticeContent" v-show = "noticeTipShowFlag">
<span>&#xe637;</span>
......
......@@ -104,7 +104,8 @@
<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>
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>
......
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