Commit b39ea29e by jenny

Merge branch 'zjx' into 'test/96'

Zjx

See merge request iot-project-js/doorlock!12
parents 25f04af6 1e49b89f
......@@ -24,5 +24,14 @@
<arguments>1.0-name-matches-false-false-node_modules</arguments>
</matcher>
</filter>
<filter>
<id>1514974720847</id>
<name></name>
<type>26</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-node_modules</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
{
"loading": "loading...",
"scroll": {
"clickToLoadMore": "点击加载更多",
"loading": "loading..."
"clickToLoadMore": "上拉加载更多",
"loading": "loading"
},
"btn": {
"confirm": "确定",
......@@ -25,7 +25,8 @@
"add": "添加",
"next": "下一步",
"iSee": "我知道了",
"unbindDoorlock": "解绑门锁"
"unbindDoorlock": "解绑门锁",
"finish": "完成"
},
"dialog":{
"confirm": "确认",
......@@ -190,8 +191,8 @@
"wifiAdd": {
"unbindWifiTip": "当前无Wi-Fi",
"wifiBinding": "配网中",
"wifiBindSuccess": "配网成功,请激活设备",
"deviceActivating": "设备激活中",
"wifiBindSuccess": "Wi-Fi连接成功,正在激活设备",
"deviceActivating": "Wi-Fi连接成功,正在激活设备",
"deviceActivateSuccess":"激活成功",
"deviceActivateFailure":"激活失败",
"bindTimeout":"连接超时",
......@@ -271,10 +272,10 @@
},
"inviteBind":{
"qrcodeExpireTip": "二维码已过期,请重新生成",
"title": "注意事项:",
"cont1": "1.被邀请的用户选择添加设备页面中的扫二维码方式进行添加门锁",
"cont2": "2.长按二维码保存为图片,发送给被邀请用户,用户通过长按识别二维码",
"cont3": "3.有效时间10分钟,失效后请点击“重新生成二维码"
"title": "绑定方法:",
"cont1": "1.受邀用户登录“U智锁”APP",
"cont2": "2.选择“扫描绑定设备”",
"cont3": "3.扫描上方二维码完成绑定"
},
"unlockInfo":{
"bindUnlockInfo": "已关联的开锁信息",
......@@ -337,5 +338,23 @@
"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加入白名单。"
}
}
\ No newline at end of file
......@@ -17,7 +17,10 @@
"connect": "连接",
"bindUser": "绑定姓名",
"bind": "我要绑定",
"reBound": "请重新绑定",
"startNow": "立即体验",
"ignore": "暂不开启",
"openNotify": "开启推送通知",
"reBound": "重新绑定",
"saveQRcode": "保存二维码到相册",
"unbind": "解绑",
"deleteUser": "删除该用户",
......@@ -25,7 +28,8 @@
"add": "添加",
"next": "下一步",
"iSee": "我知道了",
"unbindDoorlock": "解绑门锁"
"unbindDoorlock": "解绑门锁",
"finish": "完成"
},
"dialog":{
"confirm": "确认",
......@@ -199,6 +203,7 @@
"remindTitle": "配置Wi-Fi提醒:",
"remindCont1": "1. 请确保Wi-Fi信号良好",
"remindCont2": "2. 本产品暂不支持5GHz无线网络",
"noticeTip": "检测到您还未开启通知,将无法及时<br>接收安全推送",
"error": {
}
......@@ -274,7 +279,8 @@
"title": "绑定方法:",
"cont1": "1.受邀用户登录“U智锁”APP",
"cont2": "2.选择“扫描绑定设备”",
"cont3": "3.扫描上方二维码完成绑定"
"cont3": "3.扫描上方二维码完成绑定",
"tip": "注: 二维码有效时间为10分钟,过期请重新生成"
},
"unlockInfo":{
"bindUnlockInfo": "已关联的开锁信息",
......@@ -337,5 +343,38 @@
"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":"进入首页"
}
}
\ No newline at end of file
export default {
"url": "http://192.168.2.96:20000"
"url": "http://192.168.2.96:20000",
"model": "UGEN_SECURITY_SMARTDOOR_YJ2017"
}
\ No newline at end of file
import androidNotify from '../view/c_android-notify.vue';
import gridList from '../view/c_grid-list.vue';
import timeline from '../view/c_timeline.vue';
var components = {
'android-notify': androidNotify,
'grid-list': gridList,
'timeline': timeline
};
......
......@@ -46,7 +46,7 @@ uPublic.recalc = function () {
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = clientWidth / 10 + 'px';
docEl.style.fontSize = parseInt(clientWidth / 10, 10) + 'px';
};
window.addEventListener(resizeEvt, recalc, false);
recalc();
......
/**
* newnotify-dialog.vue
* Version: 0.1
* User: wujie
* Date: 2017-12-26
* Copyright(c) 2017. U-GEN Tech.Co,Ltd. All Rights Reserved.
* newnotify-dialog
*
******************************************************************************
* 依赖
通知栏插件 isNotifycationOpen toNotifycationSetting
多语言 需要配置多语言
* 支持环境
App
*
*/
<template>
<div id="app" v-cloak>
<div class="header">
<p>开启通知</p>
</div>
<div class="content">
<ul class="u-android-notify">
<li class="u-android-notify-row" v-bind:class = "setp1Active">
<span class="u-android-notify-icon">&#xe6c1;</span>
<span class="u-android-notify-finish-icon" v-show="isStep1Finish"></span>
<div class="u-android-notify-title">
{{toSettingTitle}}
<v-touch tag="div" class="u-android-notify-button" v-show="isToSetting" v-on:tap="onOpenNotify">{{toSettingsub}}
<span></span></v-touch>
</div>
</li>
<li class="u-android-notify-row" v-bind:class = "setp2Active">
<span class="u-android-notify-icon">&#xe6c0;</span>
<span class="u-android-notify-finish-icon" v-show="isStep2Finish"></span>
<div class="u-android-notify-title">
{{checkSetting}}
<v-touch tag="div" class="u-android-notify-button" v-show="isKnow" v-on:tap="onIKnow">{{IKonw}}</v-touch>
</div>
<div class="u-android-notify-tip">{{checkSettingsubTitle}}</div>
<div class="u-android-notify-subtitle">{{step1Title}}</div>
<div class="u-android-notify-subcontent">{{step1content}}</div>
<div class="u-android-notify-subtitle">{{step2Title}}</div>
<div class="u-android-notify-subcontent">{{step2content}}</div>
<div class="u-android-notify-subtitle">{{step3Title}}</div>
<div class="u-android-notify-subcontent">{{step3content}}</div>
</li>
<li class="u-android-notify-row" v-bind:class = "setp3Active">
<span class="u-android-notify-icon">&#xe6c2;</span>
<span class="u-android-notify-finish-icon" v-show="isStep3Finish"></span>
<div class="u-android-notify-title">
{{endSetting}}
<v-touch tag="div" class="u-android-notify-button" v-show="isToIndex" v-on:tap="onToIndex">{{toAppIndex}}
<span></span></v-touch>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
props: ['initParam','toIndex'],
data () {
return {
toSettingTitle:Vue.t('androidNotify.toSettingTitle'),
toSettingsub:Vue.t('androidNotify.toSettingsub'),
checkSetting:Vue.t('androidNotify.checkSetting'),
IKonw:Vue.t('androidNotify.IKonw'),
checkSettingsubTitle:Vue.t('androidNotify.checkSettingsubTitle'),
step1Title:Vue.t('androidNotify.step1Title'),
step1content:Vue.t('androidNotify.step1content'),
step2Title:Vue.t('androidNotify.step2Title'),
step2content:Vue.t('androidNotify.step2content'),
step3Title:Vue.t('androidNotify.step3Title'),
step3content:Vue.t('androidNotify.step3content'),
endSetting:Vue.t('androidNotify.endSetting'),
toAppIndex:Vue.t('androidNotify.toIndex'),
notifyState:false, // 当前是否开启了通知
gotoIndex:this.toIndex,// 处理点击到index按钮事件
isKnow:iot.native.isNotifycationOpen(),//是否需要显示 我已阅读
isToIndex:false,// 是否需要显示去首页按钮
isStep1Finish:iot.native.isNotifycationOpen(),//是否需要显示步骤1的勾
isStep2Finish:false,//是否需要显示步骤2的勾
isStep3Finish:false,//是否需要显示步骤3的勾
isToSetting:!iot.native.isNotifycationOpen(),//是否需要显示去设置按钮
setp1Active:'active',
setp2Active:null,// 默认为灰色 不显示active
setp3Active:null,
}
},
mounted: function () {
console.log("notifyState:"+iot.native.isNotifycationOpen())
// 监听程序恢复前台
document.addEventListener("resume", ()=>{
onAppReume(this);
}, false);
},
watch: {
},
methods: {
// 点击按钮关闭弹出框
onOpenNotify(){
openNotify(this);
},
onIKnow(){
IKonw(this);
},
onToIndex(){
toIndex(this);
}
}
};
function openNotify(self) {
console.log("去开启");
iot.native.toNotifycationSetting("notify");
self.setp1Active = 'active changeBorder';
}
function IKonw(self){
console.log("点击了我已阅读");
self.isStep2Finish = true; // 点击阅读后显示步骤2的勾
self.setp2Active = "active changeBorder";// 点击阅读后显示步骤2的字体亮度调高
self.setp3Active = "active";// 同时步骤3的字体亮度也调高
self.isStep3Finish = true; // 步骤3的勾勾选
self.isToIndex = true;//显示去首页按钮
self.isKnow = false; // 点击我已阅读隐藏我已阅读按钮
}
function toIndex(self){
console.log("gotoIndex...");
self.gotoIndex();
}
function onAppReume(self){
let notifyState = iot.native.isNotifycationOpen();
console.log("notifyState:"+notifyState);
if (notifyState) {self.setp2Active = "active changeBorder";}
self.isStep1Finish = iot.native.isNotifycationOpen();// 再次判断当前通知是否开启
self.isToSetting = !iot.native.isNotifycationOpen(); // 再次判断是否需要显示去设置按钮
self.isKnow = iot.native.isNotifycationOpen(),// 再次判断是否需要显示 我已阅读
self.$nextTick(function () {
console.log("重新渲染");
});
}
</script>
......@@ -23,10 +23,12 @@ function init() {
list:[],
startId: 0,
deviceId: null,
flag: true
flag: true,
noticeTipShowFlag: false
},
mounted(){
uComponents.showLoading(this);
this.noticeTipShowFlag = !iot.native.isNotifycationOpen();
resolve(this);
},
methods:{
......@@ -55,6 +57,9 @@ function init() {
onRefreshFresh(){
refreshFresh(this);
},
onNotifycationSetting(){
notifycationSetting();
},
//tap <
onBackTap(){
backTap();
......@@ -158,3 +163,20 @@ mui.back = function(){
function listLoad(self) {
resolve(self);
}
//ios跳转到系统设置页面
//android跳转到通知页面
function notifycationSetting(){
if(plus.os.name == 'Android'){
// alert("打开通知页面");
iot.navigator.openWindow({
url: './notify.html',
id: 'notify',
styles: {
popGesture: 'none'
}
});
}else{
iot.native.toNotifycationSetting();
}
}
......@@ -25,10 +25,12 @@ function init() {
startId: 0,
deviceId: null,
userInfo: [],
flag: true
flag: true,
noticeTipShowFlag: false
},
mounted(){
uComponents.showLoading(this);
this.noticeTipShowFlag = !iot.native.isNotifycationOpen();
resolve(this);
},
methods:{
......@@ -62,6 +64,9 @@ function init() {
onRefreshFresh(){
refreshFresh(this);
},
onNotifycationSetting(){
notifycationSetting();
},
//tap <
onBackTap(){
backTap();
......@@ -180,3 +185,20 @@ function listLoad(self) {
function refreshFresh(self){
resolve(self);
}
//ios跳转到系统设置页面
//android跳转到通知页面
function notifycationSetting(){
if(plus.os.name == 'Android'){
// alert("打开通知页面");
iot.navigator.openWindow({
url: './notify.html',
id: 'notify',
styles: {
popGesture: 'none'
}
});
}else{
iot.native.toNotifycationSetting();
}
}
......@@ -23,6 +23,10 @@ function init() {
if(iot.navigator.getExtras().needClose){
iot.navigator.closeAllBesidesItself();
}
// console.log(iot.native.isNotifycationOpen());
// iot.native.toNotifycationSetting();
const app = new Vue({
data:{
//开门记录
......
import {iot, uPublic, uComponents} from '../../public/public.js';
import config from '../../public/public.js';
iot.ready(init);
function init() {
uPublic.componentsExtend(['android-notify']);
var form = new Vue({
el: '#content',
data:{
initButtonText: "测试按钮",
componentsConfig: initComponentsConfig(),//初始化数据
dialogFlag:true,
showFlags:false,
onNotifyToIndex:notifyToIndex //改方法传入
},
mounted:function(){
},
methods: {
onTapButton(){
tapButton(this);
},
onAddDeviceButtonTap(){
console.log("onAddDeviceButtonTap......");
},
onToSetting(){
console.log("点击了toSetting");
}
}
});
function notifyToIndex(){
iot.navigator.fire(plus.webview.getWebviewById('device'),'returnPage',{
needClose: true
});
iot.navigator.openWindow({
url: './index.html',
id: 'device',
styles: {
popGesture: 'none'
},
extras: {
needClose: true
}
});
}
function tapButton(self){
console.log("tapButton.......");
}
//初始化组件参数
function initComponentsConfig() {
return {
// 设置通知弹出框参数
notifyDialog: {
// 默认参数
initParam: {
// appName:"js.通用门锁",
// time:"js.刚刚",
// title:'js.开启通知',
// content1:'js.开启通知后您将可以及时获取门锁报警',
// content2:'js.提醒、门锁开门消息通知',
// accept:'js.我知道了!',
// buttonTitle:'js.前往开启通知设置'
}
},
addDeviceButton:{
// 默认参数
initParam: {
class: 'edit-name-button',
text: "这是测试button"
}
}
};
}
}
......@@ -24,10 +24,12 @@ function init() {
startId: 0,
deviceId: null,
userInfo: [],
flag: true
flag: true,
noticeTipShowFlag: false
},
mounted(){
uComponents.showLoading(this);
this.noticeTipShowFlag = !iot.native.isNotifycationOpen();
resolve(this);
},
methods:{
......@@ -61,6 +63,9 @@ function init() {
onRefreshFresh(){
refreshFresh(this);
},
onNotifycationSetting(){
notifycationSetting();
},
//tap <
onBackTap(){
backTap();
......@@ -214,3 +219,19 @@ function setListData(self, response){
}else{
}
}
//ios跳转到系统设置页面
//android跳转到通知页面
function notifycationSetting(){
if(plus.os.name == 'Android'){
iot.navigator.openWindow({
url: './notify.html',
id: 'notify',
styles: {
popGesture: 'none'
}
});
}else{
iot.native.toNotifycationSetting();
}
}
......@@ -201,7 +201,6 @@ function initComponentsConfig() {
//获取设备信息
function getDoorlockInfo(self){
uComponents.showLoading(self);
let productId = config.model;
iot.business.device.getInfo({
data: {
device_id: self.extras.lockInfo.lock_id
......@@ -319,11 +318,11 @@ function backTap(){
}
////重写mui.back
//mui.back = function(){
// iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{});
// console.log("fire");
// iot.navigator.back();
//}
mui.back = function(){
iot.navigator.fire(plus.webview.currentWebview().opener(),'returnPage',{});
console.log("fire");
iot.navigator.back();
}
// 选择: 是否接收门铃消息推送
function doorbellSwitchTap(self, value){
......
......@@ -9,7 +9,6 @@
import {iot, uPublic, uComponents} from '../../public/public.js';
iot.ready(init);
function init() {
//通用 dialog、loading组件
......@@ -30,17 +29,13 @@ function init() {
if(window.iotDebug){
iotDebug.push('start: Debug');
}
var self = this;
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);
});
}else{
loginButtonTap(self);
resolve(this);
document.addEventListener("resume", () => {
if(!this.showLoginButtonFlag){
resolve(this);
}
}, false);
},
methods:{
getShowLoginButtonFlag(){
......@@ -86,6 +81,19 @@ function initComponentsConfig() {
}
}
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);
});
}else{
loginButtonTap(self);
}
}
//sds登陆
function loginButtonTap(self){
iot.business.sds.checkSDSInit({
......@@ -105,7 +113,6 @@ function loginButtonTap(self){
var data = uPublic.checkResponseData(response.data);
if(data){
if(data.hasOwnProperty('UserID')){
console.log("sds登陆成功了");
cloudsLogin(self, data.UserID);
}
}else{
......
......@@ -183,9 +183,10 @@
.mediaPosition();
.u-comm-loading();
//.u-comm-loading();
.u-process();
.custom-comm-loading();
//.custom-comm-loading();
//
.scanContent {
......@@ -195,3 +196,75 @@
left: 0;
width: 100%;
}
.noticeContent{
color: #c8225b;
line-height: 1.5;
text-align: center;
width: 100%;
display: inline-block;
position: absolute;
bottom: -200px;
font-size: 12px ;
span{
&:first-child{
.iconfont(20px);
}
}
}
.custom-process-button{
position: absolute;
bottom: inherit;
left: 0;
right: 0;
width: 7.333rem;
border-radius: 0.133rem;
background-color: transparent;
border: 1px solid;
color: #00ffff;
font-size: 0.427rem;
text-align: center;
line-height: 1;
margin: 0 auto;
padding: 0.267rem 0;
-webkit-transition: all 0.2s linear;
transition: all 0.2s linear;
background-clip: padding-box;
}
.custom-process-cancelButton{
bottom: 0;
width: 100px;
color: #00ffff;
font-size: 12px;
background-color: transparent;
padding: 18px 0 5px;
border: none;
&:after{
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;/*no*/
.blue_gradient_border();
}
.tap_row(transparent);
&.disabled{
background-color: transparent;
}
}
.u-process.u-process-status-1{
.u-process-content{
top: 200px;
}
}
.u-process.u-process-status-2{
.u-process-content{
top: 200px;
}
}
@import "../public/public.less";
@import "../public/header.less";
.u-android-notify{
margin: 53px 40px 0;
.u-android-notify-row{
color: rgba(204,204,204,.5);
padding-left: 34px;
position: relative;
.u-android-notify-title{
font-size: 16px;
position: relative;
}
.u-android-notify-tip{
font-size: 12px;
line-height: 15px;
padding: 3px 5px 1px;
margin: 6px -4px -7px;
border-radius: 5px;
position: relative;
border: 1px dashed transparent;/*no*/
&:before{
content: '';
position: absolute;
top: -6px;
left: 90px;
.bgImgSize(10px,6px,"blue_arrow_icon.png",center,cover);
display: none;
}
}
.u-android-notify-subtitle{
margin-top: 15px;
}
.u-android-notify-subcontent{
font-size: 12px;
line-height: 15px;
padding-left: 21px;
margin-top: 6px;
}
//1、2、3
.u-android-notify-icon{
position: absolute;
left: 0;
display: inline-block;
width: 22px;
height: 22px;
border: 1px solid;/*no*/
border-radius: 50%;
text-align: center;
.iconfont(12px,22px);
background-color: #242635;
outline: 3px solid #242635;/*no*/
}
// √
.u-android-notify-finish-icon{
position: absolute;
top: 10px;
left: 12px;
&:before{
content:'\e730';
color: #00ffff;
.defaultIconfont(16px);
background-color: #242635;
border-radius: 50%;
.transform(scale(0.6));
display: block;
}
}
.u-android-notify-button{
.transformV_center(right,0);
color: #00ffff;
font-size: 12px;
line-height: 1;
border-bottom: 1px solid;/*no*/
padding-bottom: 1px;/*no*/
// >>
span{
margin-left: 6px;
&:before{
content:'\e6c4';
.iconfont(12px);
}
}
}
&:not(:last-child){
padding-bottom: 55px;
}
&:before{
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 11px;
width: 1px;/*no*/
background-color: #595b63;
}
}
.active{
color: #fff;
.u-android-notify-tip{
color: #91929a;
border-color: #91929a;
&:before{
display: block;
}
}
.u-android-notify-subcontent{
color: #91929a;
}
.u-android-notify-icon{
color: #00ffff;
}
}
.changeBorder:before{
background-color: #00ffff;
}
}
\ No newline at end of file
......@@ -69,3 +69,38 @@
transform: rotate3d(0, 0, 1, 360deg);
}
}
.notice{
height: 62px;
line-height: 62px;
border-bottom: 2px solid #50515D;/*no*/
text-align: center;
color: #00ffff;
font-size: 12px;
> span{
color: #fc2168;
.iconfont(20px);
vertical-align: middle;
margin-right: 9px;
}
p{
display: inline-block;
color: #00ffff;
font-size: 12px;
line-height: 1;
border-bottom: 1px solid;/*no*/
padding-bottom: 1px;/*no*/
margin-left: 24px;
// >>
span{
margin-left: 6px;
&:before{
content:'\e6c4';
.iconfont(12px);
}
}
}
~ .custom-list{
top: 106px;
}
}
\ No newline at end of file
......@@ -179,6 +179,11 @@
}
}
}
.timeTip{
text-align: center;
font-size: 12px;
padding-left: 0;
}
}
.unbindState-dialog();
......
......@@ -368,6 +368,34 @@ p{
}
}
.custom-process(){
.custom-process{
background-color: @CUSTOM-BACKDROP-BG;
.u-process-button{
bottom: 134px;
width: 100px;
color: #00ffff;
font-size: 12px;
background-color: transparent;
padding: 18px 0 5px;
&:after{
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;/*no*/
.blue_gradient_border();
}
.tap_row(transparent);
&.disabled{
background-color: transparent;
}
}
}
}
//自定义弹出框组件
.custom-dialog(){
.custom-dialog{
......
......@@ -894,6 +894,146 @@
});
}
.u-process(){
.u-process{
.mask(1050);
.u-process-content{
.transformV_center(left,0);
width: 100%;
.loader{
font-size: 16px;
width: 3.750em;
height: 3.750em;
margin: 0 auto;
position: relative;
&:before{
content: '';
.margin_center(0.500em,0.500em);
border-radius: 50%;
.transform(translateZ(0) scale(0.55));
}
}
.icon{
font-size: 16px;
width: 3.750em;
height: 3.750em;
margin: 0 auto;
position: relative;
&:before{
.transform_center();
.iconfont(4.125em);
}
}
.u-process-text{
margin-top: 20px;
text-align: center;
}
}
.u-process-button{
position: absolute;
bottom: 65px;
left: 0;
width: 100%;
display: table;
table-layout: fixed;
border-collapse: separate;
border-spacing: 25px 0;
li{
// display: table-cell;
// color: @BUTTON-COMPONENT-COLOR;
// font-size: inherit;
// background-color: @BUTTON-COMPONENT-BG;
// border-radius: 5px;
// text-align: center;
// line-height: 1;
// padding: 10px 0;
// .transition(all 0.2s linear);
// background-clip: padding-box;
// //按钮 active
// .tap_row(@BUTTON-COMPONENT-ACTIVE-BG);
// //按钮 不可控
// &.disabled{
// background-color: @BUTTON-COMPONENT-DISABLED-BG;
// }
}
}
//loading
&.u-process-status-0{
.u-process-content{
color: #00ffff;
.loader{
display: block;
&:before{
.animation(commLoading 1.3s linear infinite);
}
}
.icon{
display: none;
}
}
}
//成功 state
&.u-process-status-1{
.u-process-content{
color: #00ffff;
.loader{
display: none;
}
.icon{
display: block;
&:before{
content: '\e800';
}
}
}
}
//失败 state
&.u-process-status-2{
.u-process-content{
color: #fff;
.loader{
display: none;
}
.icon{
display: block;
&:before{
content: '\e646';
}
}
}
}
}
.keyframes(commLoading,{
0%,
100% {
.box-shadow(0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0);
}
12.5% {
.box-shadow(0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em);
}
25% {
.box-shadow(0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em);
}
37.5% {
.box-shadow(0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em);
}
50% {
.box-shadow(0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em);
}
62.5% {
.box-shadow(0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em);
}
75% {
.box-shadow(0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0);
}
87.5% {
.box-shadow(0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em);
}
});
}
.edit-name(){
.edit-name-text{
width: 100%;
......
......@@ -911,7 +911,7 @@ p {
}
}
.u-comm-loading {
.u-process {
position: fixed;
top: 0;
left: 0;
......@@ -921,24 +921,24 @@ p {
background-color: rgba(0, 0, 0, 0.8);
}
.u-comm-loading .u-comm-loading-content {
.u-process .u-process-content {
position: absolute;
top: 50%;
left: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
right: 0;
width: 100%;
}
.u-comm-loading .u-comm-loading-content .loader {
.u-process .u-process-content .loader {
font-size: 0.427rem;
margin: 0 auto;
width: 3.750em;
height: 3.750em;
margin: 0 auto;
position: relative;
}
.u-comm-loading .u-comm-loading-content .loader:before {
.u-process .u-process-content .loader:before {
content: '';
position: absolute;
top: 0;
......@@ -953,15 +953,15 @@ p {
transform: translateZ(0) scale(0.55);
}
.u-comm-loading .u-comm-loading-content .icon {
.u-process .u-process-content .icon {
font-size: 0.427rem;
margin: 0 auto;
width: 3.750em;
height: 3.750em;
margin: 0 auto;
position: relative;
}
.u-comm-loading .u-comm-loading-content .icon:before {
.u-process .u-process-content .icon:before {
position: absolute;
top: 50%;
left: 50%;
......@@ -973,100 +973,71 @@ p {
line-height: 1;
}
.u-comm-loading .u-comm-loading-content .u-comm-loading-text {
font-size: 0.427rem;
.u-process .u-process-content .u-process-text {
margin-top: 0.533rem;
text-align: center;
}
.u-comm-loading .u-comm-loading-button {
.u-process .u-process-button {
position: absolute;
bottom: 1.733rem;
left: 0;
right: 0;
width: 6.4rem;
color: #fff;
font-size: inherit;
background-color: #007aff;
border-radius: 0.533rem;
text-align: center;
line-height: 1;
margin: 0 auto;
padding: 0.267rem 0;
-webkit-transition: all 0.2s linear;
transition: all 0.2s linear;
background-clip: padding-box;
}
.u-comm-loading .u-comm-loading-button:active {
background-color: #0065ff;
}
.u-comm-loading .u-comm-loading-button.disabled {
background-color: #bbb;
width: 100%;
display: table;
table-layout: fixed;
border-collapse: separate;
border-spacing: 0.667rem 0;
}
.u-comm-loading.u-comm-loading-status-0 .u-comm-loading-content {
.u-process.u-process-status-0 .u-process-content {
color: #00ffff;
}
.u-comm-loading.u-comm-loading-status-0 .u-comm-loading-content .loader {
.u-process.u-process-status-0 .u-process-content .loader {
display: block;
}
.u-comm-loading.u-comm-loading-status-0 .u-comm-loading-content .loader:before {
-webkit-animation: commLoading 1.3s infinite linear;
animation: commLoading 1.3s infinite linear;
.u-process.u-process-status-0 .u-process-content .loader:before {
-webkit-animation: commLoading 1.3s linear infinite;
animation: commLoading 1.3s linear infinite;
}
.u-comm-loading.u-comm-loading-status-0 .u-comm-loading-content .icon {
.u-process.u-process-status-0 .u-process-content .icon {
display: none;
}
.u-comm-loading.u-comm-loading-status-0 .u-comm-loading-button {
display: none;
}
.u-comm-loading.u-comm-loading-status-1 .u-comm-loading-content {
.u-process.u-process-status-1 .u-process-content {
color: #00ffff;
}
.u-comm-loading.u-comm-loading-status-1 .u-comm-loading-content .loader {
.u-process.u-process-status-1 .u-process-content .loader {
display: none;
}
.u-comm-loading.u-comm-loading-status-1 .u-comm-loading-content .icon {
.u-process.u-process-status-1 .u-process-content .icon {
display: block;
}
.u-comm-loading.u-comm-loading-status-1 .u-comm-loading-content .icon:before {
.u-process.u-process-status-1 .u-process-content .icon:before {
content: '\e800';
}
.u-comm-loading.u-comm-loading-status-1 .u-comm-loading-button {
display: block;
}
.u-comm-loading.u-comm-loading-status-2 .u-comm-loading-content {
.u-process.u-process-status-2 .u-process-content {
color: #fff;
}
.u-comm-loading.u-comm-loading-status-2 .u-comm-loading-content .loader {
.u-process.u-process-status-2 .u-process-content .loader {
display: none;
}
.u-comm-loading.u-comm-loading-status-2 .u-comm-loading-content .icon {
.u-process.u-process-status-2 .u-process-content .icon {
display: block;
}
.u-comm-loading.u-comm-loading-status-2 .u-comm-loading-content .icon:before {
.u-process.u-process-status-2 .u-process-content .icon:before {
content: '\e646';
}
.u-comm-loading.u-comm-loading-status-2 .u-comm-loading-button {
display: block;
}
@-webkit-keyframes commLoading {
0%, 100% {
-webkit-box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
......@@ -1151,20 +1122,63 @@ p {
}
}
.custom-comm-loading {
background-color: rgba(36, 38, 53, 0.9);
.scanContent {
position: fixed;
top: 1.173rem;
bottom: 0;
left: 0;
width: 100%;
}
.noticeContent {
color: #c8225b;
line-height: 1.5;
text-align: center;
width: 100%;
display: inline-block;
position: absolute;
bottom: -5.333rem;
font-size: 0.32rem;
}
.noticeContent span:first-child {
font-family: iconfont;
font-size: 0.533rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
}
.custom-process-button {
position: absolute;
bottom: inherit;
left: 0;
right: 0;
width: 7.333rem;
border-radius: 0.133rem;
background-color: transparent;
border: 0.027rem solid;
color: #00ffff;
font-size: 0.427rem;
text-align: center;
line-height: 1;
margin: 0 auto;
padding: 0.267rem 0;
-webkit-transition: all 0.2s linear;
transition: all 0.2s linear;
background-clip: padding-box;
}
.custom-comm-loading .u-comm-loading-button {
bottom: 3.573rem;
.custom-process-cancelButton {
bottom: 0;
width: 2.667rem;
color: #00ffff;
font-size: 0.32rem;
background-color: transparent;
padding: 0.48rem 0 0.133rem;
border: none;
}
.custom-comm-loading .u-comm-loading-button:after {
.custom-process-cancelButton:after {
content: '';
position: absolute;
bottom: 0;
......@@ -1175,18 +1189,18 @@ p {
background: linear-gradient(to right, #242635, #00ffff, #242635);
}
.custom-comm-loading .u-comm-loading-button:active {
.custom-process-cancelButton:active {
background-color: transparent;
}
.custom-comm-loading .u-comm-loading-button.disabled {
.custom-process-cancelButton.disabled {
background-color: transparent;
}
.scanContent {
position: fixed;
top: 1.173rem;
bottom: 0;
left: 0;
width: 100%;
.u-process.u-process-status-1 .u-process-content {
top: 5.333rem;
}
.u-process.u-process-status-2 .u-process-content {
top: 5.333rem;
}
\ No newline at end of file
......@@ -43,10 +43,18 @@
</ul>
<u-button :init-param="componentsConfig.connectButton.initParam" v-on:u-button-tap="onConnectButtonTap"></u-button>
</div>
<u-comm-loading ref="ucommloading" :init-param="componentsConfig.ucommloading.initParam" v-on:u-comm-loading-tap="onCommLoadingButtonTap()">
<!--<u-comm-loading ref="ucommloading" :init-param="componentsConfig.ucommloading.initParam" v-on:u-comm-loading-tap="onCommLoadingButtonTap()">
<p class="loader"></p>
<p class="icon"></p>
</u-comm-loading>
</u-comm-loading> -->
<u-process ref="uprocess" :init-param="componentsConfig.processLoading.initParam">
<p class="loader"></p>
<p class="icon"></p>
<p class="noticeContent" v-show = "noticeTipShowFlag">
<span>&#xe637;</span>
<span v-html="$t('wifiAdd.noticeTip')"></span>
</p>
</u-process>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
......
......@@ -25,7 +25,15 @@
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.alarmInfo') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<u-list ref="ulist" :init-param="componentsConfig.alarmInfoList.initParam" v-on:u-list-load="onListLoad()"></u-list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
......
......@@ -25,7 +25,15 @@
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.hijackRecord') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<u-list ref="ulist" :init-param="componentsConfig.hijackRecordList.initParam" v-on:u-list-load="onListLoad()"></u-list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telephone=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="../../lib/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="./notify.css">
<style type="text/css">
[v-cloak]{
display: none;
}
</style>
<script type="text/javascript" src="../../lib/js/start.js"></script>
<script type="text/javascript" src="../../lib/js/p.js"></script>
<script type="text/javascript" src="../../lib/js/UIOT.js"></script>
</head>
<body>
<div id="content" v-cloak>
<android-notify :to-index="onNotifyToIndex"> </android-notify>
</div>
<script type="text/javascript" src="notify.js"></script>
</body>
</html>
\ No newline at end of file
......@@ -25,7 +25,15 @@
<v-touch tag="span" class="header-left icon" v-on:tap="onBackTap">&#xe611;</v-touch>
<p>{{ $t('title.opendoorRecord') }}</p>
</div>
<div class="content">
<div class="notice" v-if="noticeTipShowFlag">
<span>&#xe637;</span>
{{ $t('notice.tip') }}
<v-touch tag="p" v-on:tap="onNotifycationSetting()">{{ $t('notice.button') }}
<span></span></v-touch>
</div>
<u-list ref="ulist" :init-param="componentsConfig.opendoorRecordList.initParam" v-on:u-list-load="onListLoad()"></u-list>
</div>
<u-dialog ref="udialog" :init-param="componentsConfig.dialog.initParam"></u-dialog>
<u-loading ref="uloading" :init-param="componentsConfig.loading.initParam"></u-loading>
</div>
......
......@@ -622,3 +622,48 @@ p {
transform: rotate3d(0, 0, 1, 360deg);
}
}
.notice {
height: 1.653rem;
line-height: 1.653rem;
border-bottom: 2px solid #50515D;
text-align: center;
color: #00ffff;
font-size: 0.32rem;
}
.notice > span {
color: #fc2168;
font-family: iconfont;
font-size: 0.533rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
vertical-align: middle;
margin-right: 0.24rem;
}
.notice p {
display: inline-block;
color: #00ffff;
font-size: 0.32rem;
line-height: 1;
border-bottom: 1px solid;
padding-bottom: 1px;
margin-left: 0.64rem;
}
.notice p span {
margin-left: 0.16rem;
}
.notice p span:before {
content: '\e6c4';
font-family: iconfont;
font-size: 0.32rem;
-webkit-font-smoothing: antialiased;
line-height: 1;
}
.notice ~ .custom-list {
top: 2.827rem;
}
\ No newline at end of file
......@@ -845,6 +845,12 @@ p {
width: 100%;
}
.inviteBind .timeTip {
text-align: center;
font-size: 0.32rem;
padding-left: 0;
}
.unbindState-dialog {
position: fixed;
top: 0;
......
......@@ -37,6 +37,7 @@
<li>{{ $t('inviteBind.cont1') }}</li>
<li>{{ $t('inviteBind.cont2') }}</li>
<li>{{ $t('inviteBind.cont3') }}</li>
<li class="timeTip">{{ $t('inviteBind.tip') }}</li>
</ul>
<u-button :init-param="componentsConfig.qrcodeButton.initParam" v-on:u-button-tap="onQRcodeButtonTap"></u-button>
</div>
......
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