vue2-client 1.15.84 → 1.15.86

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 (377) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.development +1 -1
  5. package/.env.iot +19 -19
  6. package/.env.message +19 -19
  7. package/.env.revenue +19 -19
  8. package/.env.runtime +19 -19
  9. package/.eslintrc.json +5 -5
  10. package/CLAUDE.md +89 -89
  11. package/README.md +65 -65
  12. package/babel.config.js +21 -21
  13. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  14. package/docs/notice.md +22 -22
  15. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  16. package/jest.config.js +22 -22
  17. package/package.json +111 -111
  18. package/src/App.vue +196 -196
  19. package/src/ReportView.js +13 -13
  20. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  21. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  22. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  23. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  24. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  25. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  26. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  27. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  28. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  29. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  30. package/src/base-client/components/common/XAddForm/index.js +3 -3
  31. package/src/base-client/components/common/XAddForm/index.md +61 -61
  32. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  33. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -40
  34. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  35. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  36. package/src/base-client/components/common/XBadge/index.js +3 -3
  37. package/src/base-client/components/common/XBadge/index.md +39 -39
  38. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  39. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  40. package/src/base-client/components/common/XCalendar/index.md +284 -284
  41. package/src/base-client/components/common/XCard/index.js +3 -3
  42. package/src/base-client/components/common/XCard/index.md +43 -43
  43. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  44. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  45. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  46. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  47. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  48. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  49. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  50. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  51. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  52. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  53. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1390
  54. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  55. package/src/base-client/components/common/XForm/demo.vue +105 -105
  56. package/src/base-client/components/common/XForm/index.js +3 -3
  57. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  58. package/src/base-client/components/common/XFormCol/index.js +3 -3
  59. package/src/base-client/components/common/XFormCol/index.md +35 -35
  60. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  61. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  62. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  63. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  64. package/src/base-client/components/common/XFormTable/index.js +3 -3
  65. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  66. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  67. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  68. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  69. package/src/base-client/components/common/XInput/index.js +3 -3
  70. package/src/base-client/components/common/XInput/index.md +97 -97
  71. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  72. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  73. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  74. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  75. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  76. package/src/base-client/components/common/XRate/demo.vue +102 -102
  77. package/src/base-client/components/common/XRate/index.vue +149 -149
  78. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  79. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  80. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  81. package/src/base-client/components/common/XReport/index.md +103 -103
  82. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  83. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  84. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  85. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  86. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  87. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  88. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  89. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  90. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  91. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  92. package/src/base-client/components/common/XTable/index.js +3 -3
  93. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  94. package/src/base-client/components/common/XTimeline/index.md +191 -191
  95. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  96. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  97. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  98. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  99. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  100. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  101. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  102. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  103. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  104. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  105. package/src/base-client/components/his/XList/XList.vue +495 -495
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  109. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  110. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  111. package/src/base-client/components/his/XRadio/index.md +234 -234
  112. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  113. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  114. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  115. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  116. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  118. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  119. package/src/base-client/components/his/XTitle/README.md +113 -113
  120. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  121. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  122. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  123. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  124. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  125. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  126. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  127. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  128. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  129. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  130. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  131. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  132. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  133. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  134. package/src/base-client/components/layout/XPageView/index.js +2 -2
  135. package/src/base-client/components/layout/XPageView/index.md +96 -96
  136. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  137. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  138. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  139. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  140. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  141. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  142. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  143. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  144. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  145. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  146. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  149. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  150. package/src/base-client/plugins/AppData.js +126 -126
  151. package/src/base-client/plugins/PagedList.js +177 -177
  152. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -0
  153. package/src/base-client/plugins/authority-plugin.js +167 -167
  154. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  155. package/src/base-client/plugins/i18n-extend.js +32 -32
  156. package/src/base-client/plugins/moment.js +8 -8
  157. package/src/base-client/plugins/selectValueTypeHelper.js +281 -0
  158. package/src/bootstrap.js +51 -51
  159. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  160. package/src/components/Ellipsis/index.js +3 -3
  161. package/src/components/Ellipsis/index.md +38 -38
  162. package/src/components/FileImageItem/FileItem.vue +320 -320
  163. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  164. package/src/components/FileImageItem/ImageItem.vue +107 -107
  165. package/src/components/FileImageItem/index.js +4 -4
  166. package/src/components/FilePreview/FilePreview.vue +181 -181
  167. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  168. package/src/components/FilePreview/index.js +3 -3
  169. package/src/components/HeightScanner/index.vue +615 -615
  170. package/src/components/STable/README.md +341 -341
  171. package/src/components/STable/index.js +558 -558
  172. package/src/components/TableSetting/TableSetting.vue +143 -143
  173. package/src/components/TableSetting/index.js +3 -3
  174. package/src/components/Trend/Trend.vue +41 -41
  175. package/src/components/Trend/index.js +3 -3
  176. package/src/components/Trend/index.less +41 -41
  177. package/src/components/Trend/index.md +45 -45
  178. package/src/components/_util/util.js +46 -46
  179. package/src/components/cache/AKeepAlive.js +179 -179
  180. package/src/components/exception/typeConfig.js +19 -19
  181. package/src/components/form/FormRow.vue +52 -52
  182. package/src/components/index.less +5 -5
  183. package/src/components/menu/Contextmenu.vue +84 -84
  184. package/src/components/menu/index.less +38 -38
  185. package/src/components/page/header/PageHeader.vue +64 -64
  186. package/src/components/page/header/index.less +40 -40
  187. package/src/components/result/Result.vue +77 -77
  188. package/src/components/setting/SettingItem.vue +26 -26
  189. package/src/components/setting/i18n.js +117 -117
  190. package/src/components/table/StandardTable.vue +141 -141
  191. package/src/components/table/advance/ActionColumns.vue +158 -158
  192. package/src/components/table/advance/ActionSize.vue +45 -45
  193. package/src/components/table/advance/AdvanceTable.vue +275 -275
  194. package/src/components/table/advance/SearchArea.vue +355 -355
  195. package/src/components/table/advance/index.js +2 -2
  196. package/src/components/table/api/ApiTable.vue +50 -50
  197. package/src/components/task/TaskGroup.vue +80 -80
  198. package/src/components/task/TaskItem.vue +26 -26
  199. package/src/components/tool/AvatarList.vue +68 -68
  200. package/src/components/tool/DetailList.vue +157 -157
  201. package/src/components/tool/Drawer.vue +142 -142
  202. package/src/components/tool/FooterToolBar.vue +30 -30
  203. package/src/components/tool/HeadInfo.vue +35 -35
  204. package/src/components/tool/TagSelect.vue +83 -83
  205. package/src/components/tool/TagSelectOption.vue +33 -33
  206. package/src/components/transition/PageToggleTransition.vue +97 -97
  207. package/src/config/default/admin.config.js +18 -18
  208. package/src/config/default/animate.config.js +21 -21
  209. package/src/config/default/index.js +6 -6
  210. package/src/config/index.js +3 -3
  211. package/src/config/replacer/index.js +10 -10
  212. package/src/config/replacer/resolve.config.js +67 -67
  213. package/src/expression/ExpressionRunner.js +26 -26
  214. package/src/expression/TestExpression.js +509 -509
  215. package/src/expression/core/Delegate.js +115 -115
  216. package/src/expression/core/Expression.js +1358 -1358
  217. package/src/expression/core/Program.js +932 -932
  218. package/src/expression/core/Token.js +27 -27
  219. package/src/expression/enums/ExpressionType.js +81 -81
  220. package/src/expression/enums/TokenType.js +11 -11
  221. package/src/expression/exception/BreakWayException.js +2 -2
  222. package/src/expression/exception/ContinueWayException.js +2 -2
  223. package/src/expression/exception/ExpressionException.js +28 -28
  224. package/src/expression/exception/ReturnWayException.js +14 -14
  225. package/src/expression/exception/ServiceException.js +22 -22
  226. package/src/expression/instances/LogicConsole.js +44 -44
  227. package/src/expression/ts/ExpressionRunner.ts +28 -28
  228. package/src/expression/ts/TestExpression.ts +509 -509
  229. package/src/expression/ts/core/Delegate.ts +114 -114
  230. package/src/expression/ts/core/Expression.ts +1309 -1309
  231. package/src/expression/ts/core/Program.ts +950 -950
  232. package/src/expression/ts/core/Token.ts +29 -29
  233. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  234. package/src/expression/ts/enums/TokenType.ts +13 -13
  235. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  236. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  237. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  238. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  239. package/src/expression/ts/exception/ServiceException.ts +22 -22
  240. package/src/expression/ts/instances/JSONArray.ts +48 -48
  241. package/src/expression/ts/instances/JSONObject.ts +109 -109
  242. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  243. package/src/layouts/AdminLayout.vue +176 -176
  244. package/src/layouts/BlankView.vue +79 -79
  245. package/src/layouts/ComponentLayoutOne.vue +47 -47
  246. package/src/layouts/GridView.vue +43 -43
  247. package/src/layouts/PageView.vue +55 -55
  248. package/src/layouts/footer/PageFooter.vue +49 -49
  249. package/src/layouts/header/HeaderAvatar.vue +64 -64
  250. package/src/layouts/header/HeaderSearch.vue +67 -67
  251. package/src/layouts/header/index.less +92 -92
  252. package/src/layouts/tabs/TabsView.vue +383 -383
  253. package/src/layouts/tabs/i18n.js +25 -25
  254. package/src/layouts/tabs/index.js +2 -2
  255. package/src/logic/LogicRunner.js +62 -62
  256. package/src/logic/TestLogic.js +13 -13
  257. package/src/logic/plugins/common/DateTools.js +35 -35
  258. package/src/logic/plugins/common/VueTools.js +30 -30
  259. package/src/logic/plugins/index.js +7 -7
  260. package/src/logic/ts/LogicRunner.ts +67 -67
  261. package/src/logic/ts/TestLogic.ts +13 -13
  262. package/src/main.js +33 -33
  263. package/src/mixins/formValidationMixin.js +46 -46
  264. package/src/mock/common/activityData.js +32 -32
  265. package/src/mock/common/index.js +89 -89
  266. package/src/mock/common/reportData.js +20 -20
  267. package/src/mock/common/tableData.js +118 -118
  268. package/src/mock/index.js +12 -12
  269. package/src/mock/project/index.js +17 -17
  270. package/src/mock/user/current.js +13 -13
  271. package/src/mock/user/login.js +39 -39
  272. package/src/mock/user/routes.js +61 -61
  273. package/src/mock/workplace/index.js +15 -15
  274. package/src/pages/LogicCallExample/index.vue +46 -46
  275. package/src/pages/ReportGrid/index.vue +76 -76
  276. package/src/pages/ReportView.vue +50 -50
  277. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  278. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  279. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  280. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1765
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  291. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  292. package/src/pages/XPageViewExample/index.vue +149 -149
  293. package/src/pages/addressSelect/addressDemo.vue +24 -24
  294. package/src/pages/addressSelect/index.vue +270 -270
  295. package/src/pages/dashboard/workplace/i18n.js +40 -40
  296. package/src/pages/dashboard/workplace/index.js +2 -2
  297. package/src/pages/dashboard/workplace/index.less +59 -59
  298. package/src/pages/exception/403.vue +21 -21
  299. package/src/pages/exception/404.vue +24 -24
  300. package/src/pages/exception/500.vue +21 -21
  301. package/src/pages/login/index.js +2 -2
  302. package/src/pages/report/ReportTableHome.vue +28 -28
  303. package/src/pages/resourceManage/depListManage.vue +23 -23
  304. package/src/pages/resourceManage/funListManage.vue +23 -23
  305. package/src/pages/resourceManage/index.js +15 -15
  306. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  307. package/src/pages/resourceManage/roleListManage.vue +23 -23
  308. package/src/pages/resourceManage/staffListManage.vue +23 -23
  309. package/src/pages/system/file/Info.vue +56 -56
  310. package/src/pages/system/file/index.vue +317 -317
  311. package/src/pages/system/settings/index.vue +126 -126
  312. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  313. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  314. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  315. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  317. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  318. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  319. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  320. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  321. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  322. package/src/pages/userInfoDetailManage/index.vue +290 -290
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  324. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  325. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  326. package/src/plugins/HiPrintPlugin.js +164 -164
  327. package/src/router/async/router.map.js +126 -126
  328. package/src/router/guards.js +262 -262
  329. package/src/router/i18n.js +57 -57
  330. package/src/router.js +17 -17
  331. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  332. package/src/services/api/LogDetailsViewApi.js +10 -10
  333. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  334. package/src/services/api/logininfor/index.js +6 -6
  335. package/src/services/api/manage.js +8 -8
  336. package/src/services/api/restTools.js +215 -215
  337. package/src/services/api/workFlow.js +57 -57
  338. package/src/services/apiService.js +16 -16
  339. package/src/services/dataSource.js +12 -12
  340. package/src/services/index.js +7 -7
  341. package/src/services/user.js +92 -92
  342. package/src/services/v3Api.js +116 -116
  343. package/src/store/index.js +5 -5
  344. package/src/store/mutation-types.js +4 -4
  345. package/src/theme/antd/ant-menu.less +2 -2
  346. package/src/theme/antd/ant-message.less +3 -3
  347. package/src/theme/antd/ant-table.less +22 -22
  348. package/src/theme/antd/ant-time-picker.less +3 -3
  349. package/src/theme/antd/index.less +3 -3
  350. package/src/theme/default/color.less +43 -43
  351. package/src/theme/default/index.less +3 -3
  352. package/src/theme/default/nprogress.less +76 -76
  353. package/src/theme/global.less +279 -279
  354. package/src/theme/index.less +5 -5
  355. package/src/theme/reportTable.less +58 -58
  356. package/src/theme/theme.less +1 -1
  357. package/src/utils/EncryptUtil.js +162 -162
  358. package/src/utils/Objects.js +25 -25
  359. package/src/utils/axios-interceptors.js +100 -100
  360. package/src/utils/colors.js +107 -107
  361. package/src/utils/common.js +10 -10
  362. package/src/utils/excel/Blob.js +180 -180
  363. package/src/utils/excel/Export2Excel.js +141 -141
  364. package/src/utils/filter.js +21 -21
  365. package/src/utils/i18n.js +80 -80
  366. package/src/utils/indexedDB.js +549 -549
  367. package/src/utils/microAppUtils.js +49 -49
  368. package/src/utils/request.js +395 -395
  369. package/src/utils/routerUtil.js +553 -553
  370. package/src/utils/themeUtil.js +100 -100
  371. package/test/Tree.spec.js +168 -168
  372. package/test/myDialog.spec.js +47 -47
  373. package/test/request.test.js +17 -17
  374. package/test/util.test.js +53 -53
  375. package/test/v3Api.test.js +1984 -1984
  376. package/tests/unit/ReportTable.spec.js +16 -16
  377. package/vue.config.js +222 -222
@@ -1,532 +1,532 @@
1
- <template>
2
- <a-drawer
3
- :visible="visible"
4
- :width="isMobile ? screenWidth : screenWidth * 0.85"
5
- placement="right"
6
- title="工单进度查询"
7
- @close="onClose"
8
- >
9
- <!-- 添加描述弹框 -->
10
- <a-modal
11
- :visible="addOnVisible"
12
- :zIndex="1001"
13
- title="追加问题描述"
14
- @cancel="handleCancelAddOn"
15
- @ok="handleAddOn"
16
- >
17
- <a-form-model-item label="描述">
18
- <a-input v-model="desc" type="textarea" />
19
- </a-form-model-item>
20
- <div class="clearfix">
21
- <a-upload
22
- :before-upload="beforeUpload"
23
- :file-list="fileList"
24
- :remove="remove"
25
- action="/api/af-system/file/upload"
26
- list-type="picture-card"
27
- name="avatar"
28
- @change="handleChange"
29
- @preview="handlePreview"
30
- >
31
- <div v-if="fileList.length < 5">
32
- <a-icon type="plus" />
33
- <div class="ant-upload-text">点击上传</div>
34
- </div>
35
- </a-upload>
36
- <a-modal
37
- :footer="null"
38
- :visible="previewVisible"
39
- @cancel="handleCancel"
40
- >
41
- <img :src="previewImage" alt="图片上传" style="width: 100%"/>
42
- </a-modal>
43
- </div>
44
- </a-modal>
45
- <a-card :bordered="false" class="result-success">
46
- <result :description="getDescription()" :is-success="icon" :title="getTitle()" :title-class="titleClass">
47
- <template slot="action">
48
- <a-space v-show="btnGroup">
49
- <!--<a-tooltip placement="topLeft" :title="tip" arrow-point-at-center>-->
50
- <!-- <a-button type="primary" v-if="UrgentAvailable && details.status === 0 && details.priority === 2" :disabled="urgentAccess" @click="urgent">请求加急处理</a-button>-->
51
- <!--</a-tooltip>-->
52
- <a-button type="primary" @click="addOnVisible = true" >追加问题描述</a-button>
53
- <a-button type="danger" @click="closeBtn" >撤销工单</a-button>
54
- </a-space>
55
- <a-button v-show="!btnGroup" type="primary" @click="onClose">返回</a-button>
56
- </template>
57
- <a-modal
58
- :visible="closeVisible"
59
- :zIndex="1002"
60
- title="关闭工单"
61
- @cancel="handleCloseCancel"
62
- @ok="handleCloseOk"
63
- >
64
- <p>是否确认手动关闭工单?</p>
65
- <p style="color: red">(该操作不可撤销,请谨慎操作!)</p>
66
- </a-modal>
67
- <div>
68
- <div class="project-name">工单处理进度</div>
69
- <detail-list size="small" style="max-width: 800px; margin-bottom: 8px">
70
- <detail-list-item term="工单编号">{{ serialNumber }}</detail-list-item>
71
- <detail-list-item term="提交时间">{{ format(details.createdTime, 'yyyy-MM-dd') }}</detail-list-item>
72
- </detail-list>
73
- <a-steps :current="step" progressDot>
74
- <a-step title="工单提交">
75
- <a-step-item-group slot="description">
76
- <a-step-item :title="details.uploader" />
77
- <a-step-item :title="details.createdTime"/>
78
- </a-step-item-group>
79
- </a-step>
80
- <a-step title="工单处理中" >
81
- <a-step-item-group slot="description">
82
- <a-step-item v-if="step >= 1" :title="details.name" />
83
- <a-step-item v-if="step >= 1" :title="details.confirmTime"/>
84
- </a-step-item-group>
85
- </a-step>
86
- <a-step title="工单完成" >
87
- <a-step-item-group slot="description">
88
- <a-step-item v-if="step >= 2" :title="details.finishedTime"/>
89
- </a-step-item-group>
90
- </a-step>
91
- </a-steps>
92
- </div>
93
- </result>
94
- </a-card>
95
- </a-drawer>
96
- </template>
97
-
98
- <script>
99
- import Result from '@vue2-client/components/result/Result'
100
- import DetailList from '@vue2-client/components/tool/DetailList'
101
- import AStepItem from '@vue2-client/components/tool/AStepItem'
102
- import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
103
- import { mapState } from 'vuex'
104
- import { formatDate } from '@vue2-client/utils/util'
105
- function getBase64 (file) {
106
- return new Promise((resolve, reject) => {
107
- const reader = new FileReader()
108
- reader.readAsDataURL(file)
109
- reader.onload = () => resolve(reader.result)
110
- reader.onerror = error => reject(error)
111
- })
112
- }
113
-
114
- const AStepItemGroup = AStepItem.Group
115
- const DetailListItem = DetailList.Item
116
- export default {
117
- name: 'SubmitTicketSuccess',
118
- components: { AStepItemGroup, AStepItem, DetailListItem, DetailList, Result },
119
- data () {
120
- return {
121
- // 页面宽度
122
- screenWidth: document.documentElement.clientWidth,
123
- title: '',
124
- description: '',
125
- // 控制标题样式
126
- titleClass: 'title',
127
- // 工单详情
128
- details: {
129
- uploader: '',
130
- status: '',
131
- name: '',
132
- priority: undefined,
133
- createdTime: '',
134
- confirmTime: '',
135
- finishedTime: '',
136
- createdTimestamp: undefined
137
- },
138
- // 控制加急按钮
139
- urgentAccess: true,
140
- // 倒计时
141
- countDown: 0,
142
- // 控制加急按钮显示
143
- UrgentAvailable: true,
144
- // 刷新页面的定时器
145
- timer: undefined,
146
- // 取消工单确认框可见性
147
- closeVisible: false,
148
- // 控制页面大图标
149
- icon: true,
150
- // 控制加急后定时器
151
- showTelephoneCountDown: 0,
152
- // 控制预览显示
153
- previewVisible: false,
154
- // 图片真实地址
155
- previewImage: '',
156
- // 图片列表
157
- fileList: [],
158
- // 控制添加描述框显示
159
- addOnVisible: false,
160
- // 描述
161
- desc: '',
162
- // 等待时间计时器
163
- waitTimer: undefined,
164
- // 控制三个按钮显示
165
- btnGroup: true,
166
- // 控制工单关闭后标题显示
167
- titleEnd: 0,
168
- // 控制显示文字
169
- descriptionUrgentLevel: 0
170
- }
171
- },
172
- props: {
173
- serialNumber: {
174
- type: String,
175
- required: true
176
- },
177
- visible: {
178
- type: Boolean,
179
- default: false
180
- },
181
- categoryStr: {
182
- type: String,
183
- required: true
184
- }
185
- },
186
- mounted () {
187
- this.initView()
188
- },
189
- methods: {
190
- initView () {
191
- this.getTicketDetail()
192
- this.refresh()
193
- this.titleClass = 'title'
194
- this.countDown = 0
195
- },
196
- // 提交添加描述
197
- handleAddOn () {
198
- return post(TicketDetailsViewApi.AddonDescriptionToTicket, {
199
- description: this.desc,
200
- fileList: this.fileList,
201
- serialNumber: this.serialNumber
202
- })
203
- .then(res => {
204
- this.$message.success('提交成功!')
205
- this.desc = ''
206
- this.fileList = []
207
- this.addOnVisible = false
208
- }, err => {
209
- console.log(err)
210
- })
211
- },
212
- // 放弃添加
213
- handleCancelAddOn () {
214
- return post(TicketDetailsViewApi.removeAllImages, {
215
- fileList: this.fileList
216
- })
217
- .then(res => {
218
- this.desc = ''
219
- this.fileList = []
220
- this.addOnVisible = false
221
- }, err => {
222
- console.log(err)
223
- })
224
- },
225
- // 图像修改检测
226
- handleChange ({ fileList }) {
227
- this.fileList = fileList.filter((item) => {
228
- return item.status === 'done' || item.status === 'uploading'
229
- })
230
- },
231
- // 在上传页面,点击图片上的垃圾桶,撤销上传
232
- remove (file) {
233
- return post(TicketDetailsViewApi.revocationImage, {
234
- file: file
235
- })
236
- .then(res => {
237
- if (res.data === 'success') {
238
- this.$message.success('删除成功')
239
- }
240
- this.fileList = this.fileList.filter((item) => {
241
- return item.response.name !== file.response.name
242
- })
243
- }, err => {
244
- console.log(err)
245
- })
246
- },
247
- // 上传头像前校验
248
- beforeUpload (file) {
249
- const isJpgOrPng =
250
- file.type === 'image/jpeg' ||
251
- file.type === 'image/jpg' ||
252
- file.type === 'image/png'
253
- const Lt2M = file.size / 1024 / 1024 < 2
254
- if (!Lt2M) {
255
- this.$message.error('图片不得大于2MB!')
256
- }
257
- if (!isJpgOrPng) {
258
- this.$message.error('只能上传jpg/png格式的图片')
259
- }
260
- return isJpgOrPng && Lt2M
261
- },
262
- handleCancel () {
263
- this.previewVisible = false
264
- },
265
- // 处理预览图像
266
- async handlePreview (file) {
267
- if (!file.url && !file.preview) {
268
- file.preview = await getBase64(file.originFileObj)
269
- }
270
- this.previewImage = file.url || file.preview
271
- this.previewVisible = true
272
- },
273
- // 关闭抽屉时回调
274
- onClose () {
275
- this.titleEnd = 0
276
- this.urgentAccess = true
277
- clearInterval(this.timer)
278
- clearInterval(this.waitTimer)
279
- this.timer = undefined
280
- this.waitTimer = undefined
281
- this.btnGroup = true
282
- this.$emit('update:visible', false)
283
- this.titleClass = 'title'
284
- this.descriptionUrgentLevel = 0
285
- this.title = '提交成功'
286
- this.UrgentAvailable = true
287
- },
288
- format (date, format) {
289
- return formatDate(date, format)
290
- },
291
- // 关闭工单确认后操作
292
- handleCloseOk () {
293
- return post(TicketDetailsViewApi.manualCloseTicketByCustomer, {
294
- serialNumber: this.serialNumber,
295
- time: new Date(),
296
- categoryStr: this.categoryStr
297
- })
298
- .then(res => {
299
- this.closeVisible = false
300
- this.details.status = 2
301
- clearInterval(this.timer)
302
- clearInterval(this.waitTimer)
303
- this.timer = undefined
304
- this.waitTimer = undefined
305
- this.btnGroup = false
306
- this.titleEnd = 1
307
- this.getTicketDetail()
308
- }, err => {
309
- console.error(err)
310
- })
311
- },
312
- // 关闭工单取消后业务逻辑
313
- handleCloseCancel () {
314
- this.closeVisible = false
315
- },
316
- // 关闭工单按钮
317
- closeBtn () {
318
- this.closeVisible = true
319
- },
320
- // 过10s刷新一下页面数据
321
- refresh () {
322
- if (this.timer === undefined) {
323
- this.timer = setInterval(() => {
324
- this.getTicketDetail()
325
- }, 5000)
326
- }
327
- },
328
- // 对工单进行加急处理
329
- urgent () {
330
- return post(TicketDetailsViewApi.rushTicket, {
331
- serialNumber: this.serialNumber,
332
- categoryStr: this.categoryStr
333
- })
334
- .then(res => {
335
- if (res.data === 1) {
336
- this.$message.success(
337
- '已为您自动加急',
338
- 5
339
- )
340
- this.details.priority = 1
341
- this.UrgentAvailable = false
342
- } else {
343
- this.$message.error(
344
- '自动加急失败',
345
- 5
346
- )
347
- }
348
- }, err => {
349
- console.log(err)
350
- })
351
- },
352
- // 格式化倒计时
353
- countDownFormat () {
354
- let mins = Math.floor(this.countDown / 60)
355
- let secs = this.countDown % 60
356
- if (mins < 10) {
357
- mins = '0' + mins
358
- }
359
- if (secs < 10) {
360
- secs = '0' + secs
361
- }
362
- return mins + ':' + secs
363
- },
364
- // 设置用于控制加急按钮倒计时定时器,加急按钮5分钟后才可点击
365
- setTimer () {
366
- this.countDown = this.timePass()
367
- if (this.waitTimer === undefined) {
368
- this.waitTimer = setInterval(() => {
369
- this.countDown++
370
- if (this.countDown >= 300 && this.details.priority === 2) {
371
- this.urgent()
372
- this.details.priority = 1
373
- }
374
- }, 1000)
375
- }
376
- },
377
- // 获取显示文字内容
378
- getDescription () {
379
- if (this.details.status === 1) {
380
- // 处理中
381
- return '工单已被接受,请保持电话畅通。我们的工作人员正在尽快为您解决问题'
382
- }
383
- if (this.details.status >= 2) {
384
- // 已关闭
385
- return ''
386
- }
387
- // 已提交,判断优先级
388
- if (this.details.priority >= 2) {
389
- // 低优先级
390
- // 判断用时
391
- if (this.timePass() < 300) {
392
- // 5分钟以内
393
- return '您创建的工单已成功提交,请保持电话畅通,我们的工作人员将在5分钟内与您联系'
394
- } else if (this.timePass() >= 300 && this.timePass() <= 600) {
395
- // 5-10分钟
396
- return '由于您的工单等待时间过长,系统已为您自动加急工单,请保持电话畅通,感谢您的理解'
397
- } else {
398
- // 超过十分钟
399
- return '很抱歉让您久等,请电询:14709288966'
400
- }
401
- } else {
402
- // 高优先级
403
- // 判断用时
404
- if (this.timePass() < 300) {
405
- // 5分钟以内
406
- return '您的工单已经被加急处理,我们的工作人员会马上与您取得联系'
407
- } else if (this.timePass() >= 300 && this.timePass() <= 600) {
408
- // 5-10分钟
409
- return '您的工单已经被加急处理,我们的工作人员会马上与您取得联系'
410
- } else {
411
- // 超过十分钟
412
- return '很抱歉让您久等,请电询:14709288966'
413
- }
414
- }
415
- },
416
- // 获取标题内容
417
- getTitle () {
418
- const titleTime = this.countDownFormat()
419
- if (this.details.status === 1) {
420
- // 处理中
421
- this.titleClass = 'title'
422
- return '工单正在处理中'
423
- }
424
- if (this.details.status >= 2) {
425
- // 已关闭
426
- this.titleClass = 'title'
427
- return '工单已关闭'
428
- }
429
- // 已提交,判断优先级
430
- if (this.details.priority >= 2) {
431
- // 低优先级
432
- this.titleClass = 'title'
433
- return '已提交工单' + '\xa0\xa0\xa0\xa0\xa0(\xa0已等待\xa0\xa0' + titleTime + '\xa0)'
434
- } else {
435
- // 高优先级
436
- this.titleClass = 'title_danger'
437
- return '加急成功' + '\xa0\xa0\xa0\xa0\xa0(\xa0已等待\xa0\xa0' + titleTime + '\xa0)'
438
- }
439
- },
440
- // 获取工单创建以来过了多久,单位:秒
441
- timePass () {
442
- const now = new Date().getTime()
443
- let result = Math.floor((now - this.details.createdTimestamp) / 1000)
444
- if (result < 0) {
445
- result = 0
446
- }
447
- return result
448
- },
449
- // 获取工单详情
450
- getTicketDetail () {
451
- return post(TicketDetailsViewApi.getTicketDetailsForUploader, {
452
- serialNumber: this.serialNumber
453
- })
454
- .then(res => {
455
- this.details.uploader = res.uploader
456
- // 判断负责人有没有值
457
- if (res.name === undefined) {
458
- this.details.name = ''
459
- } else {
460
- this.details.name = res.name
461
- }
462
- // 判断工单被确认时间
463
- if (res.confirmtime === undefined) {
464
- this.details.confirmTime = ''
465
- } else {
466
- this.details.confirmTime = this.format(res.confirmtime, 'yyyy-MM-dd hh:mm:ss')
467
- }
468
- // 判断工单完成时间
469
- if (res.finishedtime === undefined) {
470
- this.details.finishedTime = ''
471
- } else {
472
- this.details.finishedTime = this.format(res.finishedtime, 'yyyy-MM-dd hh:mm:ss')
473
- }
474
- this.details.createdTime = this.format(res.createdtime, 'yyyy-MM-dd hh:mm:ss')
475
- this.details.status = res.status
476
- this.details.priority = res.priority
477
- const dateStr = formatDate(this.details.createdTime)
478
- this.details.createdTimestamp = new Date(dateStr).getTime()
479
- const timepass = this.timePass()
480
- // 如果当前状态为一般,设置定时器,五分钟后允许加急
481
- if (this.countDown === 0 && this.details.status === 0) {
482
- this.setTimer()
483
- }
484
- if (timepass > 300) {
485
- this.urgentAccess = false
486
- }
487
- if (this.details.status >= 2) {
488
- this.btnGroup = false
489
- }
490
- if (this.details.priority <= 1 && this.details.status === 0) {
491
- this.descriptionUrgentLevel = 2
492
- }
493
- }, err => {
494
- console.log(err)
495
- })
496
- }
497
- },
498
- computed: {
499
- ...mapState('account', { currUser: 'user' }),
500
- ...mapState('setting', ['isMobile']),
501
- // 用于进度条,进度显示控制
502
- step () {
503
- if (this.details.status !== 0 && this.details.status !== 1) {
504
- return 2
505
- } else {
506
- return this.details.status
507
- }
508
- }
509
- },
510
- watch: {
511
- 'visible' (val) {
512
- if (val) {
513
- this.initView()
514
- }
515
- }
516
- }
517
- }
518
- </script>
519
-
520
- <style lang="less" scoped>
521
- .result-success{
522
- .action:not(:first-child){
523
- margin-left: 8px;
524
- }
525
- .project-name{
526
- font-size: 16px;
527
- color: @title-color;
528
- font-weight: 500;
529
- margin-bottom: 20px;
530
- }
531
- }
532
- </style>
1
+ <template>
2
+ <a-drawer
3
+ :visible="visible"
4
+ :width="isMobile ? screenWidth : screenWidth * 0.85"
5
+ placement="right"
6
+ title="工单进度查询"
7
+ @close="onClose"
8
+ >
9
+ <!-- 添加描述弹框 -->
10
+ <a-modal
11
+ :visible="addOnVisible"
12
+ :zIndex="1001"
13
+ title="追加问题描述"
14
+ @cancel="handleCancelAddOn"
15
+ @ok="handleAddOn"
16
+ >
17
+ <a-form-model-item label="描述">
18
+ <a-input v-model="desc" type="textarea" />
19
+ </a-form-model-item>
20
+ <div class="clearfix">
21
+ <a-upload
22
+ :before-upload="beforeUpload"
23
+ :file-list="fileList"
24
+ :remove="remove"
25
+ action="/api/af-system/file/upload"
26
+ list-type="picture-card"
27
+ name="avatar"
28
+ @change="handleChange"
29
+ @preview="handlePreview"
30
+ >
31
+ <div v-if="fileList.length < 5">
32
+ <a-icon type="plus" />
33
+ <div class="ant-upload-text">点击上传</div>
34
+ </div>
35
+ </a-upload>
36
+ <a-modal
37
+ :footer="null"
38
+ :visible="previewVisible"
39
+ @cancel="handleCancel"
40
+ >
41
+ <img :src="previewImage" alt="图片上传" style="width: 100%"/>
42
+ </a-modal>
43
+ </div>
44
+ </a-modal>
45
+ <a-card :bordered="false" class="result-success">
46
+ <result :description="getDescription()" :is-success="icon" :title="getTitle()" :title-class="titleClass">
47
+ <template slot="action">
48
+ <a-space v-show="btnGroup">
49
+ <!--<a-tooltip placement="topLeft" :title="tip" arrow-point-at-center>-->
50
+ <!-- <a-button type="primary" v-if="UrgentAvailable && details.status === 0 && details.priority === 2" :disabled="urgentAccess" @click="urgent">请求加急处理</a-button>-->
51
+ <!--</a-tooltip>-->
52
+ <a-button type="primary" @click="addOnVisible = true" >追加问题描述</a-button>
53
+ <a-button type="danger" @click="closeBtn" >撤销工单</a-button>
54
+ </a-space>
55
+ <a-button v-show="!btnGroup" type="primary" @click="onClose">返回</a-button>
56
+ </template>
57
+ <a-modal
58
+ :visible="closeVisible"
59
+ :zIndex="1002"
60
+ title="关闭工单"
61
+ @cancel="handleCloseCancel"
62
+ @ok="handleCloseOk"
63
+ >
64
+ <p>是否确认手动关闭工单?</p>
65
+ <p style="color: red">(该操作不可撤销,请谨慎操作!)</p>
66
+ </a-modal>
67
+ <div>
68
+ <div class="project-name">工单处理进度</div>
69
+ <detail-list size="small" style="max-width: 800px; margin-bottom: 8px">
70
+ <detail-list-item term="工单编号">{{ serialNumber }}</detail-list-item>
71
+ <detail-list-item term="提交时间">{{ format(details.createdTime, 'yyyy-MM-dd') }}</detail-list-item>
72
+ </detail-list>
73
+ <a-steps :current="step" progressDot>
74
+ <a-step title="工单提交">
75
+ <a-step-item-group slot="description">
76
+ <a-step-item :title="details.uploader" />
77
+ <a-step-item :title="details.createdTime"/>
78
+ </a-step-item-group>
79
+ </a-step>
80
+ <a-step title="工单处理中" >
81
+ <a-step-item-group slot="description">
82
+ <a-step-item v-if="step >= 1" :title="details.name" />
83
+ <a-step-item v-if="step >= 1" :title="details.confirmTime"/>
84
+ </a-step-item-group>
85
+ </a-step>
86
+ <a-step title="工单完成" >
87
+ <a-step-item-group slot="description">
88
+ <a-step-item v-if="step >= 2" :title="details.finishedTime"/>
89
+ </a-step-item-group>
90
+ </a-step>
91
+ </a-steps>
92
+ </div>
93
+ </result>
94
+ </a-card>
95
+ </a-drawer>
96
+ </template>
97
+
98
+ <script>
99
+ import Result from '@vue2-client/components/result/Result'
100
+ import DetailList from '@vue2-client/components/tool/DetailList'
101
+ import AStepItem from '@vue2-client/components/tool/AStepItem'
102
+ import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
103
+ import { mapState } from 'vuex'
104
+ import { formatDate } from '@vue2-client/utils/util'
105
+ function getBase64 (file) {
106
+ return new Promise((resolve, reject) => {
107
+ const reader = new FileReader()
108
+ reader.readAsDataURL(file)
109
+ reader.onload = () => resolve(reader.result)
110
+ reader.onerror = error => reject(error)
111
+ })
112
+ }
113
+
114
+ const AStepItemGroup = AStepItem.Group
115
+ const DetailListItem = DetailList.Item
116
+ export default {
117
+ name: 'SubmitTicketSuccess',
118
+ components: { AStepItemGroup, AStepItem, DetailListItem, DetailList, Result },
119
+ data () {
120
+ return {
121
+ // 页面宽度
122
+ screenWidth: document.documentElement.clientWidth,
123
+ title: '',
124
+ description: '',
125
+ // 控制标题样式
126
+ titleClass: 'title',
127
+ // 工单详情
128
+ details: {
129
+ uploader: '',
130
+ status: '',
131
+ name: '',
132
+ priority: undefined,
133
+ createdTime: '',
134
+ confirmTime: '',
135
+ finishedTime: '',
136
+ createdTimestamp: undefined
137
+ },
138
+ // 控制加急按钮
139
+ urgentAccess: true,
140
+ // 倒计时
141
+ countDown: 0,
142
+ // 控制加急按钮显示
143
+ UrgentAvailable: true,
144
+ // 刷新页面的定时器
145
+ timer: undefined,
146
+ // 取消工单确认框可见性
147
+ closeVisible: false,
148
+ // 控制页面大图标
149
+ icon: true,
150
+ // 控制加急后定时器
151
+ showTelephoneCountDown: 0,
152
+ // 控制预览显示
153
+ previewVisible: false,
154
+ // 图片真实地址
155
+ previewImage: '',
156
+ // 图片列表
157
+ fileList: [],
158
+ // 控制添加描述框显示
159
+ addOnVisible: false,
160
+ // 描述
161
+ desc: '',
162
+ // 等待时间计时器
163
+ waitTimer: undefined,
164
+ // 控制三个按钮显示
165
+ btnGroup: true,
166
+ // 控制工单关闭后标题显示
167
+ titleEnd: 0,
168
+ // 控制显示文字
169
+ descriptionUrgentLevel: 0
170
+ }
171
+ },
172
+ props: {
173
+ serialNumber: {
174
+ type: String,
175
+ required: true
176
+ },
177
+ visible: {
178
+ type: Boolean,
179
+ default: false
180
+ },
181
+ categoryStr: {
182
+ type: String,
183
+ required: true
184
+ }
185
+ },
186
+ mounted () {
187
+ this.initView()
188
+ },
189
+ methods: {
190
+ initView () {
191
+ this.getTicketDetail()
192
+ this.refresh()
193
+ this.titleClass = 'title'
194
+ this.countDown = 0
195
+ },
196
+ // 提交添加描述
197
+ handleAddOn () {
198
+ return post(TicketDetailsViewApi.AddonDescriptionToTicket, {
199
+ description: this.desc,
200
+ fileList: this.fileList,
201
+ serialNumber: this.serialNumber
202
+ })
203
+ .then(res => {
204
+ this.$message.success('提交成功!')
205
+ this.desc = ''
206
+ this.fileList = []
207
+ this.addOnVisible = false
208
+ }, err => {
209
+ console.log(err)
210
+ })
211
+ },
212
+ // 放弃添加
213
+ handleCancelAddOn () {
214
+ return post(TicketDetailsViewApi.removeAllImages, {
215
+ fileList: this.fileList
216
+ })
217
+ .then(res => {
218
+ this.desc = ''
219
+ this.fileList = []
220
+ this.addOnVisible = false
221
+ }, err => {
222
+ console.log(err)
223
+ })
224
+ },
225
+ // 图像修改检测
226
+ handleChange ({ fileList }) {
227
+ this.fileList = fileList.filter((item) => {
228
+ return item.status === 'done' || item.status === 'uploading'
229
+ })
230
+ },
231
+ // 在上传页面,点击图片上的垃圾桶,撤销上传
232
+ remove (file) {
233
+ return post(TicketDetailsViewApi.revocationImage, {
234
+ file: file
235
+ })
236
+ .then(res => {
237
+ if (res.data === 'success') {
238
+ this.$message.success('删除成功')
239
+ }
240
+ this.fileList = this.fileList.filter((item) => {
241
+ return item.response.name !== file.response.name
242
+ })
243
+ }, err => {
244
+ console.log(err)
245
+ })
246
+ },
247
+ // 上传头像前校验
248
+ beforeUpload (file) {
249
+ const isJpgOrPng =
250
+ file.type === 'image/jpeg' ||
251
+ file.type === 'image/jpg' ||
252
+ file.type === 'image/png'
253
+ const Lt2M = file.size / 1024 / 1024 < 2
254
+ if (!Lt2M) {
255
+ this.$message.error('图片不得大于2MB!')
256
+ }
257
+ if (!isJpgOrPng) {
258
+ this.$message.error('只能上传jpg/png格式的图片')
259
+ }
260
+ return isJpgOrPng && Lt2M
261
+ },
262
+ handleCancel () {
263
+ this.previewVisible = false
264
+ },
265
+ // 处理预览图像
266
+ async handlePreview (file) {
267
+ if (!file.url && !file.preview) {
268
+ file.preview = await getBase64(file.originFileObj)
269
+ }
270
+ this.previewImage = file.url || file.preview
271
+ this.previewVisible = true
272
+ },
273
+ // 关闭抽屉时回调
274
+ onClose () {
275
+ this.titleEnd = 0
276
+ this.urgentAccess = true
277
+ clearInterval(this.timer)
278
+ clearInterval(this.waitTimer)
279
+ this.timer = undefined
280
+ this.waitTimer = undefined
281
+ this.btnGroup = true
282
+ this.$emit('update:visible', false)
283
+ this.titleClass = 'title'
284
+ this.descriptionUrgentLevel = 0
285
+ this.title = '提交成功'
286
+ this.UrgentAvailable = true
287
+ },
288
+ format (date, format) {
289
+ return formatDate(date, format)
290
+ },
291
+ // 关闭工单确认后操作
292
+ handleCloseOk () {
293
+ return post(TicketDetailsViewApi.manualCloseTicketByCustomer, {
294
+ serialNumber: this.serialNumber,
295
+ time: new Date(),
296
+ categoryStr: this.categoryStr
297
+ })
298
+ .then(res => {
299
+ this.closeVisible = false
300
+ this.details.status = 2
301
+ clearInterval(this.timer)
302
+ clearInterval(this.waitTimer)
303
+ this.timer = undefined
304
+ this.waitTimer = undefined
305
+ this.btnGroup = false
306
+ this.titleEnd = 1
307
+ this.getTicketDetail()
308
+ }, err => {
309
+ console.error(err)
310
+ })
311
+ },
312
+ // 关闭工单取消后业务逻辑
313
+ handleCloseCancel () {
314
+ this.closeVisible = false
315
+ },
316
+ // 关闭工单按钮
317
+ closeBtn () {
318
+ this.closeVisible = true
319
+ },
320
+ // 过10s刷新一下页面数据
321
+ refresh () {
322
+ if (this.timer === undefined) {
323
+ this.timer = setInterval(() => {
324
+ this.getTicketDetail()
325
+ }, 5000)
326
+ }
327
+ },
328
+ // 对工单进行加急处理
329
+ urgent () {
330
+ return post(TicketDetailsViewApi.rushTicket, {
331
+ serialNumber: this.serialNumber,
332
+ categoryStr: this.categoryStr
333
+ })
334
+ .then(res => {
335
+ if (res.data === 1) {
336
+ this.$message.success(
337
+ '已为您自动加急',
338
+ 5
339
+ )
340
+ this.details.priority = 1
341
+ this.UrgentAvailable = false
342
+ } else {
343
+ this.$message.error(
344
+ '自动加急失败',
345
+ 5
346
+ )
347
+ }
348
+ }, err => {
349
+ console.log(err)
350
+ })
351
+ },
352
+ // 格式化倒计时
353
+ countDownFormat () {
354
+ let mins = Math.floor(this.countDown / 60)
355
+ let secs = this.countDown % 60
356
+ if (mins < 10) {
357
+ mins = '0' + mins
358
+ }
359
+ if (secs < 10) {
360
+ secs = '0' + secs
361
+ }
362
+ return mins + ':' + secs
363
+ },
364
+ // 设置用于控制加急按钮倒计时定时器,加急按钮5分钟后才可点击
365
+ setTimer () {
366
+ this.countDown = this.timePass()
367
+ if (this.waitTimer === undefined) {
368
+ this.waitTimer = setInterval(() => {
369
+ this.countDown++
370
+ if (this.countDown >= 300 && this.details.priority === 2) {
371
+ this.urgent()
372
+ this.details.priority = 1
373
+ }
374
+ }, 1000)
375
+ }
376
+ },
377
+ // 获取显示文字内容
378
+ getDescription () {
379
+ if (this.details.status === 1) {
380
+ // 处理中
381
+ return '工单已被接受,请保持电话畅通。我们的工作人员正在尽快为您解决问题'
382
+ }
383
+ if (this.details.status >= 2) {
384
+ // 已关闭
385
+ return ''
386
+ }
387
+ // 已提交,判断优先级
388
+ if (this.details.priority >= 2) {
389
+ // 低优先级
390
+ // 判断用时
391
+ if (this.timePass() < 300) {
392
+ // 5分钟以内
393
+ return '您创建的工单已成功提交,请保持电话畅通,我们的工作人员将在5分钟内与您联系'
394
+ } else if (this.timePass() >= 300 && this.timePass() <= 600) {
395
+ // 5-10分钟
396
+ return '由于您的工单等待时间过长,系统已为您自动加急工单,请保持电话畅通,感谢您的理解'
397
+ } else {
398
+ // 超过十分钟
399
+ return '很抱歉让您久等,请电询:14709288966'
400
+ }
401
+ } else {
402
+ // 高优先级
403
+ // 判断用时
404
+ if (this.timePass() < 300) {
405
+ // 5分钟以内
406
+ return '您的工单已经被加急处理,我们的工作人员会马上与您取得联系'
407
+ } else if (this.timePass() >= 300 && this.timePass() <= 600) {
408
+ // 5-10分钟
409
+ return '您的工单已经被加急处理,我们的工作人员会马上与您取得联系'
410
+ } else {
411
+ // 超过十分钟
412
+ return '很抱歉让您久等,请电询:14709288966'
413
+ }
414
+ }
415
+ },
416
+ // 获取标题内容
417
+ getTitle () {
418
+ const titleTime = this.countDownFormat()
419
+ if (this.details.status === 1) {
420
+ // 处理中
421
+ this.titleClass = 'title'
422
+ return '工单正在处理中'
423
+ }
424
+ if (this.details.status >= 2) {
425
+ // 已关闭
426
+ this.titleClass = 'title'
427
+ return '工单已关闭'
428
+ }
429
+ // 已提交,判断优先级
430
+ if (this.details.priority >= 2) {
431
+ // 低优先级
432
+ this.titleClass = 'title'
433
+ return '已提交工单' + '\xa0\xa0\xa0\xa0\xa0(\xa0已等待\xa0\xa0' + titleTime + '\xa0)'
434
+ } else {
435
+ // 高优先级
436
+ this.titleClass = 'title_danger'
437
+ return '加急成功' + '\xa0\xa0\xa0\xa0\xa0(\xa0已等待\xa0\xa0' + titleTime + '\xa0)'
438
+ }
439
+ },
440
+ // 获取工单创建以来过了多久,单位:秒
441
+ timePass () {
442
+ const now = new Date().getTime()
443
+ let result = Math.floor((now - this.details.createdTimestamp) / 1000)
444
+ if (result < 0) {
445
+ result = 0
446
+ }
447
+ return result
448
+ },
449
+ // 获取工单详情
450
+ getTicketDetail () {
451
+ return post(TicketDetailsViewApi.getTicketDetailsForUploader, {
452
+ serialNumber: this.serialNumber
453
+ })
454
+ .then(res => {
455
+ this.details.uploader = res.uploader
456
+ // 判断负责人有没有值
457
+ if (res.name === undefined) {
458
+ this.details.name = ''
459
+ } else {
460
+ this.details.name = res.name
461
+ }
462
+ // 判断工单被确认时间
463
+ if (res.confirmtime === undefined) {
464
+ this.details.confirmTime = ''
465
+ } else {
466
+ this.details.confirmTime = this.format(res.confirmtime, 'yyyy-MM-dd hh:mm:ss')
467
+ }
468
+ // 判断工单完成时间
469
+ if (res.finishedtime === undefined) {
470
+ this.details.finishedTime = ''
471
+ } else {
472
+ this.details.finishedTime = this.format(res.finishedtime, 'yyyy-MM-dd hh:mm:ss')
473
+ }
474
+ this.details.createdTime = this.format(res.createdtime, 'yyyy-MM-dd hh:mm:ss')
475
+ this.details.status = res.status
476
+ this.details.priority = res.priority
477
+ const dateStr = formatDate(this.details.createdTime)
478
+ this.details.createdTimestamp = new Date(dateStr).getTime()
479
+ const timepass = this.timePass()
480
+ // 如果当前状态为一般,设置定时器,五分钟后允许加急
481
+ if (this.countDown === 0 && this.details.status === 0) {
482
+ this.setTimer()
483
+ }
484
+ if (timepass > 300) {
485
+ this.urgentAccess = false
486
+ }
487
+ if (this.details.status >= 2) {
488
+ this.btnGroup = false
489
+ }
490
+ if (this.details.priority <= 1 && this.details.status === 0) {
491
+ this.descriptionUrgentLevel = 2
492
+ }
493
+ }, err => {
494
+ console.log(err)
495
+ })
496
+ }
497
+ },
498
+ computed: {
499
+ ...mapState('account', { currUser: 'user' }),
500
+ ...mapState('setting', ['isMobile']),
501
+ // 用于进度条,进度显示控制
502
+ step () {
503
+ if (this.details.status !== 0 && this.details.status !== 1) {
504
+ return 2
505
+ } else {
506
+ return this.details.status
507
+ }
508
+ }
509
+ },
510
+ watch: {
511
+ 'visible' (val) {
512
+ if (val) {
513
+ this.initView()
514
+ }
515
+ }
516
+ }
517
+ }
518
+ </script>
519
+
520
+ <style lang="less" scoped>
521
+ .result-success{
522
+ .action:not(:first-child){
523
+ margin-left: 8px;
524
+ }
525
+ .project-name{
526
+ font-size: 16px;
527
+ color: @title-color;
528
+ font-weight: 500;
529
+ margin-bottom: 20px;
530
+ }
531
+ }
532
+ </style>