system-clients 3.2.63 → 3.2.65-1
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/package.json +1 -1
- package/src/App.vue +24 -24
- package/src/components/Main.vue +202 -182
- package/src/filiale/qianneng/ModifyPw.vue +107 -107
- package/src/filiale/qianneng/system.js +8 -8
- package/src/filiale/yuchuan/Main.vue +91 -0
- package/src/plugins/validation.js +15 -15
- package/static/newStyle/jingwei.png +0 -0
package/package.json
CHANGED
package/src/App.vue
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
<template>
|
2
|
-
<app-base class="bg">
|
3
|
-
<div class='flex'>
|
4
|
-
<article>
|
5
|
-
<!--<route :comp="{name: 'check-model'}"></route>-->
|
6
|
-
<!--<route :comp="{name: 'vender-management'}"></route>-->
|
7
|
-
<route :comp="{name: 'login'}"></route>
|
8
|
-
<!-- <route :comp="{name: 'load-data'}"></route> -->
|
9
|
-
<!-- <route :comp="{name: 'load-params', props: {componentName: 'login'}}"></route> -->
|
10
|
-
<!-- <route :comp="{name: 'load-params', props: {dataUrl: ['rs/sql/getMeterBrand','rs/sql/getPriceType','rs/sql/getMeterStyle'], componentName: 'login'}}"></route> -->
|
11
|
-
</article>
|
12
|
-
</div>
|
13
|
-
</app-base>
|
14
|
-
</template>
|
15
|
-
|
16
|
-
<script>
|
17
|
-
// import cardListen from './plugins/CardListen'
|
18
|
-
|
19
|
-
export default {
|
20
|
-
// ready () {
|
21
|
-
// cardListen.startListen()
|
22
|
-
// }
|
23
|
-
}
|
24
|
-
</script>
|
1
|
+
<template>
|
2
|
+
<app-base class="bg">
|
3
|
+
<div class='flex'>
|
4
|
+
<article>
|
5
|
+
<!--<route :comp="{name: 'check-model'}"></route>-->
|
6
|
+
<!--<route :comp="{name: 'vender-management'}"></route>-->
|
7
|
+
<route :comp="{name: 'login'}"></route>
|
8
|
+
<!-- <route :comp="{name: 'load-data'}"></route> -->
|
9
|
+
<!-- <route :comp="{name: 'load-params', props: {componentName: 'login'}}"></route> -->
|
10
|
+
<!-- <route :comp="{name: 'load-params', props: {dataUrl: ['rs/sql/getMeterBrand','rs/sql/getPriceType','rs/sql/getMeterStyle'], componentName: 'login'}}"></route> -->
|
11
|
+
</article>
|
12
|
+
</div>
|
13
|
+
</app-base>
|
14
|
+
</template>
|
15
|
+
|
16
|
+
<script>
|
17
|
+
// import cardListen from './plugins/CardListen'
|
18
|
+
|
19
|
+
export default {
|
20
|
+
// ready () {
|
21
|
+
// cardListen.startListen()
|
22
|
+
// }
|
23
|
+
}
|
24
|
+
</script>
|
package/src/components/Main.vue
CHANGED
@@ -202,197 +202,217 @@ let createWaterMark = function (userName) {
|
|
202
202
|
(document.head.append || document.head.appendChild).apply(document.head, [style]);
|
203
203
|
}
|
204
204
|
|
205
|
-
window.onunload = () => {
|
206
|
-
|
207
|
-
}
|
208
|
-
window.onbeforeunload = () => {
|
209
|
-
|
210
|
-
}
|
211
|
-
export default {
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
},
|
249
|
-
ready() {
|
250
|
-
getwartermakr(this);
|
251
|
-
let component = this.$login.getUrlCompileParames('component')
|
252
|
-
if (component) {
|
253
|
-
this.isManger = true
|
254
|
-
this.$refs.route.init(component, {data: this.functions.functions})
|
255
|
-
}
|
256
|
-
if (this.$login.f.password == '1') {
|
257
|
-
this.$showMessage('本地登录系统为此账户的初始密码,请确认修改密码!!!', ['confirm', 'cancel']).then((res) => {
|
258
|
-
if (res == 'confirm')
|
259
|
-
this.show = true
|
260
|
-
})
|
261
|
-
}
|
262
|
-
console.log("系统名称", this.$appdata.getSingleValue("系统名称"))
|
263
|
-
this.systemname = this.$appdata.getSingleValue("系统名称") ? this.$appdata.getSingleValue("系统名称") : '客服系统'
|
264
|
-
// let oBox = this.getElement("box")
|
265
|
-
// let oTop = this.getElement("top")
|
266
|
-
// let oBottom = this.getElement("bottom")
|
267
|
-
// let oLine = this.getElement("line")
|
268
|
-
// let that = this
|
269
|
-
// oLine.onmousedown = function(e) {
|
270
|
-
// let disX = (e || event).clientX
|
271
|
-
// oLine.left = oLine.offsetLeft
|
272
|
-
// document.onmousemove = function(e) {
|
273
|
-
// let iT = oLine.left + ((e || event).clientX - disX)
|
274
|
-
// var e = e || window.event
|
275
|
-
// let tarnameb = e.target || e.srcElement
|
276
|
-
// let maxT = oBox.clientWight - oLine.offsetWidth
|
277
|
-
// oLine.style.margin = 0
|
278
|
-
// iT < 0 && (iT = 0)
|
279
|
-
// iT > maxT && (iT = maxT)
|
280
|
-
// oLine.style.left = oTop.style.width = iT + "px"
|
281
|
-
// oBottom.style.width = oBox.clientWidth - iT + "px"
|
282
|
-
// that.$set('treeWidth', iT)
|
283
|
-
// return false
|
284
|
-
// }
|
285
|
-
// document.onmouseup = function() {
|
286
|
-
// document.onmousemove = null
|
287
|
-
// document.onmouseup = null
|
288
|
-
// oLine.releaseCapture && oLine.releaseCapture()
|
289
|
-
// }
|
290
|
-
// oLine.setCapture && oLine.setCapture()
|
291
|
-
// return false
|
292
|
-
// }
|
293
|
-
this.changeShow()
|
294
|
-
this.gotoWorkOrderSite()
|
295
|
-
// 获取预约列表
|
296
|
-
this.functions.f_role_name && this.functions.f_role_name.includes(this.config.msgRole) && this.config.isTip && this.getOrderList()
|
297
|
-
},
|
298
|
-
methods: {
|
299
|
-
getOrderList(){
|
300
|
-
let times = this.config.times * 60 * 1000
|
301
|
-
console.log("=定时提示间隔=", times)
|
302
|
-
try {
|
303
|
-
this.interval = setInterval(() => {
|
304
|
-
this.getDaiBan()
|
305
|
-
}, times)
|
306
|
-
} catch (error) {
|
307
|
-
console.log('捕获到异常', error)
|
205
|
+
window.onunload = () => {
|
206
|
+
vue.http({url: `rs/user/update/${this.$login.f.ename}`, method: 'GET'})
|
207
|
+
}
|
208
|
+
window.onbeforeunload = () => {
|
209
|
+
vue.http({url: `rs/user/update/${this.$login.f.ename}`, method: 'GET'})
|
210
|
+
}
|
211
|
+
export default {
|
212
|
+
title: '主界面',
|
213
|
+
props: ['functions', 'userid', 'config'],
|
214
|
+
data() {
|
215
|
+
return {
|
216
|
+
// 页面提示信息定时器
|
217
|
+
interval: null,
|
218
|
+
intervaltx: null,
|
219
|
+
newTipShow: false,
|
220
|
+
newTipContextShow: false,
|
221
|
+
AppDaiBan: '',
|
222
|
+
OrderDaiBan: '',
|
223
|
+
// 左侧树下部三个小图标
|
224
|
+
imgs: {
|
225
|
+
open: '/images/lefticon/菜单伸缩.png',
|
226
|
+
set: '/images/lefticon/系统设置.png',
|
227
|
+
out: '/images/lefticon/退出系统.png',
|
228
|
+
img1: '/images/newStyle/login-user.png',
|
229
|
+
logoimg: '/static/newStyle/fife.png'
|
230
|
+
// img2: '/images/lefticon/退出系统.png',
|
231
|
+
},
|
232
|
+
treeOrIcon: false,
|
233
|
+
qrCode:false,
|
234
|
+
isManger: false,
|
235
|
+
show: false,
|
236
|
+
orgpathnames: `${this.$login.f.orgs}-${this.$login.f.deps}-${this.$login.f.name}`,
|
237
|
+
systemname: '客服系统',
|
238
|
+
date: this.$login.toStandardDateString(),
|
239
|
+
tabs: [], //已初始化页签数组
|
240
|
+
selecttab: '',
|
241
|
+
setting: true,
|
242
|
+
srcsetting: '../../static/newStyle/setting.png',
|
243
|
+
showwatermakeflag: false,
|
244
|
+
// headerHint: true, // 右侧顶部提示信息
|
245
|
+
// value: 25645.26,
|
246
|
+
// AddChangeMsgShow: false,
|
247
|
+
// showsum: false
|
308
248
|
}
|
309
249
|
},
|
310
|
-
|
311
|
-
this
|
312
|
-
this.
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
condition:` (f_orderstate != '预约成功' and f_orgstr ='${this.$login.f.orgid}' and f_orderstate != '预约失败' ) or f_orderstate is null`
|
317
|
-
}}, {
|
318
|
-
resolveMsg: null,
|
319
|
-
rejectMsg: null
|
320
|
-
}).then((res) => {
|
321
|
-
let OrderDaiBan = {}
|
322
|
-
res.data.forEach(item=>{
|
323
|
-
OrderDaiBan[item.f_ordertype] = OrderDaiBan[item.f_ordertype] || []
|
324
|
-
OrderDaiBan[item.f_ordertype].push(item)
|
325
|
-
})
|
326
|
-
if (res.data.length> 0){
|
327
|
-
this.OrderDaiBan = `您有${res.data.length}条需要处理的微信预约业务!`
|
328
|
-
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
329
|
-
}
|
330
|
-
})
|
331
|
-
let data = {
|
332
|
-
condition: '1 = 1',
|
333
|
-
data: {
|
334
|
-
orgid: this.$login.f.orgid,
|
335
|
-
id: this.$login.f.id
|
336
|
-
}
|
250
|
+
ready() {
|
251
|
+
getwartermakr(this);
|
252
|
+
let component = this.$login.getUrlCompileParames('component')
|
253
|
+
if (component) {
|
254
|
+
this.isManger = true
|
255
|
+
this.$refs.route.init(component, {data: this.functions.functions})
|
337
256
|
}
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
let AppDaiBan = {}
|
343
|
-
res.data.forEach(item=>{
|
344
|
-
AppDaiBan[item.defname] = AppDaiBan[item.defname] || []
|
345
|
-
AppDaiBan[item.defname].push(item)
|
257
|
+
if (this.$login.f.password == '1') {
|
258
|
+
this.$showMessage('本地登录系统为此账户的初始密码,请确认修改密码!!!', ['confirm', 'cancel']).then((res) => {
|
259
|
+
if (res == 'confirm')
|
260
|
+
this.show = true
|
346
261
|
})
|
347
|
-
if (res.data.length> 0){
|
348
|
-
this.AppDaiBan = `您有${res.data.length}条需要处理的报建待办业务!`
|
349
|
-
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
350
|
-
}
|
351
|
-
}).catch((e)=>{
|
352
|
-
console.error(e)
|
353
|
-
})
|
354
|
-
if(this.AppDaiBan || this.OrderDaiBan){
|
355
|
-
this.newTipShow = true
|
356
262
|
}
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
263
|
+
console.log("系统名称", this.$appdata.getSingleValue("系统名称"))
|
264
|
+
this.systemname = this.$appdata.getSingleValue("系统名称") ? this.$appdata.getSingleValue("系统名称") : '客服系统'
|
265
|
+
// let oBox = this.getElement("box")
|
266
|
+
// let oTop = this.getElement("top")
|
267
|
+
// let oBottom = this.getElement("bottom")
|
268
|
+
// let oLine = this.getElement("line")
|
269
|
+
// let that = this
|
270
|
+
// oLine.onmousedown = function(e) {
|
271
|
+
// let disX = (e || event).clientX
|
272
|
+
// oLine.left = oLine.offsetLeft
|
273
|
+
// document.onmousemove = function(e) {
|
274
|
+
// let iT = oLine.left + ((e || event).clientX - disX)
|
275
|
+
// var e = e || window.event
|
276
|
+
// let tarnameb = e.target || e.srcElement
|
277
|
+
// let maxT = oBox.clientWight - oLine.offsetWidth
|
278
|
+
// oLine.style.margin = 0
|
279
|
+
// iT < 0 && (iT = 0)
|
280
|
+
// iT > maxT && (iT = maxT)
|
281
|
+
// oLine.style.left = oTop.style.width = iT + "px"
|
282
|
+
// oBottom.style.width = oBox.clientWidth - iT + "px"
|
283
|
+
// that.$set('treeWidth', iT)
|
284
|
+
// return false
|
285
|
+
// }
|
286
|
+
// document.onmouseup = function() {
|
287
|
+
// document.onmousemove = null
|
288
|
+
// document.onmouseup = null
|
289
|
+
// oLine.releaseCapture && oLine.releaseCapture()
|
290
|
+
// }
|
291
|
+
// oLine.setCapture && oLine.setCapture()
|
292
|
+
// return false
|
293
|
+
// }
|
294
|
+
this.changeShow()
|
295
|
+
const istelRemindTimes =this.$appdata.getSingleValue("是否开启工单提醒定时器")
|
296
|
+
if(istelRemindTimes=='是'){
|
297
|
+
this.getTimesgotoWorkOrderSite()
|
368
298
|
}
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
299
|
+
const isapplyRemind =this.$appdata.getSingleValue("是否开启提醒")
|
300
|
+
const times =this.$appdata.getSingleValue("提示间隔分钟")
|
301
|
+
if(isapplyRemind=='是'){
|
302
|
+
this.config.isTip = true
|
303
|
+
this.config.times = times
|
304
|
+
}
|
305
|
+
// 获取预约列表
|
306
|
+
this.functions.f_role_name && this.functions.f_role_name.includes(this.config.msgRole) && this.config.isTip && this.getOrderList()
|
307
|
+
},
|
308
|
+
methods: {
|
309
|
+
getOrderList(){
|
310
|
+
let times = this.config.times * 60 * 1000
|
311
|
+
console.log("=定时提示间隔=", times)
|
312
|
+
try {
|
313
|
+
this.interval = setInterval(() => {
|
314
|
+
this.getDaiBan()
|
315
|
+
}, times)
|
316
|
+
} catch (error) {
|
317
|
+
console.log('捕获到异常', error)
|
377
318
|
}
|
378
|
-
|
379
|
-
|
380
|
-
|
319
|
+
},
|
320
|
+
getTimesgotoWorkOrderSite(){
|
321
|
+
let teltimes = 2*60*1000 // 两分钟
|
322
|
+
try {
|
323
|
+
this.intervaltx =setInterval(()=>{
|
324
|
+
this.gotoWorkOrderSite()
|
325
|
+
},teltimes)
|
326
|
+
}catch (e) {
|
327
|
+
console.log('捕获到异常', e)
|
328
|
+
}
|
329
|
+
},
|
330
|
+
async getDaiBan(){
|
331
|
+
this.OrderDaiBan = ''
|
332
|
+
this.AppDaiBan = ''
|
333
|
+
let http = new HttpResetClass()
|
334
|
+
await http.load('POST', '/rs/sql/singleTable', {data: {
|
335
|
+
tablename:'t_order_center',
|
336
|
+
condition:` (f_orderstate != '预约成功' and f_orgstr ='${this.$login.f.orgid}' and f_orderstate != '预约失败' ) or f_orderstate is null`
|
337
|
+
}}, {
|
338
|
+
resolveMsg: null,
|
339
|
+
rejectMsg: null
|
340
|
+
}).then((res) => {
|
341
|
+
let OrderDaiBan = {}
|
342
|
+
res.data.forEach(item=>{
|
343
|
+
OrderDaiBan[item.f_ordertype] = OrderDaiBan[item.f_ordertype] || []
|
344
|
+
OrderDaiBan[item.f_ordertype].push(item)
|
345
|
+
})
|
346
|
+
if (res.data.length> 0){
|
347
|
+
this.OrderDaiBan = `您有${res.data.length}条需要处理的微信预约业务!`
|
348
|
+
this.OrderDaiBan += `其中 ${Object.keys(OrderDaiBan).map(key=>`${key}:${OrderDaiBan[key].length}条`).join(', ')}`
|
381
349
|
}
|
382
350
|
})
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
351
|
+
let data = {
|
352
|
+
condition: '1 = 1',
|
353
|
+
data: {
|
354
|
+
orgid: this.$login.f.orgid,
|
355
|
+
id: this.$login.f.id
|
356
|
+
}
|
357
|
+
}
|
358
|
+
await http.load('POST', '/rs/sql/checkuser', {data: data}, {
|
359
|
+
resolveMsg: null,
|
360
|
+
rejectMsg: null
|
361
|
+
}).then((res) => {
|
362
|
+
let AppDaiBan = {}
|
363
|
+
res.data.forEach(item=>{
|
364
|
+
AppDaiBan[item.defname] = AppDaiBan[item.defname] || []
|
365
|
+
AppDaiBan[item.defname].push(item)
|
366
|
+
})
|
367
|
+
if (res.data.length> 0){
|
368
|
+
this.AppDaiBan = `您有${res.data.length}条需要处理的报建待办业务!`
|
369
|
+
this.AppDaiBan += `其中 ${Object.keys(AppDaiBan).map(key=>`${key}:${AppDaiBan[key].length}条`).join(', ')}`
|
370
|
+
}
|
371
|
+
}).catch((e)=>{
|
372
|
+
console.error(e)
|
373
|
+
})
|
374
|
+
if(this.AppDaiBan || this.OrderDaiBan){
|
375
|
+
this.newTipShow = true
|
376
|
+
}
|
377
|
+
},
|
378
|
+
// 提醒框被点击
|
379
|
+
tipClick(){
|
380
|
+
this.newTipShow = false
|
381
|
+
this.newTipContextShow = true
|
382
|
+
},
|
383
|
+
gotoWorkOrderSite(){
|
384
|
+
const isRemind =this.$appdata.getSingleValue("站点工单提醒")
|
385
|
+
console.log('站点工单是否提醒',isRemind)
|
386
|
+
if(isRemind && isRemind !== '是'){
|
387
|
+
return
|
388
|
+
}
|
389
|
+
if(this.functions && this.functions.f_role_name && this.functions.f_role_name.indexOf('派单员') !== -1){
|
390
|
+
const data = {
|
391
|
+
"condition":
|
392
|
+
{
|
393
|
+
"condition":" 1=1 and processins.activities[ state='开始活动' and (defname in('站点接单'))].count(*) > 0 ",
|
394
|
+
"sign":"1=1"
|
395
|
+
},
|
396
|
+
"userid":this.functions.name
|
397
|
+
}
|
398
|
+
new HttpResetClass().load('POST','rs/path/operatorService/n', {data}, {resolveMsg: null, rejectMsg: null}).then(res=>{
|
399
|
+
if(res.data && res.data.n !== 0){
|
400
|
+
this.$showMessage('你有'+res.data.n+'个工单待处理,请尽快前往站点工单页面进行处理')
|
401
|
+
}
|
402
|
+
})
|
403
|
+
}
|
404
|
+
},
|
405
|
+
openUrl() {
|
406
|
+
var url = `http://123.60.214.109:8406/submitTicket?contact=${this.$login.f.name}&orgName=${this.$login.f.orgs}&phone=${this.$login.f.f_user_telephone}`
|
407
|
+
window.open(url, '_blank')
|
408
|
+
},
|
409
|
+
hindsetting() {
|
410
|
+
this.setting = !this.setting
|
411
|
+
if (this.setting) {
|
412
|
+
this.srcsetting = '../../static/newStyle/setting.png'
|
413
|
+
} else {
|
414
|
+
this.srcsetting = '../../static/newStyle/setting1.png'
|
415
|
+
}
|
396
416
|
|
397
417
|
},
|
398
418
|
hindsetting1() {
|
@@ -1,107 +1,107 @@
|
|
1
|
-
<template>
|
2
|
-
<div>
|
3
|
-
<validator name="v">
|
4
|
-
<modal :show.sync="show" v-ref:modal backdrop="false">
|
5
|
-
<header slot="modal-header" class="modal-header">
|
6
|
-
<button type="button" class="close" @click="rest"><span>×</span></button>
|
7
|
-
<h4 class="modal-title">修改密码</h4>
|
8
|
-
</header>
|
9
|
-
<article slot="modal-body" class="modal-body modifystyle auto form-horizontal">
|
10
|
-
<div class="has-feedback form-group"
|
11
|
-
:class="{'has-warning':$v.password.required,'has-error': $v.password.required,
|
12
|
-
'has-success':!$v.password.required}">
|
13
|
-
<label for="password" class="col-sm-4 col-sm-offset-1 control-label">原始密码: </label>
|
14
|
-
<div class="col-sm-4">
|
15
|
-
<input type="password" v-model="deliver.password" class="form-control" id="password" v-validate:password="{ required: true}">
|
16
|
-
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.password.required"></span>
|
17
|
-
<span v-if="$v.password.required">不能为空</span>
|
18
|
-
</div>
|
19
|
-
</div>
|
20
|
-
<div class="has-feedback form-group"
|
21
|
-
:class="{'has-warning':$v.newpassword.required,'has-error':($v.newpassword.numbersAndLetter8to16 || $v.newpassword.minlength)&& !$v.newpassword.required && !$v.newpassword.chinesePassword,
|
22
|
-
'has-success': !$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16&&!$v.newpassword.minlength && !$v.newpassword.chinesePassword}">
|
23
|
-
<label for="newpassword" class="col-sm-4 col-sm-offset-1 control-label">新的密码: </label>
|
24
|
-
<div class="col-sm-4">
|
25
|
-
<input type="password" v-model="deliver.newpassword" class="form-control" id="newpassword" v-validate:newpassword='{required:true, numbersAndLetter8to16: true, minlength: 6,chinesePassword: true}'>
|
26
|
-
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.newpassword.required && !$v.newpassword.minlength && !($v.newpassword.numbersAndLetter8to16 && !($v.newpassword.required)) && !($v.newpassword.chinesePassword) "></span>
|
27
|
-
<span v-if="$v.newpassword.required">不能为空</span>
|
28
|
-
<span v-if="($v.newpassword.numbersAndLetter8to16||$v.newpassword.minlength) && !($v.newpassword.required&&$v.newpassword.minlength)">密码必须是8~16位数字与字母组合</span>
|
29
|
-
<span v-if="$v.newpassword.chinesePassword">密码不能包含中文</span>
|
30
|
-
</div>
|
31
|
-
</div>
|
32
|
-
<div class="has-feedback form-group"
|
33
|
-
:class="{'has-warning':$v.affirmpassword.required,'has-error':$v.affirmpassword.equalValid && !($v.affirmpassword.required),
|
34
|
-
'has-success': !$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))}">
|
35
|
-
<label for="affirmpassword" class="col-sm-4 col-sm-offset-1 control-label">确认密码: </label>
|
36
|
-
<div class="col-sm-4">
|
37
|
-
<input type="password" v-model="deliver.affirmpassword" class="form-control" id="affirmpassword" v-validate:affirmpassword="{ required: true, equalValid: deliver.newpassword }">
|
38
|
-
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))"></span>
|
39
|
-
<span v-if="$v.affirmpassword.required">不能为空</span>
|
40
|
-
<span v-if="$v.affirmpassword.equalValid && !($v.affirmpassword.required)">两次密码不一致 !!</span>
|
41
|
-
</div>
|
42
|
-
</div>
|
43
|
-
</article>
|
44
|
-
|
45
|
-
<footer slot="modal-footer" class="modal-footer">
|
46
|
-
<button type="button" class="btn btn-success" @click='confirm' :disabled="!$v.valid">确认</button>
|
47
|
-
<button type="button" class="btn btn-default" @click='rest'>取消</button>
|
48
|
-
</footer>
|
49
|
-
</modal>
|
50
|
-
</validator>
|
51
|
-
</div>
|
52
|
-
|
53
|
-
|
54
|
-
</template>
|
55
|
-
<script>
|
56
|
-
import co from 'co'
|
57
|
-
import validator from '../../plugins/validation';
|
58
|
-
|
59
|
-
let saveGen = function * (self) {
|
60
|
-
self.deliver.ename = self.functions.ename
|
61
|
-
// let res = yield self.$post('rs/user/entity', {data: self.deliver})
|
62
|
-
// let res = yield self.$post('rs/db/modifypassword', {data: self.deliver})
|
63
|
-
// let res = yield self.$resetpost('/rs/db/modifypwd', {data: self.deliver})
|
64
|
-
// Util.f.password = self.deliver.newpassword
|
65
|
-
let res = yield self.$resetpost('/rs/user/modifypwd', {data: self.deliver })
|
66
|
-
self.$login.f.password = self.deliver.newpassword
|
67
|
-
if (res.data) {
|
68
|
-
self.deliver.password = ''
|
69
|
-
self.deliver.newpassword = ''
|
70
|
-
self.deliver.affirmpassword = ''
|
71
|
-
self.show = false
|
72
|
-
}
|
73
|
-
}
|
74
|
-
export default {
|
75
|
-
title: '系统管理-密码修改',
|
76
|
-
data () {
|
77
|
-
return {
|
78
|
-
deliver: {
|
79
|
-
password: '',
|
80
|
-
newpassword: '',
|
81
|
-
affirmpassword: ''
|
82
|
-
},
|
83
|
-
functions: this.$login.f
|
84
|
-
}
|
85
|
-
},
|
86
|
-
props: ['show'],
|
87
|
-
methods: {
|
88
|
-
confirm () {
|
89
|
-
let gen = saveGen(this)
|
90
|
-
co(gen)
|
91
|
-
},
|
92
|
-
rest () {
|
93
|
-
this.show = false
|
94
|
-
this.deliver = {password: '', newpassword: '', affirmpassword: ''}
|
95
|
-
}
|
96
|
-
}
|
97
|
-
}
|
98
|
-
</script>
|
99
|
-
<style>
|
100
|
-
/*修改密码body界面样式*/
|
101
|
-
.modifystyle {
|
102
|
-
background: #FCFEEE;
|
103
|
-
}
|
104
|
-
.modifystyle span{
|
105
|
-
color: red;
|
106
|
-
}
|
107
|
-
</style>
|
1
|
+
<template>
|
2
|
+
<div>
|
3
|
+
<validator name="v">
|
4
|
+
<modal :show.sync="show" v-ref:modal backdrop="false">
|
5
|
+
<header slot="modal-header" class="modal-header">
|
6
|
+
<button type="button" class="close" @click="rest"><span>×</span></button>
|
7
|
+
<h4 class="modal-title">修改密码</h4>
|
8
|
+
</header>
|
9
|
+
<article slot="modal-body" class="modal-body modifystyle auto form-horizontal">
|
10
|
+
<div class="has-feedback form-group"
|
11
|
+
:class="{'has-warning':$v.password.required,'has-error': $v.password.required,
|
12
|
+
'has-success':!$v.password.required}">
|
13
|
+
<label for="password" class="col-sm-4 col-sm-offset-1 control-label">原始密码: </label>
|
14
|
+
<div class="col-sm-4">
|
15
|
+
<input type="password" v-model="deliver.password" class="form-control" id="password" v-validate:password="{ required: true}">
|
16
|
+
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.password.required"></span>
|
17
|
+
<span v-if="$v.password.required">不能为空</span>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="has-feedback form-group"
|
21
|
+
:class="{'has-warning':$v.newpassword.required,'has-error':($v.newpassword.numbersAndLetter8to16 || $v.newpassword.minlength)&& !$v.newpassword.required && !$v.newpassword.chinesePassword,
|
22
|
+
'has-success': !$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16&&!$v.newpassword.minlength && !$v.newpassword.chinesePassword}">
|
23
|
+
<label for="newpassword" class="col-sm-4 col-sm-offset-1 control-label">新的密码: </label>
|
24
|
+
<div class="col-sm-4">
|
25
|
+
<input type="password" v-model="deliver.newpassword" class="form-control" id="newpassword" v-validate:newpassword='{required:true, numbersAndLetter8to16: true, minlength: 6,chinesePassword: true}'>
|
26
|
+
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.newpassword.required && !$v.newpassword.minlength && !($v.newpassword.numbersAndLetter8to16 && !($v.newpassword.required)) && !($v.newpassword.chinesePassword) "></span>
|
27
|
+
<span v-if="$v.newpassword.required">不能为空</span>
|
28
|
+
<span v-if="($v.newpassword.numbersAndLetter8to16||$v.newpassword.minlength) && !($v.newpassword.required&&$v.newpassword.minlength)">密码必须是8~16位数字与字母组合</span>
|
29
|
+
<span v-if="$v.newpassword.chinesePassword">密码不能包含中文</span>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
<div class="has-feedback form-group"
|
33
|
+
:class="{'has-warning':$v.affirmpassword.required,'has-error':$v.affirmpassword.equalValid && !($v.affirmpassword.required),
|
34
|
+
'has-success': !$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))}">
|
35
|
+
<label for="affirmpassword" class="col-sm-4 col-sm-offset-1 control-label">确认密码: </label>
|
36
|
+
<div class="col-sm-4">
|
37
|
+
<input type="password" v-model="deliver.affirmpassword" class="form-control" id="affirmpassword" v-validate:affirmpassword="{ required: true, equalValid: deliver.newpassword }">
|
38
|
+
<span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.affirmpassword.required && !($v.affirmpassword.equalValid && !($v.affirmpassword.required))"></span>
|
39
|
+
<span v-if="$v.affirmpassword.required">不能为空</span>
|
40
|
+
<span v-if="$v.affirmpassword.equalValid && !($v.affirmpassword.required)">两次密码不一致 !!</span>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
</article>
|
44
|
+
|
45
|
+
<footer slot="modal-footer" class="modal-footer">
|
46
|
+
<button type="button" class="btn btn-success" @click='confirm' :disabled="!$v.valid">确认</button>
|
47
|
+
<button type="button" class="btn btn-default" @click='rest'>取消</button>
|
48
|
+
</footer>
|
49
|
+
</modal>
|
50
|
+
</validator>
|
51
|
+
</div>
|
52
|
+
|
53
|
+
|
54
|
+
</template>
|
55
|
+
<script>
|
56
|
+
import co from 'co'
|
57
|
+
import validator from '../../plugins/validation';
|
58
|
+
|
59
|
+
let saveGen = function * (self) {
|
60
|
+
self.deliver.ename = self.functions.ename
|
61
|
+
// let res = yield self.$post('rs/user/entity', {data: self.deliver})
|
62
|
+
// let res = yield self.$post('rs/db/modifypassword', {data: self.deliver})
|
63
|
+
// let res = yield self.$resetpost('/rs/db/modifypwd', {data: self.deliver})
|
64
|
+
// Util.f.password = self.deliver.newpassword
|
65
|
+
let res = yield self.$resetpost('/rs/user/modifypwd', {data: self.deliver })
|
66
|
+
self.$login.f.password = self.deliver.newpassword
|
67
|
+
if (res.data) {
|
68
|
+
self.deliver.password = ''
|
69
|
+
self.deliver.newpassword = ''
|
70
|
+
self.deliver.affirmpassword = ''
|
71
|
+
self.show = false
|
72
|
+
}
|
73
|
+
}
|
74
|
+
export default {
|
75
|
+
title: '系统管理-密码修改',
|
76
|
+
data () {
|
77
|
+
return {
|
78
|
+
deliver: {
|
79
|
+
password: '',
|
80
|
+
newpassword: '',
|
81
|
+
affirmpassword: ''
|
82
|
+
},
|
83
|
+
functions: this.$login.f
|
84
|
+
}
|
85
|
+
},
|
86
|
+
props: ['show'],
|
87
|
+
methods: {
|
88
|
+
confirm () {
|
89
|
+
let gen = saveGen(this)
|
90
|
+
co(gen)
|
91
|
+
},
|
92
|
+
rest () {
|
93
|
+
this.show = false
|
94
|
+
this.deliver = {password: '', newpassword: '', affirmpassword: ''}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
98
|
+
</script>
|
99
|
+
<style>
|
100
|
+
/*修改密码body界面样式*/
|
101
|
+
.modifystyle {
|
102
|
+
background: #FCFEEE;
|
103
|
+
}
|
104
|
+
.modifystyle span{
|
105
|
+
color: red;
|
106
|
+
}
|
107
|
+
</style>
|
@@ -1,8 +1,8 @@
|
|
1
|
-
// 分公司特殊组件页面注册
|
2
|
-
|
3
|
-
let specialComp = {
|
4
|
-
// 潜能密码改下
|
5
|
-
'modify-pw': (resolve) => { require(['./ModifyPw.vue'], resolve) },
|
6
|
-
'home-page': (resolve) => require(['./Main'], resolve)
|
7
|
-
}
|
8
|
-
exports.specialComp = specialComp
|
1
|
+
// 分公司特殊组件页面注册
|
2
|
+
|
3
|
+
let specialComp = {
|
4
|
+
// 潜能密码改下
|
5
|
+
// 'modify-pw': (resolve) => { require(['./ModifyPw.vue'], resolve) },
|
6
|
+
'home-page': (resolve) => require(['./Main'], resolve)
|
7
|
+
}
|
8
|
+
exports.specialComp = specialComp
|
@@ -235,6 +235,9 @@ export default {
|
|
235
235
|
}
|
236
236
|
},
|
237
237
|
ready() {
|
238
|
+
//使用socket发送代办消息提醒
|
239
|
+
vue.prototype.$connectNumber = this.connectNumber
|
240
|
+
this.initWebSocket()
|
238
241
|
getwartermakr(this);
|
239
242
|
let component = this.$login.getUrlCompileParames('component')
|
240
243
|
if (component) {
|
@@ -284,6 +287,94 @@ export default {
|
|
284
287
|
this.functions.f_role_name && this.functions.f_role_name.includes(this.config.msgRole) && this.config.isTip && this.getOrderList()
|
285
288
|
},
|
286
289
|
methods: {
|
290
|
+
// 清除
|
291
|
+
reset () {
|
292
|
+
clearTimeout(this.timeoutObj)
|
293
|
+
clearTimeout(this.serverTimeoutObj)
|
294
|
+
},
|
295
|
+
//每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息
|
296
|
+
//如果服务端在一定时间内没有收到信息,就认为客户端断开了,服务端就会断开连接
|
297
|
+
// 发送心跳--确保连接有效
|
298
|
+
start () {
|
299
|
+
// 重置
|
300
|
+
vue.prototype.$connectNumber = this.connectNumber // 重置重连次数
|
301
|
+
this.timeoutObj = setTimeout(() => {
|
302
|
+
this.$socket.send('ping')
|
303
|
+
console.log('ping!')
|
304
|
+
this.serverTimeoutObj = setTimeout(() => {
|
305
|
+
this.$socket.close()
|
306
|
+
}, this.timeout)
|
307
|
+
}, this.timeout)
|
308
|
+
},
|
309
|
+
// 重连
|
310
|
+
reconnect () {
|
311
|
+
if (this.lockReconnect) return
|
312
|
+
// if (this.$connectNumber <= 0) {
|
313
|
+
// vue.showMessage('连接已断开,将无法接收消息,请重新登录', ['confirm']).then((res) => {
|
314
|
+
// if (res === 'confirm') {
|
315
|
+
// location.reload()
|
316
|
+
// }
|
317
|
+
// })
|
318
|
+
// return
|
319
|
+
// }
|
320
|
+
// this.$connectNumber--
|
321
|
+
setTimeout(() => {
|
322
|
+
console.log('连接异常,尝试重新连接。。。。')
|
323
|
+
this.initWebSocket()
|
324
|
+
this.lockReconnect = false
|
325
|
+
}, 1000 * 60)
|
326
|
+
},
|
327
|
+
// 初始化
|
328
|
+
initWebSocket () {
|
329
|
+
let path = `ws://${location.host}/ws?token=${this.$login.f.id}`
|
330
|
+
try {
|
331
|
+
if ('WebSocket' in window) {
|
332
|
+
// 创建对象
|
333
|
+
vue.prototype.$socket = new WebSocket(path)
|
334
|
+
} else {
|
335
|
+
this.$showMessage('您的浏览器不支持websocket的协议,建议使用新版谷歌浏览器,请勿使用IE浏览器,360浏览器请使用极速模式,不要使用兼容模式!"')
|
336
|
+
}
|
337
|
+
} catch (e) {
|
338
|
+
this.reconnect()
|
339
|
+
}
|
340
|
+
|
341
|
+
this.$socket.onopen = this.onOpen // 连接成功
|
342
|
+
this.$socket.onmessage = this.onMessage // 收到消息时回调
|
343
|
+
this.$socket.onclose = this.onClose // 连接关闭时回调
|
344
|
+
this.$socket.onerror = this.onError // 通讯异常
|
345
|
+
},
|
346
|
+
// 通讯异常
|
347
|
+
onError () {
|
348
|
+
console.log('通讯异常')
|
349
|
+
this.reconnect()
|
350
|
+
},
|
351
|
+
// 连接成功
|
352
|
+
onOpen () {
|
353
|
+
console.log('webSocket连接成功')
|
354
|
+
this.start()//每十秒发送心跳包,确保连接状态有效
|
355
|
+
},
|
356
|
+
// 收到消息时回调函数
|
357
|
+
onMessage (event) {
|
358
|
+
if (event.data === 'pong') { //建立心跳机制发送ping,返回pong
|
359
|
+
this.reset() // 重置心跳
|
360
|
+
this.start() // 重新开始心跳
|
361
|
+
return
|
362
|
+
}
|
363
|
+
//不是pong消息,就是服务器返回的消息(提示消息)
|
364
|
+
|
365
|
+
let data = JSON.parse(event.data)
|
366
|
+
console.log('收到消息', data)
|
367
|
+
//向所有子组件广播一个名为'onMessage'的事件,并传递一个数据参数'data'。
|
368
|
+
this.$broadcast('onMessage', data)
|
369
|
+
//作用是显示一个消息。
|
370
|
+
this.$showMessage(data.message)
|
371
|
+
},
|
372
|
+
// 关闭连接时回调函数
|
373
|
+
onClose () {
|
374
|
+
console.log('webSocket连接断开')
|
375
|
+
this.reset()
|
376
|
+
this.reconnect() // 重连
|
377
|
+
},
|
287
378
|
getOrderList(){
|
288
379
|
let times = this.config.times * 60 * 1000
|
289
380
|
console.log("=定时提示间隔=", times)
|
@@ -1,15 +1,15 @@
|
|
1
|
-
import Vue from 'vue'
|
2
|
-
import Validator from 'vue-validator'
|
3
|
-
Vue.use(Validator)
|
4
|
-
//密码强度验证器(必须为为大小写字母、阿拉伯数字、字符)
|
5
|
-
Vue.validator('strongpassword', function (val) {
|
6
|
-
return /^(?:(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])).*$/.test(val)
|
7
|
-
});
|
8
|
-
Vue.validator('chinesePassword', function (val) {
|
9
|
-
var testBealoon=/.*?[\u4E00-\u9FFF]+.*$/.test(val)
|
10
|
-
return !(/.*?[\u4E00-\u9FFF]+.*$/.test(val))
|
11
|
-
});
|
12
|
-
// 潜能要求8~16位数字字母组合;
|
13
|
-
Vue.validator('numbersAndLetter8to16', function (val) {
|
14
|
-
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(val)
|
15
|
-
});
|
1
|
+
import Vue from 'vue'
|
2
|
+
import Validator from 'vue-validator'
|
3
|
+
Vue.use(Validator)
|
4
|
+
//密码强度验证器(必须为为大小写字母、阿拉伯数字、字符)
|
5
|
+
Vue.validator('strongpassword', function (val) {
|
6
|
+
return /^(?:(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])).*$/.test(val)
|
7
|
+
});
|
8
|
+
Vue.validator('chinesePassword', function (val) {
|
9
|
+
var testBealoon=/.*?[\u4E00-\u9FFF]+.*$/.test(val)
|
10
|
+
return !(/.*?[\u4E00-\u9FFF]+.*$/.test(val))
|
11
|
+
});
|
12
|
+
// 潜能要求8~16位数字字母组合;
|
13
|
+
Vue.validator('numbersAndLetter8to16', function (val) {
|
14
|
+
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(val)
|
15
|
+
});
|
Binary file
|