Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
DoorLock
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
朱建香
DoorLock
Commits
8637eb82
Commit
8637eb82
authored
Jan 05, 2018
by
朱建香
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2018/01/05 20:50
1.检验是否开启通知
parent
a5c4372f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
632 additions
and
148 deletions
+632
-148
.project
+9
-0
dev/src/lang/en.json
+29
-9
dev/src/lang/zh.json
+26
-2
dev/src/public/defaultConfig.js
+2
-1
dev/src/public/public.js
+1
-1
dev/src/view/addDevice/v_wifiAdd.js
+110
-42
dev/src/view/device/v_alarmInfo.js
+24
-3
dev/src/view/device/v_hijackRecord.js
+24
-3
dev/src/view/device/v_index.js
+4
-0
dev/src/view/device/v_opendoorRecord.js
+23
-1
dev/src/view/login/v_index.js
+9
-1
web/lib/less/addDevice/addDevice.less
+62
-4
web/lib/less/device/recordList.less
+12
-0
web/lib/less/public/core.less
+28
-0
web/lib/less/public/public.less
+140
-0
web/resources/font/iconfont.ttf
+0
-0
web/resources/lang/en.json
+0
-0
web/resources/lang/zh.json
+0
-0
web/view/addDevice/addDevice.css
+79
-75
web/view/addDevice/wifiAdd.html
+10
-2
web/view/device/alarmInfo.html
+8
-1
web/view/device/hijackRecord.html
+9
-2
web/view/device/opendoorRecord.html
+8
-1
web/view/device/recordList.css
+15
-0
No files found.
.project
View file @
8637eb82
...
...
@@ -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>
dev/src/lang/en.json
View file @
8637eb82
{
"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
dev/src/lang/zh.json
View file @
8637eb82
...
...
@@ -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"
:
{
}
...
...
@@ -337,5 +342,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
dev/src/public/defaultConfig.js
View file @
8637eb82
export
default
{
"url"
:
"http
s://cloud.iot.u-gen.net/
"
"url"
:
"http
://192.168.2.96:20000
"
}
\ No newline at end of file
dev/src/public/public.js
View file @
8637eb82
...
...
@@ -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
();
...
...
dev/src/view/addDevice/v_wifiAdd.js
View file @
8637eb82
...
...
@@ -13,7 +13,7 @@ import {iot, uPublic, uComponents} from '../../public/public.js';
iot
.
ready
(
init
);
function
init
()
{
//通用 input、按钮、dialog、loading组件
uPublic
.
componentsInit
([
'u-text'
,
'u-button'
,
'u-
comm-loading
'
,
'u-dialog'
,
'u-loading'
]);
uPublic
.
componentsInit
([
'u-text'
,
'u-button'
,
'u-
process
'
,
'u-dialog'
,
'u-loading'
]);
uPublic
.
closeSlideBack
();
const
app
=
new
Vue
({
data
:{
...
...
@@ -22,7 +22,8 @@ function init() {
textErrorTip
:
null
,
//配置组件
componentsConfig
:
initComponentsConfig
(),
status
:
0
status
:
0
,
noticeTipShowFlag
:
false
},
mounted
(){
resolve
(
this
);
...
...
@@ -64,9 +65,9 @@ function init() {
connectButtonTap
(
this
);
},
//tap loading button
onCommLoadingButtonTap
(){
commLoadingButtonTap
(
this
);
}
//
onCommLoadingButtonTap(){
//
commLoadingButtonTap(this);
//
}
}
}).
$mount
(
'#app'
);
}
...
...
@@ -99,11 +100,9 @@ function initComponentsConfig() {
class
:
'custom-loading'
}
},
ucomml
oading
:
{
processL
oading
:
{
initParam
:
{
class
:
'custom-comm-loading'
,
buttonText
:
Vue
.
t
(
'btn.confirm'
),
text
:
Vue
.
t
(
'addDevice.loading'
),
class
:
'custom-process'
,
status
:
0
}
}
...
...
@@ -154,7 +153,8 @@ function connectButtonTap(self){
}
else
if
(
self
.
getTextPassword
()
==
null
||
self
.
getTextPassword
().
trim
()
==
''
){
self
.
setTextErrorTip
(
Vue
.
t
(
'wifiAdd.passwordInputTip'
));
}
else
{
uComponents
.
showCommLoading
(
self
);
// uComponents.showCommLoading(self);
uComponents
.
showProcess
(
self
,
0
,
Vue
.
t
(
'addDevice.loading'
));
iot
.
business
.
sds
.
findWifi
({
data
:
{
model
:
config
.
model
,
...
...
@@ -179,7 +179,8 @@ function connectButtonTap(self){
if
(
window
.
iotDebug
)
{
iotDebug
.
upload
(
iot
,
'配网中'
);
}
uComponents
.
changeCommLoadingStatusAndText
(
self
,
0
,
Vue
.
t
(
'wifiAdd.wifiBinding'
));
// uComponents.changeCommLoadingStatusAndText(self, 0, Vue.t('wifiAdd.wifiBinding'));
uComponents
.
showProcess
(
self
,
0
,
Vue
.
t
(
'wifiAdd.wifiBinding'
));
}
else
if
(
response
.
data
==
'provisioned success'
){
if
(
window
.
iotDebug
){
iotDebug
.
push
(
'end: 配网成功'
+
JSON
.
stringify
(
response
));
...
...
@@ -188,7 +189,8 @@ function connectButtonTap(self){
iotDebug
.
upload
(
iot
,
'配网成功'
);
}
//wifi连接成功,停止连接wifi
uComponents
.
changeCommLoadingStatusAndText
(
self
,
0
,
Vue
.
t
(
'wifiAdd.wifiBindSuccess'
));
// uComponents.changeCommLoadingStatusAndText(self, 0, Vue.t('wifiAdd.wifiBindSuccess'));
uComponents
.
showProcess
(
self
,
0
,
Vue
.
t
(
'wifiAdd.wifiBindSuccess'
));
}
},
error
:
(
error
)
=>
{
...
...
@@ -219,7 +221,8 @@ function connectButtonTap(self){
if
(
window
.
iotDebug
)
{
iotDebug
.
upload
(
iot
,
'激活中'
);
}
uComponents
.
changeCommLoadingStatusAndText
(
self
,
0
,
Vue
.
t
(
'wifiAdd.deviceActivating'
));
// uComponents.changeCommLoadingStatusAndText(self, 0, Vue.t('wifiAdd.deviceActivating'));
uComponents
.
showProcess
(
self
,
0
,
Vue
.
t
(
'wifiAdd.deviceActivating'
));
}
else
if
(
response
.
data
==
"joined success"
){
if
(
window
.
iotDebug
){
iotDebug
.
push
(
'end: 激活成功'
+
JSON
.
stringify
(
response
));
...
...
@@ -237,9 +240,10 @@ function connectButtonTap(self){
if
(
window
.
iotDebug
)
{
iotDebug
.
upload
(
iot
,
'激活失败'
);
}
uComponents
.
changeCommLoadingStatusAndText
(
self
,
2
,
Vue
.
t
(
'wifiAdd.deviceActivateFailure'
));
// uComponents.changeCommLoadingStatusAndText(self, 2, Vue.t('wifiAdd.deviceActivateFailure'));
addFailue
(
self
);
self
.
setStatus
(
2
);
uComponents
.
changeCommButtonText
(
self
,
Vue
.
t
(
'addDevice.reBindDevice'
));
//
uComponents.changeCommButtonText(self, Vue.t('addDevice.reBindDevice'));
//停止查找设备
iot
.
business
.
sds
.
stopFindDevices
({
success
:
(
response
)
=>
{},
...
...
@@ -263,9 +267,10 @@ function connectButtonTap(self){
if
(
self
.
getStatus
()
==
0
){
console
.
log
(
"timeout"
);
//连接失败
uComponents
.
changeCommLoadingStatusAndText
(
self
,
2
,
Vue
.
t
(
'wifiAdd.bindTimeout'
));
//
uComponents.changeCommLoadingStatusAndText(self, 2, Vue.t('wifiAdd.bindTimeout'));
self
.
setStatus
(
2
);
uComponents
.
changeCommButtonText
(
self
,
Vue
.
t
(
'addDevice.reBindDevice'
));
// uComponents.changeCommButtonText(self, Vue.t('addDevice.reBindDevice'));
addFailue
(
self
);
//停止查找设备
iot
.
business
.
sds
.
stopFindDevices
({
success
:
(
response
)
=>
{},
...
...
@@ -300,8 +305,9 @@ function unbind(self, deviceId, productId){
if
(
window
.
iotDebug
)
{
iotDebug
.
upload
(
iot
,
'解绑失败'
);
}
uComponents
.
changeCommLoadingStatusAndText
(
self
,
2
,
Vue
.
t
(
'wifiAdd.deviceActivateFailure'
));
uComponents
.
changeCommButtonText
(
self
,
Vue
.
t
(
'addDevice.reBindDevice'
));
// uComponents.changeCommLoadingStatusAndText(self, 2, Vue.t('wifiAdd.deviceActivateFailure'));
// uComponents.changeCommButtonText(self, Vue.t('addDevice.reBindDevice'));
addFailue
(
self
);
self
.
setStatus
(
2
);
},
complete
:
()
=>
{
...
...
@@ -322,9 +328,10 @@ function bind(self, deviceId, productId){
console
.
log
(
response
);
let
data
=
response
.
data
;
if
(
data
.
success
){
uComponents
.
changeCommLoadingStatusAndText
(
self
,
1
,
Vue
.
t
(
'wifiAdd.deviceActivateSuccess'
));
uComponents
.
changeCommButtonText
(
self
,
Vue
.
t
(
'btn.confirm'
));
//
uComponents.changeCommLoadingStatusAndText(self, 1, Vue.t('wifiAdd.deviceActivateSuccess'));
//
uComponents.changeCommButtonText(self, Vue.t('btn.confirm'));
self
.
setStatus
(
1
);
addSuccess
(
self
);
}
if
(
window
.
iotDebug
){
iotDebug
.
push
(
'end: 绑定成功'
+
JSON
.
stringify
(
response
));
...
...
@@ -341,30 +348,91 @@ function bind(self, deviceId, productId){
if
(
window
.
iotDebug
)
{
iotDebug
.
upload
(
iot
,
'绑定失败'
);
}
uComponents
.
changeCommLoadingStatusAndText
(
self
,
2
,
Vue
.
t
(
'wifiAdd.deviceActivateFailure'
));
uComponents
.
changeCommButtonText
(
self
,
Vue
.
t
(
'addDevice.reBindDevice'
));
// uComponents.changeCommLoadingStatusAndText(self, 2, Vue.t('wifiAdd.deviceActivateFailure'));
// uComponents.changeCommButtonText(self, Vue.t('addDevice.reBindDevice'));、
addFailue
(
self
);
self
.
setStatus
(
2
);
},
complete
:
()
=>
{}
});
}
//tap loading button
function
commLoadingButtonTap
(
self
)
{
if
(
self
.
getStatus
()
==
1
){
//绑定成功
uComponents
.
hideCommLoading
(
self
);
iot
.
navigator
.
fire
(
plus
.
webview
.
getWebviewById
(
'device'
),
'returnPage'
,{
needClose
:
true
});
iot
.
navigator
.
openWindow
({
url
:
'../device/index.html'
,
id
:
'device'
});
}
else
if
(
self
.
getStatus
()
==
2
){
//绑定失败
uComponents
.
hideCommLoading
(
self
);
self
.
setStatus
(
0
);
uComponents
.
changeCommLoadingStatusAndText
(
self
,
0
,
Vue
.
t
(
'addDevice.loading'
));
function
addFailue
(
self
){
uComponents
.
showProcess
(
self
,
2
,
Vue
.
t
(
'wifiAdd.deviceActivateFailure'
),
[{
"class"
:
'custom-process-button'
,
'text'
:
Vue
.
t
(
'addDevice.reBindDevice'
),
'callback'
:
()
=>
{
//激活失败
uComponents
.
hideProcess
(
self
);
self
.
setStatus
(
0
);
uComponents
.
changeCommLoadingStatusAndText
(
self
,
0
,
Vue
.
t
(
'addDevice.loading'
));
}
}]);
}
function
addSuccess
(
self
){
if
(
!
iot
.
native
.
isNotifycationOpen
()){
self
.
noticeTipShowFlag
=
true
;
uComponents
.
showProcess
(
self
,
1
,
Vue
.
t
(
'wifiAdd.deviceActivateSuccess'
),
[{
"class"
:
'custom-process-button'
,
'text'
:
Vue
.
t
(
'btn.openNotify'
),
'callback'
:
()
=>
{
//开启推送通知
if
(
plus
.
os
.
name
==
'Android'
){
alert
(
"打开通知页面"
);
// iot.navigator.openWindow({
// url: './notify.html',
// id: 'notify',
// styles: {
// popGesture: 'none'
// }
// });
}
else
{
iot
.
native
.
toNotifycationSetting
();
}
}
},{
"class"
:
'custom-process-button custom-process-cancelButton'
,
'text'
:
Vue
.
t
(
'btn.ignore'
),
'callback'
:
()
=>
{
//暂不开启
uComponents
.
hideProcess
(
self
);
iot
.
navigator
.
fire
(
plus
.
webview
.
getWebviewById
(
'device'
),
'returnPage'
,{
needClose
:
true
});
iot
.
navigator
.
openWindow
({
url
:
'../device/index.html'
,
id
:
'device'
});
}
}]);
}
else
{
uComponents
.
showProcess
(
self
,
1
,
Vue
.
t
(
'wifiAdd.deviceActivateSuccess'
),
[{
"class"
:
'custom-process-button'
,
'text'
:
Vue
.
t
(
'btn.startNow'
),
'callback'
:
()
=>
{
//立即体验
uComponents
.
hideProcess
(
self
);
iot
.
navigator
.
fire
(
plus
.
webview
.
getWebviewById
(
'device'
),
'returnPage'
,{
needClose
:
true
});
iot
.
navigator
.
openWindow
({
url
:
'../device/index.html'
,
id
:
'device'
});
}
}]);
}
}
\ No newline at end of file
}
//tap loading button
//function commLoadingButtonTap(self) {
// if(self.getStatus() == 1){
// //绑定成功
// uComponents.hideCommLoading(self);
// iot.navigator.fire(plus.webview.getWebviewById('device'),'returnPage',{
// needClose: true
// });
// iot.navigator.openWindow({
// url: '../device/index.html',
// id: 'device'
// });
// }else if(self.getStatus() == 2){
// //绑定失败
// uComponents.hideCommLoading(self);
// self.setStatus(0);
// uComponents.changeCommLoadingStatusAndText(self, 0, Vue.t('addDevice.loading'));
// }
//}
\ No newline at end of file
dev/src/view/device/v_alarmInfo.js
View file @
8637eb82
...
...
@@ -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
();
...
...
@@ -157,4 +162,21 @@ mui.back = function(){
//tap 点击加载更多
function
listLoad
(
self
)
{
resolve
(
self
);
}
\ No newline at end of file
}
//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
();
}
}
dev/src/view/device/v_hijackRecord.js
View file @
8637eb82
...
...
@@ -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
();
...
...
@@ -179,4 +184,21 @@ function listLoad(self) {
function
refreshFresh
(
self
){
resolve
(
self
);
}
\ No newline at end of file
}
//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
();
}
}
dev/src/view/device/v_index.js
View file @
8637eb82
...
...
@@ -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
:{
//开门记录
...
...
dev/src/view/device/v_opendoorRecord.js
View file @
8637eb82
...
...
@@ -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,20 @@ function setListData(self, response){
}
else
{
}
}
//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
();
}
}
dev/src/view/login/v_index.js
View file @
8637eb82
...
...
@@ -9,7 +9,6 @@
import
{
iot
,
uPublic
,
uComponents
}
from
'../../public/public.js'
;
iot
.
ready
(
init
);
function
init
()
{
//通用 dialog、loading组件
...
...
@@ -19,6 +18,14 @@ function init() {
if
(
iot
.
navigator
.
getExtras
().
needClose
){
iot
.
navigator
.
closeAllBesidesItself
();
}
var
isSdsBack
=
false
;
console
.
log
(
isSdsBack
);
if
(
!
isSdsBack
){
document
.
addEventListener
(
"resume"
,
()
=>
{
loginButtonTap
(
this
);
},
false
);
}
const
app
=
new
Vue
({
data
:{
//配置组件
...
...
@@ -113,6 +120,7 @@ function loginButtonTap(self){
}
},
error
:
(
error
)
=>
{
isSdsBack
=
true
;
self
.
setShowLoginButtonFlag
(
true
);
console
.
log
(
error
);
if
(
window
.
iotDebug
){
...
...
web/lib/less/addDevice/addDevice.less
View file @
8637eb82
...
...
@@ -183,9 +183,10 @@
.mediaPosition();
.u-comm-loading();
//.u-comm-loading();
.u-process();
.custom-comm-loading();
//
.custom-comm-loading();
//
.scanContent {
...
...
@@ -194,4 +195,62 @@
bottom: 0;
left: 0;
width: 100%;
}
\ No newline at end of file
}
.noticeContent{
color: #FF0000;
line-height: 1.5;
text-align: center;
width: 100%;
display: inline-block;
position: absolute;
bottom: -100%;
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;
}
}
web/lib/less/device/recordList.less
View file @
8637eb82
...
...
@@ -49,6 +49,18 @@
}
}
.notice{
span{
&:first-child{
.iconfont(24px);
}
}
height: 20px;
~.custom-list{
top: 64px;
}
}
@-webkit-keyframes refresh {
0% {
-webkit-transform: rotate3d(0, 0, 1, 0deg);
...
...
web/lib/less/public/core.less
View file @
8637eb82
...
...
@@ -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{
...
...
web/lib/less/public/public.less
View file @
8637eb82
...
...
@@ -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%;
...
...
web/resources/font/iconfont.ttf
View file @
8637eb82
No preview for this file type
web/resources/lang/en.json
View file @
8637eb82
This diff is collapsed.
Click to expand it.
web/resources/lang/zh.json
View file @
8637eb82
This diff is collapsed.
Click to expand it.
web/view/addDevice/addDevice.css
View file @
8637eb82
...
...
@@ -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,62 @@ 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
:
#FF0000
;
line-height
:
1.5
;
text-align
:
center
;
width
:
100%
;
display
:
inline-block
;
position
:
absolute
;
bottom
:
-100%
;
}
.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-b
utton
{
bottom
:
3.573rem
;
.custom-
process-cancelB
utton
{
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-b
utton
:after
{
.custom-
process-cancelB
utton
:after
{
content
:
''
;
position
:
absolute
;
bottom
:
0
;
...
...
@@ -1175,18 +1188,10 @@ p {
background
:
linear-gradient
(
to
right
,
#242635
,
#00ffff
,
#242635
);
}
.custom-
comm-loading
.u-comm-loading-b
utton
:active
{
.custom-
process-cancelB
utton
:active
{
background-color
:
transparent
;
}
.custom-
comm-loading
.u-comm-loading-b
utton.disabled
{
.custom-
process-cancelB
utton.disabled
{
background-color
:
transparent
;
}
.scanContent
{
position
:
fixed
;
top
:
1.173rem
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
}
\ No newline at end of file
web/view/addDevice/wifiAdd.html
View file @
8637eb82
...
...
@@ -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>

</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>
...
...
web/view/device/alarmInfo.html
View file @
8637eb82
...
...
@@ -25,7 +25,14 @@
<v-touch
tag=
"span"
class=
"header-left icon"
v-on:tap=
"onBackTap"
>

</v-touch>
<p>
{{ $t('title.alarmInfo') }}
</p>
</div>
<u-list
ref=
"ulist"
:init-param=
"componentsConfig.alarmInfoList.initParam"
v-on:u-list-load=
"onListLoad()"
></u-list>
<div
class=
"content"
>
<div
class=
"notice"
v-if=
"noticeTipShowFlag"
>
<span>

</span>
{{ $t('notice.tip') }}
<v-touch
tag=
"span"
v-on:tap=
"onNotifycationSetting()"
>
{{ $t('notice.button') }}
</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>
...
...
web/view/device/hijackRecord.html
View file @
8637eb82
...
...
@@ -25,8 +25,15 @@
<v-touch
tag=
"span"
class=
"header-left icon"
v-on:tap=
"onBackTap"
>

</v-touch>
<p>
{{ $t('title.hijackRecord') }}
</p>
</div>
<u-list
ref=
"ulist"
:init-param=
"componentsConfig.hijackRecordList.initParam"
v-on:u-list-load=
"onListLoad()"
></u-list>
<u-dialog
ref=
"udialog"
:init-param=
"componentsConfig.dialog.initParam"
></u-dialog>
<div
class=
"content"
>
<div
class=
"notice"
v-if=
"noticeTipShowFlag"
>
<span>

</span>
{{ $t('notice.tip') }}
<v-touch
tag=
"span"
v-on:tap=
"onNotifycationSetting()"
>
{{ $t('notice.button') }}
</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>
...
...
web/view/device/opendoorRecord.html
View file @
8637eb82
...
...
@@ -25,7 +25,14 @@
<v-touch
tag=
"span"
class=
"header-left icon"
v-on:tap=
"onBackTap"
>

</v-touch>
<p>
{{ $t('title.opendoorRecord') }}
</p>
</div>
<u-list
ref=
"ulist"
:init-param=
"componentsConfig.opendoorRecordList.initParam"
v-on:u-list-load=
"onListLoad()"
></u-list>
<div
class=
"content"
>
<div
class=
"notice"
v-if=
"noticeTipShowFlag"
>
<span>

</span>
{{ $t('notice.tip') }}
<v-touch
tag=
"span"
v-on:tap=
"onNotifycationSetting()"
>
{{ $t('notice.button') }}
</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>
...
...
web/view/device/recordList.css
View file @
8637eb82
...
...
@@ -599,6 +599,21 @@ p {
padding-top
:
2.347rem
;
}
.notice
{
height
:
0.533rem
;
}
.notice
span
:first-child
{
font-family
:
iconfont
;
font-size
:
0.64rem
;
-webkit-font-smoothing
:
antialiased
;
line-height
:
1
;
}
.notice
~
.custom-list
{
top
:
1.707rem
;
}
@-webkit-keyframes
refresh
{
0
%
{
-webkit-transform
:
rotate3d
(
0
,
0
,
1
,
0deg
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment