system-clients 3.3.3 → 3.3.4-v3

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.
Files changed (61) hide show
  1. package/package.info +1 -0
  2. package/package.json +103 -103
  3. package/src/LodopFuncs.js +71 -103
  4. package/src/components/Main.vue +15 -27
  5. package/src/components/Util.js +15 -0
  6. package/src/components/equipment/PcAdd.vue +1 -1
  7. package/src/components/equipment/PcList.vue +3 -3
  8. package/src/components/equipment/PhoneAdd.vue +1 -1
  9. package/src/components/equipment/PhoneList.vue +2 -2
  10. package/src/components/equipment/PosAdd.vue +11 -7
  11. package/src/components/equipment/PosList.vue +5 -3
  12. package/src/components/equipment/PosManage.vue +1 -1
  13. package/src/components/equipment/PosParamAdd.vue +2 -2
  14. package/src/components/equipment/PosParamList.vue +2 -2
  15. package/src/components/materialManage/materialList.vue +1 -1
  16. package/src/components/parammanage/ParamPage.vue +12 -12
  17. package/src/components/parammanage/ParamPages.vue +2 -2
  18. package/src/components/parammanage/SinglePage.vue +8 -8
  19. package/src/components/parammanage/SinglePages.vue +2 -2
  20. package/src/components/server/AddChangeMsg.vue +1 -1
  21. package/src/components/server/ChangeDeclare.vue +1 -1
  22. package/src/components/server/Login.vue +51 -67
  23. package/src/components/server/ModifyPw.vue +105 -35
  24. package/src/components/server/PcdBuildingSelect.vue +6 -8
  25. package/src/components/server/ResSelect.vue +0 -3
  26. package/src/components/server/ResSelectGroup.vue +1 -1
  27. package/src/components/server/RoleSelector.vue +2 -3
  28. package/src/components/server/TestResSelectGroup.vue +1 -1
  29. package/src/filiale/baole/Login.vue +24 -21
  30. package/src/filiale/chengtou/Login.vue +24 -21
  31. package/src/filiale/dongguan/Login.vue +24 -21
  32. package/src/filiale/dongguan/Main.vue +3 -5
  33. package/src/filiale/furuike/Login.vue +25 -24
  34. package/src/filiale/furuike/Main.vue +26 -39
  35. package/src/filiale/gehua/Main.vue +3 -5
  36. package/src/filiale/konggang/Login.vue +24 -21
  37. package/src/filiale/qianneng/Login.vue +24 -21
  38. package/src/filiale/qianneng/Main.vue +3 -5
  39. package/src/filiale/qianneng/ModifyPw.vue +105 -32
  40. package/src/filiale/rizhao/Login.vue +23 -20
  41. package/src/filiale/rizhao/Main.vue +3 -3
  42. package/src/filiale/shiquan/Login.vue +24 -21
  43. package/src/filiale/tianyi/Login.vue +24 -21
  44. package/src/filiale/tongchuan/Login.vue +24 -21
  45. package/src/filiale/tongchuan/Main.vue +6 -8
  46. package/src/filiale/weinan/Main.vue +6 -7
  47. package/src/filiale/wenxi/Login.vue +24 -21
  48. package/src/filiale/wenxi/Main.vue +3 -5
  49. package/src/filiale/wuhai/Main.vue +3 -6
  50. package/src/filiale/yuchuan/Login.vue +25 -22
  51. package/src/filiale/yuchuan/Main.vue +3 -5
  52. package/src/filiale/zhoukou/Main.vue +3 -5
  53. package/src/plugins/EncryptUtil.js +1 -1
  54. package/src/plugins/GetLoginInfoService.js +85 -20
  55. package/src/plugins/validation.js +12 -8
  56. package/src/stores/AppData.js +2 -1
  57. package/src/util/password-validation.js +185 -0
  58. package/build.gradle +0 -6
  59. package/src/filiale/ruihua/Login.vue +0 -576
  60. package/src/filiale/ruihua/system.js +0 -5
  61. package/static/ruihua/logo.jpg +0 -0
@@ -1,73 +1,72 @@
1
1
  <template>
2
2
  <div>
3
3
  <validator name="v">
4
- <modal :show.sync="show" v-ref:modal backdrop="false">
4
+ <modal :show.sync="show" v-ref:modal backdrop="false">
5
5
  <header slot="modal-header" class="modal-header">
6
6
  <button type="button" class="close" @click="rest"><span>&times;</span></button>
7
7
  <h4 class="modal-title">修改密码</h4>
8
8
  </header>
9
9
  <article slot="modal-body" class="modal-body modifystyle auto form-horizontal">
10
+ <div class="password-alert">
11
+ {{ passwordRuleHint }}
12
+ </div>
10
13
  <div class="has-feedback form-group"
11
14
  :class="{'has-warning':$v.password.required,'has-error': $v.password.required,
12
15
  '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">
16
+ <label for="password" class="col-sm-3 control-label">原始密码</label>
17
+ <div class="col-sm-8 password-field-wrap">
15
18
  <input type="password" v-model="deliver.password" class="form-control" id="password" v-validate:password="{ required: true}">
16
19
  <span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.password.required"></span>
17
- <span v-if="$v.password.required">不能为空</span>
20
+ <span class="field-error" v-if="$v.password.required">不能为空</span>
18
21
  </div>
19
22
  </div>
20
23
  <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位数字与大小字母外加特殊字符的组合,并且不能出现类似'123','abc'等连贯数字或者字母</span>
29
- <span v-if="$v.newpassword.chinesePassword">密码不能包含中文</span>
24
+ :class="{'has-warning':$v.newpassword.required,'has-error':($v.newpassword.numbersAndLetter8to16 || $v.newpassword.chinesePassword) && !$v.newpassword.required,
25
+ 'has-success': !$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16 && !$v.newpassword.chinesePassword}">
26
+ <label for="newpassword" class="col-sm-3 control-label">新的密码</label>
27
+ <div class="col-sm-8 password-field-wrap">
28
+ <input type="password" v-model="deliver.newpassword" class="form-control" id="newpassword" v-validate:newpassword='{required:true, numbersAndLetter8to16: true, chinesePassword: true}'>
29
+ <span class="glyphicon glyphicon-ok form-control-feedback" v-if="!$v.newpassword.required && !$v.newpassword.numbersAndLetter8to16 && !$v.newpassword.chinesePassword"></span>
30
+ <span class="field-error" v-if="$v.newpassword.required">不能为空</span>
31
+ <span class="field-error" v-if="$v.newpassword.chinesePassword && !$v.newpassword.required">密码不能包含中文</span>
32
+ <div v-if="passwordStrength.visible" class="password-strength">
33
+ <span class="strength-label">密码强度</span>
34
+ <span class="strength-tag" :class="passwordStrength.type">{{ passwordStrength.label }}</span>
35
+ <span class="strength-desc">{{ passwordStrength.desc }}</span>
36
+ </div>
30
37
  </div>
31
38
  </div>
32
39
  <div class="has-feedback form-group"
33
40
  :class="{'has-warning':$v.affirmpassword.required,'has-error':$v.affirmpassword.equalValid && !($v.affirmpassword.required),
34
41
  '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">
42
+ <label for="affirmpassword" class="col-sm-3 control-label">确认密码</label>
43
+ <div class="col-sm-8 password-field-wrap">
37
44
  <input type="password" v-model="deliver.affirmpassword" class="form-control" id="affirmpassword" v-validate:affirmpassword="{ required: true, equalValid: deliver.newpassword }">
38
45
  <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>
46
+ <span class="field-error" v-if="$v.affirmpassword.required">不能为空</span>
47
+ <span class="field-error" v-if="$v.affirmpassword.equalValid && !($v.affirmpassword.required)">两次密码不一致</span>
41
48
  </div>
42
49
  </div>
43
50
  </article>
44
51
 
45
52
  <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>
53
+ <button type="button" class="btn btn-success" @click='confirm' :disabled="!$v.valid">确认</button>
54
+ <button type="button" class="btn btn-default" @click='rest'>取消</button>
48
55
  </footer>
49
56
  </modal>
50
57
  </validator>
51
58
  </div>
52
-
53
-
54
59
  </template>
55
60
  <script>
56
61
  import co from 'co'
57
- import validator from '../../plugins/validation';
62
+ import validator from '../../plugins/validation'
63
+ import { getPasswordStrength, PASSWORD_RULE_HINT } from '../../util/password-validation'
58
64
 
59
65
  let saveGen = function * (self) {
60
66
  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
- // todo v4
66
67
  let res = yield self.$resetpost('/rs/user/modifypwd', {data: self.deliver }, {resolveMsg: null,rejectMsg: null})
67
68
  self.$login.f.password = self.deliver.newpassword
68
69
  if (res.data) {
69
- console.log("修改密码返回:" , res.data)
70
- // 兼容旧版ldao,旧版不返回code
71
70
  if (res.data.code === 200) {
72
71
  self.deliver.password = ''
73
72
  self.deliver.newpassword = ''
@@ -75,7 +74,6 @@
75
74
  self.show = false
76
75
  self.$showAlert("修改密码成功", 'success', 2000)
77
76
  } else {
78
- // 兼容旧版ldao,旧版不返回code
79
77
  self.deliver.password = ''
80
78
  self.deliver.newpassword = ''
81
79
  self.deliver.affirmpassword = ''
@@ -99,7 +97,13 @@
99
97
  newpassword: '',
100
98
  affirmpassword: ''
101
99
  },
102
- functions: this.$login.f
100
+ functions: this.$login.f,
101
+ passwordRuleHint: PASSWORD_RULE_HINT
102
+ }
103
+ },
104
+ computed: {
105
+ passwordStrength () {
106
+ return getPasswordStrength(this.deliver.newpassword)
103
107
  }
104
108
  },
105
109
  props: ['show'],
@@ -116,11 +120,77 @@
116
120
  }
117
121
  </script>
118
122
  <style>
119
- /*修改密码body界面样式*/
120
123
  .modifystyle {
121
- background: #FCFEEE;
124
+ background: #fff;
125
+ padding: 10px 20px 20px;
126
+ }
127
+
128
+ .modifystyle .control-label {
129
+ color: #333;
130
+ font-weight: normal;
131
+ padding-top: 7px;
132
+ }
133
+
134
+ .password-field-wrap {
135
+ padding-left: 0;
136
+ padding-right: 0;
137
+ }
138
+
139
+ .password-field-wrap .form-control {
140
+ width: 100%;
141
+ }
142
+
143
+ .password-alert {
144
+ margin: 0 0 16px;
145
+ padding: 10px 12px;
146
+ border-radius: 4px;
147
+ background: #f5f7fa;
148
+ border: 1px solid #e4e7ed;
149
+ color: #606266;
150
+ font-size: 13px;
151
+ line-height: 1.6;
122
152
  }
123
- .modifystyle span{
124
- color: red;
153
+
154
+ .field-error {
155
+ display: block;
156
+ margin-top: 6px;
157
+ color: #e74c3c;
158
+ font-size: 12px;
159
+ line-height: 1.4;
160
+ }
161
+
162
+ .password-strength {
163
+ margin-top: 8px;
164
+ font-size: 12px;
165
+ line-height: 1.6;
166
+ color: #606266;
167
+ }
168
+
169
+ .password-strength .strength-label {
170
+ margin-right: 6px;
171
+ color: #909399;
172
+ }
173
+
174
+ .password-strength .strength-tag {
175
+ display: inline-block;
176
+ margin-right: 8px;
177
+ padding: 1px 8px;
178
+ border-radius: 3px;
179
+ font-size: 12px;
180
+ line-height: 1.5;
181
+ }
182
+
183
+ .password-strength .strength-tag.success {
184
+ color: #2e7d32;
185
+ background: #e8f5e9;
186
+ }
187
+
188
+ .password-strength .strength-tag.error {
189
+ color: #c62828;
190
+ background: #ffebee;
191
+ }
192
+
193
+ .password-strength .strength-desc {
194
+ color: #606266;
125
195
  }
126
196
  </style>
@@ -66,7 +66,7 @@
66
66
  self.arrays.pcd=[{label:'全部',value:''}]
67
67
  if(self.show.pcdShow){
68
68
  let HttpReset = new HttpResetClass()
69
- var pcd = await HttpReset.load('POST', 'api/af-revenue/sql/singleTable_OrderBy', {
69
+ var pcd = await HttpReset.load('POST', 'rs/sql/singleTable_OrderBy', {
70
70
  data: {
71
71
  items: 'f_pcd',
72
72
  tablename: 't_pcd',
@@ -80,7 +80,7 @@
80
80
  }else if(self.show.streetShow){
81
81
  console.log("------------查街道")
82
82
  let HttpReset = new HttpResetClass()
83
- var street = await HttpReset.load('POST', 'api/af-revenue/sql/singleTable_OrderBy', {
83
+ var street = await HttpReset.load('POST', 'rs/sql/singleTable_OrderBy', {
84
84
  data: {
85
85
  items: 'f_street',
86
86
  tablename: 't_street',
@@ -93,7 +93,7 @@
93
93
  }
94
94
  }else if(self.show.areaShow){
95
95
  let HttpReset = new HttpResetClass()
96
- var area = await HttpReset.load('POST', 'api/af-revenue/sql/singleTable_OrderBy', {
96
+ var area = await HttpReset.load('POST', 'rs/sql/singleTable_OrderBy', {
97
97
  data: {
98
98
  items: 'f_residential_area',
99
99
  tablename: 't_area',
@@ -155,8 +155,7 @@
155
155
  async pcdChange(){
156
156
  this.arrays.street=[{label:'全部',value:''}]
157
157
  var condition = `f_filialeid = '${this.$login.f.orgid}' and f_street is not null group by f_street`
158
- // todo v4
159
- let street = await this.$resetpost('api/af-revenue/sql/singleTable_OrderBy', {
158
+ let street = await this.$resetpost('rs/sql/singleTable_OrderBy', {
160
159
  data: {
161
160
  items: 'f_street',
162
161
  tablename: 't_street',
@@ -172,7 +171,7 @@
172
171
  async streetChange(){
173
172
  this.arrays.area=[{label:'全部',value:''}]
174
173
  var condition = `f_street = '${this.model.f_street?this.model.f_street:null}' and f_residential_area is not null group by f_residential_area`
175
- let area = await this.$resetpost('api/af-revenue/sql/singleTable_OrderBy', {
174
+ let area = await this.$resetpost('rs/sql/singleTable_OrderBy', {
176
175
  data: {
177
176
  items: 'f_residential_area',
178
177
  tablename: 't_area',
@@ -193,8 +192,7 @@
193
192
  }else{
194
193
  condition = `f_filialeid = '${this.$login.f.orgid}' and f_building is not null group by f_building`
195
194
  }
196
- // todo v4
197
- let build = await this.$resetpost('api/af-revenue/sql/singleTable_OrderBy', {
195
+ let build = await this.$resetpost('rs/sql/singleTable_OrderBy', {
198
196
  data: {
199
197
  items: 'f_building',
200
198
  tablename: 't_user_address',
@@ -80,9 +80,6 @@
80
80
  //找到跟节点
81
81
  ergodicList (val,parentname) {
82
82
  if(val.children.length > 0 ){
83
- if (val.name !== '组织机构' && parentname !== '资源管理'){
84
- this.resoptions.push({label: parentname === '组织机构' ? val.name : val.name+' - '+parentname, value: val.id})
85
- }
86
83
  parentname=parentname+val.name
87
84
  this.treetoList(val,parentname)
88
85
  }else {
@@ -167,7 +167,7 @@ export default {
167
167
  for (let row of this.$refs.department.resoptions) {
168
168
  depids.push(row.value)
169
169
  }
170
- let depid = depids.length ? plugin.convertToIn(depids) : `('')`
170
+ let depid = depids.length ? plugin.convertToIn(depids) : ('')
171
171
  condition += " and f_depid in " + depid;
172
172
  }
173
173
  }
@@ -51,7 +51,6 @@
51
51
  }
52
52
  },
53
53
  ready() {
54
- // todo v4
55
54
  this.$resetpost('/rs/search', {data: {source: this.source, userid: this.$login.f.id}}, {resolveMsg: null, rejectMsg: null})
56
55
  .then(res => {
57
56
  console.log('res-->' + JSON.stringify(res))
@@ -66,7 +65,7 @@
66
65
  this.$dispatch('re-res',obj)
67
66
  },
68
67
  filterUser(resids) {
69
- // 处理第一次进入页面值异常问题
68
+ // 处理第一次进入页面值异常问题
70
69
  if(resids.length > 0 && typeof resids[0] == "object"){
71
70
  resids = resids[0]
72
71
  }
@@ -87,4 +86,4 @@
87
86
 
88
87
  <style scoped>
89
88
 
90
- </style>
89
+ </style>
@@ -42,7 +42,7 @@
42
42
 
43
43
  <export-excel :data="$parent.$parent.getCondition"
44
44
  :field="$parent.$parent.getfield"
45
- sqlurl="api/af-revenue/logic/exportfile" sql-name="chargeQuery" template-name='收费查询导出'
45
+ sqlurl="rs/logic/exportfile" sql-name="chargeQuery" template-name='收费查询导出'
46
46
  :choose-col="true"></export-excel>
47
47
 
48
48
  <print-data :model="$parent.model" :field="$parent.$parent.getfield"
@@ -142,9 +142,11 @@
142
142
 
143
143
  <script>
144
144
  import co from 'co'
145
+ import { isStrongPassword } from '../../util/password-validation'
145
146
  import $ from 'jquery'
146
147
  import Vue from 'vue'
147
148
  import {HttpResetClass} from 'vue-client'
149
+ import {isPasswordModificationExpired} from '../../components/Util'
148
150
 
149
151
  let daibanJson = require('../../util/Daiban.json')
150
152
 
@@ -175,7 +177,6 @@ let saveGen = function *(self) {
175
177
  console.log('登录配置', self.config)
176
178
  if (self.config.isMac) {
177
179
  // 获取该登录人分公司下的mac配置
178
- // todo v4
179
180
  let getMacs = yield self.$resetpost('rs/sql/equipmentQuery', {data: {condition: `f_filialeids like '%${self.$login.f.f_orgids}%'`}}, {
180
181
  resolveMsg: null,
181
182
  rejectMsg: null
@@ -205,12 +206,15 @@ let saveGen = function *(self) {
205
206
  }
206
207
  }
207
208
  console.log(self.$login.depPrompt)
208
- // 弱口令验证
209
- //跳转过来的不进行验证
210
- if ((!self.otherLogin) && self.config.weakPassword && !(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(self.model.password))) {
209
+ // 弱口令验证(默认开启,跳转过来的不进行验证)
210
+ if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
211
211
  self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
212
212
  self.modifyPwShow = true
213
213
  })
214
+ } else if ((!self.otherLogin) && isPasswordModificationExpired(self.$login.f.f_last_modification_time)) {
215
+ self.$showMessage('登录系统: 您的密码已超过两个半月未修改,请修改密码后重新登录!!!', ['confirm']).then((res) => {
216
+ self.modifyPwShow = true
217
+ })
214
218
  } else if ((!self.otherLogin) && self.$login.depPrompt) {
215
219
  self.depPromptShow = true
216
220
  if (self.$login.showDaiBan && self.$login.r.includes('展示预约信息')){
@@ -236,6 +240,8 @@ let saveGen = function *(self) {
236
240
 
237
241
  } catch (ret) {
238
242
  console.error('登录失败', ret)
243
+ self.$login.s = null
244
+ self.$login['v3-session-key'] = null
239
245
  let msg
240
246
  if (ret instanceof Error) {
241
247
  msg = ret
@@ -262,19 +268,19 @@ export default {
262
268
  this.titleShow = this.$appdata.getSingleValue('关于我们')
263
269
  window.versionTime = window.versionTime ? window.versionTime : new Date().getTime()
264
270
  this.vTime = this.format(new Date(window.versionTime));
265
- try{
266
- let http = new HttpResetClass()
267
- let res = await http.load('POST', 'api/af-system/sql/singleTable',
268
- {data:{
269
- tablename: 't_changedeclare',
270
- condition: ` f_type ='变更通知' `
271
- }
272
- }, {resolveMsg: null, rejectMsg: null})
273
- if(res.data.length>0){
274
- console.log("---------------获取通知",res.data[0].f_change_message)
275
- this.notice=res.data[0].f_change_message
276
- }
277
- }catch(e){}
271
+ // try{
272
+ // let http = new HttpResetClass()
273
+ // let res = await http.load('POST', 'rs/sql/singleTable',
274
+ // {data:{
275
+ // tablename: 't_changedeclare',
276
+ // condition: ` f_type ='变更通知' `
277
+ // }
278
+ // }, {resolveMsg: null, rejectMsg: null})
279
+ // if(res.data.length>0){
280
+ // console.log("---------------获取通知",res.data[0].f_change_message)
281
+ // this.notice=res.data[0].f_change_message
282
+ // }
283
+ // }catch(e){}
278
284
 
279
285
  this.loginother();
280
286
  $('#login-button').click(function (event) {
@@ -283,10 +289,8 @@ export default {
283
289
  })
284
290
  if (window.location.search && window.location.search.indexOf('af_key') !== -1&& window.location.search.indexOf('af_n') !== -1) {
285
291
  const subUrl = window.location.search.replace('?af_key=','').split('&af_n=')
286
- console.log(subUrl)
287
292
  this.model.ename = window.atob(subUrl[0])
288
293
  this.model.password = window.atob(subUrl[1])
289
- console.log('this.model.ename',this.model.ename)
290
294
  this.otherLogin = true
291
295
  this.confirm()
292
296
  }else{
@@ -364,7 +368,7 @@ export default {
364
368
  } else {
365
369
  condition =` f_orderstate is null and (f_address in( select f_address from t_user_address where f_slice_area='柠条塔') or f_address like '%柠条塔%') `
366
370
  }
367
- await http.load('POST', '/api/af-system/sql/singleTable', {data: {
371
+ await http.load('POST', '/rs/sql/singleTable', {data: {
368
372
  tablename:'t_order_center',
369
373
  condition:condition
370
374
  }}, {
@@ -440,7 +444,6 @@ export default {
440
444
  if (this.config.distanceLogin) {
441
445
  if (this.$login && this.$login.getUrlParames('name') ) {
442
446
  let ename = this.$login.getUrlParames('name');
443
- // todo v4
444
447
  let logininfo = await this.$resetpost('rs/logic/getLoginData',{data:{ename:ename}},{resolveMsg: null, rejectMsg: null});
445
448
  if(logininfo.data){
446
449
  if(logininfo.data.ename && logininfo.data.password){
@@ -140,9 +140,11 @@
140
140
 
141
141
  <script>
142
142
  import co from 'co'
143
+ import { isStrongPassword } from '../../util/password-validation'
143
144
  import $ from 'jquery'
144
145
  import Vue from 'vue'
145
146
  import {HttpResetClass} from 'vue-client'
147
+ import {isPasswordModificationExpired} from '../../components/Util'
146
148
 
147
149
  let daibanJson = require('../../util/Daiban.json')
148
150
 
@@ -173,7 +175,6 @@ let saveGen = function *(self) {
173
175
  console.log('登录配置', self.config)
174
176
  if (self.config.isMac) {
175
177
  // 获取该登录人分公司下的mac配置
176
- // todo v4
177
178
  let getMacs = yield self.$resetpost('rs/sql/equipmentQuery', {data: {condition: `f_filialeids like '%${self.$login.f.f_orgids}%'`}}, {
178
179
  resolveMsg: null,
179
180
  rejectMsg: null
@@ -203,12 +204,15 @@ let saveGen = function *(self) {
203
204
  }
204
205
  }
205
206
  console.log(self.$login.depPrompt)
206
- // 弱口令验证
207
- //跳转过来的不进行验证
208
- if ((!self.otherLogin) && self.config.weakPassword && !(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(self.model.password))) {
207
+ // 弱口令验证(默认开启,跳转过来的不进行验证)
208
+ if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
209
209
  self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
210
210
  self.modifyPwShow = true
211
211
  })
212
+ } else if ((!self.otherLogin) && isPasswordModificationExpired(self.$login.f.f_last_modification_time)) {
213
+ self.$showMessage('登录系统: 您的密码已超过两个半月未修改,请修改密码后重新登录!!!', ['confirm']).then((res) => {
214
+ self.modifyPwShow = true
215
+ })
212
216
  } else if ((!self.otherLogin) && self.$login.depPrompt) {
213
217
  self.depPromptShow = true
214
218
  if (self.$login.showDaiBan && self.$login.r.includes('展示预约信息')){
@@ -234,6 +238,8 @@ let saveGen = function *(self) {
234
238
 
235
239
  } catch (ret) {
236
240
  console.error('登录失败', ret)
241
+ self.$login.s = null
242
+ self.$login['v3-session-key'] = null
237
243
  let msg
238
244
  if (ret instanceof Error) {
239
245
  msg = ret
@@ -260,19 +266,19 @@ export default {
260
266
  this.titleShow = this.$appdata.getSingleValue('关于我们')
261
267
  window.versionTime = window.versionTime ? window.versionTime : new Date().getTime()
262
268
  this.vTime = this.format(new Date(window.versionTime));
263
- try{
264
- let http = new HttpResetClass()
265
- let res = await http.load('POST', 'api/af-system/sql/singleTable',
266
- {data:{
267
- tablename: 't_changedeclare',
268
- condition: ` f_type ='变更通知' `
269
- }
270
- }, {resolveMsg: null, rejectMsg: null})
271
- if(res.data.length>0){
272
- console.log("---------------获取通知",res.data[0].f_change_message)
273
- this.notice=res.data[0].f_change_message
274
- }
275
- }catch(e){}
269
+ // try{
270
+ // let http = new HttpResetClass()
271
+ // let res = await http.load('POST', 'rs/sql/singleTable',
272
+ // {data:{
273
+ // tablename: 't_changedeclare',
274
+ // condition: ` f_type ='变更通知' `
275
+ // }
276
+ // }, {resolveMsg: null, rejectMsg: null})
277
+ // if(res.data.length>0){
278
+ // console.log("---------------获取通知",res.data[0].f_change_message)
279
+ // this.notice=res.data[0].f_change_message
280
+ // }
281
+ // }catch(e){}
276
282
 
277
283
  this.loginother();
278
284
  $('#login-button').click(function (event) {
@@ -281,10 +287,8 @@ export default {
281
287
  })
282
288
  if (window.location.search && window.location.search.indexOf('af_key') !== -1&& window.location.search.indexOf('af_n') !== -1) {
283
289
  const subUrl = window.location.search.replace('?af_key=','').split('&af_n=')
284
- console.log(subUrl)
285
290
  this.model.ename = window.atob(subUrl[0])
286
291
  this.model.password = window.atob(subUrl[1])
287
- console.log('this.model.ename',this.model.ename)
288
292
  this.otherLogin = true
289
293
  this.confirm()
290
294
  }else{
@@ -362,7 +366,7 @@ export default {
362
366
  } else {
363
367
  condition =` f_orderstate is null and (f_address in( select f_address from t_user_address where f_slice_area='柠条塔') or f_address like '%柠条塔%') `
364
368
  }
365
- await http.load('POST', '/api/af-system/sql/singleTable', {data: {
369
+ await http.load('POST', '/rs/sql/singleTable', {data: {
366
370
  tablename:'t_order_center',
367
371
  condition:condition
368
372
  }}, {
@@ -438,7 +442,6 @@ export default {
438
442
  if (this.config.distanceLogin) {
439
443
  if (this.$login && this.$login.getUrlParames('name') ) {
440
444
  let ename = this.$login.getUrlParames('name');
441
- // todo v4
442
445
  let logininfo = await this.$resetpost('rs/logic/getLoginData',{data:{ename:ename}},{resolveMsg: null, rejectMsg: null});
443
446
  if(logininfo.data){
444
447
  if(logininfo.data.ename && logininfo.data.password){
@@ -146,9 +146,11 @@
146
146
 
147
147
  <script>
148
148
  import co from 'co'
149
+ import { isStrongPassword } from '../../util/password-validation'
149
150
  import $ from 'jquery'
150
151
  import Vue from 'vue'
151
152
  import {HttpResetClass} from 'vue-client'
153
+ import {isPasswordModificationExpired} from '../../components/Util'
152
154
 
153
155
  let daibanJson = require('../../util/Daiban.json')
154
156
 
@@ -179,7 +181,6 @@ let saveGen = function *(self) {
179
181
  console.log('登录配置', self.config)
180
182
  if (self.config.isMac) {
181
183
  // 获取该登录人分公司下的mac配置
182
- // todo v4
183
184
  let getMacs = yield self.$resetpost('rs/sql/equipmentQuery', {data: {condition: `f_filialeids like '%${self.$login.f.f_orgids}%'`}}, {
184
185
  resolveMsg: null,
185
186
  rejectMsg: null
@@ -209,12 +210,15 @@ let saveGen = function *(self) {
209
210
  }
210
211
  }
211
212
  console.log(self.$login.depPrompt)
212
- // 弱口令验证
213
- //跳转过来的不进行验证
214
- if ((!self.otherLogin) && self.config.weakPassword && !(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(self.model.password))) {
213
+ // 弱口令验证(默认开启,跳转过来的不进行验证)
214
+ if ((!self.otherLogin) && !isStrongPassword(self.model.password)) {
215
215
  self.$showMessage('登录系统: 此账户的密码过于简单,请修改密码后重新登陆!!!', ['confirm']).then((res) => {
216
216
  self.modifyPwShow = true
217
217
  })
218
+ } else if ((!self.otherLogin) && isPasswordModificationExpired(self.$login.f.f_last_modification_time)) {
219
+ self.$showMessage('登录系统: 您的密码已超过两个半月未修改,请修改密码后重新登录!!!', ['confirm']).then((res) => {
220
+ self.modifyPwShow = true
221
+ })
218
222
  } else if ((!self.otherLogin) && self.$login.depPrompt) {
219
223
  self.depPromptShow = true
220
224
  if (self.$login.showDaiBan && self.$login.r.includes('展示预约信息')){
@@ -240,6 +244,8 @@ let saveGen = function *(self) {
240
244
 
241
245
  } catch (ret) {
242
246
  console.error('登录失败', ret)
247
+ self.$login.s = null
248
+ self.$login['v3-session-key'] = null
243
249
  let msg
244
250
  if (ret instanceof Error) {
245
251
  msg = ret
@@ -264,19 +270,19 @@ export default {
264
270
  title: '登录',
265
271
  async ready () {
266
272
  this.titleShow = true
267
- try{
268
- let http = new HttpResetClass()
269
- let res = await http.load('POST', 'api/af-system/sql/singleTable',
270
- {data:{
271
- tablename: 't_changedeclare',
272
- condition: ` f_type ='变更通知' `
273
- }
274
- }, {resolveMsg: null, rejectMsg: null})
275
- if(res.data.length>0){
276
- console.log("---------------获取通知",res.data[0].f_change_message)
277
- this.notice=res.data[0].f_change_message
278
- }
279
- }catch(e){}
273
+ // try{
274
+ // let http = new HttpResetClass()
275
+ // let res = await http.load('POST', 'rs/sql/singleTable',
276
+ // {data:{
277
+ // tablename: 't_changedeclare',
278
+ // condition: ` f_type ='变更通知' `
279
+ // }
280
+ // }, {resolveMsg: null, rejectMsg: null})
281
+ // if(res.data.length>0){
282
+ // console.log("---------------获取通知",res.data[0].f_change_message)
283
+ // this.notice=res.data[0].f_change_message
284
+ // }
285
+ // }catch(e){}
280
286
 
281
287
  this.loginother();
282
288
  $('#login-button').click(function (event) {
@@ -285,10 +291,8 @@ export default {
285
291
  })
286
292
  if (window.location.search && window.location.search.indexOf('af_key') !== -1&& window.location.search.indexOf('af_n') !== -1) {
287
293
  const subUrl = window.location.search.replace('?af_key=','').split('&af_n=')
288
- console.log(subUrl)
289
294
  this.model.ename = window.atob(subUrl[0])
290
295
  this.model.password = window.atob(subUrl[1])
291
- console.log('this.model.ename',this.model.ename)
292
296
  this.otherLogin = true
293
297
  this.confirm()
294
298
  }else{
@@ -353,7 +357,7 @@ export default {
353
357
  } else {
354
358
  condition =` f_orderstate is null and (f_address in( select f_address from t_user_address where f_slice_area='柠条塔') or f_address like '%柠条塔%') `
355
359
  }
356
- await http.load('POST', '/api/af-system/sql/singleTable', {data: {
360
+ await http.load('POST', '/rs/sql/singleTable', {data: {
357
361
  tablename:'t_order_center',
358
362
  condition:condition
359
363
  }}, {
@@ -429,7 +433,6 @@ export default {
429
433
  if (this.config.distanceLogin) {
430
434
  if (this.$login && this.$login.getUrlParames('name') ) {
431
435
  let ename = this.$login.getUrlParames('name');
432
- // todo v4
433
436
  let logininfo = await this.$resetpost('rs/logic/getLoginData',{data:{ename:ename}},{resolveMsg: null, rejectMsg: null});
434
437
  if(logininfo.data){
435
438
  if(logininfo.data.ename && logininfo.data.password){