system-phone 3.1.90 → 3.1.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/dev-server.js
CHANGED
|
@@ -11,6 +11,12 @@ var compiler = webpack(config)
|
|
|
11
11
|
// Define HTTP proxies to your custom API backend
|
|
12
12
|
// https://github.com/chimurai/http-proxy-middleware
|
|
13
13
|
var proxyTable = {
|
|
14
|
+
'/rs/logic/getLogin': {
|
|
15
|
+
pathRewrite: {
|
|
16
|
+
'^/rs/logic/getLogin': '/getLogin'
|
|
17
|
+
},
|
|
18
|
+
target: 'http://127.0.0.1:8077/'
|
|
19
|
+
},
|
|
14
20
|
// '/rs/weixin': {
|
|
15
21
|
// target: 'http://121.36.106.17:8400/'
|
|
16
22
|
// },
|
package/package.json
CHANGED
|
@@ -46,6 +46,48 @@
|
|
|
46
46
|
<footer slot="modal-footer" class="modal-footer">
|
|
47
47
|
</footer>
|
|
48
48
|
</modal>
|
|
49
|
+
<!-- 短信验证码弹窗 -->
|
|
50
|
+
<modal :show.sync="smsModalShow" backdrop="true">
|
|
51
|
+
<div slot="modal-header"></div>
|
|
52
|
+
<article slot="modal-body" class="sms-modal-body">
|
|
53
|
+
<div class="sms-wrap">
|
|
54
|
+
<div class="sms-top">
|
|
55
|
+
<div class="sms-top-icon">
|
|
56
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
57
|
+
<rect x="2" y="4" width="20" height="16" rx="3"/>
|
|
58
|
+
<path d="M7 8h4M13 8h4M7 12h10M7 16h2M13 16h4"/>
|
|
59
|
+
</svg>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="sms-ct">
|
|
63
|
+
<div class="sms-ct-label">短信验证码</div>
|
|
64
|
+
<div class="sms-ct-tip">{{ smsModalMessage }}</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="sms-field">
|
|
67
|
+
<div class="sms-field-hint">请输入6位验证码</div>
|
|
68
|
+
<div class="sms-code-box">
|
|
69
|
+
<input
|
|
70
|
+
class="sms-code-ipt"
|
|
71
|
+
v-model="smsCode"
|
|
72
|
+
maxlength="6"
|
|
73
|
+
@keyup.enter="smsModalConfirm"
|
|
74
|
+
autocomplete="off"
|
|
75
|
+
type="tel"
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="sms-extra" :class="{ 'expiry-warn': smsCountdown <= 30 }">
|
|
79
|
+
<template v-if="smsCountdown > 0">剩余 {{ smsCountdown }}s</template>
|
|
80
|
+
<template v-else>已过期</template>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="sms-actions">
|
|
84
|
+
<button class="sms-act-ok" @click="smsModalConfirm">确定</button>
|
|
85
|
+
<button class="sms-act-no" @click="smsModalCancel">取消</button>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</article>
|
|
89
|
+
<div slot="modal-footer"></div>
|
|
90
|
+
</modal>
|
|
49
91
|
</div>
|
|
50
92
|
</template>
|
|
51
93
|
|
|
@@ -125,7 +167,15 @@ export default {
|
|
|
125
167
|
imageurl: require('../assets/miwen.png'),
|
|
126
168
|
deviceIemi: '无法获取该设备码,请联系管理员',
|
|
127
169
|
loginSafe: false,
|
|
128
|
-
margintop: document.documentElement.clientHeight * 0.1
|
|
170
|
+
margintop: document.documentElement.clientHeight * 0.1,
|
|
171
|
+
// 短信验证码相关
|
|
172
|
+
smsCode: '',
|
|
173
|
+
smsCountdown: 0,
|
|
174
|
+
smsCountdownTimer: null,
|
|
175
|
+
smsModalShow: false,
|
|
176
|
+
smsModalMessage: '',
|
|
177
|
+
// 标记是否处于短信验证流程
|
|
178
|
+
smsLoginFlag: false
|
|
129
179
|
}
|
|
130
180
|
},
|
|
131
181
|
|
|
@@ -154,6 +204,40 @@ export default {
|
|
|
154
204
|
this.modifyPassword = false
|
|
155
205
|
this.password = val
|
|
156
206
|
},
|
|
207
|
+
startSmsCountdown () {
|
|
208
|
+
if (this.smsCountdownTimer) {
|
|
209
|
+
clearInterval(this.smsCountdownTimer)
|
|
210
|
+
}
|
|
211
|
+
this.smsCountdownTimer = setInterval(() => {
|
|
212
|
+
if (this.smsCountdown > 0) {
|
|
213
|
+
this.smsCountdown--
|
|
214
|
+
} else {
|
|
215
|
+
clearInterval(this.smsCountdownTimer)
|
|
216
|
+
}
|
|
217
|
+
}, 1000)
|
|
218
|
+
},
|
|
219
|
+
stopSmsCountdown () {
|
|
220
|
+
if (this.smsCountdownTimer) {
|
|
221
|
+
clearInterval(this.smsCountdownTimer)
|
|
222
|
+
this.smsCountdownTimer = null
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
smsModalConfirm () {
|
|
226
|
+
if (this.smsCode === '') {
|
|
227
|
+
this.$showMessage('请输入短信验证码')
|
|
228
|
+
return
|
|
229
|
+
}
|
|
230
|
+
this.smsLoginFlag = true
|
|
231
|
+
// 调用 confirm 方法完成 Step2
|
|
232
|
+
this.confirm()
|
|
233
|
+
},
|
|
234
|
+
smsModalCancel () {
|
|
235
|
+
this.smsModalShow = false
|
|
236
|
+
this.smsLoginFlag = false
|
|
237
|
+
this.stopSmsCountdown()
|
|
238
|
+
this.smsCode = ''
|
|
239
|
+
this.loaderShow = false
|
|
240
|
+
},
|
|
157
241
|
// 对资源菜单进行排序
|
|
158
242
|
sortFunctions (val) {
|
|
159
243
|
this.sortArr(val)
|
|
@@ -240,9 +324,29 @@ export default {
|
|
|
240
324
|
}else{
|
|
241
325
|
try {
|
|
242
326
|
let data = {name: this.ename, password: this.password}
|
|
327
|
+
// Step2: 如果有 smsLoginFlag 且有待提交的验证码,则一起发送
|
|
328
|
+
if (this.smsLoginFlag && this.smsCode) {
|
|
329
|
+
data.smsCode = this.smsCode
|
|
330
|
+
}
|
|
243
331
|
data = '$' + cryptJS.RSAEncrypt(JSON.stringify(data))
|
|
244
332
|
const getLogin = await Vue.resetpost(`${this.$androidUtil.getProxyUrl()}/rs/logic/getLogin`, data, {resolveMsg: null, rejectMsg: null})
|
|
333
|
+
// 检查是否需要短信验证码(Step1 返回时,smsLoginFlag 为 false)
|
|
334
|
+
if (getLogin.data.needsSmsCode && !this.smsLoginFlag) {
|
|
335
|
+
this.loaderShow = false
|
|
336
|
+
this.smsCountdown = getLogin.data.expireSeconds || 300
|
|
337
|
+
this.smsModalMessage = getLogin.data.states || ('短信验证码已发送至' + getLogin.data.maskedPhone + ',请输入')
|
|
338
|
+
this.startSmsCountdown()
|
|
339
|
+
this.smsLoginFlag = true
|
|
340
|
+
this.smsModalShow = true
|
|
341
|
+
return
|
|
342
|
+
}
|
|
245
343
|
if (getLogin.data.states === '登录成功'){
|
|
344
|
+
// Step2 成功后清理状态
|
|
345
|
+
if (this.smsLoginFlag) {
|
|
346
|
+
this.smsCode = ''
|
|
347
|
+
this.smsLoginFlag = false
|
|
348
|
+
this.smsModalShow = false
|
|
349
|
+
}
|
|
246
350
|
// 初始化 Vue.$login
|
|
247
351
|
Vue.$login = Vue.prototype.$login = {
|
|
248
352
|
jwt: getLogin.data.jwt,
|
|
@@ -377,7 +481,7 @@ export default {
|
|
|
377
481
|
console.log('获取参数结束')
|
|
378
482
|
this.loaderShow = false
|
|
379
483
|
// 弱口令验证
|
|
380
|
-
if (this.weakPassword && !(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])(?!.*(123|321|abc|cba))[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{
|
|
484
|
+
if (this.weakPassword && !(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])(?!.*(123|321|abc|cba))[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,16}$/.test(this.password))) {
|
|
381
485
|
await this.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm'])
|
|
382
486
|
this.modifyPassword = true
|
|
383
487
|
return
|
|
@@ -385,6 +489,9 @@ export default {
|
|
|
385
489
|
this.$goto('nav-bottom')
|
|
386
490
|
},
|
|
387
491
|
},
|
|
492
|
+
beforeDestroy () {
|
|
493
|
+
this.stopSmsCountdown()
|
|
494
|
+
},
|
|
388
495
|
watch: {
|
|
389
496
|
'config'(val) {
|
|
390
497
|
Vue.config = val
|
|
@@ -773,3 +880,147 @@ export default {
|
|
|
773
880
|
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
|
|
774
881
|
}
|
|
775
882
|
</style>
|
|
883
|
+
<style>
|
|
884
|
+
/* 短信验证码弹窗样式 */
|
|
885
|
+
.sms-modal-body {
|
|
886
|
+
padding: 0 !important;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
.sms-wrap {
|
|
890
|
+
background: #fff;
|
|
891
|
+
padding: 32px 28px 28px;
|
|
892
|
+
text-align: center;
|
|
893
|
+
min-width: 280px;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.sms-top {
|
|
897
|
+
margin-bottom: 16px;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
.sms-top-icon {
|
|
901
|
+
width: 44px;
|
|
902
|
+
height: 44px;
|
|
903
|
+
margin: 0 auto;
|
|
904
|
+
background: #EFF6FF;
|
|
905
|
+
border-radius: 12px;
|
|
906
|
+
display: flex;
|
|
907
|
+
align-items: center;
|
|
908
|
+
justify-content: center;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
.sms-top-icon svg {
|
|
912
|
+
width: 22px;
|
|
913
|
+
height: 22px;
|
|
914
|
+
color: #3B82F6;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
.sms-ct {
|
|
918
|
+
margin-bottom: 20px;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.sms-ct-label {
|
|
922
|
+
font-size: 18px;
|
|
923
|
+
font-weight: 600;
|
|
924
|
+
color: #111;
|
|
925
|
+
margin-bottom: 6px;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
.sms-ct-tip {
|
|
929
|
+
font-size: 13px;
|
|
930
|
+
color: #888;
|
|
931
|
+
line-height: 1.5;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
.sms-field {
|
|
935
|
+
margin-bottom: 20px;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.sms-field-hint {
|
|
939
|
+
font-size: 12px;
|
|
940
|
+
color: #aaa;
|
|
941
|
+
margin-bottom: 8px;
|
|
942
|
+
text-align: left;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.sms-code-box {
|
|
946
|
+
position: relative;
|
|
947
|
+
margin-bottom: 6px;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.sms-code-ipt {
|
|
951
|
+
width: 100%;
|
|
952
|
+
height: 46px;
|
|
953
|
+
border: 1px solid #E5E7EB;
|
|
954
|
+
border-radius: 10px;
|
|
955
|
+
padding: 0 14px;
|
|
956
|
+
font-size: 18px;
|
|
957
|
+
color: #111;
|
|
958
|
+
background: #FAFAFA;
|
|
959
|
+
text-align: center;
|
|
960
|
+
letter-spacing: 6px;
|
|
961
|
+
outline: none;
|
|
962
|
+
box-sizing: border-box;
|
|
963
|
+
transition: border-color 0.2s;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.sms-code-ipt:focus {
|
|
967
|
+
border-color: #3B82F6;
|
|
968
|
+
background: #fff;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.sms-code-ipt::placeholder {
|
|
972
|
+
color: #CCC;
|
|
973
|
+
letter-spacing: 1px;
|
|
974
|
+
font-size: 14px;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
.sms-extra {
|
|
978
|
+
font-size: 12px;
|
|
979
|
+
color: #AAA;
|
|
980
|
+
text-align: right;
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
.expiry-warn {
|
|
984
|
+
color: #EF4444;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
.sms-actions {
|
|
988
|
+
display: flex;
|
|
989
|
+
gap: 12px;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
.sms-act-ok {
|
|
993
|
+
flex: 1;
|
|
994
|
+
height: 44px;
|
|
995
|
+
border: none;
|
|
996
|
+
border-radius: 10px;
|
|
997
|
+
background: #3B82F6;
|
|
998
|
+
color: #fff;
|
|
999
|
+
font-size: 16px;
|
|
1000
|
+
font-weight: 500;
|
|
1001
|
+
cursor: pointer;
|
|
1002
|
+
transition: background 0.2s;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
.sms-act-ok:active {
|
|
1006
|
+
background: #2563EB;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
.sms-act-no {
|
|
1010
|
+
flex: 1;
|
|
1011
|
+
height: 44px;
|
|
1012
|
+
border: 1px solid #E5E7EB;
|
|
1013
|
+
border-radius: 10px;
|
|
1014
|
+
background: #FAFAFA;
|
|
1015
|
+
color: #666;
|
|
1016
|
+
font-size: 16px;
|
|
1017
|
+
font-weight: 500;
|
|
1018
|
+
cursor: pointer;
|
|
1019
|
+
transition: background 0.2s;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
.sms-act-no:active {
|
|
1023
|
+
background: #F3F4F6;
|
|
1024
|
+
}
|
|
1025
|
+
</style>
|
|
1026
|
+
|
|
@@ -1,313 +1,313 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="flex " style="background: #f8f8f8">
|
|
3
|
-
<div class="auto bg-white" style="line-height: 32px;padding: 10px">
|
|
4
|
-
<label style="float: left">指令:{{row.f_instruct_title}} </label>
|
|
5
|
-
<div class="auto" style="float: right">
|
|
6
|
-
<!--<button type="button" class="btn btn-default btn-sm" @click="$back">返回</button>-->
|
|
7
|
-
<button type="button" class="btn btn-default btn-sm" @click="refresh">刷新</button>
|
|
8
|
-
<button type="button" class="btn btn-primary btn-sm" @click="cancle">取消</button>
|
|
9
|
-
<button type="button" class="btn btn-primary btn-sm" @click="resend">重送</button>
|
|
10
|
-
</div>
|
|
11
|
-
</div>
|
|
12
|
-
<div class="instruct-state flex-row bg-white" style="margin-top: 5px;height:auto;padding: 10px">
|
|
13
|
-
<div class="instruct-left col-sm-12 auto">
|
|
14
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
15
|
-
<p class="flex-row">
|
|
16
|
-
<span >指令状态:</span>
|
|
17
|
-
<span class="instruct-content" style="color: #499edf;font-size: 16px;font-weight: bold">{{row.f_instruct_state}}</span>
|
|
18
|
-
</p>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
21
|
-
<p class="flex-row">
|
|
22
|
-
<span>执行状态:</span>
|
|
23
|
-
<span class="instruct-content" style="color: #499edf;font-size: 16px;font-weight: bold">{{row.f_receive_state}}</span>
|
|
24
|
-
</p>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
27
|
-
<p class="flex-row">
|
|
28
|
-
<span>指令编号:</span>
|
|
29
|
-
<span class="instruct-content">{{row.id}}</span>
|
|
30
|
-
</p>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
33
|
-
|
|
34
|
-
<p class="flex-row">
|
|
35
|
-
<span>表编号:</span>
|
|
36
|
-
<span class="instruct-content">{{row.f_user_id}}</span>
|
|
37
|
-
</p>
|
|
38
|
-
</div>
|
|
39
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
40
|
-
<p class="flex-row">
|
|
41
|
-
<span>表号:</span>
|
|
42
|
-
<span class="instruct-content">{{row.f_meternumber}}</span>
|
|
43
|
-
</p>
|
|
44
|
-
</div>
|
|
45
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
46
|
-
<p class="flex-row">
|
|
47
|
-
<span>操作人员:</span>
|
|
48
|
-
<span class="instruct-content">{{row.f_inputtor}}</span>
|
|
49
|
-
</p>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
52
|
-
<p class="flex-row">
|
|
53
|
-
<span>指令说明:</span>
|
|
54
|
-
<span class="instruct-content">{{row.f_instruct_state}}</span>
|
|
55
|
-
</p>
|
|
56
|
-
</div>
|
|
57
|
-
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
58
|
-
<p class="flex-row">
|
|
59
|
-
<span>表厂别名:</span>
|
|
60
|
-
<span class="instruct-content">{{row.f_alias}}</span>
|
|
61
|
-
</p>
|
|
62
|
-
</div>
|
|
63
|
-
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
64
|
-
<p class="flex-row">
|
|
65
|
-
<span>生成时间:</span>
|
|
66
|
-
<span class="instruct-content" style="flex:3 !important;">{{row.f_instruct_date}}</span>
|
|
67
|
-
</p>
|
|
68
|
-
</div>
|
|
69
|
-
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
70
|
-
<p class="flex-row">
|
|
71
|
-
<span>最后发送时间:</span>
|
|
72
|
-
<span class="instruct-content" style="flex:3 !important;">{{row.f_send_date}}</span>
|
|
73
|
-
</p>
|
|
74
|
-
</div>
|
|
75
|
-
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
76
|
-
<p class="flex-row">
|
|
77
|
-
<span>最后响应时间:</span>
|
|
78
|
-
<span class="instruct-content" style="flex:3 !important;">{{row.f_callback_date}}</span>
|
|
79
|
-
</p>
|
|
80
|
-
</div>
|
|
81
|
-
</div>
|
|
82
|
-
|
|
83
|
-
</div>
|
|
84
|
-
<div class="auto bg-white" style="margin-top: 5px;padding: 10px">
|
|
85
|
-
<div class="title auto">
|
|
86
|
-
<span>指令状态</span>
|
|
87
|
-
</div>
|
|
88
|
-
<div class="flex-row" style="font-size: 10px;padding: 10px">
|
|
89
|
-
<timeline>
|
|
90
|
-
<timeline-item color="#499edf">
|
|
91
|
-
<p>待发送</p>
|
|
92
|
-
<p>指令已就绪</p>
|
|
93
|
-
<p>{{row.f_instruct_date}}</p>
|
|
94
|
-
</timeline-item>
|
|
95
|
-
<timeline-item :color="row.f_instruct_state==='已发送'?'#499edf':''" >
|
|
96
|
-
<p>已发送</p>
|
|
97
|
-
<p>已发送,等待响应结果</p>
|
|
98
|
-
<p>{{row.f_send_date}}</p>
|
|
99
|
-
</timeline-item>
|
|
100
|
-
<timeline-item color="red" v-if="row.f_instruct_state==='执行失败'">
|
|
101
|
-
<p>执行失败</p>
|
|
102
|
-
<p>失败,请查看响应结果</p>
|
|
103
|
-
<p>{{row.f_callback_date}}</p>
|
|
104
|
-
</timeline-item>
|
|
105
|
-
<timeline-item :color="row.f_instruct_state==='执行成功'?'#499edf':''" v-if="row.f_instruct_state!=='执行失败'">
|
|
106
|
-
<p>执行成功</p>
|
|
107
|
-
<p>指令已执行成功</p>
|
|
108
|
-
<p>{{row.f_callback_date}}</p>
|
|
109
|
-
</timeline-item>
|
|
110
|
-
</timeline>
|
|
111
|
-
<!--<div class="step">-->
|
|
112
|
-
<!--<div class="step-icon">-->
|
|
113
|
-
<!--<img src="../../assets/对号.png" class="send-line" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
114
|
-
<!--</div>-->
|
|
115
|
-
<!--<p>待发送</p>-->
|
|
116
|
-
<!--<p>指令已就绪</p>-->
|
|
117
|
-
<!--<p>{{row.f_instruct_date}}</p>-->
|
|
118
|
-
|
|
119
|
-
<!--</div>-->
|
|
120
|
-
<!--<div class="step" >-->
|
|
121
|
-
<!--<div class="step-icon">-->
|
|
122
|
-
<!--<img src="../../assets/对号.png" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
123
|
-
<!--</div>-->
|
|
124
|
-
<!--<p class="flex-row">待发送</p>-->
|
|
125
|
-
<!--<p class="flex-row">指令已发送</p>-->
|
|
126
|
-
<!--<p>{{row.f_send_date}}</p>-->
|
|
127
|
-
<!--</div>-->
|
|
128
|
-
|
|
129
|
-
<!--<div class="step" >-->
|
|
130
|
-
<!--<div style="height: auto">-->
|
|
131
|
-
<!--<img src="../../assets/对号.png" class="" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
132
|
-
<!--</div>-->
|
|
133
|
-
<!--<p class="flex-row">待发送</p>-->
|
|
134
|
-
<!--<p>指令已执行成功</p>-->
|
|
135
|
-
<!--<p>{{row.f_callback_date}}</p>-->
|
|
136
|
-
<!--</div>-->
|
|
137
|
-
</div>
|
|
138
|
-
|
|
139
|
-
</div>
|
|
140
|
-
<div class="row bg-white" style="margin-top: 5px;">
|
|
141
|
-
<div class="content-head" style="background: #fafafa;height: 2em;">
|
|
142
|
-
<p style="padding-left: 10px;line-height: 2em">指令内容</p>
|
|
143
|
-
</div>
|
|
144
|
-
<div style="height: auto;padding: 10px" >
|
|
145
|
-
<p>{</p>
|
|
146
|
-
<p v-for="item in content">
|
|
147
|
-
<span>{{item}}</span>
|
|
148
|
-
<span v-if="$index<content.length-1">,</span>
|
|
149
|
-
</p>
|
|
150
|
-
<p>}</p>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
</div>
|
|
154
|
-
</template>
|
|
155
|
-
<script>
|
|
156
|
-
import {HttpResetClass} from 'vue-client'
|
|
157
|
-
export default {
|
|
158
|
-
title: '指令信息',
|
|
159
|
-
data () {
|
|
160
|
-
return {
|
|
161
|
-
content:[],
|
|
162
|
-
msg: '',
|
|
163
|
-
show: false
|
|
164
|
-
}
|
|
165
|
-
},
|
|
166
|
-
props:['row'],
|
|
167
|
-
methods:{
|
|
168
|
-
refresh(){
|
|
169
|
-
let data = {
|
|
170
|
-
items: '*',
|
|
171
|
-
tablename: 't_instruct',
|
|
172
|
-
orderitem: 'id desc',
|
|
173
|
-
condition: ` id = '${this.row.id}'`
|
|
174
|
-
}
|
|
175
|
-
this.$resetpost(`${this.$androidUtil.getProxyUrl()}/rs/sql/iot_singleTable_OrderBy`, {data: data}).then((row) => {
|
|
176
|
-
// console.log('查询返回'+JSON.stringify(row))
|
|
177
|
-
this.row = row.data[0]
|
|
178
|
-
}).catch((e) => {
|
|
179
|
-
// console.log('正在维护!')
|
|
180
|
-
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
181
|
-
})
|
|
182
|
-
},
|
|
183
|
-
cancle(){
|
|
184
|
-
this.$showMessage(`您确认要取消指令吗?`, ['confirm', 'cancel']).then(async (res) => {
|
|
185
|
-
if (res === 'confirm') {
|
|
186
|
-
let http = new HttpResetClass()
|
|
187
|
-
let condition = `id = '${this.row.id}'`
|
|
188
|
-
// console.log('修改条件===' + JSON.stringify(condition))
|
|
189
|
-
http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/cancelSendInstruct`, {data: {condition: condition}}).then((row) => {
|
|
190
|
-
this.$showMessage('取消指令操作成功!')
|
|
191
|
-
this.refresh()
|
|
192
|
-
// console.log('修改返回' + JSON.stringify(row))
|
|
193
|
-
// this.$showMessage('操作成功!将会在一段时间内重新生成开户指令!')
|
|
194
|
-
}).catch((e) => {
|
|
195
|
-
this.$showMessage('操作失败!请稍后重试!')
|
|
196
|
-
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
197
|
-
})
|
|
198
|
-
}
|
|
199
|
-
})
|
|
200
|
-
},
|
|
201
|
-
resend(){
|
|
202
|
-
this.$showMessage(`您确认要重新发送指令?`, ['confirm', 'cancel']).then(async (res) => {
|
|
203
|
-
if (res === 'confirm') {
|
|
204
|
-
let http = new HttpResetClass()
|
|
205
|
-
let condition = `id = '${this.row.id}'`
|
|
206
|
-
// console.log('修改条件===' + JSON.stringify(condition))
|
|
207
|
-
http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/againSendInstruct`, {data: {condition: condition}}).then((row) => {
|
|
208
|
-
// console.log('修改返回' + JSON.stringify(row))
|
|
209
|
-
this.refresh()
|
|
210
|
-
this.$showMessage('操作成功!将会在一段时间内重新发送指令!')
|
|
211
|
-
}).catch((e) => {
|
|
212
|
-
this.$showMessage('操作失败!请稍后重试!')
|
|
213
|
-
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
214
|
-
})
|
|
215
|
-
}
|
|
216
|
-
})
|
|
217
|
-
},
|
|
218
|
-
getInitData(){
|
|
219
|
-
let data = JSON.parse(this.row.f_instruct_content)
|
|
220
|
-
this.content = []
|
|
221
|
-
for(let key in data){
|
|
222
|
-
let param = key+':'+data[key]
|
|
223
|
-
this.content.push(param)
|
|
224
|
-
}
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
watch:{
|
|
228
|
-
'row'(val){
|
|
229
|
-
if(val){
|
|
230
|
-
this.getInitData()
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
},
|
|
234
|
-
ready () {
|
|
235
|
-
this.getInitData()
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
</script>
|
|
239
|
-
<style media="screen" scoped>
|
|
240
|
-
div::-webkit-scrollbar {
|
|
241
|
-
width: 0 !important;
|
|
242
|
-
height: 0 !important;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
div {
|
|
246
|
-
-ms-overflow-style: none;
|
|
247
|
-
overflow: -moz-scrollbars-none;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
.font-head{
|
|
251
|
-
font-size: 14px;
|
|
252
|
-
font-weight: bold;
|
|
253
|
-
color: #333;
|
|
254
|
-
}
|
|
255
|
-
.instruct-content{
|
|
256
|
-
flex:1.5 !important;
|
|
257
|
-
}
|
|
258
|
-
.font-content{
|
|
259
|
-
font-size: 12px;
|
|
260
|
-
font-weight: normal;
|
|
261
|
-
color: #666666;
|
|
262
|
-
}
|
|
263
|
-
.meterinfo{
|
|
264
|
-
border:1px solid #eeeeee;
|
|
265
|
-
/*border-right: 2px solid #eeeeee;*/
|
|
266
|
-
}
|
|
267
|
-
.instruct-right div{
|
|
268
|
-
height: auto;
|
|
269
|
-
}
|
|
270
|
-
.instruct-state{
|
|
271
|
-
font-size: 14px;
|
|
272
|
-
}
|
|
273
|
-
.instruct{
|
|
274
|
-
font-size: 10px;
|
|
275
|
-
}
|
|
276
|
-
.step{
|
|
277
|
-
flex:1
|
|
278
|
-
}
|
|
279
|
-
.step-icon{
|
|
280
|
-
height: auto;
|
|
281
|
-
}
|
|
282
|
-
@media screen and (max-width: 1920px){
|
|
283
|
-
.step-icon:after{
|
|
284
|
-
content: "";
|
|
285
|
-
width: 30%;
|
|
286
|
-
height: 2px;
|
|
287
|
-
margin-top: 16px;
|
|
288
|
-
background-color: #6eb0e3;
|
|
289
|
-
position: absolute;
|
|
290
|
-
/*top: 10px;*/
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
@media screen and (max-width: 768px){
|
|
295
|
-
.step-icon:after{
|
|
296
|
-
content: "";
|
|
297
|
-
width: 22%;
|
|
298
|
-
height: 2px;
|
|
299
|
-
margin-top: 16px;
|
|
300
|
-
background-color: #6eb0e3;
|
|
301
|
-
position: absolute;
|
|
302
|
-
/*top: 10px;*/
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
.step p{
|
|
308
|
-
margin-bottom: 5px !important;
|
|
309
|
-
}
|
|
310
|
-
p span{
|
|
311
|
-
flex:1
|
|
312
|
-
}
|
|
313
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex " style="background: #f8f8f8">
|
|
3
|
+
<div class="auto bg-white" style="line-height: 32px;padding: 10px">
|
|
4
|
+
<label style="float: left">指令:{{row.f_instruct_title}} </label>
|
|
5
|
+
<div class="auto" style="float: right">
|
|
6
|
+
<!--<button type="button" class="btn btn-default btn-sm" @click="$back">返回</button>-->
|
|
7
|
+
<button type="button" class="btn btn-default btn-sm" @click="refresh">刷新</button>
|
|
8
|
+
<button type="button" class="btn btn-primary btn-sm" @click="cancle">取消</button>
|
|
9
|
+
<button type="button" class="btn btn-primary btn-sm" @click="resend">重送</button>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="instruct-state flex-row bg-white" style="margin-top: 5px;height:auto;padding: 10px">
|
|
13
|
+
<div class="instruct-left col-sm-12 auto">
|
|
14
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
15
|
+
<p class="flex-row">
|
|
16
|
+
<span >指令状态:</span>
|
|
17
|
+
<span class="instruct-content" style="color: #499edf;font-size: 16px;font-weight: bold">{{row.f_instruct_state}}</span>
|
|
18
|
+
</p>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
21
|
+
<p class="flex-row">
|
|
22
|
+
<span>执行状态:</span>
|
|
23
|
+
<span class="instruct-content" style="color: #499edf;font-size: 16px;font-weight: bold">{{row.f_receive_state}}</span>
|
|
24
|
+
</p>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
27
|
+
<p class="flex-row">
|
|
28
|
+
<span>指令编号:</span>
|
|
29
|
+
<span class="instruct-content">{{row.id}}</span>
|
|
30
|
+
</p>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
33
|
+
|
|
34
|
+
<p class="flex-row">
|
|
35
|
+
<span>表编号:</span>
|
|
36
|
+
<span class="instruct-content">{{row.f_user_id}}</span>
|
|
37
|
+
</p>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
40
|
+
<p class="flex-row">
|
|
41
|
+
<span>表号:</span>
|
|
42
|
+
<span class="instruct-content">{{row.f_meternumber}}</span>
|
|
43
|
+
</p>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
46
|
+
<p class="flex-row">
|
|
47
|
+
<span>操作人员:</span>
|
|
48
|
+
<span class="instruct-content">{{row.f_inputtor}}</span>
|
|
49
|
+
</p>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
52
|
+
<p class="flex-row">
|
|
53
|
+
<span>指令说明:</span>
|
|
54
|
+
<span class="instruct-content">{{row.f_instruct_state}}</span>
|
|
55
|
+
</p>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="col-sm-6 col-md-6 col-xs-6 auto">
|
|
58
|
+
<p class="flex-row">
|
|
59
|
+
<span>表厂别名:</span>
|
|
60
|
+
<span class="instruct-content">{{row.f_alias}}</span>
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
64
|
+
<p class="flex-row">
|
|
65
|
+
<span>生成时间:</span>
|
|
66
|
+
<span class="instruct-content" style="flex:3 !important;">{{row.f_instruct_date}}</span>
|
|
67
|
+
</p>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
70
|
+
<p class="flex-row">
|
|
71
|
+
<span>最后发送时间:</span>
|
|
72
|
+
<span class="instruct-content" style="flex:3 !important;">{{row.f_send_date}}</span>
|
|
73
|
+
</p>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="col-sm-6 col-md-6 col-xs-12 auto">
|
|
76
|
+
<p class="flex-row">
|
|
77
|
+
<span>最后响应时间:</span>
|
|
78
|
+
<span class="instruct-content" style="flex:3 !important;">{{row.f_callback_date}}</span>
|
|
79
|
+
</p>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
</div>
|
|
84
|
+
<div class="auto bg-white" style="margin-top: 5px;padding: 10px">
|
|
85
|
+
<div class="title auto">
|
|
86
|
+
<span>指令状态</span>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="flex-row" style="font-size: 10px;padding: 10px">
|
|
89
|
+
<timeline>
|
|
90
|
+
<timeline-item color="#499edf">
|
|
91
|
+
<p>待发送</p>
|
|
92
|
+
<p>指令已就绪</p>
|
|
93
|
+
<p>{{row.f_instruct_date}}</p>
|
|
94
|
+
</timeline-item>
|
|
95
|
+
<timeline-item :color="row.f_instruct_state==='已发送'?'#499edf':''" >
|
|
96
|
+
<p>已发送</p>
|
|
97
|
+
<p>已发送,等待响应结果</p>
|
|
98
|
+
<p>{{row.f_send_date}}</p>
|
|
99
|
+
</timeline-item>
|
|
100
|
+
<timeline-item color="red" v-if="row.f_instruct_state==='执行失败'">
|
|
101
|
+
<p>执行失败</p>
|
|
102
|
+
<p>失败,请查看响应结果</p>
|
|
103
|
+
<p>{{row.f_callback_date}}</p>
|
|
104
|
+
</timeline-item>
|
|
105
|
+
<timeline-item :color="row.f_instruct_state==='执行成功'?'#499edf':''" v-if="row.f_instruct_state!=='执行失败'">
|
|
106
|
+
<p>执行成功</p>
|
|
107
|
+
<p>指令已执行成功</p>
|
|
108
|
+
<p>{{row.f_callback_date}}</p>
|
|
109
|
+
</timeline-item>
|
|
110
|
+
</timeline>
|
|
111
|
+
<!--<div class="step">-->
|
|
112
|
+
<!--<div class="step-icon">-->
|
|
113
|
+
<!--<img src="../../assets/对号.png" class="send-line" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
114
|
+
<!--</div>-->
|
|
115
|
+
<!--<p>待发送</p>-->
|
|
116
|
+
<!--<p>指令已就绪</p>-->
|
|
117
|
+
<!--<p>{{row.f_instruct_date}}</p>-->
|
|
118
|
+
|
|
119
|
+
<!--</div>-->
|
|
120
|
+
<!--<div class="step" >-->
|
|
121
|
+
<!--<div class="step-icon">-->
|
|
122
|
+
<!--<img src="../../assets/对号.png" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
123
|
+
<!--</div>-->
|
|
124
|
+
<!--<p class="flex-row">待发送</p>-->
|
|
125
|
+
<!--<p class="flex-row">指令已发送</p>-->
|
|
126
|
+
<!--<p>{{row.f_send_date}}</p>-->
|
|
127
|
+
<!--</div>-->
|
|
128
|
+
|
|
129
|
+
<!--<div class="step" >-->
|
|
130
|
+
<!--<div style="height: auto">-->
|
|
131
|
+
<!--<img src="../../assets/对号.png" class="" style="height: 32px;width:32px;margin-bottom: 5px;padding-right: 5px" alt="" >-->
|
|
132
|
+
<!--</div>-->
|
|
133
|
+
<!--<p class="flex-row">待发送</p>-->
|
|
134
|
+
<!--<p>指令已执行成功</p>-->
|
|
135
|
+
<!--<p>{{row.f_callback_date}}</p>-->
|
|
136
|
+
<!--</div>-->
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
</div>
|
|
140
|
+
<div class="row bg-white" style="margin-top: 5px;">
|
|
141
|
+
<div class="content-head" style="background: #fafafa;height: 2em;">
|
|
142
|
+
<p style="padding-left: 10px;line-height: 2em">指令内容</p>
|
|
143
|
+
</div>
|
|
144
|
+
<div style="height: auto;padding: 10px" >
|
|
145
|
+
<p>{</p>
|
|
146
|
+
<p v-for="item in content">
|
|
147
|
+
<span>{{item}}</span>
|
|
148
|
+
<span v-if="$index<content.length-1">,</span>
|
|
149
|
+
</p>
|
|
150
|
+
<p>}</p>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
</template>
|
|
155
|
+
<script>
|
|
156
|
+
import {HttpResetClass} from 'vue-client'
|
|
157
|
+
export default {
|
|
158
|
+
title: '指令信息',
|
|
159
|
+
data () {
|
|
160
|
+
return {
|
|
161
|
+
content:[],
|
|
162
|
+
msg: '',
|
|
163
|
+
show: false
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
props:['row'],
|
|
167
|
+
methods:{
|
|
168
|
+
refresh(){
|
|
169
|
+
let data = {
|
|
170
|
+
items: '*',
|
|
171
|
+
tablename: 't_instruct',
|
|
172
|
+
orderitem: 'id desc',
|
|
173
|
+
condition: ` id = '${this.row.id}'`
|
|
174
|
+
}
|
|
175
|
+
this.$resetpost(`${this.$androidUtil.getProxyUrl()}/rs/sql/iot_singleTable_OrderBy`, {data: data}).then((row) => {
|
|
176
|
+
// console.log('查询返回'+JSON.stringify(row))
|
|
177
|
+
this.row = row.data[0]
|
|
178
|
+
}).catch((e) => {
|
|
179
|
+
// console.log('正在维护!')
|
|
180
|
+
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
181
|
+
})
|
|
182
|
+
},
|
|
183
|
+
cancle(){
|
|
184
|
+
this.$showMessage(`您确认要取消指令吗?`, ['confirm', 'cancel']).then(async (res) => {
|
|
185
|
+
if (res === 'confirm') {
|
|
186
|
+
let http = new HttpResetClass()
|
|
187
|
+
let condition = `id = '${this.row.id}'`
|
|
188
|
+
// console.log('修改条件===' + JSON.stringify(condition))
|
|
189
|
+
http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/cancelSendInstruct`, {data: {condition: condition}}).then((row) => {
|
|
190
|
+
this.$showMessage('取消指令操作成功!')
|
|
191
|
+
this.refresh()
|
|
192
|
+
// console.log('修改返回' + JSON.stringify(row))
|
|
193
|
+
// this.$showMessage('操作成功!将会在一段时间内重新生成开户指令!')
|
|
194
|
+
}).catch((e) => {
|
|
195
|
+
this.$showMessage('操作失败!请稍后重试!')
|
|
196
|
+
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
197
|
+
})
|
|
198
|
+
}
|
|
199
|
+
})
|
|
200
|
+
},
|
|
201
|
+
resend(){
|
|
202
|
+
this.$showMessage(`您确认要重新发送指令?`, ['confirm', 'cancel']).then(async (res) => {
|
|
203
|
+
if (res === 'confirm') {
|
|
204
|
+
let http = new HttpResetClass()
|
|
205
|
+
let condition = `id = '${this.row.id}'`
|
|
206
|
+
// console.log('修改条件===' + JSON.stringify(condition))
|
|
207
|
+
http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/logic/againSendInstruct`, {data: {condition: condition}}).then((row) => {
|
|
208
|
+
// console.log('修改返回' + JSON.stringify(row))
|
|
209
|
+
this.refresh()
|
|
210
|
+
this.$showMessage('操作成功!将会在一段时间内重新发送指令!')
|
|
211
|
+
}).catch((e) => {
|
|
212
|
+
this.$showMessage('操作失败!请稍后重试!')
|
|
213
|
+
// console.log('错误信息+++++++'+JSON.stringify(e))
|
|
214
|
+
})
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
},
|
|
218
|
+
getInitData(){
|
|
219
|
+
let data = JSON.parse(this.row.f_instruct_content)
|
|
220
|
+
this.content = []
|
|
221
|
+
for(let key in data){
|
|
222
|
+
let param = key+':'+data[key]
|
|
223
|
+
this.content.push(param)
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
watch:{
|
|
228
|
+
'row'(val){
|
|
229
|
+
if(val){
|
|
230
|
+
this.getInitData()
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
ready () {
|
|
235
|
+
this.getInitData()
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
</script>
|
|
239
|
+
<style media="screen" scoped>
|
|
240
|
+
div::-webkit-scrollbar {
|
|
241
|
+
width: 0 !important;
|
|
242
|
+
height: 0 !important;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
div {
|
|
246
|
+
-ms-overflow-style: none;
|
|
247
|
+
overflow: -moz-scrollbars-none;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.font-head{
|
|
251
|
+
font-size: 14px;
|
|
252
|
+
font-weight: bold;
|
|
253
|
+
color: #333;
|
|
254
|
+
}
|
|
255
|
+
.instruct-content{
|
|
256
|
+
flex:1.5 !important;
|
|
257
|
+
}
|
|
258
|
+
.font-content{
|
|
259
|
+
font-size: 12px;
|
|
260
|
+
font-weight: normal;
|
|
261
|
+
color: #666666;
|
|
262
|
+
}
|
|
263
|
+
.meterinfo{
|
|
264
|
+
border:1px solid #eeeeee;
|
|
265
|
+
/*border-right: 2px solid #eeeeee;*/
|
|
266
|
+
}
|
|
267
|
+
.instruct-right div{
|
|
268
|
+
height: auto;
|
|
269
|
+
}
|
|
270
|
+
.instruct-state{
|
|
271
|
+
font-size: 14px;
|
|
272
|
+
}
|
|
273
|
+
.instruct{
|
|
274
|
+
font-size: 10px;
|
|
275
|
+
}
|
|
276
|
+
.step{
|
|
277
|
+
flex:1
|
|
278
|
+
}
|
|
279
|
+
.step-icon{
|
|
280
|
+
height: auto;
|
|
281
|
+
}
|
|
282
|
+
@media screen and (max-width: 1920px){
|
|
283
|
+
.step-icon:after{
|
|
284
|
+
content: "";
|
|
285
|
+
width: 30%;
|
|
286
|
+
height: 2px;
|
|
287
|
+
margin-top: 16px;
|
|
288
|
+
background-color: #6eb0e3;
|
|
289
|
+
position: absolute;
|
|
290
|
+
/*top: 10px;*/
|
|
291
|
+
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
@media screen and (max-width: 768px){
|
|
295
|
+
.step-icon:after{
|
|
296
|
+
content: "";
|
|
297
|
+
width: 22%;
|
|
298
|
+
height: 2px;
|
|
299
|
+
margin-top: 16px;
|
|
300
|
+
background-color: #6eb0e3;
|
|
301
|
+
position: absolute;
|
|
302
|
+
/*top: 10px;*/
|
|
303
|
+
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.step p{
|
|
308
|
+
margin-bottom: 5px !important;
|
|
309
|
+
}
|
|
310
|
+
p span{
|
|
311
|
+
flex:1
|
|
312
|
+
}
|
|
313
|
+
</style>
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="flex">
|
|
3
|
-
<div class="cols-sm-12 col-md-12 col-xs-12 " >
|
|
4
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
5
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
6
|
-
<img src="../../assets/pinpai.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
7
|
-
<span class="font-content">表具品牌</span>
|
|
8
|
-
<span class="font-head">{{row.f_meter_brand}}</span>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
</div>
|
|
12
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
13
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
14
|
-
<img src="../../assets/leixing.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
15
|
-
<span class="font-content">表具类型</span>
|
|
16
|
-
<span class="font-head">{{row.f_meter_type}}</span>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
20
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
21
|
-
<img src="../../assets/biaohao.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
22
|
-
<span class="font-content">表号</span>
|
|
23
|
-
<span class="font-head">{{row.f_meternumber}}</span>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
27
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
28
|
-
<img src="../../assets/guige.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
29
|
-
<span class="font-content">表具规格</span>
|
|
30
|
-
<span class="font-head">{{row.f_meter_style}}</span>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
34
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
35
|
-
<img src="../../assets/xinghao.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
36
|
-
<span class="font-content">表具型号</span>
|
|
37
|
-
<span class="font-head">{{row.f_type}}</span>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
41
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
42
|
-
<img src="../../assets/bieming.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
43
|
-
<span class="font-content">表具别名</span>
|
|
44
|
-
<span class="font-head">{{row.f_alias}}</span>
|
|
45
|
-
</div>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
48
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
49
|
-
<img src="../../assets/yue.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
50
|
-
<span class="font-content">剩余金额</span>
|
|
51
|
-
<span class="font-head">{{row.f_balance_amount}}</span>
|
|
52
|
-
</div>
|
|
53
|
-
</div>
|
|
54
|
-
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
55
|
-
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
56
|
-
<img src="../../assets/qiliang.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
57
|
-
<span class="font-content">累计用气量</span>
|
|
58
|
-
<span class="font-head">{{row.f_balance_gas}}</span>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
</div>
|
|
63
|
-
</template>
|
|
64
|
-
|
|
65
|
-
<script>
|
|
66
|
-
export default {
|
|
67
|
-
title: '基础信息',
|
|
68
|
-
data () {
|
|
69
|
-
return {
|
|
70
|
-
msg: '',
|
|
71
|
-
show: false
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
props:['row'],
|
|
75
|
-
ready () {
|
|
76
|
-
// this.$appdata.load().then(() => {
|
|
77
|
-
// this.$emit('ready')
|
|
78
|
-
// })
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
</script>
|
|
82
|
-
<style media="screen" scoped>
|
|
83
|
-
.font-head{
|
|
84
|
-
font-size: 14px;
|
|
85
|
-
font-weight: bold;
|
|
86
|
-
color: #333;
|
|
87
|
-
}
|
|
88
|
-
.font-content{
|
|
89
|
-
font-size: 12px;
|
|
90
|
-
font-weight: normal;
|
|
91
|
-
color: #666666;
|
|
92
|
-
}
|
|
93
|
-
.meterinfo{
|
|
94
|
-
border:1px solid #eeeeee;
|
|
95
|
-
/*border-right: 2px solid #eeeeee;*/
|
|
96
|
-
}
|
|
97
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="flex">
|
|
3
|
+
<div class="cols-sm-12 col-md-12 col-xs-12 " >
|
|
4
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
5
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
6
|
+
<img src="../../assets/pinpai.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
7
|
+
<span class="font-content">表具品牌</span>
|
|
8
|
+
<span class="font-head">{{row.f_meter_brand}}</span>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
13
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
14
|
+
<img src="../../assets/leixing.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
15
|
+
<span class="font-content">表具类型</span>
|
|
16
|
+
<span class="font-head">{{row.f_meter_type}}</span>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
20
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
21
|
+
<img src="../../assets/biaohao.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
22
|
+
<span class="font-content">表号</span>
|
|
23
|
+
<span class="font-head">{{row.f_meternumber}}</span>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
27
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
28
|
+
<img src="../../assets/guige.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
29
|
+
<span class="font-content">表具规格</span>
|
|
30
|
+
<span class="font-head">{{row.f_meter_style}}</span>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
34
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
35
|
+
<img src="../../assets/xinghao.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
36
|
+
<span class="font-content">表具型号</span>
|
|
37
|
+
<span class="font-head">{{row.f_type}}</span>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
41
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
42
|
+
<img src="../../assets/bieming.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
43
|
+
<span class="font-content">表具别名</span>
|
|
44
|
+
<span class="font-head">{{row.f_alias}}</span>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
48
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
49
|
+
<img src="../../assets/yue.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
50
|
+
<span class="font-content">剩余金额</span>
|
|
51
|
+
<span class="font-head">{{row.f_balance_amount}}</span>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="col-sm-3 col-md-3 col-xs-4 meterinfo">
|
|
55
|
+
<div class="flex" style="padding: 0.5rem;align-items: center">
|
|
56
|
+
<img src="../../assets/qiliang.png" style="height:32px;width:32px;margin-bottom: 5px" alt="" >
|
|
57
|
+
<span class="font-content">累计用气量</span>
|
|
58
|
+
<span class="font-head">{{row.f_balance_gas}}</span>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<script>
|
|
66
|
+
export default {
|
|
67
|
+
title: '基础信息',
|
|
68
|
+
data () {
|
|
69
|
+
return {
|
|
70
|
+
msg: '',
|
|
71
|
+
show: false
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
props:['row'],
|
|
75
|
+
ready () {
|
|
76
|
+
// this.$appdata.load().then(() => {
|
|
77
|
+
// this.$emit('ready')
|
|
78
|
+
// })
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
</script>
|
|
82
|
+
<style media="screen" scoped>
|
|
83
|
+
.font-head{
|
|
84
|
+
font-size: 14px;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
color: #333;
|
|
87
|
+
}
|
|
88
|
+
.font-content{
|
|
89
|
+
font-size: 12px;
|
|
90
|
+
font-weight: normal;
|
|
91
|
+
color: #666666;
|
|
92
|
+
}
|
|
93
|
+
.meterinfo{
|
|
94
|
+
border:1px solid #eeeeee;
|
|
95
|
+
/*border-right: 2px solid #eeeeee;*/
|
|
96
|
+
}
|
|
97
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const REG_STRONG_PWD =
|
|
2
|
-
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])(?!.*(123|321|abc|cba))[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{
|
|
2
|
+
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?])(?!.*(123|321|abc|cba))[a-zA-Z\d!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]{8,16}$/;
|
|
3
3
|
|
|
4
4
|
// 常见密码列表(可以根据需要扩展)
|
|
5
5
|
const COMMON_PASSWORDS = [
|
|
@@ -125,7 +125,7 @@ export const validateStrongPasswordPhone = (password) => {
|
|
|
125
125
|
if (!REG_STRONG_PWD.test(password)) {
|
|
126
126
|
result.isValid = false;
|
|
127
127
|
result.errors.push(
|
|
128
|
-
"密码长度必须为
|
|
128
|
+
"密码长度必须为8-16位,且需同时包含大写字母、小写字母、数字和特殊字符"
|
|
129
129
|
);
|
|
130
130
|
return result;
|
|
131
131
|
}
|