vue2-client 1.17.39 → 1.17.40

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 (353) hide show
  1. package/.claude/settings.local.json +20 -20
  2. package/.cursorrules +19 -19
  3. package/.env.apply +19 -19
  4. package/.env.gaslink +19 -19
  5. package/.env.his +19 -19
  6. package/.env.liuli +20 -20
  7. package/.env.scada +19 -19
  8. package/.eslintrc.js +90 -90
  9. package/.serena/memories/code_style_conventions.md +217 -217
  10. package/.serena/memories/project_overview.md +54 -54
  11. package/.serena/memories/project_structure.md +329 -329
  12. package/.serena/memories/suggested_commands.md +127 -127
  13. package/.serena/memories/task_completion_checklist.md +183 -183
  14. package/.serena/memories/tech_stack.md +94 -94
  15. package/CHANGELOG.md +830 -830
  16. package/CLAUDE.md +97 -97
  17. package/Components.md +60 -60
  18. package/docs/LowCode/lowcode.md +155 -155
  19. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  20. package/docs/index.md +30 -30
  21. package/index.js +31 -31
  22. package/jest-transform-stub.js +8 -8
  23. package/jest.setup.js +7 -7
  24. package/jsconfig.json +19 -19
  25. package/package.json +1 -1
  26. package/public/his/editor/editor.html +51 -51
  27. package/public/his/editor/mock/bind_data.html +779 -779
  28. package/public/his/editor/mock/data_table.html +40 -40
  29. package/public/his/editor/mock/sign.html +75 -75
  30. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  31. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  32. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  33. package/public/his/editor/vender/date97/calendar.js +4 -4
  34. package/public/his/editor/vender/date97/lang/en.js +13 -13
  35. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  36. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  37. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  38. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  39. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  40. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  41. package/public/his/editor/vender/diff.js +1627 -1627
  42. package/public/his/editor/vender/editor.js +1 -1
  43. package/public/his/editor/vender/fabric.js +31187 -31187
  44. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  45. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  46. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  47. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  48. package/public/his/editor/vender/mui/mui.min.css +4 -4
  49. package/public/his/editor/vender/mui/mui.min.js +5 -5
  50. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  51. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  52. package/public/his/editor/vender/qrcode.js +7 -7
  53. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  54. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  55. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  56. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  57. package/public/his/editor/vender/validator.js +5094 -5094
  58. package/public/his/editor/vender/weui/weui.css +5659 -5659
  59. package/public/his/editor/vender/weui/weui.min.css +4 -4
  60. package/public/his/editor/vender/weui/weui.min.js +11 -11
  61. package/src/assets/img/paymentMethod/package.info +1 -1
  62. package/src/assets/img/querySlotDemo.svg +15 -15
  63. package/src/assets/svg/badtwo.svg +1 -1
  64. package/src/assets/svg/female.svg +1 -1
  65. package/src/assets/svg/goodtwo.svg +1 -1
  66. package/src/assets/svg/male.svg +1 -1
  67. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  68. package/src/base-client/components/AI/demo.vue +31 -31
  69. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  70. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  71. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  72. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  73. package/src/base-client/components/common/CitySelect/index.js +3 -3
  74. package/src/base-client/components/common/CitySelect/index.md +109 -109
  75. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  76. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  77. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  78. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  79. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  80. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  81. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  82. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  83. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  84. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  85. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  86. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  87. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  88. package/src/base-client/components/common/HIS/HButtons/HButtons.vue +491 -491
  89. package/src/base-client/components/common/HIS/HFormGroup/index.js +3 -3
  90. package/src/base-client/components/common/HIS/HTab/HTab.vue +443 -443
  91. package/src/base-client/components/common/HIS/demo.vue +61 -61
  92. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  93. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  94. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  95. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  96. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  97. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  98. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  99. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  100. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  101. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  102. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  103. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  104. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  105. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  106. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  107. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  108. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  109. package/src/base-client/components/common/Recording/index.js +3 -3
  110. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  111. package/src/base-client/components/common/Tree/index.js +2 -2
  112. package/src/base-client/components/common/Upload/index.js +3 -3
  113. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  114. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  115. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +304 -304
  116. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  117. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  118. package/src/base-client/components/common/XAddReport/index.js +3 -3
  119. package/src/base-client/components/common/XAddReport/index.md +56 -56
  120. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  121. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  122. package/src/base-client/components/common/XButtons/index.js +3 -3
  123. package/src/base-client/components/common/XButtons/index.md +61 -61
  124. package/src/base-client/components/common/XCalendar/XCalendar.vue +4 -4
  125. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  126. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  127. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  128. package/src/base-client/components/common/XCollapse/XCollapse.vue +830 -830
  129. package/src/base-client/components/common/XDataCard/index.js +3 -3
  130. package/src/base-client/components/common/XDataCard/index.md +1 -1
  131. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  132. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  133. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  134. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  135. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  136. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  137. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  138. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  139. package/src/base-client/components/common/XForm/XFormItem.vue +12 -4
  140. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  141. package/src/base-client/components/common/XForm/index.md +178 -178
  142. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  143. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  144. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  145. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  146. package/src/base-client/components/common/XFormTable/XFormTable.vue +1093 -1092
  147. package/src/base-client/components/common/XFormTable/demo.vue +113 -89
  148. package/src/base-client/components/common/XFormTable/index.md +92 -92
  149. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  150. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  151. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  152. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  153. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  154. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  155. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  156. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  157. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  158. package/src/base-client/components/common/XPrint/index.vue +97 -97
  159. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  160. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  161. package/src/base-client/components/common/XReport/index.js +3 -3
  162. package/src/base-client/components/common/XReport/print.js +186 -186
  163. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  164. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  165. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  166. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  167. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  168. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  169. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  170. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  171. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  172. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  173. package/src/base-client/components/common/XStepView/index.js +3 -3
  174. package/src/base-client/components/common/XStepView/index.md +31 -31
  175. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  176. package/src/base-client/components/common/XTab/index.js +3 -3
  177. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  178. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  179. package/src/base-client/components/common/XTable/XTable.vue +46 -0
  180. package/src/base-client/components/common/XTable/XTableWrapper.vue +706 -669
  181. package/src/base-client/components/common/XTable/index.md +255 -255
  182. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  183. package/src/base-client/components/common/XTimeline/XTimeline.vue +477 -477
  184. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  185. package/src/base-client/components/common/XTree/index.js +3 -3
  186. package/src/base-client/components/common/XTree/index.md +36 -36
  187. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  188. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  189. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  190. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  191. package/src/base-client/components/his/XCharge/XChargeDemo.vue +145 -145
  192. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +705 -705
  193. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  194. package/src/base-client/components/his/XList/XList.vue +938 -938
  195. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +354 -354
  196. package/src/base-client/components/his/XTitle/XTitle.vue +314 -314
  197. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +341 -341
  198. package/src/base-client/components/his/threeTestOrders/editor.vue +113 -113
  199. package/src/base-client/components/index.js +51 -51
  200. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  201. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  202. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  203. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  204. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  205. package/src/base-client/plugins/Config.js +19 -19
  206. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  207. package/src/base-client/plugins/Recording.js +258 -258
  208. package/src/base-client/plugins/index.js +23 -23
  209. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  210. package/src/components/Charts/Bar.vue +62 -62
  211. package/src/components/Charts/ChartCard.vue +134 -134
  212. package/src/components/Charts/Liquid.vue +67 -67
  213. package/src/components/Charts/MiniArea.vue +39 -39
  214. package/src/components/Charts/MiniBar.vue +39 -39
  215. package/src/components/Charts/MiniProgress.vue +75 -75
  216. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  217. package/src/components/Charts/Radar.vue +68 -68
  218. package/src/components/Charts/RankList.vue +77 -77
  219. package/src/components/Charts/TagCloud.vue +113 -113
  220. package/src/components/Charts/TransferBar.vue +64 -64
  221. package/src/components/Charts/Trend.vue +82 -82
  222. package/src/components/Charts/chart.less +12 -12
  223. package/src/components/Charts/smooth.area.less +13 -13
  224. package/src/components/CodeMirror/inedx.vue +118 -118
  225. package/src/components/CodeMirror/setting.js +40 -40
  226. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  227. package/src/components/NumberInfo/index.js +3 -3
  228. package/src/components/NumberInfo/index.less +54 -54
  229. package/src/components/NumberInfo/index.md +43 -43
  230. package/src/components/STable/index.js +771 -771
  231. package/src/components/card/ChartCard.vue +79 -79
  232. package/src/components/chart/Bar.vue +60 -60
  233. package/src/components/chart/MiniArea.vue +67 -67
  234. package/src/components/chart/MiniBar.vue +59 -59
  235. package/src/components/chart/MiniProgress.vue +57 -57
  236. package/src/components/chart/Radar.vue +80 -80
  237. package/src/components/chart/RankingList.vue +60 -60
  238. package/src/components/chart/Trend.vue +79 -79
  239. package/src/components/chart/index.less +9 -9
  240. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  241. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  242. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  243. package/src/components/checkbox/index.js +9 -9
  244. package/src/components/exception/ExceptionPage.vue +70 -70
  245. package/src/components/g2Charts/constants.js +202 -202
  246. package/src/components/g2Charts/demo.vue +808 -808
  247. package/src/components/g2Charts/designer.vue +228 -228
  248. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  249. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  250. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  251. package/src/components/g2Charts/index.vue +397 -397
  252. package/src/components/index.js +36 -36
  253. package/src/components/input/IInput.vue +66 -66
  254. package/src/components/menu/SideMenu.vue +75 -75
  255. package/src/components/menu/menu.js +273 -273
  256. package/src/components/setting/Setting.vue +234 -234
  257. package/src/components/tool/AStepItem.vue +60 -60
  258. package/src/config/CreateQueryConfig.js +325 -325
  259. package/src/config/default/antd.config.js +89 -89
  260. package/src/config/default/setting.config.js +55 -55
  261. package/src/font-style/font.css +60 -60
  262. package/src/layouts/CommonLayout.vue +56 -56
  263. package/src/layouts/PageLayout.vue +151 -151
  264. package/src/layouts/SinglePageView.vue +136 -136
  265. package/src/layouts/header/AdminHeader.vue +132 -132
  266. package/src/layouts/header/HeaderNotice.vue +177 -177
  267. package/src/layouts/header/InstitutionDetail.vue +181 -181
  268. package/src/layouts/tabs/TabsHead.vue +189 -189
  269. package/src/lib.js +1 -1
  270. package/src/mock/extend/index.js +84 -84
  271. package/src/mock/goods/index.js +108 -108
  272. package/src/pages/DefaultExample/index.vue +77 -77
  273. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  274. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  275. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  276. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  277. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  278. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  279. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  280. package/src/pages/DynamicStatistics/index.vue +282 -282
  281. package/src/pages/Example/childIndex.vue +15 -15
  282. package/src/pages/Example/index.vue +30 -30
  283. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  284. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  285. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  286. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  287. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  288. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  289. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  290. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  291. package/src/pages/Recording/index.vue +77 -77
  292. package/src/pages/ServiceReview/index.vue +284 -284
  293. package/src/pages/SubExample/index.vue +26 -26
  294. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  295. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1815 -1815
  296. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +1014 -1014
  297. package/src/pages/XReportView/index.vue +64 -64
  298. package/src/pages/XTreeOneProExample/index.vue +67 -67
  299. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  300. package/src/pages/login/Login.vue +379 -379
  301. package/src/pages/login/LoginV3.vue +389 -389
  302. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  303. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  304. package/src/pages/report/ReportTable.js +124 -124
  305. package/src/pages/resourceManage/orgListManage.vue +98 -98
  306. package/src/pages/system/dictionary/index.vue +44 -44
  307. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  308. package/src/pages/system/monitor/operLog/index.vue +37 -37
  309. package/src/pages/system/settings/modifyPassword.vue +117 -117
  310. package/src/pages/system/ticket/index.vue +480 -480
  311. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  312. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  313. package/src/pages/userInfoDetailManage/ExceptionRecordQuery/index.vue +45 -45
  314. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  315. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  316. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  317. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  318. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  319. package/src/plugins/EventLogPlugin.js +33 -33
  320. package/src/plugins/FindParentsData.js +17 -17
  321. package/src/router/async/router.map.js +133 -133
  322. package/src/services/DataModel.js +30 -30
  323. package/src/services/LodopFuncs.js +137 -137
  324. package/src/services/api/TicketDetailsViewApi.js +46 -46
  325. package/src/services/api/cas.js +79 -79
  326. package/src/services/api/entity.js +18 -18
  327. package/src/services/api/index.js +17 -17
  328. package/src/store/modules/account.js +121 -121
  329. package/src/store/modules/index.js +5 -5
  330. package/src/store/modules/lowCode.js +33 -33
  331. package/src/store/modules/setting.js +119 -119
  332. package/src/theme/default/style.less +58 -58
  333. package/src/theme/global.less +311 -311
  334. package/src/utils/authority-utils.js +85 -85
  335. package/src/utils/errorCode.js +6 -6
  336. package/src/utils/formatter.js +74 -74
  337. package/src/utils/htmlToPDF.js +108 -108
  338. package/src/utils/htmlToPDFApi.js +5 -5
  339. package/src/utils/login.js +188 -188
  340. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  341. package/src/utils/lowcode/lowcodeLog.js +29 -29
  342. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  343. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  344. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  345. package/src/utils/map-utils.js +47 -47
  346. package/src/utils/reg.js +95 -95
  347. package/src/utils/runEvalFunction.js +14 -14
  348. package/src/utils/theme-color-replacer-extend.js +92 -92
  349. package/src/utils/util.js +329 -329
  350. package/src/utils/waterMark.js +31 -31
  351. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  352. package/src-base-client/components/common/HIS/HForm/HForm.vue +0 -347
  353. package/src-base-client/components/common/XCollapse/XCollapse.vue +0 -0
@@ -1,480 +1,480 @@
1
- <template>
2
- <div>
3
- <!-- 显示成功页抽屉 -->
4
- <a-modal
5
- v-model="successVisible"
6
- :footer="null"
7
- destroy-on-close
8
- title="工单状态"
9
- width="70%"
10
- @cancel="onSuccessCancel">
11
- <submit-ticket-success v-if="serialNumber" :serialNumber="serialNumber" @afterSubmit="afterSubmit"/>
12
- </a-modal>
13
- <!-- 两个使用手册弹框 -->
14
- <a-modal
15
- :visible="sunClientManualVisible"
16
- title="向日葵使用指南"
17
- width="1000px"
18
- @cancel="sunClientManualVisible = false"
19
- @ok="sunClientManualVisible = false"
20
- >
21
- <h1>一、安装</h1>
22
- <hr/>
23
- <div style="padding-left: 100px;padding-top: 20px">
24
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/1.png" style="width: 800px">
25
- <br/>
26
- <br/>
27
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
28
- <br/>
29
- <br/>
30
- </div>
31
- <h1>二、运行</h1>
32
- <hr/>
33
- <div style="padding-left: 100px;padding-top: 20px">
34
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开向日葵软件</p>
35
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/2.png" style="width: 800px">
36
- <br/>
37
- <br/>
38
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行向日葵</p>
39
- <br/>
40
- <br/>
41
- </div>
42
- <h1>三、截图</h1>
43
- <hr/>
44
- <div style="padding-left: 100px;padding-top: 20px">
45
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使验证码正常显示</p>
46
- <br/>
47
- <br/>
48
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/3.png" style="width: 800px">
49
- <br/>
50
- <br/>
51
- <br/>
52
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
53
- 使用qq,微信,或者任何截图软件。截取屏幕中 “本机识别码” 和 “本机验证码”。
54
- 确保该值清晰可辨别
55
- </p>
56
- <br/>
57
- <br/>
58
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/4.png" style="width: 800px">
59
- <br/>
60
- <br/>
61
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
62
- 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
63
- 这样我们的工作人员就可以远程协助您,排查、解决问题
64
- </p>
65
- <br/>
66
- <br/>
67
- </div>
68
- </a-modal>
69
- <a-modal
70
- :visible="toDeskManualVisible"
71
- title="ToDesk使用指南"
72
- width="1000px"
73
- @cancel="toDeskManualVisible = false"
74
- @ok="toDeskManualVisible = false"
75
- >
76
- <h1>一、安装</h1>
77
- <hr/>
78
- <div style="padding-left: 100px;padding-top: 20px">
79
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/1.png" style="width: 800px">
80
- <br/>
81
- <br/>
82
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
83
- <br/>
84
- <br/>
85
- </div>
86
- <h1>二、运行</h1>
87
- <hr/>
88
- <div style="padding-left: 100px;padding-top: 20px">
89
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开ToDesk软件</p>
90
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/2.png" style="width: 800px">
91
- <br/>
92
- <br/>
93
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行ToDesk</p>
94
- <br/>
95
- <br/>
96
- </div>
97
- <h1>三、截图</h1>
98
- <hr/>
99
- <div style="padding-left: 100px;padding-top: 20px">
100
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使临时密码正常显示</p>
101
- <br/>
102
- <br/>
103
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/3.png" style="width: 800px">
104
- <br/>
105
- <br/>
106
- <br/>
107
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
108
- 使用qq,微信,或者任何截图软件。截取屏幕中 “设备代码” 和 “临时密码”。
109
- 确保该值清晰可辨别
110
- </p>
111
- <br/>
112
- <br/>
113
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/4.png" style="width: 800px">
114
- <br/>
115
- <br/>
116
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
117
- 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
118
- 这样我们的工作人员就可以远程协助您,排查、解决问题
119
- </p>
120
- <br/>
121
- <br/>
122
- </div>
123
- </a-modal>
124
- <a-modal
125
- :visible="infoFormVisible"
126
- title="填写联系方式"
127
- @cancel="infoFormVisible = false"
128
- @ok="onInfoFormSubmit">
129
- <a-form-model
130
- ref="infoFormRef"
131
- :label-col="{ span: 5 }"
132
- :model="infoForm"
133
- :wrapper-col="{ span: 18 }">
134
- <a-form-model-item :rules="{ required: true, message: '请输入联系方式' }" label="联系方式" prop="phone">
135
- <a-input v-model="infoForm.phone" placeholder="请输入联系方式查询历史工单" />
136
- </a-form-model-item>
137
- </a-form-model>
138
- </a-modal>
139
- <a-card>
140
- <div style="text-align: right">
141
- <p>欢迎您!{{ currUser.orgName }}</p>
142
- </div>
143
- <div class="submitTicketTitle">
144
- <span>售后问题反馈平台</span>
145
- </div>
146
- <a-tabs :activeKey="tabActiveKey" @change="changeTab">
147
- <a-tab-pane key="workSubmit" tab="工单提交">
148
- <!-- 表格主体 -->
149
- <a-row v-if="tabActiveKey === 'workSubmit'">
150
- <a-col :span="18">
151
- <a-form :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
152
- <!-- 客户名称输入 -->
153
- <a-form-item v-if="!currUser.orgName" label="公司名称">
154
- <a-input v-model="form.name" placeholder="请输入公司名称(总公司名+分公司名)"/>
155
- <strong v-show="showCustomerNameAlert" style="color: red">公司名称不能为空!</strong>
156
- </a-form-item>
157
- <!-- 联系人 -->
158
- <a-form-item label="联系人">
159
- <a-input v-model="form.contact" placeholder="请输入联系人姓名"></a-input>
160
- <strong v-show="showContactAlert" style="color: red">请填写联系人!</strong>
161
- </a-form-item>
162
- <!-- 联系方式 -->
163
- <a-form-item label="联系方式">
164
- <a-input v-model="form.phone" placeholder="请输入联系方式"></a-input>
165
- <strong v-show="showPhoneAlert" style="color: red">请填写联系方式!</strong>
166
- </a-form-item>
167
- <!-- 问题描述框 -->
168
- <a-form-item label="问题详情描述">
169
- <a-textarea v-model="form.desc" allow-clear placeholder="请用一句话描述您的问题,必要时请注明客户编号,表号,系统功能项等信息"/>
170
- <strong v-show="showDescAlert" style="color: red">问题详情描述不能为空!</strong>
171
- </a-form-item>
172
- <!-- 图片上传 -->
173
- <a-form-item :wrapper-col="{ span: 12 }" label="问题截图">
174
- <div class="clearfix">
175
- <upload v-if="uploadVisible" :model="imageUploadModel" @setFiles="setImages" />
176
- <a-modal
177
- :footer="null"
178
- :visible="previewVisible"
179
- @cancel="handleCancel"
180
- >
181
- <img :src="previewImage" alt="图片上传" style="width: 100%"/>
182
- </a-modal>
183
- </div>
184
- <strong v-show="!imageList.length" style="color: red">请上传问题截图!</strong>
185
- </a-form-item>
186
- <!-- 附件上传 -->
187
- <a-form-item :wrapper-col="{ span: 12 }" label="附件">
188
- <div class="clearfix">
189
- <upload v-if="uploadVisible" :model="fileUploadModel" @setFiles="setFiles" />
190
- </div>
191
- </a-form-item>
192
- <!-- 表单底部按钮 -->
193
- <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
194
- <a-button :disabled="showPhoneAlert || showCustomerNameAlert || showContactAlert || showDescAlert || !imageList.length" style="margin-right: 20px" type="primary" @click="onSubmit">
195
- 提交
196
- </a-button>
197
- </a-form-item>
198
- </a-form>
199
- </a-col>
200
- <a-col :span="6">
201
- <a-card title="远程方式快捷下载">
202
- <a-space direction="vertical">
203
- <a-row :gutter="16">
204
- <a-col
205
- :lg="24"
206
- :md="24"
207
- :sm="24"
208
- :xl="12"
209
- :xs="24"
210
- :xxl="12"
211
- style="text-align: center">
212
- <img alt="pic" src="@vue2-client/assets/img/SunClientDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toSunClientClick"/>
213
- <p style="padding-top:10px;text-align: center"><a @click="sunClientManualVisible = true">向日葵使用说明</a></p>
214
- </a-col>
215
- <a-col
216
- :lg="24"
217
- :md="24"
218
- :sm="24"
219
- :xl="12"
220
- :xs="24"
221
- :xxl="12"
222
- style="text-align: center">
223
- <img alt="pic" src="@vue2-client/assets/img/ToDeskDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toDeskClick">
224
- <p style="padding-top:10px;text-align: center"><a @click="toDeskManualVisible = true">ToDesk使用说明</a></p>
225
- </a-col>
226
- </a-row>
227
- <a-row :gutter="16" style="text-align: center">
228
- <hr/>
229
- <p style="color: red;font-weight: bolder;padding-top: 10px">如需远程协助,请下载向日葵</p>
230
- <p style="color: red;font-weight: bolder">向日葵安装使用指南,请点击上方“向日葵使用说明”查看</p>
231
- </a-row>
232
- </a-space>
233
- </a-card>
234
- </a-col>
235
- </a-row>
236
- </a-tab-pane>
237
- <a-tab-pane key="workHistory" tab="历史工单">
238
- <!-- 查询表单 -->
239
- <x-form-table
240
- ref="searchTable"
241
- v-if="tabActiveKey === 'workHistory'"
242
- :fixed-query-form="fixedQueryForm"
243
- serviceName="af-system"
244
- :queryParamsName="queryParamsName"
245
- title="已提交工单"
246
- @action="toDetail">
247
- <a-button slot="button" v-if="!currUser.orgName" type="primary" @click="infoFormVisible = true">填写联系方式</a-button>
248
- </x-form-table>
249
- </a-tab-pane>
250
- </a-tabs>
251
- </a-card>
252
- </div>
253
- </template>
254
-
255
- <script>
256
- import { TicketDetailsViewApi, post, manageApi } from '@vue2-client/services/api'
257
- import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
258
- import submitTicketSuccess from './submitTicketSuccess'
259
- import Upload from '@vue2-client/base-client/components/common/Upload'
260
-
261
- export default {
262
- name: 'SubmitTicket',
263
- components: {
264
- XFormTable,
265
- submitTicketSuccess,
266
- Upload
267
- },
268
- data () {
269
- return {
270
- // 查询配置文件名
271
- queryParamsName: 'TicketQueryForCustomer',
272
- // 控制成功页面显示
273
- successVisible: false,
274
- // 控制预览显示
275
- previewVisible: false,
276
- // 图片真实地址
277
- previewImage: '',
278
- // 图片列表
279
- imageList: [],
280
- // 附件列表
281
- fileList: [],
282
- // 表单数据
283
- form: {
284
- name: '',
285
- desc: undefined,
286
- contact: '',
287
- phone: ''
288
- },
289
- // 工单序列号
290
- serialNumber: '',
291
- // 类别未填写警告信息控制
292
- showContactAlert: true,
293
- showPhoneAlert: true,
294
- showDescAlert: true,
295
- showCustomerNameAlert: true,
296
- // 向日葵使用指南可见性
297
- sunClientManualVisible: false,
298
- // 向日葵使用指南可见性
299
- toDeskManualVisible: false,
300
- // 为工单查询指定条件
301
- fixedQueryForm: {},
302
- // 用户信息
303
- currUser: {
304
- orgName: '',
305
- contact: '',
306
- phone: ''
307
- },
308
- tabActiveKey: 'workSubmit',
309
- imageUploadModel,
310
- fileUploadModel,
311
- // 未传入客户名称手动输入联系方式
312
- infoFormVisible: false,
313
- infoForm: {
314
- phone: ''
315
- },
316
- uploadVisible: true
317
- }
318
- },
319
- created () {
320
- document.title = '售后问题反馈平台'
321
- this.currUser.orgName = this.$route.query.orgName
322
- this.currUser.contact = this.$route.query.contact
323
- this.currUser.phone = this.$route.query.phone
324
- this.form.name = this.$route.query.orgName
325
- this.form.contact = this.$route.query.contact
326
- this.form.phone = this.$route.query.phone
327
- this.fixedQueryForm.t_uploader = this.currUser.orgName
328
- const params = {}
329
- post(manageApi.getDictionaryValue, {}).then((res) => {
330
- Object.assign(params, res)
331
- const badgeItemArray = {}
332
- for (const key of Object.keys(params)) {
333
- badgeItemArray[key] = {}
334
- for (const item of params[key]) {
335
- let status
336
- if (!item.status) {
337
- status = 'none'
338
- } else {
339
- status = item.status
340
- }
341
- badgeItemArray[key][item.value] = {
342
- status: status,
343
- text: item.text
344
- }
345
- }
346
- }
347
- // 追加参数
348
- localStorage.setItem(process.env.VUE_APP_DICTIONARY_KEY, JSON.stringify(params))
349
- localStorage.setItem(process.env.VUE_APP_BADGE_KEY, JSON.stringify(badgeItemArray))
350
- })
351
- },
352
- methods: {
353
- toDetail (record, id) {
354
- this.serialNumber = id + ''
355
- this.successVisible = true
356
- },
357
- getBase64 (file) {
358
- return new Promise((resolve, reject) => {
359
- const reader = new FileReader()
360
- reader.readAsDataURL(file)
361
- reader.onload = () => resolve(reader.result)
362
- reader.onerror = error => reject(error)
363
- })
364
- },
365
- setImages (imageIds) {
366
- this.imageList = imageIds
367
- },
368
- setFiles (fileIds) {
369
- this.fileList = fileIds
370
- },
371
- handleCancel () {
372
- this.previewVisible = false
373
- },
374
- // 处理预览图像
375
- async handlePreview (file) {
376
- if (!file.url && !file.preview) {
377
- file.preview = await this.getBase64(file.originFileObj)
378
- }
379
- this.previewImage = file.url || file.preview
380
- this.previewVisible = true
381
- },
382
- // 提交按钮逻辑
383
- onSubmit () {
384
- const form = {
385
- customerName: this.form.name,
386
- contact: this.form.contact,
387
- phone: this.form.phone,
388
- problemDetail: this.form.desc,
389
- Images: this.imageList,
390
- FilesId: this.fileList
391
- }
392
- if (form.problemDetail.length > 300) {
393
- this.$message.error('问题详情长度超出限制')
394
- return
395
- }
396
- if (form.problemDetail.indexOf('\'') !== -1) {
397
- this.$message.error('问题详情不能包含特殊符号')
398
- return
399
- }
400
- post(TicketDetailsViewApi.createTicket, { form }).then((res) => {
401
- this.serialNumber = res
402
- this.successVisible = true
403
- this.$message.success('创建成功')
404
- this.form.desc = ''
405
- this.imageList = []
406
- this.fileList = []
407
- this.uploadVisible = false
408
- if (!this.currUser.orgName) {
409
- this.fixedQueryForm.t_uploader_phone = form.phone
410
- this.infoForm.phone = form.phone
411
- }
412
- })
413
- },
414
- onSuccessCancel () {
415
- this.uploadVisible = true
416
- },
417
- // 点击向日葵链接
418
- toSunClientClick () {
419
- window.open('https://sunlogin.oray.com/download')
420
- },
421
- // 点击ToDesk链接
422
- toDeskClick () {
423
- window.open('https://www.todesk.com/download.html')
424
- },
425
- // 切换标签页
426
- changeTab (id) {
427
- if (id === 'workHistory' && !this.fixedQueryForm.t_uploader && !this.fixedQueryForm.t_uploader_phone) {
428
- this.infoFormVisible = true
429
- return
430
- }
431
- this.tabActiveKey = id
432
- },
433
- onInfoFormSubmit () {
434
- this.$refs.infoFormRef.validate(valid => {
435
- if (valid) {
436
- this.fixedQueryForm = {
437
- t_uploader_phone: this.infoForm.phone
438
- }
439
- this.tabActiveKey = 'workHistory'
440
- this.infoFormVisible = false
441
- }
442
- })
443
- },
444
- // 用户 退回/提交 工单回调
445
- afterSubmit () {
446
- this.$refs.searchTable.refreshTable()
447
- this.successVisible = false
448
- }
449
- },
450
- watch: {
451
- // 监控类别的改变,当类别改变,校验通过
452
- 'form.contact' (newVal) {
453
- this.showContactAlert = !newVal || newVal.trim().length === 0
454
- },
455
- 'form.phone' (newVal) {
456
- this.showPhoneAlert = !newVal || newVal.trim().length === 0
457
- },
458
- 'form.desc' (newVal) {
459
- this.showDescAlert = newVal.trim().length === 0
460
- },
461
- 'form.name' (newVal) {
462
- this.showCustomerNameAlert = !newVal || newVal.trim().length === 0
463
- }
464
- }
465
- }
466
- const imageUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":5,"type":"image","accept":[".jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"图片","resUploadMode":"server","model":"Images"}')
467
- const fileUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":3,"type":"file","accept":["*"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"附件","resUploadMode":"server","model":"FilesId"}')
468
- </script>
469
-
470
- <style scoped>
471
- .radio-item{
472
- margin-right: 140px;
473
- }
474
- .submitTicketTitle{
475
- font-size: 40px;
476
- vertical-align: middle;
477
- text-align: center;
478
- margin-bottom: 40px;
479
- }
480
- </style>
1
+ <template>
2
+ <div>
3
+ <!-- 显示成功页抽屉 -->
4
+ <a-modal
5
+ v-model="successVisible"
6
+ :footer="null"
7
+ destroy-on-close
8
+ title="工单状态"
9
+ width="70%"
10
+ @cancel="onSuccessCancel">
11
+ <submit-ticket-success v-if="serialNumber" :serialNumber="serialNumber" @afterSubmit="afterSubmit"/>
12
+ </a-modal>
13
+ <!-- 两个使用手册弹框 -->
14
+ <a-modal
15
+ :visible="sunClientManualVisible"
16
+ title="向日葵使用指南"
17
+ width="1000px"
18
+ @cancel="sunClientManualVisible = false"
19
+ @ok="sunClientManualVisible = false"
20
+ >
21
+ <h1>一、安装</h1>
22
+ <hr/>
23
+ <div style="padding-left: 100px;padding-top: 20px">
24
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/1.png" style="width: 800px">
25
+ <br/>
26
+ <br/>
27
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
28
+ <br/>
29
+ <br/>
30
+ </div>
31
+ <h1>二、运行</h1>
32
+ <hr/>
33
+ <div style="padding-left: 100px;padding-top: 20px">
34
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开向日葵软件</p>
35
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/2.png" style="width: 800px">
36
+ <br/>
37
+ <br/>
38
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行向日葵</p>
39
+ <br/>
40
+ <br/>
41
+ </div>
42
+ <h1>三、截图</h1>
43
+ <hr/>
44
+ <div style="padding-left: 100px;padding-top: 20px">
45
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使验证码正常显示</p>
46
+ <br/>
47
+ <br/>
48
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/3.png" style="width: 800px">
49
+ <br/>
50
+ <br/>
51
+ <br/>
52
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
53
+ 使用qq,微信,或者任何截图软件。截取屏幕中 “本机识别码” 和 “本机验证码”。
54
+ 确保该值清晰可辨别
55
+ </p>
56
+ <br/>
57
+ <br/>
58
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/4.png" style="width: 800px">
59
+ <br/>
60
+ <br/>
61
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
62
+ 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
63
+ 这样我们的工作人员就可以远程协助您,排查、解决问题
64
+ </p>
65
+ <br/>
66
+ <br/>
67
+ </div>
68
+ </a-modal>
69
+ <a-modal
70
+ :visible="toDeskManualVisible"
71
+ title="ToDesk使用指南"
72
+ width="1000px"
73
+ @cancel="toDeskManualVisible = false"
74
+ @ok="toDeskManualVisible = false"
75
+ >
76
+ <h1>一、安装</h1>
77
+ <hr/>
78
+ <div style="padding-left: 100px;padding-top: 20px">
79
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/1.png" style="width: 800px">
80
+ <br/>
81
+ <br/>
82
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
83
+ <br/>
84
+ <br/>
85
+ </div>
86
+ <h1>二、运行</h1>
87
+ <hr/>
88
+ <div style="padding-left: 100px;padding-top: 20px">
89
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开ToDesk软件</p>
90
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/2.png" style="width: 800px">
91
+ <br/>
92
+ <br/>
93
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行ToDesk</p>
94
+ <br/>
95
+ <br/>
96
+ </div>
97
+ <h1>三、截图</h1>
98
+ <hr/>
99
+ <div style="padding-left: 100px;padding-top: 20px">
100
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使临时密码正常显示</p>
101
+ <br/>
102
+ <br/>
103
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/3.png" style="width: 800px">
104
+ <br/>
105
+ <br/>
106
+ <br/>
107
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
108
+ 使用qq,微信,或者任何截图软件。截取屏幕中 “设备代码” 和 “临时密码”。
109
+ 确保该值清晰可辨别
110
+ </p>
111
+ <br/>
112
+ <br/>
113
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/4.png" style="width: 800px">
114
+ <br/>
115
+ <br/>
116
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
117
+ 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
118
+ 这样我们的工作人员就可以远程协助您,排查、解决问题
119
+ </p>
120
+ <br/>
121
+ <br/>
122
+ </div>
123
+ </a-modal>
124
+ <a-modal
125
+ :visible="infoFormVisible"
126
+ title="填写联系方式"
127
+ @cancel="infoFormVisible = false"
128
+ @ok="onInfoFormSubmit">
129
+ <a-form-model
130
+ ref="infoFormRef"
131
+ :label-col="{ span: 5 }"
132
+ :model="infoForm"
133
+ :wrapper-col="{ span: 18 }">
134
+ <a-form-model-item :rules="{ required: true, message: '请输入联系方式' }" label="联系方式" prop="phone">
135
+ <a-input v-model="infoForm.phone" placeholder="请输入联系方式查询历史工单" />
136
+ </a-form-model-item>
137
+ </a-form-model>
138
+ </a-modal>
139
+ <a-card>
140
+ <div style="text-align: right">
141
+ <p>欢迎您!{{ currUser.orgName }}</p>
142
+ </div>
143
+ <div class="submitTicketTitle">
144
+ <span>售后问题反馈平台</span>
145
+ </div>
146
+ <a-tabs :activeKey="tabActiveKey" @change="changeTab">
147
+ <a-tab-pane key="workSubmit" tab="工单提交">
148
+ <!-- 表格主体 -->
149
+ <a-row v-if="tabActiveKey === 'workSubmit'">
150
+ <a-col :span="18">
151
+ <a-form :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
152
+ <!-- 客户名称输入 -->
153
+ <a-form-item v-if="!currUser.orgName" label="公司名称">
154
+ <a-input v-model="form.name" placeholder="请输入公司名称(总公司名+分公司名)"/>
155
+ <strong v-show="showCustomerNameAlert" style="color: red">公司名称不能为空!</strong>
156
+ </a-form-item>
157
+ <!-- 联系人 -->
158
+ <a-form-item label="联系人">
159
+ <a-input v-model="form.contact" placeholder="请输入联系人姓名"></a-input>
160
+ <strong v-show="showContactAlert" style="color: red">请填写联系人!</strong>
161
+ </a-form-item>
162
+ <!-- 联系方式 -->
163
+ <a-form-item label="联系方式">
164
+ <a-input v-model="form.phone" placeholder="请输入联系方式"></a-input>
165
+ <strong v-show="showPhoneAlert" style="color: red">请填写联系方式!</strong>
166
+ </a-form-item>
167
+ <!-- 问题描述框 -->
168
+ <a-form-item label="问题详情描述">
169
+ <a-textarea v-model="form.desc" allow-clear placeholder="请用一句话描述您的问题,必要时请注明客户编号,表号,系统功能项等信息"/>
170
+ <strong v-show="showDescAlert" style="color: red">问题详情描述不能为空!</strong>
171
+ </a-form-item>
172
+ <!-- 图片上传 -->
173
+ <a-form-item :wrapper-col="{ span: 12 }" label="问题截图">
174
+ <div class="clearfix">
175
+ <upload v-if="uploadVisible" :model="imageUploadModel" @setFiles="setImages" />
176
+ <a-modal
177
+ :footer="null"
178
+ :visible="previewVisible"
179
+ @cancel="handleCancel"
180
+ >
181
+ <img :src="previewImage" alt="图片上传" style="width: 100%"/>
182
+ </a-modal>
183
+ </div>
184
+ <strong v-show="!imageList.length" style="color: red">请上传问题截图!</strong>
185
+ </a-form-item>
186
+ <!-- 附件上传 -->
187
+ <a-form-item :wrapper-col="{ span: 12 }" label="附件">
188
+ <div class="clearfix">
189
+ <upload v-if="uploadVisible" :model="fileUploadModel" @setFiles="setFiles" />
190
+ </div>
191
+ </a-form-item>
192
+ <!-- 表单底部按钮 -->
193
+ <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
194
+ <a-button :disabled="showPhoneAlert || showCustomerNameAlert || showContactAlert || showDescAlert || !imageList.length" style="margin-right: 20px" type="primary" @click="onSubmit">
195
+ 提交
196
+ </a-button>
197
+ </a-form-item>
198
+ </a-form>
199
+ </a-col>
200
+ <a-col :span="6">
201
+ <a-card title="远程方式快捷下载">
202
+ <a-space direction="vertical">
203
+ <a-row :gutter="16">
204
+ <a-col
205
+ :lg="24"
206
+ :md="24"
207
+ :sm="24"
208
+ :xl="12"
209
+ :xs="24"
210
+ :xxl="12"
211
+ style="text-align: center">
212
+ <img alt="pic" src="@vue2-client/assets/img/SunClientDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toSunClientClick"/>
213
+ <p style="padding-top:10px;text-align: center"><a @click="sunClientManualVisible = true">向日葵使用说明</a></p>
214
+ </a-col>
215
+ <a-col
216
+ :lg="24"
217
+ :md="24"
218
+ :sm="24"
219
+ :xl="12"
220
+ :xs="24"
221
+ :xxl="12"
222
+ style="text-align: center">
223
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toDeskClick">
224
+ <p style="padding-top:10px;text-align: center"><a @click="toDeskManualVisible = true">ToDesk使用说明</a></p>
225
+ </a-col>
226
+ </a-row>
227
+ <a-row :gutter="16" style="text-align: center">
228
+ <hr/>
229
+ <p style="color: red;font-weight: bolder;padding-top: 10px">如需远程协助,请下载向日葵</p>
230
+ <p style="color: red;font-weight: bolder">向日葵安装使用指南,请点击上方“向日葵使用说明”查看</p>
231
+ </a-row>
232
+ </a-space>
233
+ </a-card>
234
+ </a-col>
235
+ </a-row>
236
+ </a-tab-pane>
237
+ <a-tab-pane key="workHistory" tab="历史工单">
238
+ <!-- 查询表单 -->
239
+ <x-form-table
240
+ ref="searchTable"
241
+ v-if="tabActiveKey === 'workHistory'"
242
+ :fixed-query-form="fixedQueryForm"
243
+ serviceName="af-system"
244
+ :queryParamsName="queryParamsName"
245
+ title="已提交工单"
246
+ @action="toDetail">
247
+ <a-button slot="button" v-if="!currUser.orgName" type="primary" @click="infoFormVisible = true">填写联系方式</a-button>
248
+ </x-form-table>
249
+ </a-tab-pane>
250
+ </a-tabs>
251
+ </a-card>
252
+ </div>
253
+ </template>
254
+
255
+ <script>
256
+ import { TicketDetailsViewApi, post, manageApi } from '@vue2-client/services/api'
257
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
258
+ import submitTicketSuccess from './submitTicketSuccess'
259
+ import Upload from '@vue2-client/base-client/components/common/Upload'
260
+
261
+ export default {
262
+ name: 'SubmitTicket',
263
+ components: {
264
+ XFormTable,
265
+ submitTicketSuccess,
266
+ Upload
267
+ },
268
+ data () {
269
+ return {
270
+ // 查询配置文件名
271
+ queryParamsName: 'TicketQueryForCustomer',
272
+ // 控制成功页面显示
273
+ successVisible: false,
274
+ // 控制预览显示
275
+ previewVisible: false,
276
+ // 图片真实地址
277
+ previewImage: '',
278
+ // 图片列表
279
+ imageList: [],
280
+ // 附件列表
281
+ fileList: [],
282
+ // 表单数据
283
+ form: {
284
+ name: '',
285
+ desc: undefined,
286
+ contact: '',
287
+ phone: ''
288
+ },
289
+ // 工单序列号
290
+ serialNumber: '',
291
+ // 类别未填写警告信息控制
292
+ showContactAlert: true,
293
+ showPhoneAlert: true,
294
+ showDescAlert: true,
295
+ showCustomerNameAlert: true,
296
+ // 向日葵使用指南可见性
297
+ sunClientManualVisible: false,
298
+ // 向日葵使用指南可见性
299
+ toDeskManualVisible: false,
300
+ // 为工单查询指定条件
301
+ fixedQueryForm: {},
302
+ // 用户信息
303
+ currUser: {
304
+ orgName: '',
305
+ contact: '',
306
+ phone: ''
307
+ },
308
+ tabActiveKey: 'workSubmit',
309
+ imageUploadModel,
310
+ fileUploadModel,
311
+ // 未传入客户名称手动输入联系方式
312
+ infoFormVisible: false,
313
+ infoForm: {
314
+ phone: ''
315
+ },
316
+ uploadVisible: true
317
+ }
318
+ },
319
+ created () {
320
+ document.title = '售后问题反馈平台'
321
+ this.currUser.orgName = this.$route.query.orgName
322
+ this.currUser.contact = this.$route.query.contact
323
+ this.currUser.phone = this.$route.query.phone
324
+ this.form.name = this.$route.query.orgName
325
+ this.form.contact = this.$route.query.contact
326
+ this.form.phone = this.$route.query.phone
327
+ this.fixedQueryForm.t_uploader = this.currUser.orgName
328
+ const params = {}
329
+ post(manageApi.getDictionaryValue, {}).then((res) => {
330
+ Object.assign(params, res)
331
+ const badgeItemArray = {}
332
+ for (const key of Object.keys(params)) {
333
+ badgeItemArray[key] = {}
334
+ for (const item of params[key]) {
335
+ let status
336
+ if (!item.status) {
337
+ status = 'none'
338
+ } else {
339
+ status = item.status
340
+ }
341
+ badgeItemArray[key][item.value] = {
342
+ status: status,
343
+ text: item.text
344
+ }
345
+ }
346
+ }
347
+ // 追加参数
348
+ localStorage.setItem(process.env.VUE_APP_DICTIONARY_KEY, JSON.stringify(params))
349
+ localStorage.setItem(process.env.VUE_APP_BADGE_KEY, JSON.stringify(badgeItemArray))
350
+ })
351
+ },
352
+ methods: {
353
+ toDetail (record, id) {
354
+ this.serialNumber = id + ''
355
+ this.successVisible = true
356
+ },
357
+ getBase64 (file) {
358
+ return new Promise((resolve, reject) => {
359
+ const reader = new FileReader()
360
+ reader.readAsDataURL(file)
361
+ reader.onload = () => resolve(reader.result)
362
+ reader.onerror = error => reject(error)
363
+ })
364
+ },
365
+ setImages (imageIds) {
366
+ this.imageList = imageIds
367
+ },
368
+ setFiles (fileIds) {
369
+ this.fileList = fileIds
370
+ },
371
+ handleCancel () {
372
+ this.previewVisible = false
373
+ },
374
+ // 处理预览图像
375
+ async handlePreview (file) {
376
+ if (!file.url && !file.preview) {
377
+ file.preview = await this.getBase64(file.originFileObj)
378
+ }
379
+ this.previewImage = file.url || file.preview
380
+ this.previewVisible = true
381
+ },
382
+ // 提交按钮逻辑
383
+ onSubmit () {
384
+ const form = {
385
+ customerName: this.form.name,
386
+ contact: this.form.contact,
387
+ phone: this.form.phone,
388
+ problemDetail: this.form.desc,
389
+ Images: this.imageList,
390
+ FilesId: this.fileList
391
+ }
392
+ if (form.problemDetail.length > 300) {
393
+ this.$message.error('问题详情长度超出限制')
394
+ return
395
+ }
396
+ if (form.problemDetail.indexOf('\'') !== -1) {
397
+ this.$message.error('问题详情不能包含特殊符号')
398
+ return
399
+ }
400
+ post(TicketDetailsViewApi.createTicket, { form }).then((res) => {
401
+ this.serialNumber = res
402
+ this.successVisible = true
403
+ this.$message.success('创建成功')
404
+ this.form.desc = ''
405
+ this.imageList = []
406
+ this.fileList = []
407
+ this.uploadVisible = false
408
+ if (!this.currUser.orgName) {
409
+ this.fixedQueryForm.t_uploader_phone = form.phone
410
+ this.infoForm.phone = form.phone
411
+ }
412
+ })
413
+ },
414
+ onSuccessCancel () {
415
+ this.uploadVisible = true
416
+ },
417
+ // 点击向日葵链接
418
+ toSunClientClick () {
419
+ window.open('https://sunlogin.oray.com/download')
420
+ },
421
+ // 点击ToDesk链接
422
+ toDeskClick () {
423
+ window.open('https://www.todesk.com/download.html')
424
+ },
425
+ // 切换标签页
426
+ changeTab (id) {
427
+ if (id === 'workHistory' && !this.fixedQueryForm.t_uploader && !this.fixedQueryForm.t_uploader_phone) {
428
+ this.infoFormVisible = true
429
+ return
430
+ }
431
+ this.tabActiveKey = id
432
+ },
433
+ onInfoFormSubmit () {
434
+ this.$refs.infoFormRef.validate(valid => {
435
+ if (valid) {
436
+ this.fixedQueryForm = {
437
+ t_uploader_phone: this.infoForm.phone
438
+ }
439
+ this.tabActiveKey = 'workHistory'
440
+ this.infoFormVisible = false
441
+ }
442
+ })
443
+ },
444
+ // 用户 退回/提交 工单回调
445
+ afterSubmit () {
446
+ this.$refs.searchTable.refreshTable()
447
+ this.successVisible = false
448
+ }
449
+ },
450
+ watch: {
451
+ // 监控类别的改变,当类别改变,校验通过
452
+ 'form.contact' (newVal) {
453
+ this.showContactAlert = !newVal || newVal.trim().length === 0
454
+ },
455
+ 'form.phone' (newVal) {
456
+ this.showPhoneAlert = !newVal || newVal.trim().length === 0
457
+ },
458
+ 'form.desc' (newVal) {
459
+ this.showDescAlert = newVal.trim().length === 0
460
+ },
461
+ 'form.name' (newVal) {
462
+ this.showCustomerNameAlert = !newVal || newVal.trim().length === 0
463
+ }
464
+ }
465
+ }
466
+ const imageUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":5,"type":"image","accept":[".jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"图片","resUploadMode":"server","model":"Images"}')
467
+ const fileUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":3,"type":"file","accept":["*"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"附件","resUploadMode":"server","model":"FilesId"}')
468
+ </script>
469
+
470
+ <style scoped>
471
+ .radio-item{
472
+ margin-right: 140px;
473
+ }
474
+ .submitTicketTitle{
475
+ font-size: 40px;
476
+ vertical-align: middle;
477
+ text-align: center;
478
+ margin-bottom: 40px;
479
+ }
480
+ </style>