system-clients 3.2.97 → 3.2.98-weinan

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 (219) hide show
  1. package/.eslintrc.js +16 -16
  2. package/.gradle/7.4/checksums/checksums.lock +0 -0
  3. package/.gradle/7.4/dependencies-accessors/dependencies-accessors.lock +0 -0
  4. package/.gradle/7.4/dependencies-accessors/gc.properties +0 -0
  5. package/.gradle/7.4/executionHistory/executionHistory.bin +0 -0
  6. package/.gradle/7.4/executionHistory/executionHistory.lock +0 -0
  7. package/.gradle/7.4/fileChanges/last-build.bin +0 -0
  8. package/.gradle/7.4/fileHashes/fileHashes.bin +0 -0
  9. package/.gradle/7.4/fileHashes/fileHashes.lock +0 -0
  10. package/.gradle/7.4/gc.properties +0 -0
  11. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  12. package/.gradle/buildOutputCleanup/cache.properties +2 -0
  13. package/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  14. package/.gradle/file-system.probe +0 -0
  15. package/.gradle/vcs-1/gc.properties +0 -0
  16. package/SystemClient.iml +8 -8
  17. package/build/webpack.base.conf.js +85 -85
  18. package/build.gradle +6 -6
  19. package/examples/LoginPage/App.vue +21 -21
  20. package/examples/LoginPage/index.html +11 -11
  21. package/examples/LoginPage/main.js +15 -15
  22. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  23. package/gradle/wrapper/gradle-wrapper.properties +5 -0
  24. package/index.html +21 -21
  25. package/package.json +103 -103
  26. package/src/components/Main.vue +961 -937
  27. package/src/components/TabButton.vue +201 -201
  28. package/src/components/Tabs.vue +67 -67
  29. package/src/components/Util.js +343 -343
  30. package/src/components/addressManage/AddressCascadingMenu.vue +145 -145
  31. package/src/components/common/ProgressBase.vue +83 -83
  32. package/src/components/equipment/EquipmentManage.vue +83 -83
  33. package/src/components/equipment/PcAdd.vue +115 -115
  34. package/src/components/equipment/PcList.vue +119 -119
  35. package/src/components/equipment/PcManage.vue +61 -61
  36. package/src/components/equipment/PhoneAdd.vue +118 -118
  37. package/src/components/equipment/PhoneList.vue +113 -113
  38. package/src/components/equipment/PhoneManage.vue +61 -61
  39. package/src/components/equipment/PosAdd.vue +323 -319
  40. package/src/components/equipment/PosList.vue +294 -292
  41. package/src/components/equipment/PosManage.vue +138 -138
  42. package/src/components/equipment/PosManageBoth.vue +125 -125
  43. package/src/components/equipment/PosParamAdd.vue +236 -236
  44. package/src/components/equipment/PosParamList.vue +121 -121
  45. package/src/components/equipment/PosParamManage.vue +51 -51
  46. package/src/components/materialManage/materialData.vue +44 -44
  47. package/src/components/materialManage/materialList.vue +255 -255
  48. package/src/components/parammanage/ParamManage.vue +42 -42
  49. package/src/components/parammanage/ParamPage.vue +337 -337
  50. package/src/components/parammanage/ParamPages.vue +222 -222
  51. package/src/components/parammanage/SinglePage.vue +235 -235
  52. package/src/components/parammanage/SinglePages.vue +167 -167
  53. package/src/components/server/AddChangeMsg.vue +66 -66
  54. package/src/components/server/ChangeDeclare.vue +45 -45
  55. package/src/components/server/ImageVieweTest.vue +56 -56
  56. package/src/components/server/ImageViewer.vue +350 -350
  57. package/src/components/server/LeftTree.vue +111 -111
  58. package/src/components/server/LoadData.vue +55 -55
  59. package/src/components/server/Login.vue +37 -20
  60. package/src/components/server/LoginPage.vue +235 -235
  61. package/src/components/server/LoginView.vue +128 -128
  62. package/src/components/server/Menu.vue +188 -188
  63. package/src/components/server/ModifyPw.vue +125 -126
  64. package/src/components/server/PcdBuildingSelect.vue +241 -243
  65. package/src/components/server/ResSelect.vue +175 -169
  66. package/src/components/server/ResSelectGroup.vue +211 -211
  67. package/src/components/server/RightTree.vue +348 -348
  68. package/src/components/server/RoleSelector.vue +89 -90
  69. package/src/components/server/TestResSelect.vue +58 -58
  70. package/src/components/server/TestResSelectGroup.vue +388 -388
  71. package/src/filiale/baole/Login.vue +568 -570
  72. package/src/filiale/baole/system.js +5 -5
  73. package/src/filiale/bayan/PosAdd.vue +369 -0
  74. package/src/filiale/bayan/PosList.vue +349 -0
  75. package/src/filiale/bayan/PosManage.vue +138 -0
  76. package/src/filiale/bayan/system.js +6 -0
  77. package/src/filiale/chengtou/Login.vue +537 -539
  78. package/src/filiale/chengtou/system.js +5 -5
  79. package/src/filiale/dongguan/Login.vue +900 -902
  80. package/src/filiale/dongguan/Main.vue +715 -717
  81. package/src/filiale/dongguan/system.js +6 -6
  82. package/src/filiale/furuike/Login.vue +583 -587
  83. package/src/filiale/furuike/Main.vue +827 -840
  84. package/src/filiale/furuike/system.js +7 -7
  85. package/src/filiale/gehua/Main.vue +807 -809
  86. package/src/filiale/gehua/system.js +6 -6
  87. package/src/filiale/konggang/Login.vue +470 -472
  88. package/src/filiale/konggang/system.js +7 -7
  89. package/src/filiale/qianneng/Login.vue +582 -584
  90. package/src/filiale/qianneng/Main.vue +816 -818
  91. package/src/filiale/qianneng/ModifyPw.vue +107 -108
  92. package/src/filiale/qianneng/system.js +11 -11
  93. package/src/filiale/rizhao/LeftTree.vue +111 -111
  94. package/src/filiale/rizhao/Login.vue +791 -793
  95. package/src/filiale/rizhao/Main.vue +611 -611
  96. package/src/filiale/rizhao/system.js +14 -14
  97. package/src/filiale/shiquan/Login.vue +564 -566
  98. package/src/filiale/shiquan/system.js +8 -8
  99. package/src/filiale/tianyi/Login.vue +571 -573
  100. package/src/filiale/tianyi/system.js +5 -5
  101. package/src/filiale/tongchuan/Login.vue +561 -563
  102. package/src/filiale/tongchuan/Main.vue +1019 -1021
  103. package/src/filiale/tongchuan/system.js +7 -7
  104. package/src/filiale/weinan/Main.vue +923 -924
  105. package/src/filiale/weinan/system.js +7 -7
  106. package/src/filiale/wenxi/Login.vue +535 -537
  107. package/src/filiale/wenxi/Main.vue +785 -787
  108. package/src/filiale/wenxi/system.js +10 -10
  109. package/src/filiale/wuhai/LeftTree.vue +141 -141
  110. package/src/filiale/wuhai/Main.vue +807 -810
  111. package/src/filiale/wuhai/system.js +10 -10
  112. package/src/filiale/yuchuan/Login.vue +889 -891
  113. package/src/filiale/yuchuan/Main.vue +864 -866
  114. package/src/filiale/yuchuan/system.js +10 -10
  115. package/src/filiale/zhoukou/Main.vue +807 -809
  116. package/src/filiale/zhoukou/system.js +6 -6
  117. package/src/plugins/EncryptUtil.js +1 -1
  118. package/src/plugins/GetLoginInfoService.js +173 -13
  119. package/src/plugins/HeatGetLoginInfoService.js +491 -491
  120. package/src/plugins/validation.js +15 -15
  121. package/src/stores/AppData.js +38 -38
  122. package/src/stores/HeatAppData.js +38 -38
  123. package/src/styles/fonts/glyphicons-halflings-regular.svg +288 -288
  124. package/src/styles/less/.csscomb.json +304 -304
  125. package/src/styles/less/.csslintrc +19 -19
  126. package/src/styles/less/alerts.less +73 -73
  127. package/src/styles/less/aofeng/animate.min.css +10 -10
  128. package/src/styles/less/aofeng/expandcss.less +569 -569
  129. package/src/styles/less/aofeng/login.less +367 -367
  130. package/src/styles/less/aofeng/standard.less +2507 -2507
  131. package/src/styles/less/aofeng/themeOne/BinaryTemplate.less +690 -690
  132. package/src/styles/less/aofeng/themeOne/loginStyle.less +1586 -1586
  133. package/src/styles/less/aofeng/themeOne/systemStyle.less +2650 -2650
  134. package/src/styles/less/aofeng/themeOne.less +17 -17
  135. package/src/styles/less/aofeng/themeTwo/newStyle1.less +415 -415
  136. package/src/styles/less/aofeng/themeTwo.less +3 -3
  137. package/src/styles/less/badges.less +66 -66
  138. package/src/styles/less/bootstrap.less +66 -66
  139. package/src/styles/less/breadcrumbs.less +26 -26
  140. package/src/styles/less/button-groups.less +247 -247
  141. package/src/styles/less/buttons.less +172 -172
  142. package/src/styles/less/carousel.less +269 -269
  143. package/src/styles/less/close.less +34 -34
  144. package/src/styles/less/code.less +69 -69
  145. package/src/styles/less/component-animations.less +33 -33
  146. package/src/styles/less/dropdowns.less +216 -216
  147. package/src/styles/less/fonts-list.less +25 -25
  148. package/src/styles/less/forms.less +626 -626
  149. package/src/styles/less/glyphicons.less +305 -305
  150. package/src/styles/less/grid.less +84 -84
  151. package/src/styles/less/input-groups.less +167 -167
  152. package/src/styles/less/jumbotron.less +52 -52
  153. package/src/styles/less/labels.less +64 -64
  154. package/src/styles/less/list-group.less +141 -141
  155. package/src/styles/less/manageStyle/manageChile.less +180 -180
  156. package/src/styles/less/manageStyle/manageStyle/manageChile.less +180 -180
  157. package/src/styles/less/manageStyle/manageStyle/manageStyle.less +1102 -1102
  158. package/src/styles/less/manageStyle/manageStyle/safeStyle.less +498 -498
  159. package/src/styles/less/manageStyle/manageStyle.less +1102 -1102
  160. package/src/styles/less/manageStyle/safeStyle.less +498 -498
  161. package/src/styles/less/media.less +66 -66
  162. package/src/styles/less/mixins/alerts.less +14 -14
  163. package/src/styles/less/mixins/background-variant.less +9 -9
  164. package/src/styles/less/mixins/border-radius.less +18 -18
  165. package/src/styles/less/mixins/buttons.less +69 -69
  166. package/src/styles/less/mixins/center-block.less +7 -7
  167. package/src/styles/less/mixins/clearfix.less +22 -22
  168. package/src/styles/less/mixins/forms.less +90 -90
  169. package/src/styles/less/mixins/gradients.less +59 -59
  170. package/src/styles/less/mixins/grid-framework.less +92 -92
  171. package/src/styles/less/mixins/grid.less +122 -122
  172. package/src/styles/less/mixins/hide-text.less +21 -21
  173. package/src/styles/less/mixins/image.less +33 -33
  174. package/src/styles/less/mixins/labels.less +12 -12
  175. package/src/styles/less/mixins/list-group.less +30 -30
  176. package/src/styles/less/mixins/nav-divider.less +10 -10
  177. package/src/styles/less/mixins/nav-vertical-align.less +9 -9
  178. package/src/styles/less/mixins/opacity.less +8 -8
  179. package/src/styles/less/mixins/pagination.less +24 -24
  180. package/src/styles/less/mixins/panels.less +24 -24
  181. package/src/styles/less/mixins/progress-bar.less +10 -10
  182. package/src/styles/less/mixins/reset-filter.less +8 -8
  183. package/src/styles/less/mixins/reset-text.less +18 -18
  184. package/src/styles/less/mixins/resize.less +6 -6
  185. package/src/styles/less/mixins/responsive-visibility.less +15 -15
  186. package/src/styles/less/mixins/size.less +10 -10
  187. package/src/styles/less/mixins/tab-focus.less +9 -9
  188. package/src/styles/less/mixins/table-row.less +44 -44
  189. package/src/styles/less/mixins/text-emphasis.less +9 -9
  190. package/src/styles/less/mixins/text-overflow.less +8 -8
  191. package/src/styles/less/mixins/vendor-prefixes.less +227 -227
  192. package/src/styles/less/mixins.less +40 -40
  193. package/src/styles/less/modals.less +151 -151
  194. package/src/styles/less/navbar.less +660 -660
  195. package/src/styles/less/navs.less +285 -285
  196. package/src/styles/less/normalize.less +424 -424
  197. package/src/styles/less/pager.less +76 -76
  198. package/src/styles/less/pagination.less +89 -89
  199. package/src/styles/less/panels.less +275 -275
  200. package/src/styles/less/popovers.less +131 -131
  201. package/src/styles/less/print.less +101 -101
  202. package/src/styles/less/progress-bars.less +87 -87
  203. package/src/styles/less/responsive-embed.less +35 -35
  204. package/src/styles/less/responsive-utilities.less +194 -194
  205. package/src/styles/less/scaffolding.less +161 -161
  206. package/src/styles/less/stand.less +207 -207
  207. package/src/styles/less/tables.less +312 -312
  208. package/src/styles/less/theme.less +291 -291
  209. package/src/styles/less/thumbnails.less +36 -36
  210. package/src/styles/less/tooltip.less +102 -102
  211. package/src/styles/less/type.less +316 -316
  212. package/src/styles/less/utilities.less +55 -55
  213. package/src/styles/less/variables.less +899 -899
  214. package/src/styles/less/wells.less +29 -29
  215. package/src/system.js +125 -121
  216. package/src/util/Daiban.json +12 -12
  217. package/yarn-error.log +6896 -6896
  218. package/src/filiale/ruihua/Login.vue +0 -549
  219. package/src/filiale/ruihua/system.js +0 -5
@@ -1,6 +1,6 @@
1
- // 分公司特殊组件页面注册
2
-
3
- let specialComp = {
4
- 'home-page': (resolve) => require(['./Main'], resolve)
5
- }
6
- exports.specialComp = specialComp
1
+ // 分公司特殊组件页面注册
2
+
3
+ let specialComp = {
4
+ 'home-page': (resolve) => require(['./Main'], resolve)
5
+ }
6
+ exports.specialComp = specialComp
@@ -48,6 +48,6 @@ export default {
48
48
  let encrypt = new RsaEncryptJS();
49
49
  encrypt.setPrivateKey('MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKo++i9J9dzAFtbxwowKDCo2mxi7MXxE8A8VvssaydWjjgmEz/HHMPLOhi1182a1si4pWL0/MizKnquD7T2Bu4jpQbAFnkNYEMEyq/kw904Xl0JCQHYFuvnI99RE8Q3KlTP6kEUGDjV34EL6vBGJcQvArLtj1xoP8y0nIfJ2Pw5TAgMBAAECgYAGGB8IllMwxceLhjf6n1l0IWRH7FuHIUieoZ6k0p6rASHSgWiYNRMxfecbtX8zDAoG0QAWNi7rn40ygpR5gS1fWDAKhmnhKgQIT6wW0VmD4hraaeyP78iy8BLhlvblri2nCPIhDH5+l96v7D47ZZi3ZSOzcj89s1eS/k7/N4peEQJBAPEtGGJY+lBoCxQMhGyzuzDmgcS1Un1ZE2pt+XNCVl2b+T8fxWJH3tRRR8wOY5uvtPiK1HM/IjT0T5qwQeH8Yk0CQQC0tcv3d/bDb7bOe9QzUFDQkUSpTdPWAgMX2OVPxjdq3Sls9oA5+fGNYEy0OgyqTjde0b4iRzlD1O0OhLqPSUMfAkEAh5FIvqezdRU2/PsYSR4yoAdCdLdT+h/jGRVefhqQ/6eYUJJkWp15tTFHQX3pIe9/s6IeT/XyHYAjaxmevxAmlQJBAKSdhvQjf9KAjZKDEsa7vyJ/coCXuQUWSCMNHbcR5aGfXgE4e45UtUoIE1eKGcd6AM6LWhx3rR6xdFDpb9je8BkCQB0SpevGfOQkMk5i8xkEt9eeYP0fi8nv6eOUcK96EXbzs4jV2SAoQJ9oJegPtPROHbhIvVUmNQTbuP10Yjg59+8=');
50
50
  let resdata = encrypt.decrypt(word);
51
- return JSON.parse(resdata.toString()) ;
51
+ return resdata.toString();
52
52
  },
53
53
  }
@@ -2,17 +2,36 @@ import Vue from 'vue'
2
2
  import {HttpResetClass} from 'vue-client'
3
3
  import cryptJS from './EncryptUtil'
4
4
 
5
- let loginGen = async function (username, password, cue) {
6
- let data = {username, password,resourceName:'客服系统'}
7
- const getLogin = await Vue.resetpost('/api/af-auth/login', data,
8
- {resolveMsg: null, rejectMsg: null,headerConfig:{'Content-type': "application/json"}
9
- })
10
- if (getLogin.data) {
5
+ let loginGen = async function (name, password, cue) {
6
+ let data = {name: name, password: password}
7
+ data = '$' + cryptJS.RSAEncrypt(JSON.stringify(data))
8
+ const getLogin = await Vue.resetpost('/rs/logic/getLogin', data, {resolveMsg: null, rejectMsg: null})
9
+ if (getLogin.data.states === '登录成功') {
11
10
  //获取jwt
12
- Vue.$login.jwt = getLogin.data.resources.data.id
13
- Vue.$login.jwtNew = getLogin.data.access_token
11
+ Vue.$login.jwt = getLogin.data.jwt
12
+ Vue.$login.jwtNew = getLogin.data.jwtNew
13
+ if (getLogin.data.s) {
14
+ Vue.$login['v3-session-key'] = cryptJS.RSADecrypt(getLogin.data.s)
15
+ }
14
16
  // 调用远程登录服务,获取所有有权访问的功能
15
- Vue.$login.f = getLogin.data.resources.data
17
+ data = {username: name, password: password}
18
+ data = cryptJS.RSAEncrypt(JSON.stringify(data))
19
+ const resource = await Vue.resetpost(`/rs/user/userLogin/客服系统`, data, {
20
+ resolveMsg: null,
21
+ rejectMsg: null
22
+ })
23
+ // 兼容旧版ldao
24
+ if ((JSON.stringify(resource.data).startsWith("{") || JSON.stringify(resource.data).startsWith("[")) && resource.data.code && resource.data.msg && resource.data.code !== 200) {
25
+ throw {status: 555, data: resource.data.msg}
26
+ }
27
+ console.log('登陆获取Util', JSON.stringify(resource.data))
28
+
29
+ // 兼容旧版ldao,旧版不返回code
30
+ if ((JSON.stringify(resource.data).startsWith("{") || JSON.stringify(resource.data).startsWith("[")) && resource.data.code && resource.data.msg) {
31
+ Vue.$login.f = resource.data.data
32
+ } else {
33
+ Vue.$login.f = resource.data
34
+ }
16
35
  // 把登录用户添加到cookie里
17
36
  Vue.cookie.set('loginId', Vue.$login.f.id)
18
37
  try {
@@ -21,6 +40,7 @@ let loginGen = async function (username, password, cue) {
21
40
  source: "tool.getFullTree(this.getRights().where(row.getType() == $function$))",
22
41
  userid: Vue.$login.f.id
23
42
  }, { resolveMsg: null, rejectMsg: null })
43
+ console.log('有权限功能返回数据', JSON.stringify(hasRight.data))
24
44
  //准备替换功能树
25
45
  var fun = []
26
46
  hasRight.data[0].children[0].children.forEach((item) => {
@@ -30,6 +50,8 @@ let loginGen = async function (username, password, cue) {
30
50
  })
31
51
  }
32
52
  })
53
+ // console.log('替换前', JSON.stringify(Vue.$login.f.functions))
54
+ // console.log('替换后', JSON.stringify(fun))
33
55
  Vue.$login.f.functions = fun
34
56
  } catch (error) {
35
57
  }
@@ -80,6 +102,21 @@ let loginGen = async function (username, password, cue) {
80
102
  Vue.$login.f.f_installman = []
81
103
  console.log('安装人模块', error)
82
104
  }
105
+ // 获取换表员
106
+ // try {
107
+ // let getChangeMeterman = await Vue.resetpost('/rs/search', {
108
+ // source: 'this.getParentByType($organization$).getChildByName($换表员$).getUsers()',
109
+ // userid: Vue.$login.f.id
110
+ // }, {resolveMsg: null, rejectMsg: null})
111
+ // let changemeterman = []
112
+ // for (let i = 0; i < getChangeMeterman.data.length; i++) {
113
+ // changemeterman.push(getChangeMeterman.data[i])
114
+ // }
115
+ // Vue.$login.f.f_changemeterman = changemeterman
116
+ // }catch (error) {
117
+ // Vue.$login.f.f_changemeterman = []
118
+ // console.log('换表员模块',error)
119
+ // }
83
120
  // 获取资源服务权限
84
121
  try {
85
122
  let getLic = await Vue.resetpost('/rs/search', {
@@ -97,6 +134,37 @@ let loginGen = async function (username, password, cue) {
97
134
  Vue.$login.f.f_gasman = []
98
135
  console.log('资源服务权限', error)
99
136
  }
137
+ // // 票据使用人
138
+ // try {
139
+ // let getPaperUseman = await Vue.resetpost('/rs/search', {
140
+ // source: 'this.getParentByType($organization$).getChildByName($票据使用人$).getUsers()',
141
+ // userid: Vue.$login.f.id
142
+ // }, {resolveMsg: null, rejectMsg: null})
143
+ // let perperuseman = []
144
+ // for (let i = 0; i < getPaperUseman.data.length; i++) {
145
+ // perperuseman.push(getPaperUseman.data[i])
146
+ // }
147
+ // Vue.$login.f.f_paperUseman = perperuseman
148
+ // }catch (error) {
149
+ // Vue.$login.f.f_paperUseman = []
150
+ // console.log('票据使用人模块',error)
151
+ //
152
+ // }
153
+ // // 票据分配人
154
+ // try {
155
+ // let getPaperAllotman = await Vue.resetpost('/rs/search', {
156
+ // source: 'this.getParentByType($organization$).getChildByName($票据分配人$).getUsers()',
157
+ // userid: Vue.$login.f.id
158
+ // }, {resolveMsg: null, rejectMsg: null})
159
+ // let paperallotman = []
160
+ // for (let i = 0; i < getPaperAllotman.data.length; i++) {
161
+ // paperallotman.push(getPaperAllotman.data[i])
162
+ // }
163
+ // Vue.$login.f.f_paperAllotman = paperallotman
164
+ // }catch (error) {
165
+ // Vue.$login.f.f_paperAllotman = []
166
+ // console.log('票据分配人模块',error)
167
+ // }
100
168
  // TODO 处理界面细节
101
169
  try {
102
170
  let viewDetails = await Vue.resetpost('rs/search', {
@@ -110,10 +178,62 @@ let loginGen = async function (username, password, cue) {
110
178
  Vue.$login.r = []
111
179
  console.log('加载模块失败', error)
112
180
  }
181
+ // 检查用户是否为话务员角色
182
+ try {
183
+ let http = new HttpResetClass()
184
+ // 先查询所有包含"话务员"的角色
185
+ let operatorRoles = await http.load('POST', '/rs/sql/singleTable', {
186
+ data: {
187
+ tablename: 't_role',
188
+ condition: `name LIKE '%话务员%'`
189
+ }
190
+ }, {resolveMsg: null, rejectMsg: null})
191
+ // 如果找到话务员角色,再查询用户是否有这些角色
192
+ if (operatorRoles.data && operatorRoles.data.length > 0) {
193
+ // 查询用户信息,检查用户的roles字段是否包含话务员角色的id
194
+ let userInfo = await http.load('POST', '/rs/sql/singleTable', {
195
+ data: {
196
+ tablename: 't_user',
197
+ condition: `id = '${Vue.$login.f.id}'`
198
+ }
199
+ }, {resolveMsg: null, rejectMsg: null})
200
+ if (userInfo.data && userInfo.data.length > 0) {
201
+ let userRoles = userInfo.data[0].roles || ''
202
+ // 将用户角色字符串转换为数组(处理逗号分隔的情况)
203
+ let userRoleArray = String(userRoles).split(',').map(r => String(r).trim())
204
+ // 检查用户的roles字段是否包含任何话务员角色的id
205
+ Vue.$login.f.isOperator = operatorRoles.data.some(role => {
206
+ return userRoleArray.includes(String(role.id))
207
+ })
208
+ } else {
209
+ Vue.$login.f.isOperator = false
210
+ }
211
+ } else {
212
+ Vue.$login.f.isOperator = false
213
+ }
214
+ console.log('话务员角色检查', Vue.$login.f.isOperator)
215
+ } catch (error) {
216
+ // 如果查询失败,默认不是话务员
217
+ Vue.$login.f.isOperator = false
218
+ console.log('检查话务员角色失败', error)
219
+ }
113
220
  // 调用登录后处理
114
221
  for (let proc of Vue.$login.afterLogin) {
115
222
  await proc(Vue.$login.f)
116
223
  }
224
+ // 启动未操作下线计时器(30分钟),话务员不受限制
225
+ if(Vue.$login.autoLoginout && !Vue.$login.f.isOperator){
226
+ console.log('启动自动登出计时器,超时时间:', Vue.$login.autoLoginTimeOut, '秒')
227
+ Vue.$login.startInactivityTimer(Vue.$login.autoLoginTimeOut)
228
+ } else {
229
+ if (!Vue.$login.autoLoginout) {
230
+ console.log('自动登出功能未启用 (autoLoginout = false)')
231
+ }
232
+ if (Vue.$login.f.isOperator) {
233
+ console.log('话务员账号,跳过自动登出计时器')
234
+ }
235
+ }
236
+
117
237
  // 定时发送心跳
118
238
  if (cue) {
119
239
  setInterval(() => {
@@ -128,6 +248,11 @@ let loginGen = async function (username, password, cue) {
128
248
  location.reload()
129
249
  })
130
250
  } else if (req.data.status == 710) {
251
+ // 如果是话务员角色,不受30分钟超时限制,不执行退出操作
252
+ if (Vue.$login.f.isOperator) {
253
+ console.log('话务员账号,忽略30分钟超时限制')
254
+ return
255
+ }
131
256
  Vue.showMessage(req.data.msg + ",您将被强制退出系统", ['confirm']).then((res) => {
132
257
  if (res === 'confirm') {
133
258
  location.reload()
@@ -140,10 +265,7 @@ let loginGen = async function (username, password, cue) {
140
265
  }
141
266
 
142
267
  } else {
143
- let error = {status: 401, data: "登录失败,请稍后重试"}
144
- if (getLogin.data.code !== 500) {
145
- error = {status: getLogin.data.code, data: getLogin.data.msg}
146
- }
268
+ let error = {status: 401, data: getLogin.data.states}
147
269
  // 抛出错误
148
270
  throw error
149
271
  }
@@ -156,6 +278,9 @@ let GetLoginInfoService = {
156
278
  Verification: true,
157
279
  //构建时间开关
158
280
  versionTime: true,
281
+ //长时间未操作退出开关
282
+ autoLoginout: false,
283
+ autoLoginTimeOut:30*60*1000,
159
284
  //
160
285
  SinglePageToken : {},
161
286
  //登录信息展示开关
@@ -468,6 +593,41 @@ let GetLoginInfoService = {
468
593
  let ds = date.split('-')
469
594
  let nextMonth = ds[1] - 0 + 1
470
595
  return ds[0] + '-' + (nextMonth < 10 ? '0' + nextMonth : nextMonth) + '-20 00:00:00'
596
+ },
597
+ /**
598
+ * 启动未操作强制下线计时器
599
+ * @param timeout 超时时间(毫秒),默认30分钟
600
+ */
601
+ startInactivityTimer(timeout) {
602
+ console.log('startInactivityTimer 被调用,超时时间:', timeout, '秒')
603
+ // 清除已有的定时器
604
+ if (this._inactivityTimer) {
605
+ clearTimeout(this._inactivityTimer);
606
+ }
607
+ // 事件处理函数
608
+ const resetTimer = () => {
609
+ clearTimeout(this._inactivityTimer);
610
+ this._inactivityTimer = setTimeout(() => {
611
+ console.log('自动登出计时器触发,执行强制下线')
612
+ // 强制下线逻辑
613
+ // Vue.cookie.delete('loginId');
614
+ Vue.$login.f = {};
615
+ Vue.showMessage("长时间未操作,您已被强制下线", ['confirm']).then(() => {
616
+ location.reload();
617
+ });
618
+ }, timeout);
619
+ };
620
+ // 需要监听的事件
621
+ const events = ['mousemove', 'keydown', 'mousedown', 'scroll', 'touchstart'];
622
+ // 只绑定一次
623
+ if (!this._inactivityListenerAdded) {
624
+ events.forEach(event => {
625
+ window.addEventListener(event, resetTimer, true);
626
+ });
627
+ this._inactivityListenerAdded = true;
628
+ }
629
+ // 初始化计时器
630
+ resetTimer();
471
631
  }
472
632
  }
473
633