vue2-client 1.15.87 → 1.15.89

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 (697) hide show
  1. package/.cursorrules +19 -19
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.apply +19 -19
  5. package/.env.development +1 -1
  6. package/.env.gaslink +19 -19
  7. package/.env.his +19 -19
  8. package/.env.iot +19 -19
  9. package/.env.liuli +20 -20
  10. package/.env.message +19 -19
  11. package/.env.revenue +19 -19
  12. package/.env.runtime +19 -19
  13. package/.env.scada +19 -19
  14. package/.eslintrc.js +90 -90
  15. package/.eslintrc.json +5 -5
  16. package/CHANGELOG.md +824 -824
  17. package/CLAUDE.md +89 -89
  18. package/Components.md +60 -60
  19. package/README.md +65 -65
  20. package/babel.config.js +21 -21
  21. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  22. package/docs/LowCode/lowcode.md +155 -155
  23. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  24. package/docs/index.md +30 -30
  25. package/docs/notice.md +22 -22
  26. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  27. package/index.js +31 -31
  28. package/jest-transform-stub.js +8 -8
  29. package/jest.config.js +22 -22
  30. package/jest.setup.js +7 -7
  31. package/jsconfig.json +19 -19
  32. package/package.json +1 -1
  33. package/public/his/editor/editor.html +51 -51
  34. package/public/his/editor/mock/bind_data.html +779 -779
  35. package/public/his/editor/mock/data_table.html +40 -40
  36. package/public/his/editor/mock/sign.html +75 -75
  37. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  38. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  39. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  40. package/public/his/editor/vender/date97/calendar.js +4 -4
  41. package/public/his/editor/vender/date97/lang/en.js +13 -13
  42. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  43. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  44. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  45. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  46. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  47. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  48. package/public/his/editor/vender/diff.js +1627 -1627
  49. package/public/his/editor/vender/editor.js +1 -1
  50. package/public/his/editor/vender/fabric.js +31187 -31187
  51. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  52. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  53. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  54. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  55. package/public/his/editor/vender/mui/mui.min.css +4 -4
  56. package/public/his/editor/vender/mui/mui.min.js +5 -5
  57. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  58. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  59. package/public/his/editor/vender/qrcode.js +7 -7
  60. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  61. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  62. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  63. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  64. package/public/his/editor/vender/validator.js +5094 -5094
  65. package/public/his/editor/vender/weui/weui.css +5659 -5659
  66. package/public/his/editor/vender/weui/weui.min.css +4 -4
  67. package/public/his/editor/vender/weui/weui.min.js +11 -11
  68. package/public/index.html +27 -27
  69. package/src/App.vue +196 -196
  70. package/src/ReportView.js +13 -13
  71. package/src/assets/img/querySlotDemo.svg +15 -15
  72. package/src/assets/svg/badtwo.svg +1 -1
  73. package/src/assets/svg/goodtwo.svg +1 -1
  74. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  75. package/src/base-client/components/AI/demo.vue +31 -31
  76. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  77. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  78. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  79. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  80. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  81. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  82. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  83. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  84. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  85. package/src/base-client/components/common/CitySelect/index.js +3 -3
  86. package/src/base-client/components/common/CitySelect/index.md +109 -109
  87. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  88. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  89. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  90. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  91. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  92. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  93. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  94. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  95. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  96. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  97. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  98. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  99. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  100. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  101. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  102. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  103. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  104. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  105. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  106. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  107. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  108. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  109. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  110. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  111. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  112. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  113. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  114. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  115. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  116. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  117. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  118. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  119. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  120. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  121. package/src/base-client/components/common/Recording/index.js +3 -3
  122. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  123. package/src/base-client/components/common/Tree/index.js +2 -2
  124. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  125. package/src/base-client/components/common/Upload/index.js +3 -3
  126. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  127. package/src/base-client/components/common/XAddForm/index.js +3 -3
  128. package/src/base-client/components/common/XAddForm/index.md +61 -61
  129. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  130. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  131. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  132. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  133. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  134. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  135. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  136. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  137. package/src/base-client/components/common/XAddReport/index.js +3 -3
  138. package/src/base-client/components/common/XAddReport/index.md +56 -56
  139. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  140. package/src/base-client/components/common/XBadge/index.js +3 -3
  141. package/src/base-client/components/common/XBadge/index.md +39 -39
  142. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  143. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  144. package/src/base-client/components/common/XButtons/index.js +3 -3
  145. package/src/base-client/components/common/XButtons/index.md +61 -61
  146. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  147. package/src/base-client/components/common/XCalendar/index.md +284 -284
  148. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  149. package/src/base-client/components/common/XCard/index.js +3 -3
  150. package/src/base-client/components/common/XCard/index.md +43 -43
  151. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  152. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  153. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  154. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  155. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  156. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  157. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  158. package/src/base-client/components/common/XDataCard/index.js +3 -3
  159. package/src/base-client/components/common/XDataCard/index.md +1 -1
  160. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  161. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  162. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  163. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  164. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  165. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  166. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  167. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  168. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  169. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  170. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  171. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  172. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  173. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1474
  174. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  175. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  176. package/src/base-client/components/common/XForm/demo.vue +105 -105
  177. package/src/base-client/components/common/XForm/index.js +3 -3
  178. package/src/base-client/components/common/XForm/index.md +178 -178
  179. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  180. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  181. package/src/base-client/components/common/XFormCol/index.js +3 -3
  182. package/src/base-client/components/common/XFormCol/index.md +35 -35
  183. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  184. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  185. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  186. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  187. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  188. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  189. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  190. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  191. package/src/base-client/components/common/XFormTable/index.js +3 -3
  192. package/src/base-client/components/common/XFormTable/index.md +92 -92
  193. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  194. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  195. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  196. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  197. package/src/base-client/components/common/XInput/index.js +3 -3
  198. package/src/base-client/components/common/XInput/index.md +97 -97
  199. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  200. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  201. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  202. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  203. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  204. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  205. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  206. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  207. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  208. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  209. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  210. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  211. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  212. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  213. package/src/base-client/components/common/XPrint/index.vue +97 -97
  214. package/src/base-client/components/common/XRate/demo.vue +102 -102
  215. package/src/base-client/components/common/XRate/index.vue +149 -149
  216. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  217. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  218. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  219. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  220. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  221. package/src/base-client/components/common/XReport/index.js +3 -3
  222. package/src/base-client/components/common/XReport/index.md +103 -103
  223. package/src/base-client/components/common/XReport/print.js +186 -186
  224. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  225. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  226. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  227. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  228. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  229. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  230. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  231. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  232. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  233. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  234. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  235. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  236. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  237. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  238. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  239. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  240. package/src/base-client/components/common/XStepView/index.js +3 -3
  241. package/src/base-client/components/common/XStepView/index.md +31 -31
  242. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  243. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  244. package/src/base-client/components/common/XTab/index.js +3 -3
  245. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  246. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  247. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  248. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  249. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  250. package/src/base-client/components/common/XTable/index.js +3 -3
  251. package/src/base-client/components/common/XTable/index.md +255 -255
  252. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  253. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  254. package/src/base-client/components/common/XTimeline/index.md +191 -191
  255. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  256. package/src/base-client/components/common/XTree/XTreePro.vue +452 -450
  257. package/src/base-client/components/common/XTree/index.js +3 -3
  258. package/src/base-client/components/common/XTree/index.md +36 -36
  259. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  260. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  261. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  262. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  263. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  264. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  265. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  266. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  267. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  268. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  269. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  270. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  271. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  272. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  273. package/src/base-client/components/his/XList/XList.vue +495 -495
  274. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  275. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  276. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  277. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  278. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  279. package/src/base-client/components/his/XRadio/index.md +234 -234
  280. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  281. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  282. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  283. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  284. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  285. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  286. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  287. package/src/base-client/components/his/XTitle/README.md +113 -113
  288. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  289. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  290. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  291. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  292. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  293. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  294. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  295. package/src/base-client/components/index.js +51 -51
  296. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  297. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  298. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  299. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  300. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  301. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  302. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  303. package/src/base-client/components/layout/XPageView/index.js +2 -2
  304. package/src/base-client/components/layout/XPageView/index.md +96 -96
  305. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  306. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  307. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  308. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  309. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  310. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  311. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  312. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  313. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  314. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  315. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  316. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  317. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  318. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  319. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  320. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  321. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  322. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  323. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  324. package/src/base-client/plugins/AppData.js +126 -126
  325. package/src/base-client/plugins/Config.js +19 -19
  326. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  327. package/src/base-client/plugins/PagedList.js +177 -177
  328. package/src/base-client/plugins/Recording.js +258 -258
  329. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  330. package/src/base-client/plugins/authority-plugin.js +167 -167
  331. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  332. package/src/base-client/plugins/i18n-extend.js +32 -32
  333. package/src/base-client/plugins/index.js +23 -23
  334. package/src/base-client/plugins/moment.js +8 -8
  335. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  336. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  337. package/src/bootstrap.js +51 -51
  338. package/src/components/Charts/Bar.vue +62 -62
  339. package/src/components/Charts/ChartCard.vue +134 -134
  340. package/src/components/Charts/Liquid.vue +67 -67
  341. package/src/components/Charts/MiniArea.vue +39 -39
  342. package/src/components/Charts/MiniBar.vue +39 -39
  343. package/src/components/Charts/MiniProgress.vue +75 -75
  344. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  345. package/src/components/Charts/Radar.vue +68 -68
  346. package/src/components/Charts/RankList.vue +77 -77
  347. package/src/components/Charts/TagCloud.vue +113 -113
  348. package/src/components/Charts/TransferBar.vue +64 -64
  349. package/src/components/Charts/Trend.vue +82 -82
  350. package/src/components/Charts/chart.less +12 -12
  351. package/src/components/Charts/smooth.area.less +13 -13
  352. package/src/components/CodeMirror/inedx.vue +118 -118
  353. package/src/components/CodeMirror/setting.js +40 -40
  354. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  355. package/src/components/Ellipsis/index.js +3 -3
  356. package/src/components/Ellipsis/index.md +38 -38
  357. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  358. package/src/components/FileImageItem/ImageItem.vue +107 -107
  359. package/src/components/FileImageItem/index.js +4 -4
  360. package/src/components/FilePreview/FilePreview.vue +181 -181
  361. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  362. package/src/components/FilePreview/index.js +3 -3
  363. package/src/components/HeightScanner/index.vue +615 -615
  364. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  365. package/src/components/NumberInfo/index.js +3 -3
  366. package/src/components/NumberInfo/index.less +54 -54
  367. package/src/components/NumberInfo/index.md +43 -43
  368. package/src/components/STable/README.md +341 -341
  369. package/src/components/STable/index.js +558 -558
  370. package/src/components/TableSetting/TableSetting.vue +143 -143
  371. package/src/components/TableSetting/index.js +3 -3
  372. package/src/components/Trend/Trend.vue +41 -41
  373. package/src/components/Trend/index.js +3 -3
  374. package/src/components/Trend/index.less +41 -41
  375. package/src/components/Trend/index.md +45 -45
  376. package/src/components/_util/util.js +46 -46
  377. package/src/components/cache/AKeepAlive.js +179 -179
  378. package/src/components/card/ChartCard.vue +79 -79
  379. package/src/components/chart/Bar.vue +60 -60
  380. package/src/components/chart/MiniArea.vue +67 -67
  381. package/src/components/chart/MiniBar.vue +59 -59
  382. package/src/components/chart/MiniProgress.vue +57 -57
  383. package/src/components/chart/Radar.vue +80 -80
  384. package/src/components/chart/RankingList.vue +60 -60
  385. package/src/components/chart/Trend.vue +79 -79
  386. package/src/components/chart/index.less +9 -9
  387. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  388. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  389. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  390. package/src/components/checkbox/index.js +9 -9
  391. package/src/components/exception/ExceptionPage.vue +70 -70
  392. package/src/components/exception/typeConfig.js +19 -19
  393. package/src/components/form/FormRow.vue +52 -52
  394. package/src/components/g2Charts/constants.js +202 -202
  395. package/src/components/g2Charts/demo.vue +808 -808
  396. package/src/components/g2Charts/designer.vue +228 -228
  397. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  398. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  399. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  400. package/src/components/g2Charts/index.vue +397 -397
  401. package/src/components/index.js +36 -36
  402. package/src/components/index.less +5 -5
  403. package/src/components/input/IInput.vue +66 -66
  404. package/src/components/menu/Contextmenu.vue +84 -84
  405. package/src/components/menu/SideMenu.vue +75 -75
  406. package/src/components/menu/index.less +38 -38
  407. package/src/components/menu/menu.js +273 -273
  408. package/src/components/page/header/PageHeader.vue +64 -64
  409. package/src/components/page/header/index.less +40 -40
  410. package/src/components/result/Result.vue +77 -77
  411. package/src/components/setting/Setting.vue +234 -234
  412. package/src/components/setting/SettingItem.vue +26 -26
  413. package/src/components/setting/i18n.js +117 -117
  414. package/src/components/table/StandardTable.vue +141 -141
  415. package/src/components/table/advance/ActionColumns.vue +158 -158
  416. package/src/components/table/advance/ActionSize.vue +45 -45
  417. package/src/components/table/advance/AdvanceTable.vue +275 -275
  418. package/src/components/table/advance/SearchArea.vue +355 -355
  419. package/src/components/table/advance/index.js +2 -2
  420. package/src/components/table/api/ApiTable.vue +50 -50
  421. package/src/components/task/TaskGroup.vue +80 -80
  422. package/src/components/task/TaskItem.vue +26 -26
  423. package/src/components/tool/AStepItem.vue +60 -60
  424. package/src/components/tool/AvatarList.vue +68 -68
  425. package/src/components/tool/DetailList.vue +157 -157
  426. package/src/components/tool/Drawer.vue +142 -142
  427. package/src/components/tool/FooterToolBar.vue +30 -30
  428. package/src/components/tool/HeadInfo.vue +35 -35
  429. package/src/components/tool/TagSelect.vue +83 -83
  430. package/src/components/tool/TagSelectOption.vue +33 -33
  431. package/src/components/transition/PageToggleTransition.vue +97 -97
  432. package/src/config/CreateQueryConfig.js +325 -325
  433. package/src/config/default/admin.config.js +18 -18
  434. package/src/config/default/animate.config.js +21 -21
  435. package/src/config/default/antd.config.js +89 -89
  436. package/src/config/default/index.js +6 -6
  437. package/src/config/default/setting.config.js +55 -55
  438. package/src/config/index.js +3 -3
  439. package/src/config/replacer/index.js +10 -10
  440. package/src/config/replacer/resolve.config.js +67 -67
  441. package/src/expression/ExpressionRunner.js +26 -26
  442. package/src/expression/TestExpression.js +509 -509
  443. package/src/expression/core/Delegate.js +115 -115
  444. package/src/expression/core/Expression.js +1358 -1358
  445. package/src/expression/core/Program.js +932 -932
  446. package/src/expression/core/Token.js +27 -27
  447. package/src/expression/enums/ExpressionType.js +81 -81
  448. package/src/expression/enums/TokenType.js +11 -11
  449. package/src/expression/exception/BreakWayException.js +2 -2
  450. package/src/expression/exception/ContinueWayException.js +2 -2
  451. package/src/expression/exception/ExpressionException.js +28 -28
  452. package/src/expression/exception/ReturnWayException.js +14 -14
  453. package/src/expression/exception/ServiceException.js +22 -22
  454. package/src/expression/instances/LogicConsole.js +44 -44
  455. package/src/expression/ts/ExpressionRunner.ts +28 -28
  456. package/src/expression/ts/TestExpression.ts +509 -509
  457. package/src/expression/ts/core/Delegate.ts +114 -114
  458. package/src/expression/ts/core/Expression.ts +1309 -1309
  459. package/src/expression/ts/core/Program.ts +950 -950
  460. package/src/expression/ts/core/Token.ts +29 -29
  461. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  462. package/src/expression/ts/enums/TokenType.ts +13 -13
  463. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  464. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  465. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  466. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  467. package/src/expression/ts/exception/ServiceException.ts +22 -22
  468. package/src/expression/ts/instances/JSONArray.ts +48 -48
  469. package/src/expression/ts/instances/JSONObject.ts +109 -109
  470. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  471. package/src/font-style/font.css +4 -4
  472. package/src/layouts/AdminLayout.vue +176 -176
  473. package/src/layouts/BlankView.vue +79 -79
  474. package/src/layouts/CommonLayout.vue +56 -56
  475. package/src/layouts/ComponentLayoutOne.vue +47 -47
  476. package/src/layouts/GridView.vue +43 -43
  477. package/src/layouts/PageLayout.vue +151 -151
  478. package/src/layouts/PageView.vue +55 -55
  479. package/src/layouts/SinglePageView.vue +136 -136
  480. package/src/layouts/footer/PageFooter.vue +49 -49
  481. package/src/layouts/header/AdminHeader.vue +132 -132
  482. package/src/layouts/header/HeaderAvatar.vue +64 -64
  483. package/src/layouts/header/HeaderNotice.vue +177 -177
  484. package/src/layouts/header/HeaderSearch.vue +67 -67
  485. package/src/layouts/header/InstitutionDetail.vue +181 -181
  486. package/src/layouts/header/index.less +92 -92
  487. package/src/layouts/tabs/TabsHead.vue +189 -189
  488. package/src/layouts/tabs/TabsView.vue +383 -383
  489. package/src/layouts/tabs/i18n.js +25 -25
  490. package/src/layouts/tabs/index.js +2 -2
  491. package/src/lib.js +1 -1
  492. package/src/logic/LogicRunner.js +62 -62
  493. package/src/logic/TestLogic.js +13 -13
  494. package/src/logic/plugins/common/DateTools.js +35 -35
  495. package/src/logic/plugins/common/VueTools.js +30 -30
  496. package/src/logic/plugins/index.js +7 -7
  497. package/src/logic/ts/LogicRunner.ts +67 -67
  498. package/src/logic/ts/TestLogic.ts +13 -13
  499. package/src/main.js +33 -33
  500. package/src/mixins/formValidationMixin.js +46 -46
  501. package/src/mock/common/activityData.js +32 -32
  502. package/src/mock/common/index.js +89 -89
  503. package/src/mock/common/reportData.js +20 -20
  504. package/src/mock/common/tableData.js +118 -118
  505. package/src/mock/extend/index.js +84 -84
  506. package/src/mock/goods/index.js +108 -108
  507. package/src/mock/index.js +12 -12
  508. package/src/mock/project/index.js +17 -17
  509. package/src/mock/user/current.js +13 -13
  510. package/src/mock/user/login.js +39 -39
  511. package/src/mock/user/routes.js +61 -61
  512. package/src/mock/workplace/index.js +15 -15
  513. package/src/pages/DefaultExample/index.vue +77 -77
  514. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  515. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  516. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  517. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  518. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  519. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  520. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  521. package/src/pages/DynamicStatistics/index.vue +282 -282
  522. package/src/pages/Example/childIndex.vue +15 -15
  523. package/src/pages/Example/index.vue +30 -30
  524. package/src/pages/LogicCallExample/index.vue +46 -46
  525. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  526. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  527. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  528. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  529. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  530. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  531. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  532. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  533. package/src/pages/Recording/index.vue +77 -77
  534. package/src/pages/ReportGrid/index.vue +76 -76
  535. package/src/pages/ReportView.vue +50 -50
  536. package/src/pages/ServiceReview/index.vue +284 -284
  537. package/src/pages/SubExample/index.vue +26 -26
  538. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  539. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  540. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  541. package/src/pages/WorkflowDetail/WorkflowDetail.vue +7 -1
  542. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  543. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  544. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  545. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  546. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  547. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  548. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  549. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  550. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  551. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  552. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  553. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  554. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  555. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  556. package/src/pages/XPageViewExample/index.vue +149 -149
  557. package/src/pages/XReportView/index.vue +64 -64
  558. package/src/pages/XTreeOneProExample/index.vue +67 -67
  559. package/src/pages/addressSelect/addressDemo.vue +24 -24
  560. package/src/pages/addressSelect/index.vue +270 -270
  561. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  562. package/src/pages/dashboard/workplace/i18n.js +40 -40
  563. package/src/pages/dashboard/workplace/index.js +2 -2
  564. package/src/pages/dashboard/workplace/index.less +59 -59
  565. package/src/pages/exception/403.vue +21 -21
  566. package/src/pages/exception/404.vue +24 -24
  567. package/src/pages/exception/500.vue +21 -21
  568. package/src/pages/login/Login.vue +380 -380
  569. package/src/pages/login/LoginV3.vue +389 -389
  570. package/src/pages/login/index.js +2 -2
  571. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  572. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  573. package/src/pages/report/ReportTable.js +124 -124
  574. package/src/pages/report/ReportTableHome.vue +28 -28
  575. package/src/pages/resourceManage/depListManage.vue +23 -23
  576. package/src/pages/resourceManage/funListManage.vue +23 -23
  577. package/src/pages/resourceManage/index.js +15 -15
  578. package/src/pages/resourceManage/orgListManage.vue +98 -98
  579. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  580. package/src/pages/resourceManage/roleListManage.vue +23 -23
  581. package/src/pages/resourceManage/staffListManage.vue +23 -23
  582. package/src/pages/system/dictionary/index.vue +44 -44
  583. package/src/pages/system/file/Info.vue +56 -56
  584. package/src/pages/system/file/index.vue +317 -317
  585. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  586. package/src/pages/system/monitor/operLog/index.vue +37 -37
  587. package/src/pages/system/settings/index.vue +126 -126
  588. package/src/pages/system/settings/modifyPassword.vue +117 -117
  589. package/src/pages/system/ticket/index.vue +480 -480
  590. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  591. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  592. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  593. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  594. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  595. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  596. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  597. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  598. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  599. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  600. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  601. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  602. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  603. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  604. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  605. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  606. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  607. package/src/pages/userInfoDetailManage/index.vue +290 -290
  608. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  609. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  610. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  611. package/src/plugins/EventLogPlugin.js +33 -33
  612. package/src/plugins/FindParentsData.js +17 -17
  613. package/src/plugins/HiPrintPlugin.js +164 -164
  614. package/src/router/async/config.async.js +35 -35
  615. package/src/router/async/router.map.js +126 -126
  616. package/src/router/guards.js +262 -262
  617. package/src/router/i18n.js +57 -57
  618. package/src/router/index.js +27 -27
  619. package/src/router.js +17 -17
  620. package/src/services/DataModel.js +30 -30
  621. package/src/services/LodopFuncs.js +137 -137
  622. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  623. package/src/services/api/LogDetailsViewApi.js +10 -10
  624. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  625. package/src/services/api/TicketDetailsViewApi.js +46 -46
  626. package/src/services/api/cas.js +79 -79
  627. package/src/services/api/common.js +346 -346
  628. package/src/services/api/entity.js +18 -18
  629. package/src/services/api/index.js +17 -17
  630. package/src/services/api/logininfor/index.js +6 -6
  631. package/src/services/api/manage.js +8 -8
  632. package/src/services/api/restTools.js +215 -215
  633. package/src/services/api/workFlow.js +57 -57
  634. package/src/services/apiService.js +16 -16
  635. package/src/services/dataSource.js +12 -12
  636. package/src/services/index.js +7 -7
  637. package/src/services/user.js +92 -92
  638. package/src/services/v3Api.js +116 -116
  639. package/src/store/index.js +5 -5
  640. package/src/store/modules/account.js +115 -115
  641. package/src/store/modules/index.js +5 -5
  642. package/src/store/modules/lowCode.js +33 -33
  643. package/src/store/modules/setting.js +119 -119
  644. package/src/store/mutation-types.js +4 -4
  645. package/src/theme/antd/ant-menu.less +2 -2
  646. package/src/theme/antd/ant-message.less +3 -3
  647. package/src/theme/antd/ant-table.less +22 -22
  648. package/src/theme/antd/ant-time-picker.less +3 -3
  649. package/src/theme/antd/index.less +3 -3
  650. package/src/theme/default/color.less +43 -43
  651. package/src/theme/default/index.less +3 -3
  652. package/src/theme/default/nprogress.less +76 -76
  653. package/src/theme/default/style.less +58 -58
  654. package/src/theme/global.less +279 -279
  655. package/src/theme/index.less +5 -5
  656. package/src/theme/reportTable.less +58 -58
  657. package/src/theme/theme.less +1 -1
  658. package/src/utils/EncryptUtil.js +162 -162
  659. package/src/utils/Objects.js +25 -25
  660. package/src/utils/authority-utils.js +85 -85
  661. package/src/utils/axios-interceptors.js +100 -100
  662. package/src/utils/colors.js +107 -107
  663. package/src/utils/common.js +10 -10
  664. package/src/utils/errorCode.js +6 -6
  665. package/src/utils/excel/Blob.js +180 -180
  666. package/src/utils/excel/Export2Excel.js +141 -141
  667. package/src/utils/filter.js +21 -21
  668. package/src/utils/formatter.js +74 -74
  669. package/src/utils/htmlToPDF.js +108 -108
  670. package/src/utils/htmlToPDFApi.js +5 -5
  671. package/src/utils/i18n.js +80 -80
  672. package/src/utils/indexedDB.js +549 -549
  673. package/src/utils/login.js +188 -188
  674. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  675. package/src/utils/lowcode/lowcodeLog.js +29 -29
  676. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  677. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  678. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  679. package/src/utils/map-utils.js +47 -47
  680. package/src/utils/microAppUtils.js +49 -49
  681. package/src/utils/reg.js +95 -95
  682. package/src/utils/request.js +395 -395
  683. package/src/utils/routerUtil.js +553 -553
  684. package/src/utils/runEvalFunction.js +14 -14
  685. package/src/utils/theme-color-replacer-extend.js +92 -92
  686. package/src/utils/themeUtil.js +100 -100
  687. package/src/utils/util.js +329 -329
  688. package/src/utils/waterMark.js +31 -31
  689. package/test/Tree.spec.js +168 -168
  690. package/test/myDialog.spec.js +47 -47
  691. package/test/request.test.js +17 -17
  692. package/test/util.test.js +53 -53
  693. package/test/v3Api.test.js +1984 -1984
  694. package/tests/unit/ReportTable.spec.js +16 -16
  695. package/vue.config.js +222 -222
  696. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  697. package/.claude/settings.local.json +0 -12
@@ -1,807 +1,807 @@
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="transVisible"
12
- :zIndex="1001"
13
- title="移交工单"
14
- @cancel="handleTransferCancel"
15
- @ok="handleTransferOk"
16
- >
17
- <a-form-model ref="transmitFormRef" :label-col="{ span: 4 }" :model="transmitForm" :rules="{ transferTo: { required: true, message: '移交人必填' }, note: { required: true, message: '备注不能为空' } }" :wrapper-col="{ span: 16 }">
18
- <a-form-model-item label="移交给" prop="transferTo">
19
- <a-select
20
- v-model="transmitForm.transferTo"
21
- :filter-option="false"
22
- :not-found-content="null"
23
- :options="nameOptionsFiltered"
24
- :show-arrow="false"
25
- placeholder="请输入移交人"
26
- show-search
27
- style="width: 150px"
28
- @search="employeeNameSearch" />
29
- </a-form-model-item>
30
- <a-form-model-item label="留言" prop="note">
31
- <a-textarea v-model="transmitForm.note" :rows="3" placeholder="请输入移交留言" />
32
- </a-form-model-item>
33
- <a-form-model-item label="上传图片">
34
- <div class="clearfix">
35
- <a-upload
36
- :before-upload="beforeUpload"
37
- :file-list="fileList"
38
- :remove="remove"
39
- action="/api/af-system/file/upload"
40
- list-type="picture-card"
41
- name="avatar"
42
- @change="handleChange"
43
- @preview="handlePreview"
44
- >
45
- <div v-if="fileList.length < 5">
46
- <a-icon type="plus" />
47
- <div class="ant-upload-text">点击上传</div>
48
- </div>
49
- </a-upload>
50
- </div>
51
- </a-form-model-item>
52
- </a-form-model>
53
- </a-modal>
54
- <!-- 图片预览弹框 -->
55
- <a-modal
56
- :dialog-style="{ top: '30px' }"
57
- :footer="null"
58
- :visible="previewVisible"
59
- :z-index="1001"
60
- width="90%"
61
- @cancel="handleCancel"
62
- >
63
- <img :src="previewImage" alt="上传图片" style="width: 100%"/>
64
- </a-modal>
65
- <!-- 关闭工单确认框 -->
66
- <a-modal
67
- :visible="closeVisible"
68
- :zIndex="1002"
69
- title="关闭工单"
70
- @cancel="handleCloseCancel"
71
- @ok="handleCloseOk"
72
- >
73
- <p>是否确认手动关闭工单?</p>
74
- <p style="color: red">(该操作不可撤销,请谨慎操作!)</p>
75
- </a-modal>
76
- <!-- 信息主体 -->
77
- <a-spin :spinning="loadTicketDetails">
78
- <a-page-header :title="'订单:' + this.details.serial_number">
79
- <div class="row">
80
- <div class="content">
81
- <a-descriptions :column="isMobile ? 1 : 2" size="small">
82
- <a-descriptions-item label="优先级">
83
- <a-alert
84
- :message="showPriority()"
85
- :show-icon="true"
86
- :type="showPriorityColorControl()"/>
87
- </a-descriptions-item>
88
- <a-descriptions-item label="发起人">{{ details.uploader }}</a-descriptions-item>
89
- <a-descriptions-item label="问题类型">{{ details.category }}</a-descriptions-item>
90
- <a-descriptions-item label="发起人联系方式">{{ details.uploader_phone }}</a-descriptions-item>
91
- </a-descriptions>
92
- </div>
93
- </div>
94
- <!-- 按钮 -->
95
- <template #extra>
96
- <a-button-group style="margin-right: 4px;">
97
- <a-popover placement="bottomLeft" title="开始处理">
98
- <template slot="content">
99
- <p>开始处理当前工单</p>
100
- </template>
101
- <a-button :disabled="handlerBtnDisable()" type="primary" @click="confirmTicketBtn()">开始处理</a-button>
102
- </a-popover>
103
- <a-popover placement="bottomLeft" title="移交他人">
104
- <template slot="content">
105
- <p>将工单转交他人处理</p>
106
- </template>
107
- <a-button :disabled="transferBtnDisable()" type="primary" @click="transferBtn()">移交他人</a-button>
108
- </a-popover>
109
- <a-popover placement="bottomLeft" title="关闭工单">
110
- <template slot="content">
111
- <p>强制关闭当前工单</p>
112
- <p style="color: red">此操作不可撤销,请谨慎使用</p>
113
- </template>
114
- <a-button :disabled="closeBtnDisable()" type="danger" @click="closeBtn()">关闭工单</a-button>
115
- </a-popover>
116
- </a-button-group>
117
- <a-button-group style="margin-right: 4px;">
118
- <a-button :loading="showSpin" type="dashed" @click="initView">刷新({{ btnCountdownText }})</a-button>
119
- </a-button-group>
120
- </template>
121
- <!-- 进度条 -->
122
- <a-card :bordered="false" style="margin-top: 40px">
123
- <a-steps :current="step" :direction="'horizontal'">
124
- <a-step>
125
- <template #title><span>待处理</span></template>
126
- <template #description>
127
- <div>工单已提交,等待处理<div>{{ format(details.created_time,'yyyy-MM-dd hh:mm:ss') }}</div></div>
128
- </template>
129
- </a-step>
130
- <a-step>
131
- <template #title><span>处理中</span></template>
132
- <template #description>
133
- <div v-if="step >= 1"><strong>{{ details.name }}</strong> 处理中...<div>{{ format(details.confirm_time,'yyyy-MM-dd hh:mm:ss') }}</div></div>
134
- </template>
135
- </a-step>
136
- <a-step>
137
- <template #title><span>{{ getStatus() }}</span></template>
138
- <template #description>
139
- <div v-if="step >= 2">{{ format(details.finished_time,'yyyy-MM-dd hh:mm:ss') }}</div>
140
- </template>
141
- </a-step>
142
- </a-steps>
143
- </a-card>
144
- <!-- 切换栏 -->
145
- <a-tabs style="margin-top: 50px;">
146
- <!-- 问题描述 -->
147
- <a-tab-pane :key="1" tab="问题详细描述">
148
- <a-card :loading="descriptionLoading" style="width: 100%">
149
- <div v-for="(item,index) in addOnDescription" v-if="addOnDescription.length > 0" :key="index">
150
- <span style="font-size: 2em;margin-right: 20px;margin-top: 20px">{{ details.uploader }}</span>
151
- <span>{{ format(item.time,'yyyy年MM月dd日 hh:mm:ss') }}</span>
152
- <p style="text-indent: 2em;font-size: 20px;margin: 20px">{{ item.description }}</p>
153
- <img
154
- v-for="(pic,m) in item.images"
155
- :key="'is' + m"
156
- :class="changePhotoClassForSmall(pic.id)"
157
- :src="'data:image/png;base64,' + pic.url"
158
- alt=""
159
- @click="changePhotoClass(pic.id)">
160
- <div style="height: 1px;background: -webkit-linear-gradient(left, #fff -4%,#6b6c72 50%,#fff 100%);"></div>
161
- </div>
162
- <span style="font-size: 2em;margin-right: 20px">{{ details.uploader }}</span>
163
- <span>{{ format(details.created_time,'yyyy年MM月dd日 hh:mm:ss') }}</span>
164
- <p style="text-indent: 2em;font-size: 20px;margin: 10px">{{ details.description }}</p>
165
- <img
166
- v-for="(originalPic,n) in originalImages"
167
- :key="'os' + n"
168
- :class="changePhotoClassForSmall(originalPic.id)"
169
- :src="'data:image/png;base64,' + originalPic.url"
170
- style="margin-bottom: 10px"
171
- @click="changePhotoClass(originalPic.id)"
172
- alt="">
173
- </a-card>
174
- </a-tab-pane>
175
- <!-- 工单流转历史 -->
176
- <a-tab-pane :key="2" tab="工单流转历史">
177
- <ticket-details-flow
178
- v-if="details.id"
179
- :id="details.id"
180
- :disableCloseBtn="disableCloseBtn"
181
- :ticketId="ticketId"
182
- @imageClick="flowImageClick"/>
183
- </a-tab-pane>
184
- </a-tabs>
185
- </a-page-header>
186
- </a-spin>
187
- <audio ref="audio" controls="controls" hidden src="@vue2-client/assets/sound/newNote.mp3"></audio>
188
- <!-- 放大后图片 -->
189
- <div v-if="selectedImageShow" class="imgBackground" @click="changePhotoClass(selectedImage.id)">
190
- <img
191
- :src="'data:image/png;base64,' + selectedImage.url"
192
- class="img_xl"
193
- alt="">
194
- </div>
195
- </a-drawer>
196
- </template>
197
-
198
- <script>
199
- import JsonViewer from 'vue-json-viewer'
200
- import { formatDate } from '@vue2-client/utils/util'
201
- import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
202
- import XTable from '@vue2-client/base-client/components/common/XTable/XTable'
203
- import { mapState } from 'vuex'
204
- import TicketDetailsFlow from './part/TicketDetailsFlow'
205
- import moment from 'moment'
206
- import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
207
-
208
- function getBase64 (file) {
209
- return new Promise((resolve, reject) => {
210
- const reader = new FileReader()
211
- reader.readAsDataURL(file)
212
- reader.onload = () => resolve(reader.result)
213
- reader.onerror = error => reject(error)
214
- })
215
- }
216
-
217
- export default {
218
- name: 'TicketDetailsView',
219
- components: {
220
- XFormItem,
221
- TicketDetailsFlow,
222
- JsonViewer,
223
- XTable
224
- },
225
- data () {
226
- return {
227
- moment,
228
- // 页面宽度
229
- screenWidth: document.documentElement.clientWidth,
230
- // 控制成功页面显示
231
- successVisible: false,
232
- // 控制预览显示
233
- previewVisible: false,
234
- // 图片真实地址
235
- previewImage: '',
236
- // 图片列表
237
- fileList: [],
238
- // 工单详情
239
- details: {
240
- // 当前负责人ID
241
- id: undefined,
242
- name: '',
243
- uploader: '',
244
- status: undefined,
245
- priority: undefined,
246
- description: '',
247
- created_time: '',
248
- confirm_time: '',
249
- finished_time: '',
250
- category: '',
251
- serial_number: '',
252
- uploader_phone: ''
253
- },
254
- images: [],
255
- selectedImage: null,
256
- selectedImageShow: false,
257
- // 当前步骤
258
- step: 0,
259
- // 移交工单窗口可见性
260
- transVisible: false,
261
- // 移交表单
262
- transmitForm: {
263
- transferTo: undefined,
264
- note: ''
265
- },
266
- // 控制关闭订单按钮可用性
267
- disableCloseBtn: false,
268
- // 控制关闭工单确认框显示
269
- closeVisible: false,
270
- // 控制加载过程
271
- loadTicketDetails: false,
272
- // 附加描述
273
- addOnDescription: [],
274
- // 上传工单时自带照片
275
- originalImages: [],
276
- // 定时刷新定时器
277
- timer: undefined,
278
- // 所有员工姓名
279
- nameOptions: [],
280
- // 结果筛选的员工信息
281
- nameOptionsFiltered: [],
282
- // 工单流转抽屉可见性
283
- workFlowVisible: false,
284
- // 控制小加载指示物显示
285
- showSpin: true,
286
- // 原始描述长度
287
- addOnDescriptionOriginal: undefined,
288
- // 描述加载控制
289
- descriptionLoading: false,
290
- // 用于刷新按钮倒计时显示
291
- btnCountdownText: 5,
292
- }
293
- },
294
- mounted () {
295
- this.initView()
296
- },
297
- computed: {
298
- ...mapState('account', { currUser: 'user' }),
299
- ...mapState('setting', ['isMobile'])
300
- },
301
- props: {
302
- ticketId: {
303
- type: String,
304
- required: true
305
- },
306
- visible: {
307
- type: Boolean,
308
- default: false
309
- }
310
- },
311
- beforeDestroy () {
312
- this.stopTimer()
313
- },
314
- methods: {
315
- employeeNameSearch (input) {
316
- if (!input) {
317
- this.nameOptionsFiltered = []
318
- return
319
- }
320
- this.nameOptionsFiltered = this.nameOptions.filter(item => item.name.includes(input)).map(item => ({ label: item.name, value: item.id }))
321
- },
322
- // 获取所有员工名,供输入框备选
323
- getAllEmpNames () {
324
- return post(TicketDetailsViewApi.getAllEmployeeName, null)
325
- .then(res => {
326
- this.nameOptions = res
327
- }, err => {
328
- console.log(err)
329
- })
330
- },
331
- // 图像修改检测
332
- handleChange ({ fileList }) {
333
- this.fileList = fileList.filter((item) => {
334
- return item.status === 'done' || item.status === 'uploading'
335
- })
336
- },
337
- // 在上传页面,点击图片上的垃圾桶,撤销上传
338
- remove (file) {
339
- return post(TicketDetailsViewApi.revocationImage, {
340
- file: file
341
- })
342
- .then(res => {
343
- if (res.data === 'success') {
344
- this.$message.success('删除成功')
345
- }
346
- this.fileList = this.fileList.filter((item) => {
347
- return item.response.name !== file.response.name
348
- })
349
- }, err => {
350
- console.log(err)
351
- })
352
- },
353
- // 上传头像前校验
354
- beforeUpload (file) {
355
- const isJpgOrPng =
356
- file.type === 'image/jpeg' ||
357
- file.type === 'image/jpg' ||
358
- file.type === 'image/png'
359
- const Lt2M = file.size / 1024 / 1024 < 2
360
- if (!Lt2M) {
361
- this.$message.error('图片不得大于2MB!')
362
- }
363
- if (!isJpgOrPng) {
364
- this.$message.error('只能上传jpg/png格式的图片')
365
- }
366
- return isJpgOrPng && Lt2M
367
- },
368
- handleCancel () {
369
- this.previewVisible = false
370
- },
371
- // 处理预览图像
372
- async handlePreview (file) {
373
- if (!file.url && !file.preview) {
374
- file.preview = await getBase64(file.originFileObj)
375
- }
376
- this.previewImage = file.url || file.preview
377
- this.previewVisible = true
378
- },
379
- // 开启定时器
380
- setTimer () {
381
- if (this.timer === undefined) {
382
- this.timer = setInterval(() => {
383
- if (this.btnCountdownText > 0) {
384
- this.btnCountdownText--
385
- if (this.btnCountdownText === 0) {
386
- this.initView()
387
- this.btnCountdownText = 5
388
- }
389
- }
390
- }, 1000)
391
- }
392
- },
393
- // 初始化组件
394
- initView () {
395
- this.showSpin = true
396
- this.descriptionLoading = true
397
- // 获取所有员工名
398
- this.getAllEmpNames()
399
- // 获取工单的基本详情
400
- this.getTicketDetail(this.ticketId)
401
- // 获取工单的附加信息
402
- this.handleOtherData()
403
- },
404
- // 图像点击切换放大缩小
405
- changePhotoClass (id) {
406
- for (let i = 0; i < this.images.length; i++) {
407
- if (id === this.images[i].id) {
408
- this.images[i].isLarge = !this.images[i].isLarge
409
- this.selectedImage = this.images[i]
410
- }
411
- }
412
- this.selectedImageShow = !this.selectedImageShow
413
- },
414
- // 控制未放大图像变暗
415
- changePhotoClassForSmall (id) {
416
- for (let i = 0; i < this.images.length; i++) {
417
- if (id === this.images[i].id) {
418
- if (this.images[i].isLarge === true) {
419
- return 'img_sm_dark'
420
- } else {
421
- return 'img_sm'
422
- }
423
- }
424
- }
425
- },
426
- // 获取当前相关联的照片
427
- getPhoto () {
428
- return post(TicketDetailsViewApi.getTicketImages, {
429
- ticketId: this.ticketId
430
- })
431
- .then(res => {
432
- this.images = res
433
- for (let i = 0; i < this.images.length; i++) {
434
- this.images[i].isLarge = false
435
- }
436
- this.mergeAddImage()
437
- }, err => {
438
- console.log(err)
439
- })
440
- },
441
- // 将同一次上传的图片,与描述放在一起
442
- mergeAddImage () {
443
- this.originalImages = []
444
- for (let i = 0; i < this.addOnDescription.length; i++) {
445
- this.addOnDescription[i].images = []
446
- }
447
- for (let i = 0; i < this.images.length; i++) {
448
- if (this.images[i].did === 0) {
449
- this.originalImages.push(this.images[i])
450
- continue
451
- }
452
- for (let j = 0; j < this.addOnDescription.length; j++) {
453
- if (this.images[i].did === this.addOnDescription[j].id) {
454
- this.addOnDescription[j].images.push(this.images[i])
455
- }
456
- }
457
- }
458
- this.initDone()
459
- },
460
- initDone () {
461
- // 初始化信息
462
- this.showSpin = false
463
- this.descriptionLoading = false
464
- if (this.step !== 3) {
465
- this.setTimer()
466
- }
467
- this.addOnDescriptionOriginal = 1
468
- },
469
- // 关闭工单确认后业务逻辑
470
- handleCloseOk () {
471
- return post(TicketDetailsViewApi.manualCloseTicket, {
472
- ticketId: this.ticketId,
473
- time: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss')
474
- })
475
- .then(res => {
476
- if (res.data !== 0) {
477
- this.$message.success(
478
- '操作成功',
479
- 5
480
- )
481
- this.initView()
482
- this.closeVisible = false
483
- } else {
484
- this.$message.error(
485
- '操作失败',
486
- 5
487
- )
488
- }
489
- }, err => {
490
- console.error(err)
491
- })
492
- },
493
- // 关闭工单取消后业务逻辑
494
- handleCloseCancel () {
495
- this.closeVisible = false
496
- },
497
- // 确认工单按钮业务逻辑
498
- confirmTicketBtn () {
499
- return post(TicketDetailsViewApi.confirmTicket, {
500
- ticketId: this.ticketId,
501
- time: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss'),
502
- empId: this.currUser.id
503
- })
504
- .then(res => {
505
- if (res.data !== 0) {
506
- this.$message.success('操作成功', 5)
507
- } else {
508
- this.$message.error('工单已被他人处理或关闭,请刷新再试', 5)
509
- }
510
- this.initView()
511
- }, err => {
512
- console.error(err)
513
- this.$message.error('工单已被他人处理,请刷新再试', 5)
514
- this.initView()
515
- })
516
- },
517
- // 转移工单按钮业务逻辑
518
- transferBtn () {
519
- this.transVisible = true
520
- },
521
- // 获取工单状态撤销or关闭
522
- getStatus () {
523
- if (this.details.status === 2) {
524
- return '已撤销'
525
- } else {
526
- return '已关闭'
527
- }
528
- },
529
- // 关闭工单按钮业务逻辑
530
- closeBtn () {
531
- this.closeVisible = true
532
- },
533
- // 转移工单确认后逻辑
534
- handleTransferOk () {
535
- this.$refs.transmitFormRef.validate().then(() => {
536
- post(TicketDetailsViewApi.transferTicketToOthers, {
537
- ticketId: this.ticketId,
538
- endTime: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss'),
539
- ...this.transmitForm,
540
- images: this.fileList
541
- })
542
- .then(res => {
543
- const result = res
544
- this.transVisible = false
545
- if (result.data === 1) {
546
- this.$message.success(
547
- '操作成功',
548
- 5
549
- )
550
- this.fileList = []
551
- this.$refs.transmitFormRef.resetFields()
552
- } else {
553
- this.$message.error('工单已被他人处理或关闭,请刷新再试', 5)
554
- }
555
- this.handleCancel()
556
- this.initView()
557
- }, err => {
558
- console.error(err)
559
- this.transVisible = false
560
- })
561
- })
562
- },
563
- // 转移工单取消后逻辑
564
- handleTransferCancel () {
565
- this.transVisible = false
566
- this.$refs.transmitFormRef.resetFields()
567
- },
568
- // 关闭抽屉时回调
569
- onClose () {
570
- this.stopTimer()
571
- this.addOnDescription = []
572
- this.disableCloseBtn = false
573
- this.$emit('update:visible', false)
574
- this.originalImages = []
575
- this.images = []
576
- this.addOnDescriptionOriginal = undefined
577
- },
578
- // 对其他信息进行初始化,包括附加描述,图片
579
- handleOtherData () {
580
- const beforeLength = this.addOnDescription.length
581
- return post(TicketDetailsViewApi.getAddonDescription, {
582
- ticketId: this.ticketId
583
- })
584
- .then(res => {
585
- this.addOnDescription = res
586
- this.getPhoto()
587
- if (this.addOnDescription.length > beforeLength && this.addOnDescriptionOriginal !== undefined) {
588
- this.addOnDescriptionOriginal = 1
589
- this.$refs.audio.currentTime = 0
590
- this.$refs.audio.play()
591
- this.$notification.open({
592
- message: '最新通知',
593
- description:
594
- '客户追加了问题描述,请及时查看!',
595
- onClick: () => {
596
- }
597
- })
598
- }
599
- }, err => {
600
- console.log(err)
601
- })
602
- },
603
- // 获取工单详情信息
604
- getTicketDetail (num) {
605
- this.showSpin = true
606
- return post(TicketDetailsViewApi.getTicketDetails, {
607
- ticketId: num
608
- }).then(res => {
609
- this.details = res[0]
610
- this.step = res[0].status
611
- if (this.details.status === 3) {
612
- this.disableCloseBtn = true
613
- }
614
- const categoryValue = this.details.category
615
- this.details.category = this.$appdata.getDictionaryList('ticketCategoryMap')[categoryValue].label
616
- }, err => {
617
- console.error(err)
618
- })
619
- },
620
- // 日期格式化
621
- format (date, format) {
622
- return formatDate(date, format)
623
- },
624
- // 转换JSON
625
- toJSON (value) {
626
- try {
627
- return JSON.parse(value)
628
- } catch (e) {
629
- return value
630
- }
631
- },
632
- // 控制开始处理按钮可用状态
633
- handlerBtnDisable () {
634
- return this.step !== 0
635
- },
636
- // 控制移交他人按钮可用状态
637
- transferBtnDisable () {
638
- return this.step === 0 || this.step === 3
639
- },
640
- // 控制关闭工单按钮可用状态
641
- closeBtnDisable () {
642
- return this.step === 0 || this.disableCloseBtn || this.details.name !== this.currUser.ename
643
- },
644
- // 优先级文字显示
645
- showPriority () {
646
- if (this.details.priority === 2) {
647
- return '一般'
648
- } else if (this.details.priority === 1) {
649
- return '紧急'
650
- } else {
651
- return '非常紧急'
652
- }
653
- },
654
- // 优先度颜色控制
655
- showPriorityColorControl () {
656
- if (this.details.priority === 2) {
657
- return 'info'
658
- } else if (this.details.priority === 1) {
659
- return 'warning'
660
- } else {
661
- return 'error'
662
- }
663
- },
664
- // 单击工单流转历史图片
665
- flowImageClick (image) {
666
- this.selectedImage = image
667
- this.selectedImageShow = !this.selectedImageShow
668
- },
669
- // 停止定时器
670
- stopTimer () {
671
- if (this.timer) {
672
- clearInterval(this.timer)
673
- this.timer = undefined
674
- }
675
- },
676
- },
677
- watch: {
678
- 'visible' (val) {
679
- if (val) {
680
- this.initView()
681
- }
682
- },
683
- 'step' (newVal) {
684
- if (newVal === 3) {
685
- this.stopTimer()
686
- }
687
- }
688
- }
689
- }
690
- </script>
691
-
692
- <style lang="less" scoped>
693
- .high-priority{
694
- background-color: rgba(163, 30, 30, 0.66);
695
- border: red solid 1px;
696
- font-size: large;
697
- padding: 5px;
698
- color: white;
699
- border-radius: 10px;
700
- }
701
-
702
- .detail-layout {
703
- margin-left: 44px;
704
- }
705
- .text {
706
- color: rgba(0, 0, 0, .45);
707
- }
708
-
709
- .heading {
710
- color: rgba(0, 0, 0, .85);
711
- font-size: 20px;
712
- }
713
-
714
- .no-data {
715
- color: rgba(0, 0, 0, .25);
716
- text-align: center;
717
- line-height: 64px;
718
- font-size: 16px;
719
-
720
- i {
721
- font-size: 24px;
722
- margin-right: 16px;
723
- position: relative;
724
- top: 3px;
725
- }
726
- }
727
-
728
- .mobile {
729
- .detail-layout {
730
- margin-left: unset;
731
- }
732
- .text {
733
-
734
- }
735
- .status-list {
736
- text-align: left;
737
- }
738
- }
739
-
740
- .row {
741
- display: flex;
742
-
743
- .content {
744
- -webkit-box-flex: 1;
745
- flex: auto;
746
- -ms-flex: auto;
747
- }
748
-
749
- .extra {
750
- flex: 0 1 auto;
751
- -webkit-box-flex: 0;
752
- -ms-flex: 0 1 auto;
753
- min-width: 242px;
754
- margin-left: 88px;
755
- text-align: right;
756
- }
757
- }
758
-
759
- .img_sm {
760
- border: rgba(84, 84, 84, 0.2) solid 1.5px;
761
- border-radius: 5px;
762
- padding: 10px;
763
- width: 160px;
764
- height: 120px;
765
- margin-bottom: 20px;
766
- margin-left: 20px;
767
- }
768
- .img_xl {
769
- position: absolute;
770
- top:0;bottom:0;left:0;right:0;
771
- margin: auto;
772
- width: 60%;
773
- max-width: 1000px;
774
- cursor: zoom-out;
775
- z-index: 9999;
776
- animation: imgZoomIn 0.4s;
777
- -webkit-animation: imgZoomIn 0.4s;
778
- }
779
- @keyframes imgZoomIn
780
- {
781
- from {width: 160px;}
782
- to {width: 60%;}
783
- }
784
- .img_sm:hover {
785
- opacity: 0.6;
786
- cursor: zoom-in;
787
- }
788
- .img_sm_dark{
789
- filter: grayscale(100%);
790
- opacity: 0.6;
791
- border: rgba(84, 84, 84, 0.2) solid 1.5px;
792
- border-radius: 5px;
793
- padding: 10px;
794
- width: 160px;
795
- height: 120px;
796
- margin-bottom: 20px;
797
- margin-left: 20px;
798
- }
799
- .imgBackground {
800
- position: absolute;
801
- top:0;bottom:0;left:0;right:0;
802
- width: 100%;
803
- height: 100%;
804
- z-index: 9998;
805
- background-color: rgba(0,0,0,0.7);
806
- }
807
- </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="transVisible"
12
+ :zIndex="1001"
13
+ title="移交工单"
14
+ @cancel="handleTransferCancel"
15
+ @ok="handleTransferOk"
16
+ >
17
+ <a-form-model ref="transmitFormRef" :label-col="{ span: 4 }" :model="transmitForm" :rules="{ transferTo: { required: true, message: '移交人必填' }, note: { required: true, message: '备注不能为空' } }" :wrapper-col="{ span: 16 }">
18
+ <a-form-model-item label="移交给" prop="transferTo">
19
+ <a-select
20
+ v-model="transmitForm.transferTo"
21
+ :filter-option="false"
22
+ :not-found-content="null"
23
+ :options="nameOptionsFiltered"
24
+ :show-arrow="false"
25
+ placeholder="请输入移交人"
26
+ show-search
27
+ style="width: 150px"
28
+ @search="employeeNameSearch" />
29
+ </a-form-model-item>
30
+ <a-form-model-item label="留言" prop="note">
31
+ <a-textarea v-model="transmitForm.note" :rows="3" placeholder="请输入移交留言" />
32
+ </a-form-model-item>
33
+ <a-form-model-item label="上传图片">
34
+ <div class="clearfix">
35
+ <a-upload
36
+ :before-upload="beforeUpload"
37
+ :file-list="fileList"
38
+ :remove="remove"
39
+ action="/api/af-system/file/upload"
40
+ list-type="picture-card"
41
+ name="avatar"
42
+ @change="handleChange"
43
+ @preview="handlePreview"
44
+ >
45
+ <div v-if="fileList.length < 5">
46
+ <a-icon type="plus" />
47
+ <div class="ant-upload-text">点击上传</div>
48
+ </div>
49
+ </a-upload>
50
+ </div>
51
+ </a-form-model-item>
52
+ </a-form-model>
53
+ </a-modal>
54
+ <!-- 图片预览弹框 -->
55
+ <a-modal
56
+ :dialog-style="{ top: '30px' }"
57
+ :footer="null"
58
+ :visible="previewVisible"
59
+ :z-index="1001"
60
+ width="90%"
61
+ @cancel="handleCancel"
62
+ >
63
+ <img :src="previewImage" alt="上传图片" style="width: 100%"/>
64
+ </a-modal>
65
+ <!-- 关闭工单确认框 -->
66
+ <a-modal
67
+ :visible="closeVisible"
68
+ :zIndex="1002"
69
+ title="关闭工单"
70
+ @cancel="handleCloseCancel"
71
+ @ok="handleCloseOk"
72
+ >
73
+ <p>是否确认手动关闭工单?</p>
74
+ <p style="color: red">(该操作不可撤销,请谨慎操作!)</p>
75
+ </a-modal>
76
+ <!-- 信息主体 -->
77
+ <a-spin :spinning="loadTicketDetails">
78
+ <a-page-header :title="'订单:' + this.details.serial_number">
79
+ <div class="row">
80
+ <div class="content">
81
+ <a-descriptions :column="isMobile ? 1 : 2" size="small">
82
+ <a-descriptions-item label="优先级">
83
+ <a-alert
84
+ :message="showPriority()"
85
+ :show-icon="true"
86
+ :type="showPriorityColorControl()"/>
87
+ </a-descriptions-item>
88
+ <a-descriptions-item label="发起人">{{ details.uploader }}</a-descriptions-item>
89
+ <a-descriptions-item label="问题类型">{{ details.category }}</a-descriptions-item>
90
+ <a-descriptions-item label="发起人联系方式">{{ details.uploader_phone }}</a-descriptions-item>
91
+ </a-descriptions>
92
+ </div>
93
+ </div>
94
+ <!-- 按钮 -->
95
+ <template #extra>
96
+ <a-button-group style="margin-right: 4px;">
97
+ <a-popover placement="bottomLeft" title="开始处理">
98
+ <template slot="content">
99
+ <p>开始处理当前工单</p>
100
+ </template>
101
+ <a-button :disabled="handlerBtnDisable()" type="primary" @click="confirmTicketBtn()">开始处理</a-button>
102
+ </a-popover>
103
+ <a-popover placement="bottomLeft" title="移交他人">
104
+ <template slot="content">
105
+ <p>将工单转交他人处理</p>
106
+ </template>
107
+ <a-button :disabled="transferBtnDisable()" type="primary" @click="transferBtn()">移交他人</a-button>
108
+ </a-popover>
109
+ <a-popover placement="bottomLeft" title="关闭工单">
110
+ <template slot="content">
111
+ <p>强制关闭当前工单</p>
112
+ <p style="color: red">此操作不可撤销,请谨慎使用</p>
113
+ </template>
114
+ <a-button :disabled="closeBtnDisable()" type="danger" @click="closeBtn()">关闭工单</a-button>
115
+ </a-popover>
116
+ </a-button-group>
117
+ <a-button-group style="margin-right: 4px;">
118
+ <a-button :loading="showSpin" type="dashed" @click="initView">刷新({{ btnCountdownText }})</a-button>
119
+ </a-button-group>
120
+ </template>
121
+ <!-- 进度条 -->
122
+ <a-card :bordered="false" style="margin-top: 40px">
123
+ <a-steps :current="step" :direction="'horizontal'">
124
+ <a-step>
125
+ <template #title><span>待处理</span></template>
126
+ <template #description>
127
+ <div>工单已提交,等待处理<div>{{ format(details.created_time,'yyyy-MM-dd hh:mm:ss') }}</div></div>
128
+ </template>
129
+ </a-step>
130
+ <a-step>
131
+ <template #title><span>处理中</span></template>
132
+ <template #description>
133
+ <div v-if="step >= 1"><strong>{{ details.name }}</strong> 处理中...<div>{{ format(details.confirm_time,'yyyy-MM-dd hh:mm:ss') }}</div></div>
134
+ </template>
135
+ </a-step>
136
+ <a-step>
137
+ <template #title><span>{{ getStatus() }}</span></template>
138
+ <template #description>
139
+ <div v-if="step >= 2">{{ format(details.finished_time,'yyyy-MM-dd hh:mm:ss') }}</div>
140
+ </template>
141
+ </a-step>
142
+ </a-steps>
143
+ </a-card>
144
+ <!-- 切换栏 -->
145
+ <a-tabs style="margin-top: 50px;">
146
+ <!-- 问题描述 -->
147
+ <a-tab-pane :key="1" tab="问题详细描述">
148
+ <a-card :loading="descriptionLoading" style="width: 100%">
149
+ <div v-for="(item,index) in addOnDescription" v-if="addOnDescription.length > 0" :key="index">
150
+ <span style="font-size: 2em;margin-right: 20px;margin-top: 20px">{{ details.uploader }}</span>
151
+ <span>{{ format(item.time,'yyyy年MM月dd日 hh:mm:ss') }}</span>
152
+ <p style="text-indent: 2em;font-size: 20px;margin: 20px">{{ item.description }}</p>
153
+ <img
154
+ v-for="(pic,m) in item.images"
155
+ :key="'is' + m"
156
+ :class="changePhotoClassForSmall(pic.id)"
157
+ :src="'data:image/png;base64,' + pic.url"
158
+ alt=""
159
+ @click="changePhotoClass(pic.id)">
160
+ <div style="height: 1px;background: -webkit-linear-gradient(left, #fff -4%,#6b6c72 50%,#fff 100%);"></div>
161
+ </div>
162
+ <span style="font-size: 2em;margin-right: 20px">{{ details.uploader }}</span>
163
+ <span>{{ format(details.created_time,'yyyy年MM月dd日 hh:mm:ss') }}</span>
164
+ <p style="text-indent: 2em;font-size: 20px;margin: 10px">{{ details.description }}</p>
165
+ <img
166
+ v-for="(originalPic,n) in originalImages"
167
+ :key="'os' + n"
168
+ :class="changePhotoClassForSmall(originalPic.id)"
169
+ :src="'data:image/png;base64,' + originalPic.url"
170
+ style="margin-bottom: 10px"
171
+ @click="changePhotoClass(originalPic.id)"
172
+ alt="">
173
+ </a-card>
174
+ </a-tab-pane>
175
+ <!-- 工单流转历史 -->
176
+ <a-tab-pane :key="2" tab="工单流转历史">
177
+ <ticket-details-flow
178
+ v-if="details.id"
179
+ :id="details.id"
180
+ :disableCloseBtn="disableCloseBtn"
181
+ :ticketId="ticketId"
182
+ @imageClick="flowImageClick"/>
183
+ </a-tab-pane>
184
+ </a-tabs>
185
+ </a-page-header>
186
+ </a-spin>
187
+ <audio ref="audio" controls="controls" hidden src="@vue2-client/assets/sound/newNote.mp3"></audio>
188
+ <!-- 放大后图片 -->
189
+ <div v-if="selectedImageShow" class="imgBackground" @click="changePhotoClass(selectedImage.id)">
190
+ <img
191
+ :src="'data:image/png;base64,' + selectedImage.url"
192
+ class="img_xl"
193
+ alt="">
194
+ </div>
195
+ </a-drawer>
196
+ </template>
197
+
198
+ <script>
199
+ import JsonViewer from 'vue-json-viewer'
200
+ import { formatDate } from '@vue2-client/utils/util'
201
+ import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
202
+ import XTable from '@vue2-client/base-client/components/common/XTable/XTable'
203
+ import { mapState } from 'vuex'
204
+ import TicketDetailsFlow from './part/TicketDetailsFlow'
205
+ import moment from 'moment'
206
+ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
207
+
208
+ function getBase64 (file) {
209
+ return new Promise((resolve, reject) => {
210
+ const reader = new FileReader()
211
+ reader.readAsDataURL(file)
212
+ reader.onload = () => resolve(reader.result)
213
+ reader.onerror = error => reject(error)
214
+ })
215
+ }
216
+
217
+ export default {
218
+ name: 'TicketDetailsView',
219
+ components: {
220
+ XFormItem,
221
+ TicketDetailsFlow,
222
+ JsonViewer,
223
+ XTable
224
+ },
225
+ data () {
226
+ return {
227
+ moment,
228
+ // 页面宽度
229
+ screenWidth: document.documentElement.clientWidth,
230
+ // 控制成功页面显示
231
+ successVisible: false,
232
+ // 控制预览显示
233
+ previewVisible: false,
234
+ // 图片真实地址
235
+ previewImage: '',
236
+ // 图片列表
237
+ fileList: [],
238
+ // 工单详情
239
+ details: {
240
+ // 当前负责人ID
241
+ id: undefined,
242
+ name: '',
243
+ uploader: '',
244
+ status: undefined,
245
+ priority: undefined,
246
+ description: '',
247
+ created_time: '',
248
+ confirm_time: '',
249
+ finished_time: '',
250
+ category: '',
251
+ serial_number: '',
252
+ uploader_phone: ''
253
+ },
254
+ images: [],
255
+ selectedImage: null,
256
+ selectedImageShow: false,
257
+ // 当前步骤
258
+ step: 0,
259
+ // 移交工单窗口可见性
260
+ transVisible: false,
261
+ // 移交表单
262
+ transmitForm: {
263
+ transferTo: undefined,
264
+ note: ''
265
+ },
266
+ // 控制关闭订单按钮可用性
267
+ disableCloseBtn: false,
268
+ // 控制关闭工单确认框显示
269
+ closeVisible: false,
270
+ // 控制加载过程
271
+ loadTicketDetails: false,
272
+ // 附加描述
273
+ addOnDescription: [],
274
+ // 上传工单时自带照片
275
+ originalImages: [],
276
+ // 定时刷新定时器
277
+ timer: undefined,
278
+ // 所有员工姓名
279
+ nameOptions: [],
280
+ // 结果筛选的员工信息
281
+ nameOptionsFiltered: [],
282
+ // 工单流转抽屉可见性
283
+ workFlowVisible: false,
284
+ // 控制小加载指示物显示
285
+ showSpin: true,
286
+ // 原始描述长度
287
+ addOnDescriptionOriginal: undefined,
288
+ // 描述加载控制
289
+ descriptionLoading: false,
290
+ // 用于刷新按钮倒计时显示
291
+ btnCountdownText: 5,
292
+ }
293
+ },
294
+ mounted () {
295
+ this.initView()
296
+ },
297
+ computed: {
298
+ ...mapState('account', { currUser: 'user' }),
299
+ ...mapState('setting', ['isMobile'])
300
+ },
301
+ props: {
302
+ ticketId: {
303
+ type: String,
304
+ required: true
305
+ },
306
+ visible: {
307
+ type: Boolean,
308
+ default: false
309
+ }
310
+ },
311
+ beforeDestroy () {
312
+ this.stopTimer()
313
+ },
314
+ methods: {
315
+ employeeNameSearch (input) {
316
+ if (!input) {
317
+ this.nameOptionsFiltered = []
318
+ return
319
+ }
320
+ this.nameOptionsFiltered = this.nameOptions.filter(item => item.name.includes(input)).map(item => ({ label: item.name, value: item.id }))
321
+ },
322
+ // 获取所有员工名,供输入框备选
323
+ getAllEmpNames () {
324
+ return post(TicketDetailsViewApi.getAllEmployeeName, null)
325
+ .then(res => {
326
+ this.nameOptions = res
327
+ }, err => {
328
+ console.log(err)
329
+ })
330
+ },
331
+ // 图像修改检测
332
+ handleChange ({ fileList }) {
333
+ this.fileList = fileList.filter((item) => {
334
+ return item.status === 'done' || item.status === 'uploading'
335
+ })
336
+ },
337
+ // 在上传页面,点击图片上的垃圾桶,撤销上传
338
+ remove (file) {
339
+ return post(TicketDetailsViewApi.revocationImage, {
340
+ file: file
341
+ })
342
+ .then(res => {
343
+ if (res.data === 'success') {
344
+ this.$message.success('删除成功')
345
+ }
346
+ this.fileList = this.fileList.filter((item) => {
347
+ return item.response.name !== file.response.name
348
+ })
349
+ }, err => {
350
+ console.log(err)
351
+ })
352
+ },
353
+ // 上传头像前校验
354
+ beforeUpload (file) {
355
+ const isJpgOrPng =
356
+ file.type === 'image/jpeg' ||
357
+ file.type === 'image/jpg' ||
358
+ file.type === 'image/png'
359
+ const Lt2M = file.size / 1024 / 1024 < 2
360
+ if (!Lt2M) {
361
+ this.$message.error('图片不得大于2MB!')
362
+ }
363
+ if (!isJpgOrPng) {
364
+ this.$message.error('只能上传jpg/png格式的图片')
365
+ }
366
+ return isJpgOrPng && Lt2M
367
+ },
368
+ handleCancel () {
369
+ this.previewVisible = false
370
+ },
371
+ // 处理预览图像
372
+ async handlePreview (file) {
373
+ if (!file.url && !file.preview) {
374
+ file.preview = await getBase64(file.originFileObj)
375
+ }
376
+ this.previewImage = file.url || file.preview
377
+ this.previewVisible = true
378
+ },
379
+ // 开启定时器
380
+ setTimer () {
381
+ if (this.timer === undefined) {
382
+ this.timer = setInterval(() => {
383
+ if (this.btnCountdownText > 0) {
384
+ this.btnCountdownText--
385
+ if (this.btnCountdownText === 0) {
386
+ this.initView()
387
+ this.btnCountdownText = 5
388
+ }
389
+ }
390
+ }, 1000)
391
+ }
392
+ },
393
+ // 初始化组件
394
+ initView () {
395
+ this.showSpin = true
396
+ this.descriptionLoading = true
397
+ // 获取所有员工名
398
+ this.getAllEmpNames()
399
+ // 获取工单的基本详情
400
+ this.getTicketDetail(this.ticketId)
401
+ // 获取工单的附加信息
402
+ this.handleOtherData()
403
+ },
404
+ // 图像点击切换放大缩小
405
+ changePhotoClass (id) {
406
+ for (let i = 0; i < this.images.length; i++) {
407
+ if (id === this.images[i].id) {
408
+ this.images[i].isLarge = !this.images[i].isLarge
409
+ this.selectedImage = this.images[i]
410
+ }
411
+ }
412
+ this.selectedImageShow = !this.selectedImageShow
413
+ },
414
+ // 控制未放大图像变暗
415
+ changePhotoClassForSmall (id) {
416
+ for (let i = 0; i < this.images.length; i++) {
417
+ if (id === this.images[i].id) {
418
+ if (this.images[i].isLarge === true) {
419
+ return 'img_sm_dark'
420
+ } else {
421
+ return 'img_sm'
422
+ }
423
+ }
424
+ }
425
+ },
426
+ // 获取当前相关联的照片
427
+ getPhoto () {
428
+ return post(TicketDetailsViewApi.getTicketImages, {
429
+ ticketId: this.ticketId
430
+ })
431
+ .then(res => {
432
+ this.images = res
433
+ for (let i = 0; i < this.images.length; i++) {
434
+ this.images[i].isLarge = false
435
+ }
436
+ this.mergeAddImage()
437
+ }, err => {
438
+ console.log(err)
439
+ })
440
+ },
441
+ // 将同一次上传的图片,与描述放在一起
442
+ mergeAddImage () {
443
+ this.originalImages = []
444
+ for (let i = 0; i < this.addOnDescription.length; i++) {
445
+ this.addOnDescription[i].images = []
446
+ }
447
+ for (let i = 0; i < this.images.length; i++) {
448
+ if (this.images[i].did === 0) {
449
+ this.originalImages.push(this.images[i])
450
+ continue
451
+ }
452
+ for (let j = 0; j < this.addOnDescription.length; j++) {
453
+ if (this.images[i].did === this.addOnDescription[j].id) {
454
+ this.addOnDescription[j].images.push(this.images[i])
455
+ }
456
+ }
457
+ }
458
+ this.initDone()
459
+ },
460
+ initDone () {
461
+ // 初始化信息
462
+ this.showSpin = false
463
+ this.descriptionLoading = false
464
+ if (this.step !== 3) {
465
+ this.setTimer()
466
+ }
467
+ this.addOnDescriptionOriginal = 1
468
+ },
469
+ // 关闭工单确认后业务逻辑
470
+ handleCloseOk () {
471
+ return post(TicketDetailsViewApi.manualCloseTicket, {
472
+ ticketId: this.ticketId,
473
+ time: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss')
474
+ })
475
+ .then(res => {
476
+ if (res.data !== 0) {
477
+ this.$message.success(
478
+ '操作成功',
479
+ 5
480
+ )
481
+ this.initView()
482
+ this.closeVisible = false
483
+ } else {
484
+ this.$message.error(
485
+ '操作失败',
486
+ 5
487
+ )
488
+ }
489
+ }, err => {
490
+ console.error(err)
491
+ })
492
+ },
493
+ // 关闭工单取消后业务逻辑
494
+ handleCloseCancel () {
495
+ this.closeVisible = false
496
+ },
497
+ // 确认工单按钮业务逻辑
498
+ confirmTicketBtn () {
499
+ return post(TicketDetailsViewApi.confirmTicket, {
500
+ ticketId: this.ticketId,
501
+ time: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss'),
502
+ empId: this.currUser.id
503
+ })
504
+ .then(res => {
505
+ if (res.data !== 0) {
506
+ this.$message.success('操作成功', 5)
507
+ } else {
508
+ this.$message.error('工单已被他人处理或关闭,请刷新再试', 5)
509
+ }
510
+ this.initView()
511
+ }, err => {
512
+ console.error(err)
513
+ this.$message.error('工单已被他人处理,请刷新再试', 5)
514
+ this.initView()
515
+ })
516
+ },
517
+ // 转移工单按钮业务逻辑
518
+ transferBtn () {
519
+ this.transVisible = true
520
+ },
521
+ // 获取工单状态撤销or关闭
522
+ getStatus () {
523
+ if (this.details.status === 2) {
524
+ return '已撤销'
525
+ } else {
526
+ return '已关闭'
527
+ }
528
+ },
529
+ // 关闭工单按钮业务逻辑
530
+ closeBtn () {
531
+ this.closeVisible = true
532
+ },
533
+ // 转移工单确认后逻辑
534
+ handleTransferOk () {
535
+ this.$refs.transmitFormRef.validate().then(() => {
536
+ post(TicketDetailsViewApi.transferTicketToOthers, {
537
+ ticketId: this.ticketId,
538
+ endTime: this.format(new Date(), 'yyyy-MM-dd hh:mm:ss'),
539
+ ...this.transmitForm,
540
+ images: this.fileList
541
+ })
542
+ .then(res => {
543
+ const result = res
544
+ this.transVisible = false
545
+ if (result.data === 1) {
546
+ this.$message.success(
547
+ '操作成功',
548
+ 5
549
+ )
550
+ this.fileList = []
551
+ this.$refs.transmitFormRef.resetFields()
552
+ } else {
553
+ this.$message.error('工单已被他人处理或关闭,请刷新再试', 5)
554
+ }
555
+ this.handleCancel()
556
+ this.initView()
557
+ }, err => {
558
+ console.error(err)
559
+ this.transVisible = false
560
+ })
561
+ })
562
+ },
563
+ // 转移工单取消后逻辑
564
+ handleTransferCancel () {
565
+ this.transVisible = false
566
+ this.$refs.transmitFormRef.resetFields()
567
+ },
568
+ // 关闭抽屉时回调
569
+ onClose () {
570
+ this.stopTimer()
571
+ this.addOnDescription = []
572
+ this.disableCloseBtn = false
573
+ this.$emit('update:visible', false)
574
+ this.originalImages = []
575
+ this.images = []
576
+ this.addOnDescriptionOriginal = undefined
577
+ },
578
+ // 对其他信息进行初始化,包括附加描述,图片
579
+ handleOtherData () {
580
+ const beforeLength = this.addOnDescription.length
581
+ return post(TicketDetailsViewApi.getAddonDescription, {
582
+ ticketId: this.ticketId
583
+ })
584
+ .then(res => {
585
+ this.addOnDescription = res
586
+ this.getPhoto()
587
+ if (this.addOnDescription.length > beforeLength && this.addOnDescriptionOriginal !== undefined) {
588
+ this.addOnDescriptionOriginal = 1
589
+ this.$refs.audio.currentTime = 0
590
+ this.$refs.audio.play()
591
+ this.$notification.open({
592
+ message: '最新通知',
593
+ description:
594
+ '客户追加了问题描述,请及时查看!',
595
+ onClick: () => {
596
+ }
597
+ })
598
+ }
599
+ }, err => {
600
+ console.log(err)
601
+ })
602
+ },
603
+ // 获取工单详情信息
604
+ getTicketDetail (num) {
605
+ this.showSpin = true
606
+ return post(TicketDetailsViewApi.getTicketDetails, {
607
+ ticketId: num
608
+ }).then(res => {
609
+ this.details = res[0]
610
+ this.step = res[0].status
611
+ if (this.details.status === 3) {
612
+ this.disableCloseBtn = true
613
+ }
614
+ const categoryValue = this.details.category
615
+ this.details.category = this.$appdata.getDictionaryList('ticketCategoryMap')[categoryValue].label
616
+ }, err => {
617
+ console.error(err)
618
+ })
619
+ },
620
+ // 日期格式化
621
+ format (date, format) {
622
+ return formatDate(date, format)
623
+ },
624
+ // 转换JSON
625
+ toJSON (value) {
626
+ try {
627
+ return JSON.parse(value)
628
+ } catch (e) {
629
+ return value
630
+ }
631
+ },
632
+ // 控制开始处理按钮可用状态
633
+ handlerBtnDisable () {
634
+ return this.step !== 0
635
+ },
636
+ // 控制移交他人按钮可用状态
637
+ transferBtnDisable () {
638
+ return this.step === 0 || this.step === 3
639
+ },
640
+ // 控制关闭工单按钮可用状态
641
+ closeBtnDisable () {
642
+ return this.step === 0 || this.disableCloseBtn || this.details.name !== this.currUser.ename
643
+ },
644
+ // 优先级文字显示
645
+ showPriority () {
646
+ if (this.details.priority === 2) {
647
+ return '一般'
648
+ } else if (this.details.priority === 1) {
649
+ return '紧急'
650
+ } else {
651
+ return '非常紧急'
652
+ }
653
+ },
654
+ // 优先度颜色控制
655
+ showPriorityColorControl () {
656
+ if (this.details.priority === 2) {
657
+ return 'info'
658
+ } else if (this.details.priority === 1) {
659
+ return 'warning'
660
+ } else {
661
+ return 'error'
662
+ }
663
+ },
664
+ // 单击工单流转历史图片
665
+ flowImageClick (image) {
666
+ this.selectedImage = image
667
+ this.selectedImageShow = !this.selectedImageShow
668
+ },
669
+ // 停止定时器
670
+ stopTimer () {
671
+ if (this.timer) {
672
+ clearInterval(this.timer)
673
+ this.timer = undefined
674
+ }
675
+ },
676
+ },
677
+ watch: {
678
+ 'visible' (val) {
679
+ if (val) {
680
+ this.initView()
681
+ }
682
+ },
683
+ 'step' (newVal) {
684
+ if (newVal === 3) {
685
+ this.stopTimer()
686
+ }
687
+ }
688
+ }
689
+ }
690
+ </script>
691
+
692
+ <style lang="less" scoped>
693
+ .high-priority{
694
+ background-color: rgba(163, 30, 30, 0.66);
695
+ border: red solid 1px;
696
+ font-size: large;
697
+ padding: 5px;
698
+ color: white;
699
+ border-radius: 10px;
700
+ }
701
+
702
+ .detail-layout {
703
+ margin-left: 44px;
704
+ }
705
+ .text {
706
+ color: rgba(0, 0, 0, .45);
707
+ }
708
+
709
+ .heading {
710
+ color: rgba(0, 0, 0, .85);
711
+ font-size: 20px;
712
+ }
713
+
714
+ .no-data {
715
+ color: rgba(0, 0, 0, .25);
716
+ text-align: center;
717
+ line-height: 64px;
718
+ font-size: 16px;
719
+
720
+ i {
721
+ font-size: 24px;
722
+ margin-right: 16px;
723
+ position: relative;
724
+ top: 3px;
725
+ }
726
+ }
727
+
728
+ .mobile {
729
+ .detail-layout {
730
+ margin-left: unset;
731
+ }
732
+ .text {
733
+
734
+ }
735
+ .status-list {
736
+ text-align: left;
737
+ }
738
+ }
739
+
740
+ .row {
741
+ display: flex;
742
+
743
+ .content {
744
+ -webkit-box-flex: 1;
745
+ flex: auto;
746
+ -ms-flex: auto;
747
+ }
748
+
749
+ .extra {
750
+ flex: 0 1 auto;
751
+ -webkit-box-flex: 0;
752
+ -ms-flex: 0 1 auto;
753
+ min-width: 242px;
754
+ margin-left: 88px;
755
+ text-align: right;
756
+ }
757
+ }
758
+
759
+ .img_sm {
760
+ border: rgba(84, 84, 84, 0.2) solid 1.5px;
761
+ border-radius: 5px;
762
+ padding: 10px;
763
+ width: 160px;
764
+ height: 120px;
765
+ margin-bottom: 20px;
766
+ margin-left: 20px;
767
+ }
768
+ .img_xl {
769
+ position: absolute;
770
+ top:0;bottom:0;left:0;right:0;
771
+ margin: auto;
772
+ width: 60%;
773
+ max-width: 1000px;
774
+ cursor: zoom-out;
775
+ z-index: 9999;
776
+ animation: imgZoomIn 0.4s;
777
+ -webkit-animation: imgZoomIn 0.4s;
778
+ }
779
+ @keyframes imgZoomIn
780
+ {
781
+ from {width: 160px;}
782
+ to {width: 60%;}
783
+ }
784
+ .img_sm:hover {
785
+ opacity: 0.6;
786
+ cursor: zoom-in;
787
+ }
788
+ .img_sm_dark{
789
+ filter: grayscale(100%);
790
+ opacity: 0.6;
791
+ border: rgba(84, 84, 84, 0.2) solid 1.5px;
792
+ border-radius: 5px;
793
+ padding: 10px;
794
+ width: 160px;
795
+ height: 120px;
796
+ margin-bottom: 20px;
797
+ margin-left: 20px;
798
+ }
799
+ .imgBackground {
800
+ position: absolute;
801
+ top:0;bottom:0;left:0;right:0;
802
+ width: 100%;
803
+ height: 100%;
804
+ z-index: 9998;
805
+ background-color: rgba(0,0,0,0.7);
806
+ }
807
+ </style>