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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-clients",
3
- "version": "3.2.63",
3
+ "version": "3.2.65-1",
4
4
  "description": "系统基础框架",
5
5
  "main": "src/index.js",
6
6
  "directories": {
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>
@@ -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
- 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
- newTipShow: false,
219
- newTipContextShow: false,
220
- AppDaiBan: '',
221
- OrderDaiBan: '',
222
- // 左侧树下部三个小图标
223
- imgs: {
224
- open: '/images/lefticon/菜单伸缩.png',
225
- set: '/images/lefticon/系统设置.png',
226
- out: '/images/lefticon/退出系统.png',
227
- img1: '/images/newStyle/login-user.png',
228
- logoimg: '/static/newStyle/fife.png'
229
- // img2: '/images/lefticon/退出系统.png',
230
- },
231
- treeOrIcon: false,
232
- qrCode:false,
233
- isManger: false,
234
- show: false,
235
- orgpathnames: `${this.$login.f.orgs}-${this.$login.f.deps}-${this.$login.f.name}`,
236
- systemname: '客服系统',
237
- date: this.$login.toStandardDateString(),
238
- tabs: [], //已初始化页签数组
239
- selecttab: '',
240
- setting: true,
241
- srcsetting: '../../static/newStyle/setting.png',
242
- showwatermakeflag: false,
243
- // headerHint: true, // 右侧顶部提示信息
244
- // value: 25645.26,
245
- // AddChangeMsgShow: false,
246
- // showsum: false
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
- async getDaiBan(){
311
- this.OrderDaiBan = ''
312
- this.AppDaiBan = ''
313
- let http = new HttpResetClass()
314
- await http.load('POST', '/rs/sql/singleTable', {data: {
315
- tablename:'t_order_center',
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
- await http.load('POST', '/rs/sql/checkuser', {data: data}, {
339
- resolveMsg: null,
340
- rejectMsg: null
341
- }).then((res) => {
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
- tipClick(){
360
- this.newTipShow = false
361
- this.newTipContextShow = true
362
- },
363
- gotoWorkOrderSite(){
364
- const isRemind =this.$appdata.getSingleValue("站点工单提醒")
365
- console.log('站点工单是否提醒',isRemind)
366
- if(isRemind && isRemind !== '是'){
367
- return
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
- if(this.functions && this.functions.f_role_name && this.functions.f_role_name.indexOf('派单员') !== -1){
370
- const data = {
371
- "condition":
372
- {
373
- "condition":" 1=1 and processins.activities[ state='开始活动' and (defname in('站点接单'))].count(*) > 0 ",
374
- "sign":"1=1"
375
- },
376
- "userid":this.functions.name
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
- new HttpResetClass().load('POST','rs/path/operatorService/n', {data}, {resolveMsg: null, rejectMsg: null}).then(res=>{
379
- if(res.data && res.data.n !== 0){
380
- this.$showMessage('你有'+res.data.n+'个工单待处理,请尽快前往站点工单页面进行处理')
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
- openUrl() {
386
- 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}`
387
- window.open(url, '_blank')
388
- },
389
- hindsetting() {
390
- this.setting = !this.setting
391
- if (this.setting) {
392
- this.srcsetting = '../../static/newStyle/setting.png'
393
- } else {
394
- this.srcsetting = '../../static/newStyle/setting1.png'
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>&times;</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">原始密码:&nbsp;&nbsp;</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">新的密码:&nbsp;&nbsp;</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">确认密码:&nbsp;&nbsp;</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>&times;</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">原始密码:&nbsp;&nbsp;</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">新的密码:&nbsp;&nbsp;</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">确认密码:&nbsp;&nbsp;</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