vue2-client 1.15.105 → 1.15.107

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 (875) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.cursorrules +19 -19
  3. package/.editorconfig +9 -9
  4. package/.env +20 -20
  5. package/.env.apply +19 -19
  6. package/.env.development +1 -1
  7. package/.env.gaslink +19 -19
  8. package/.env.his +19 -19
  9. package/.env.iot +19 -19
  10. package/.env.liuli +20 -20
  11. package/.env.message +19 -19
  12. package/.env.revenue +19 -19
  13. package/.env.runtime +19 -19
  14. package/.env.scada +19 -19
  15. package/.eslintrc.js +90 -90
  16. package/.eslintrc.json +5 -5
  17. package/CHANGELOG.md +824 -824
  18. package/CLAUDE.md +89 -89
  19. package/Components.md +60 -60
  20. package/README.md +65 -65
  21. package/babel.config.js +21 -21
  22. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  23. package/docs/LowCode/lowcode.md +155 -155
  24. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  25. package/docs/index.md +30 -30
  26. package/docs/notice.md +22 -22
  27. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -185
  28. package/index.js +31 -31
  29. package/jest-transform-stub.js +8 -8
  30. package/jest.config.js +22 -22
  31. package/jest.setup.js +7 -7
  32. package/jsconfig.json +19 -19
  33. package/package.json +111 -111
  34. package/public/his/editor/editor.html +51 -51
  35. package/public/his/editor/mock/bind_data.html +779 -779
  36. package/public/his/editor/mock/data_table.html +40 -40
  37. package/public/his/editor/mock/sign.html +75 -75
  38. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  39. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  40. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  41. package/public/his/editor/vender/date97/calendar.js +4 -4
  42. package/public/his/editor/vender/date97/lang/en.js +13 -13
  43. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  44. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  45. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  46. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  47. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  48. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  49. package/public/his/editor/vender/diff.js +1627 -1627
  50. package/public/his/editor/vender/editor.js +1 -1
  51. package/public/his/editor/vender/fabric.js +31187 -31187
  52. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  53. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  54. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  55. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  56. package/public/his/editor/vender/mui/mui.min.css +4 -4
  57. package/public/his/editor/vender/mui/mui.min.js +5 -5
  58. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  59. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  60. package/public/his/editor/vender/qrcode.js +7 -7
  61. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  62. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  63. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  64. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  65. package/public/his/editor/vender/validator.js +5094 -5094
  66. package/public/his/editor/vender/weui/weui.css +5659 -5659
  67. package/public/his/editor/vender/weui/weui.min.css +4 -4
  68. package/public/his/editor/vender/weui/weui.min.js +11 -11
  69. package/public/index.html +27 -27
  70. package/src/App.vue +196 -196
  71. package/src/ReportView.js +13 -13
  72. package/src/assets/img/querySlotDemo.svg +15 -15
  73. package/src/assets/svg/badtwo.svg +1 -1
  74. package/src/assets/svg/goodtwo.svg +1 -1
  75. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  76. package/src/base-client/components/AI/demo.vue +31 -31
  77. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  78. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  79. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  80. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  81. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  82. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  83. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  84. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  85. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  86. package/src/base-client/components/common/CitySelect/index.js +3 -3
  87. package/src/base-client/components/common/CitySelect/index.md +109 -109
  88. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  89. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  90. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  91. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  92. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  93. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  94. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  95. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  96. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  97. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  98. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  99. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  100. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  101. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  102. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  103. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  104. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  105. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  106. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  107. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  108. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  109. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  110. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  111. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  112. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  113. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  114. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  115. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  116. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  117. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  118. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  119. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  120. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  121. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  122. package/src/base-client/components/common/Recording/index.js +3 -3
  123. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  124. package/src/base-client/components/common/Tree/index.js +2 -2
  125. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  126. package/src/base-client/components/common/Upload/index.js +3 -3
  127. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  128. package/src/base-client/components/common/XAddForm/index.js +3 -3
  129. package/src/base-client/components/common/XAddForm/index.md +61 -61
  130. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  131. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  132. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  133. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  134. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  135. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  136. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  137. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  138. package/src/base-client/components/common/XAddReport/index.js +3 -3
  139. package/src/base-client/components/common/XAddReport/index.md +56 -56
  140. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  141. package/src/base-client/components/common/XBadge/index.js +3 -3
  142. package/src/base-client/components/common/XBadge/index.md +39 -39
  143. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  144. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  145. package/src/base-client/components/common/XButtons/index.js +3 -3
  146. package/src/base-client/components/common/XButtons/index.md +61 -61
  147. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  148. package/src/base-client/components/common/XCalendar/index.md +284 -284
  149. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  150. package/src/base-client/components/common/XCard/index.js +3 -3
  151. package/src/base-client/components/common/XCard/index.md +43 -43
  152. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  153. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  154. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  155. package/src/base-client/components/common/XCollapse/XCollapse.vue +355 -355
  156. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  157. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  158. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  159. package/src/base-client/components/common/XDataCard/index.js +3 -3
  160. package/src/base-client/components/common/XDataCard/index.md +1 -1
  161. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  162. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  163. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  164. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  165. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  166. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  167. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  168. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  169. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  170. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  171. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  172. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  173. package/src/base-client/components/common/XForm/XForm.vue +426 -426
  174. package/src/base-client/components/common/XForm/XFormItem.vue +1479 -1497
  175. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  176. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  177. package/src/base-client/components/common/XForm/demo.vue +105 -105
  178. package/src/base-client/components/common/XForm/index.js +3 -3
  179. package/src/base-client/components/common/XForm/index.md +178 -178
  180. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  181. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  182. package/src/base-client/components/common/XFormCol/index.js +3 -3
  183. package/src/base-client/components/common/XFormCol/index.md +35 -35
  184. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  185. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  186. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  187. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  188. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  189. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  190. package/src/base-client/components/common/XFormTable/XFormTable.vue +939 -939
  191. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  192. package/src/base-client/components/common/XFormTable/index.js +3 -3
  193. package/src/base-client/components/common/XFormTable/index.md +92 -92
  194. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  195. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  196. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  197. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  198. package/src/base-client/components/common/XInput/index.js +3 -3
  199. package/src/base-client/components/common/XInput/index.md +97 -97
  200. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  201. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  202. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  203. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  204. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  205. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  206. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  207. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  208. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  209. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  210. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  211. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  212. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  213. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  214. package/src/base-client/components/common/XPrint/index.vue +97 -97
  215. package/src/base-client/components/common/XRate/demo.vue +102 -102
  216. package/src/base-client/components/common/XRate/index.vue +149 -149
  217. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  218. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  219. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  220. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  221. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  222. package/src/base-client/components/common/XReport/index.js +3 -3
  223. package/src/base-client/components/common/XReport/index.md +103 -103
  224. package/src/base-client/components/common/XReport/print.js +186 -186
  225. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  226. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  227. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  228. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  229. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  230. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +724 -724
  231. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  232. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  233. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  234. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  235. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  236. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  237. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  238. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  239. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  240. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  241. package/src/base-client/components/common/XStepView/index.js +3 -3
  242. package/src/base-client/components/common/XStepView/index.md +31 -31
  243. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  244. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  245. package/src/base-client/components/common/XTab/index.js +3 -3
  246. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  247. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  248. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  249. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  250. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  251. package/src/base-client/components/common/XTable/index.js +3 -3
  252. package/src/base-client/components/common/XTable/index.md +255 -255
  253. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  254. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  255. package/src/base-client/components/common/XTimeline/index.md +191 -191
  256. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  257. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  258. package/src/base-client/components/common/XTree/index.js +3 -3
  259. package/src/base-client/components/common/XTree/index.md +36 -36
  260. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  261. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  262. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  263. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  264. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  265. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  266. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  267. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  268. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  269. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  270. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  271. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -678
  272. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  273. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  274. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcel.vue +218 -218
  275. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcelDemo.vue +21 -21
  276. package/src/base-client/components/his/XImportExcelButton/XImportExcelButton.vue +103 -103
  277. package/src/base-client/components/his/XList/XList.vue +495 -495
  278. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  279. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  280. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  281. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  282. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  283. package/src/base-client/components/his/XRadio/index.md +234 -234
  284. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  285. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +339 -339
  286. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  287. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  288. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +119 -88
  289. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  290. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  291. package/src/base-client/components/his/XTitle/README.md +113 -113
  292. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  293. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  294. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  295. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  296. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  297. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  298. package/src/base-client/components/index.js +51 -51
  299. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  300. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  301. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  302. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  303. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  304. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  305. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  306. package/src/base-client/components/layout/XPageView/index.js +2 -2
  307. package/src/base-client/components/layout/XPageView/index.md +96 -96
  308. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  309. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  310. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  311. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  312. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  313. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  314. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  315. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  316. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  317. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  318. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  319. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  320. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  321. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  322. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  323. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  324. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  325. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  326. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  327. package/src/base-client/plugins/AppData.js +126 -126
  328. package/src/base-client/plugins/Config.js +19 -19
  329. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  330. package/src/base-client/plugins/PagedList.js +177 -177
  331. package/src/base-client/plugins/Recording.js +258 -258
  332. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  333. package/src/base-client/plugins/authority-plugin.js +167 -167
  334. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  335. package/src/base-client/plugins/i18n-extend.js +32 -32
  336. package/src/base-client/plugins/index.js +23 -23
  337. package/src/base-client/plugins/moment.js +8 -8
  338. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  339. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  340. package/src/bootstrap.js +51 -51
  341. package/src/components/Charts/Bar.vue +62 -62
  342. package/src/components/Charts/ChartCard.vue +134 -134
  343. package/src/components/Charts/Liquid.vue +67 -67
  344. package/src/components/Charts/MiniArea.vue +39 -39
  345. package/src/components/Charts/MiniBar.vue +39 -39
  346. package/src/components/Charts/MiniProgress.vue +75 -75
  347. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  348. package/src/components/Charts/Radar.vue +68 -68
  349. package/src/components/Charts/RankList.vue +77 -77
  350. package/src/components/Charts/TagCloud.vue +113 -113
  351. package/src/components/Charts/TransferBar.vue +64 -64
  352. package/src/components/Charts/Trend.vue +82 -82
  353. package/src/components/Charts/chart.less +12 -12
  354. package/src/components/Charts/smooth.area.less +13 -13
  355. package/src/components/CodeMirror/inedx.vue +118 -118
  356. package/src/components/CodeMirror/setting.js +40 -40
  357. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  358. package/src/components/Ellipsis/index.js +3 -3
  359. package/src/components/Ellipsis/index.md +38 -38
  360. package/src/components/FileImageItem/FileItem.vue +320 -320
  361. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  362. package/src/components/FileImageItem/ImageItem.vue +107 -107
  363. package/src/components/FileImageItem/index.js +4 -4
  364. package/src/components/FilePreview/FilePreview.vue +181 -181
  365. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  366. package/src/components/FilePreview/index.js +3 -3
  367. package/src/components/HeightScanner/index.vue +615 -615
  368. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  369. package/src/components/NumberInfo/index.js +3 -3
  370. package/src/components/NumberInfo/index.less +54 -54
  371. package/src/components/NumberInfo/index.md +43 -43
  372. package/src/components/STable/README.md +341 -341
  373. package/src/components/STable/index.js +558 -558
  374. package/src/components/TableSetting/TableSetting.vue +143 -143
  375. package/src/components/TableSetting/index.js +3 -3
  376. package/src/components/Trend/Trend.vue +41 -41
  377. package/src/components/Trend/index.js +3 -3
  378. package/src/components/Trend/index.less +41 -41
  379. package/src/components/Trend/index.md +45 -45
  380. package/src/components/_util/util.js +46 -46
  381. package/src/components/cache/AKeepAlive.js +179 -179
  382. package/src/components/card/ChartCard.vue +79 -79
  383. package/src/components/chart/Bar.vue +60 -60
  384. package/src/components/chart/MiniArea.vue +67 -67
  385. package/src/components/chart/MiniBar.vue +59 -59
  386. package/src/components/chart/MiniProgress.vue +57 -57
  387. package/src/components/chart/Radar.vue +80 -80
  388. package/src/components/chart/RankingList.vue +60 -60
  389. package/src/components/chart/Trend.vue +79 -79
  390. package/src/components/chart/index.less +9 -9
  391. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  392. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  393. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  394. package/src/components/checkbox/index.js +9 -9
  395. package/src/components/exception/ExceptionPage.vue +70 -70
  396. package/src/components/exception/typeConfig.js +19 -19
  397. package/src/components/form/FormRow.vue +52 -52
  398. package/src/components/g2Charts/constants.js +202 -202
  399. package/src/components/g2Charts/demo.vue +808 -808
  400. package/src/components/g2Charts/designer.vue +228 -228
  401. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  402. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  403. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  404. package/src/components/g2Charts/index.vue +397 -397
  405. package/src/components/index.js +36 -36
  406. package/src/components/index.less +5 -5
  407. package/src/components/input/IInput.vue +66 -66
  408. package/src/components/menu/Contextmenu.vue +84 -84
  409. package/src/components/menu/SideMenu.vue +75 -75
  410. package/src/components/menu/index.less +38 -38
  411. package/src/components/menu/menu.js +273 -273
  412. package/src/components/page/header/PageHeader.vue +64 -64
  413. package/src/components/page/header/index.less +40 -40
  414. package/src/components/result/Result.vue +77 -77
  415. package/src/components/setting/Setting.vue +234 -234
  416. package/src/components/setting/SettingItem.vue +26 -26
  417. package/src/components/setting/i18n.js +117 -117
  418. package/src/components/table/StandardTable.vue +141 -141
  419. package/src/components/table/advance/ActionColumns.vue +158 -158
  420. package/src/components/table/advance/ActionSize.vue +45 -45
  421. package/src/components/table/advance/AdvanceTable.vue +275 -275
  422. package/src/components/table/advance/SearchArea.vue +355 -355
  423. package/src/components/table/advance/index.js +2 -2
  424. package/src/components/table/api/ApiTable.vue +50 -50
  425. package/src/components/task/TaskGroup.vue +80 -80
  426. package/src/components/task/TaskItem.vue +26 -26
  427. package/src/components/tool/AStepItem.vue +60 -60
  428. package/src/components/tool/AvatarList.vue +68 -68
  429. package/src/components/tool/DetailList.vue +157 -157
  430. package/src/components/tool/Drawer.vue +142 -142
  431. package/src/components/tool/FooterToolBar.vue +30 -30
  432. package/src/components/tool/HeadInfo.vue +35 -35
  433. package/src/components/tool/TagSelect.vue +83 -83
  434. package/src/components/tool/TagSelectOption.vue +33 -33
  435. package/src/components/transition/PageToggleTransition.vue +97 -97
  436. package/src/config/CreateQueryConfig.js +325 -325
  437. package/src/config/default/admin.config.js +18 -18
  438. package/src/config/default/animate.config.js +21 -21
  439. package/src/config/default/antd.config.js +89 -89
  440. package/src/config/default/index.js +6 -6
  441. package/src/config/default/setting.config.js +55 -55
  442. package/src/config/index.js +3 -3
  443. package/src/config/replacer/index.js +10 -10
  444. package/src/config/replacer/resolve.config.js +67 -67
  445. package/src/expression/ExpressionRunner.js +26 -26
  446. package/src/expression/TestExpression.js +509 -509
  447. package/src/expression/core/Delegate.js +115 -115
  448. package/src/expression/core/Expression.js +1358 -1358
  449. package/src/expression/core/Program.js +932 -932
  450. package/src/expression/core/Token.js +27 -27
  451. package/src/expression/enums/ExpressionType.js +81 -81
  452. package/src/expression/enums/TokenType.js +11 -11
  453. package/src/expression/exception/BreakWayException.js +2 -2
  454. package/src/expression/exception/ContinueWayException.js +2 -2
  455. package/src/expression/exception/ExpressionException.js +28 -28
  456. package/src/expression/exception/ReturnWayException.js +14 -14
  457. package/src/expression/exception/ServiceException.js +22 -22
  458. package/src/expression/instances/LogicConsole.js +44 -44
  459. package/src/expression/ts/ExpressionRunner.ts +28 -28
  460. package/src/expression/ts/TestExpression.ts +509 -509
  461. package/src/expression/ts/core/Delegate.ts +114 -114
  462. package/src/expression/ts/core/Expression.ts +1309 -1309
  463. package/src/expression/ts/core/Program.ts +950 -950
  464. package/src/expression/ts/core/Token.ts +29 -29
  465. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  466. package/src/expression/ts/enums/TokenType.ts +13 -13
  467. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  468. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  469. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  470. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  471. package/src/expression/ts/exception/ServiceException.ts +22 -22
  472. package/src/expression/ts/instances/JSONArray.ts +48 -48
  473. package/src/expression/ts/instances/JSONObject.ts +109 -109
  474. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  475. package/src/font-style/font.css +4 -4
  476. package/src/layouts/AdminLayout.vue +176 -176
  477. package/src/layouts/BlankView.vue +81 -81
  478. package/src/layouts/CommonLayout.vue +56 -56
  479. package/src/layouts/ComponentLayoutOne.vue +47 -47
  480. package/src/layouts/GridView.vue +43 -43
  481. package/src/layouts/PageLayout.vue +151 -151
  482. package/src/layouts/PageView.vue +55 -55
  483. package/src/layouts/SinglePageView.vue +136 -136
  484. package/src/layouts/footer/PageFooter.vue +49 -49
  485. package/src/layouts/header/AdminHeader.vue +132 -132
  486. package/src/layouts/header/HeaderAvatar.vue +64 -64
  487. package/src/layouts/header/HeaderNotice.vue +177 -177
  488. package/src/layouts/header/HeaderSearch.vue +67 -67
  489. package/src/layouts/header/InstitutionDetail.vue +181 -181
  490. package/src/layouts/header/index.less +92 -92
  491. package/src/layouts/tabs/TabsHead.vue +189 -189
  492. package/src/layouts/tabs/TabsView.vue +383 -383
  493. package/src/layouts/tabs/i18n.js +25 -25
  494. package/src/layouts/tabs/index.js +2 -2
  495. package/src/lib.js +1 -1
  496. package/src/logic/LogicRunner.js +62 -62
  497. package/src/logic/TestLogic.js +13 -13
  498. package/src/logic/plugins/common/DateTools.js +35 -35
  499. package/src/logic/plugins/common/VueTools.js +30 -30
  500. package/src/logic/plugins/index.js +7 -7
  501. package/src/logic/ts/LogicRunner.ts +67 -67
  502. package/src/logic/ts/TestLogic.ts +13 -13
  503. package/src/main.js +33 -33
  504. package/src/mixins/formValidationMixin.js +46 -46
  505. package/src/mock/common/activityData.js +32 -32
  506. package/src/mock/common/index.js +89 -89
  507. package/src/mock/common/reportData.js +20 -20
  508. package/src/mock/common/tableData.js +118 -118
  509. package/src/mock/extend/index.js +84 -84
  510. package/src/mock/goods/index.js +108 -108
  511. package/src/mock/index.js +12 -12
  512. package/src/mock/project/index.js +17 -17
  513. package/src/mock/user/current.js +13 -13
  514. package/src/mock/user/login.js +39 -39
  515. package/src/mock/user/routes.js +61 -61
  516. package/src/mock/workplace/index.js +15 -15
  517. package/src/pages/DefaultExample/index.vue +77 -77
  518. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  519. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  520. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  521. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  522. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  523. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  524. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  525. package/src/pages/DynamicStatistics/index.vue +282 -282
  526. package/src/pages/Example/childIndex.vue +15 -15
  527. package/src/pages/Example/index.vue +30 -30
  528. package/src/pages/LogicCallExample/index.vue +46 -46
  529. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  530. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  531. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  532. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  533. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  534. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  535. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  536. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  537. package/src/pages/Recording/index.vue +77 -77
  538. package/src/pages/ReportGrid/index.vue +76 -76
  539. package/src/pages/ReportView.vue +50 -50
  540. package/src/pages/ServiceReview/index.vue +284 -284
  541. package/src/pages/SubExample/index.vue +26 -26
  542. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  543. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  544. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  545. package/src/pages/WorkflowDetail/WorkflowDetail.vue +397 -397
  546. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  547. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  548. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  549. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  550. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  551. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  552. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +125 -125
  553. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  554. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +218 -218
  555. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  556. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  557. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  558. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  559. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  560. package/src/pages/XPageViewExample/index.vue +149 -149
  561. package/src/pages/XReportView/index.vue +64 -64
  562. package/src/pages/XTreeOneProExample/index.vue +67 -67
  563. package/src/pages/addressSelect/addressDemo.vue +24 -24
  564. package/src/pages/addressSelect/index.vue +270 -270
  565. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  566. package/src/pages/dashboard/workplace/i18n.js +40 -40
  567. package/src/pages/dashboard/workplace/index.js +2 -2
  568. package/src/pages/dashboard/workplace/index.less +59 -59
  569. package/src/pages/exception/403.vue +21 -21
  570. package/src/pages/exception/404.vue +24 -24
  571. package/src/pages/exception/500.vue +21 -21
  572. package/src/pages/login/Login.vue +380 -380
  573. package/src/pages/login/LoginV3.vue +389 -389
  574. package/src/pages/login/index.js +2 -2
  575. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  576. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  577. package/src/pages/report/ReportTable.js +124 -124
  578. package/src/pages/report/ReportTableHome.vue +28 -28
  579. package/src/pages/resourceManage/depListManage.vue +23 -23
  580. package/src/pages/resourceManage/funListManage.vue +23 -23
  581. package/src/pages/resourceManage/index.js +15 -15
  582. package/src/pages/resourceManage/orgListManage.vue +98 -98
  583. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  584. package/src/pages/resourceManage/roleListManage.vue +23 -23
  585. package/src/pages/resourceManage/staffListManage.vue +23 -23
  586. package/src/pages/system/dictionary/index.vue +44 -44
  587. package/src/pages/system/file/Info.vue +56 -56
  588. package/src/pages/system/file/index.vue +317 -317
  589. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  590. package/src/pages/system/monitor/operLog/index.vue +37 -37
  591. package/src/pages/system/settings/index.vue +126 -126
  592. package/src/pages/system/settings/modifyPassword.vue +117 -117
  593. package/src/pages/system/ticket/index.vue +480 -480
  594. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  595. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  596. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  597. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  598. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  599. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  600. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  601. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  602. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  603. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  604. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  605. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  606. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  607. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  608. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  609. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  610. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  611. package/src/pages/userInfoDetailManage/index.vue +290 -290
  612. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  613. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  614. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  615. package/src/plugins/EventLogPlugin.js +33 -33
  616. package/src/plugins/FindParentsData.js +17 -17
  617. package/src/plugins/HiPrintPlugin.js +164 -164
  618. package/src/router/async/config.async.js +35 -35
  619. package/src/router/async/router.map.js +127 -127
  620. package/src/router/guards.js +262 -262
  621. package/src/router/i18n.js +57 -57
  622. package/src/router/index.js +27 -27
  623. package/src/router.js +17 -17
  624. package/src/services/DataModel.js +30 -30
  625. package/src/services/LodopFuncs.js +137 -137
  626. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  627. package/src/services/api/LogDetailsViewApi.js +10 -10
  628. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  629. package/src/services/api/TicketDetailsViewApi.js +46 -46
  630. package/src/services/api/cas.js +79 -79
  631. package/src/services/api/common.js +346 -346
  632. package/src/services/api/entity.js +18 -18
  633. package/src/services/api/index.js +17 -17
  634. package/src/services/api/logininfor/index.js +6 -6
  635. package/src/services/api/manage.js +8 -8
  636. package/src/services/api/restTools.js +215 -215
  637. package/src/services/api/workFlow.js +57 -57
  638. package/src/services/apiService.js +16 -16
  639. package/src/services/dataSource.js +12 -12
  640. package/src/services/index.js +7 -7
  641. package/src/services/user.js +92 -92
  642. package/src/services/v3Api.js +116 -116
  643. package/src/store/index.js +5 -5
  644. package/src/store/modules/account.js +115 -115
  645. package/src/store/modules/index.js +5 -5
  646. package/src/store/modules/lowCode.js +33 -33
  647. package/src/store/modules/setting.js +119 -119
  648. package/src/store/mutation-types.js +4 -4
  649. package/src/theme/antd/ant-menu.less +2 -2
  650. package/src/theme/antd/ant-message.less +3 -3
  651. package/src/theme/antd/ant-table.less +22 -22
  652. package/src/theme/antd/ant-time-picker.less +3 -3
  653. package/src/theme/antd/index.less +3 -3
  654. package/src/theme/default/color.less +43 -43
  655. package/src/theme/default/index.less +3 -3
  656. package/src/theme/default/nprogress.less +76 -76
  657. package/src/theme/default/style.less +58 -58
  658. package/src/theme/global.less +279 -279
  659. package/src/theme/index.less +5 -5
  660. package/src/theme/reportTable.less +58 -58
  661. package/src/theme/theme.less +1 -1
  662. package/src/utils/EncryptUtil.js +162 -162
  663. package/src/utils/Objects.js +25 -25
  664. package/src/utils/authority-utils.js +85 -85
  665. package/src/utils/axios-interceptors.js +100 -100
  666. package/src/utils/colors.js +107 -107
  667. package/src/utils/common.js +10 -10
  668. package/src/utils/errorCode.js +6 -6
  669. package/src/utils/excel/Blob.js +180 -180
  670. package/src/utils/excel/Export2Excel.js +184 -184
  671. package/src/utils/filter.js +21 -21
  672. package/src/utils/formatter.js +74 -74
  673. package/src/utils/htmlToPDF.js +108 -108
  674. package/src/utils/htmlToPDFApi.js +5 -5
  675. package/src/utils/i18n.js +80 -80
  676. package/src/utils/indexedDB.js +549 -549
  677. package/src/utils/login.js +188 -188
  678. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  679. package/src/utils/lowcode/lowcodeLog.js +29 -29
  680. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  681. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  682. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  683. package/src/utils/map-utils.js +47 -47
  684. package/src/utils/microAppUtils.js +49 -49
  685. package/src/utils/reg.js +95 -95
  686. package/src/utils/request.js +395 -395
  687. package/src/utils/routerUtil.js +567 -567
  688. package/src/utils/runEvalFunction.js +14 -14
  689. package/src/utils/theme-color-replacer-extend.js +92 -92
  690. package/src/utils/themeUtil.js +100 -100
  691. package/src/utils/util.js +329 -329
  692. package/src/utils/waterMark.js +31 -31
  693. package/test/Tree.spec.js +168 -168
  694. package/test/myDialog.spec.js +47 -47
  695. package/test/request.test.js +17 -17
  696. package/test/util.test.js +53 -53
  697. package/test/v3Api.test.js +1984 -1984
  698. package/tests/unit/ReportTable.spec.js +16 -16
  699. package/vue.config.js +222 -222
  700. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  701. package/.history/public/his/editor/editor_20250606134713.html +0 -51
  702. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +0 -509
  703. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +0 -524
  704. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +0 -524
  705. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +0 -524
  706. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +0 -207
  707. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +0 -211
  708. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +0 -212
  709. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +0 -212
  710. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +0 -1320
  711. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +0 -1332
  712. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +0 -1331
  713. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +0 -1331
  714. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +0 -1331
  715. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +0 -1339
  716. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +0 -731
  717. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +0 -748
  718. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +0 -748
  719. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +0 -1071
  720. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +0 -1078
  721. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +0 -1077
  722. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +0 -1077
  723. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +0 -1077
  724. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +0 -442
  725. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +0 -442
  726. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +0 -442
  727. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +0 -475
  728. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +0 -475
  729. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +0 -475
  730. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +0 -477
  731. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +0 -477
  732. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +0 -477
  733. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +0 -473
  734. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +0 -473
  735. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +0 -473
  736. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +0 -473
  737. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +0 -473
  738. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +0 -473
  739. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +0 -473
  740. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +0 -473
  741. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +0 -473
  742. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +0 -473
  743. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +0 -474
  744. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +0 -474
  745. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +0 -474
  746. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +0 -472
  747. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +0 -472
  748. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +0 -472
  749. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +0 -472
  750. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +0 -472
  751. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +0 -472
  752. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +0 -501
  753. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +0 -501
  754. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +0 -501
  755. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +0 -504
  756. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +0 -504
  757. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +0 -504
  758. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +0 -131
  759. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +0 -160
  760. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +0 -160
  761. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +0 -160
  762. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +0 -158
  763. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +0 -173
  764. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +0 -222
  765. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +0 -229
  766. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +0 -229
  767. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +0 -229
  768. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +0 -241
  769. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +0 -241
  770. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +0 -241
  771. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +0 -245
  772. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +0 -245
  773. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +0 -245
  774. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +0 -255
  775. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +0 -255
  776. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +0 -255
  777. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +0 -270
  778. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +0 -270
  779. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +0 -270
  780. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +0 -270
  781. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +0 -294
  782. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +0 -294
  783. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +0 -294
  784. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +0 -303
  785. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +0 -303
  786. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +0 -303
  787. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +0 -288
  788. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +0 -288
  789. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +0 -288
  790. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +0 -317
  791. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +0 -306
  792. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +0 -306
  793. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +0 -306
  794. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +0 -495
  795. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +0 -495
  796. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +0 -494
  797. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +0 -494
  798. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +0 -494
  799. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +0 -495
  800. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +0 -495
  801. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +0 -492
  802. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +0 -492
  803. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +0 -485
  804. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +0 -485
  805. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +0 -488
  806. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134604.vue +0 -263
  807. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134615.vue +0 -302
  808. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134621.vue +0 -301
  809. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134634.vue +0 -311
  810. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134644.vue +0 -330
  811. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134653.vue +0 -330
  812. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134836.vue +0 -330
  813. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135247.vue +0 -330
  814. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135303.vue +0 -354
  815. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135316.vue +0 -363
  816. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135323.vue +0 -363
  817. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135334.vue +0 -366
  818. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135342.vue +0 -364
  819. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135349.vue +0 -364
  820. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135351.vue +0 -346
  821. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135354.vue +0 -346
  822. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135401.vue +0 -346
  823. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135406.vue +0 -346
  824. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135424.vue +0 -346
  825. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807143043.vue +0 -254
  826. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155506.vue +0 -329
  827. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155535.vue +0 -330
  828. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155543.vue +0 -330
  829. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155926.vue +0 -304
  830. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155928.vue +0 -304
  831. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172548.vue +0 -298
  832. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172609.vue +0 -298
  833. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172623.vue +0 -298
  834. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172631.vue +0 -298
  835. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172701.vue +0 -298
  836. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172704.vue +0 -298
  837. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175937.vue +0 -290
  838. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175942.vue +0 -290
  839. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180210.vue +0 -290
  840. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180424.vue +0 -290
  841. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180448.vue +0 -290
  842. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180915.vue +0 -262
  843. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180917.vue +0 -262
  844. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101106.vue +0 -283
  845. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101112.vue +0 -289
  846. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101118.vue +0 -289
  847. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101129.vue +0 -294
  848. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101137.vue +0 -318
  849. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101145.vue +0 -320
  850. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101154.vue +0 -320
  851. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101211.vue +0 -320
  852. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101236.vue +0 -320
  853. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101239.vue +0 -320
  854. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103845.vue +0 -142
  855. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103852.vue +0 -142
  856. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103857.vue +0 -142
  857. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103859.vue +0 -142
  858. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103907.vue +0 -142
  859. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103910.vue +0 -142
  860. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103911.vue +0 -142
  861. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103913.vue +0 -142
  862. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103916.vue +0 -142
  863. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103931.vue +0 -142
  864. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145127.vue +0 -85
  865. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145136.vue +0 -81
  866. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145142.vue +0 -81
  867. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145145.vue +0 -81
  868. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145148.vue +0 -81
  869. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145151.vue +0 -81
  870. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145155.vue +0 -81
  871. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -213
  872. package/src/base-client/components/TreeList/TreeList.vue +0 -91
  873. package/src/base-client/components/TreeList/TreeNode.vue +0 -81
  874. package/src/base-client/components/common/XCardSet/XTiltle.vue +0 -191
  875. package/src/base-client/components/his/XHisEditor/dome.vue +0 -144
@@ -1,1014 +1,1014 @@
1
- <template>
2
- <a-modal
3
- :destroyOnClose="true"
4
- :visible="visible"
5
- :width="1250"
6
- :zIndex="1001"
7
- title="数据字段配置"
8
- @cancel="modelCancel"
9
- @ok="submitItem">
10
- <a-form-model
11
- ref="itemForm"
12
- :model="item"
13
- :rules="itemRules"
14
- layout="vertical">
15
- <a-row :gutter="16">
16
- <a-col :span="6">
17
- <a-card :bodyStyle="bodyStyle" title="基本属性">
18
- <a-divider style="font-size: 14px;margin-top: 0">字段信息</a-divider>
19
- <a-form-model-item label="标签名称" prop="title">
20
- <a-input v-model="item.title" placeholder="请输入标签名称"/>
21
- </a-form-model-item>
22
- <a-form-model-item
23
- label="字段名称"
24
- prop="key">
25
- <a-input ref="key" v-model="item.key" :disabled="keyDisabled" placeholder="请输入字段名">
26
- <a-popover slot="suffix" placement="bottom" title="关于字段名称">
27
- <template slot="content">
28
- <p>设置数据字段的名称</p>
29
- <p>用作SQL查询时为<span style="font-weight: bold">表别名.数据列名</span>的格式,如:i.id</p>
30
- <p style="font-weight: bold">注意事项:</p>
31
- <p>由于v2和v3版本产品中一些数据字段有差异,为了增强查询配置在不同版本产品中的通用性,
32
- 现在查询配置中的数据字段现在可以通过`$`前缀指定通用兼容名了</p>
33
- <p>通过指定数据字段为通用兼容名,查询配置将会在解析生成SQL时根据配置的产品版本自动适配实际的字段名。</p>
34
- <p>目前支持的兼容性字段见下表:</p>
35
- <table>
36
- <thead>
37
- <tr><th>数据表</th><th>字段含义</th><th>v2产品</th><th>v3产品</th><th>通用兼容名</th></tr>
38
- </thead>
39
- <tbody>
40
- <tr><td>t_userfiles</td><td>表档案主键</td><td>f_user_id</td><td>f_userfiles_id</td><td>$userid</td></tr>
41
- </tbody>
42
- </table>
43
- </template>
44
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
45
- </a-popover>
46
- </a-input>
47
- </a-form-model-item>
48
- <a-form-model-item
49
- v-if="item.formType ==='addressSearch'"
50
- label="坐标字段名">
51
- <a-input :disabled="true" :value="`${item.key}_lng_lat`">
52
- <a-popover slot="suffix" placement="bottom" title="坐标字段名">
53
- <template slot="content">
54
- <p>表单类型为地点搜索框时:</p>
55
- <p>新增/修改表单时,字段名称会存放地址名称,坐标字段名会存放坐标信息</p>
56
- </template>
57
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
58
- </a-popover>
59
- </a-input>
60
- </a-form-model-item>
61
- <a-divider style="font-size: 14px;margin-top: 0">数据模式</a-divider>
62
- <a-form-model-item
63
- prop="dataMode"
64
- style="margin-top: 10px;">
65
- <a-checkbox-group v-model="dataModeArrayData" :disabled="dataModeDisabled" @change="dataModeArrayDataChange" :options="dataModeTypeV"/>
66
- </a-form-model-item>
67
- </a-card>
68
- </a-col>
69
- <a-col v-show="!dataMode.group && (dataMode.queryForm || dataMode.addOrEditForm || dataMode.table || dataMode.sqlQueryCondition)" :span="9">
70
- <a-card v-if="dataMode.queryForm || dataMode.addOrEditForm || dataMode.table || dataMode.sqlQueryCondition" :bodyStyle="bodyStyle" title="核心配置">
71
- <template v-if="dataMode.queryForm || dataMode.addOrEditForm || dataMode.sqlQueryCondition">
72
- <a-divider style="font-size: 14px;margin-top: 0">表单配置</a-divider>
73
- <a-form-model-item label="表单类型" prop="formType">
74
- <a-select v-model="item.formType" placeholder="请选择表单类型" @change="changeFormType(item)">
75
- <a-select-option v-for="formTypeItem in formType" :key="formTypeItem.key">{{ formTypeItem.label }}</a-select-option>
76
- </a-select>
77
- </a-form-model-item>
78
- <a-form-model-item v-if="dataMode.sqlQueryCondition && item.formType !=='file' && item.formType !=='image' " label="表单查询方式" prop="queryType">
79
- <a-select
80
- v-model="item.queryType"
81
- :disabled="formQueryTypeDisabled"
82
- :getPopupContainer=" triggerNode => { return triggerNode.parentNode } "
83
- placeholder="表单查询方式">
84
- <a-select-option v-for="queryTypeItem in queryTypeV" :key="queryTypeItem.key">{{ queryTypeItem.label }}</a-select-option>
85
- </a-select>
86
- </a-form-model-item>
87
- <template v-if="item.formType">
88
- <a-form-model-item v-if="dataMode.addOrEditForm || dataMode.queryForm" label="表单校验" prop="rule">
89
- <a-row :gutter="16">
90
- <a-col v-if="(item.formType === 'input' || item.formType === 'textarea' ) && item.formType !=='file' && item.formType !=='image' " :span="12" >
91
- <a-select v-model="item.rule.type" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="校验类型">
92
- <a-select-option v-for="ruleTypeItem in formRuleType" :key="ruleTypeItem.key">{{ ruleTypeItem.label }}</a-select-option>
93
- <a-popover slot="suffixIcon" placement="bottom" title="关于表单校验类型">
94
- <template slot="content">
95
- <p>设置表单项的校验类型</p>
96
- </template>
97
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
98
- </a-popover>
99
- </a-select>
100
- </a-col>
101
- <a-col :span="12">
102
- <a-radio-group v-model="item.rule.required" button-style="solid" default-value="false">
103
- <a-radio-button value="true">
104
- 必选项
105
- </a-radio-button>
106
- <a-radio-button value="false">
107
- 非必选项
108
- </a-radio-button>
109
- </a-radio-group>
110
- </a-col>
111
- </a-row>
112
- </a-form-model-item>
113
- <a-form-model-item v-if="dataMode.addOrEditForm" label="新增/修改场景选择" prop="addOrEdit">
114
- <a-select v-model="item.addOrEdit" placeholder="请选择场景">
115
- <a-select-option v-for="addOrEditItem in addOrEditTypeV" :key="addOrEditItem.key">{{ addOrEditItem.label }}</a-select-option>
116
- <a-popover
117
- slot="suffixIcon"
118
- placement="bottom"
119
- title="关于新增/修改场景选择">
120
- <template slot="content">
121
- <p>设置表单项的新增/修改场景</p>
122
- <p>静默新增类型用于非人为新增的数据,不会生成表单项,且必须设置字段用途</p>
123
- </template>
124
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
125
- </a-popover>
126
- </a-select>
127
- </a-form-model-item>
128
- <a-form-model-item v-if="item.addOrEdit === 'silenceAdd'" label="字段用途" prop="silencePurpose">
129
- <a-select v-model="item.silencePurpose" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="请选择字段用途">
130
- <a-select-option v-for="silencePurposeTypeItem in silencePurposeType" :key="silencePurposeTypeItem.key">{{ silencePurposeTypeItem.label }}</a-select-option>
131
- <a-popover
132
- slot="suffixIcon"
133
- placement="bottom"
134
- title="关于字段用途">
135
- <template slot="content">
136
- <p>用于静默新增时设置字段用途</p>
137
- <p>在新增数据的表单提交时,页面会根据设置的字段用途自动获取相关数据并追加到表单中</p>
138
- <p>当字段用途选择为<span style="font-weight: bold">自定义</span>时,必须指定一个业务逻辑(Logic)名称,表单提交前会将表单内容作为参数调用该Logic接口,并将Logic返回值作为表单值
139
- </p>
140
- </template>
141
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
142
- </a-popover>
143
- </a-select>
144
- </a-form-model-item>
145
- <a-form-model-item v-if="item.silencePurpose === 'customize'" label="字段用途对应Logic" prop="silenceSource">
146
- <a-input v-model="item.silenceSource" placeholder="请输入业务逻辑名称"/>
147
- </a-form-model-item>
148
- </template>
149
- </template>
150
- <template v-if="dataMode.table">
151
- <a-divider style="font-size: 14px;margin-top: 0">表格列配置</a-divider>
152
- <a-form-model-item v-if="item.formType" label="作用域插槽" prop="slot">
153
- <a-select v-model="item.slot.type" :disabled="slotTypeDisabled" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="插槽类型">
154
- <a-select-option v-for="slotTypeItem in slotTypeV" :key="slotTypeItem.key">{{ slotTypeItem.label }}</a-select-option>
155
- <a-popover slot="suffixIcon" placement="bottom" title="关于作用域插槽">
156
- <template slot="content">
157
- <p>你可以通过设置表格列的作用域插槽实现一些效果</p>
158
- <p>如果没有指定,默认会设置为文本溢出省略(长度:16)</p>
159
- <p>如果你选择文本溢出省略,需要设置文本溢出上限长度,建议ID主键等类型设置为8</p>
160
- <p>如果你选择多彩徽标,需要设置徽标对应的数据样式字典键</p>
161
- <a-divider style="font-size: 14px;margin-top: 0">关于表格列宽度</a-divider>
162
- <p>V1.1之后不再支持自定义表格列宽度,表格列宽度将通过作用域插槽类型自适应</p>
163
- <p>设置为文本溢出省略时,表格列宽度 = 文本溢出上限长度 * 7 + 42</p>
164
- <p>设置为多彩徽标时,表格列宽度为130</p>
165
- <p>设置为日期时间格式化时,表格列宽度为160</p>
166
- </template>
167
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
168
- </a-popover>
169
- </a-select>
170
- </a-form-model-item>
171
- <a-form-model-item v-if="item.slot.type === 'badge'" label="徽标字典键" prop="slot.keyMap">
172
- <a-input v-model="item.slot.keyMap" :disabled="slotTypeDisabled" placeholder="请输入徽标字典键">
173
- <a-popover
174
- slot="suffix"
175
- placement="bottom"
176
- title="关于徽标字典键">
177
- <template slot="content">
178
- <p>如果你设置了表单类型为选择框,且数据源是字典键,该值会自动带出</p>
179
- </template>
180
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
181
- </a-popover>
182
- </a-input>
183
- </a-form-model-item>
184
- <a-form-model-item v-if="item.slot.type === 'ellipsis'" label="文本溢出上限长度" prop="slot.value">
185
- <a-input-number v-model="item.slot.value" placeholder="请输入文本溢出上限长度" style="width: 100%"/>
186
- </a-form-model-item>
187
- <a-form-model-item v-if="item.slot.type === 'action'" label="操作列文本" prop="slot.actionText">
188
- <a-input v-model="item.slot.actionText" placeholder="请输入操作列显示文本,默认为详情"/>
189
- </a-form-model-item>
190
- <a-form-model-item v-if="dataMode.sqlQueryItem || dataMode.sqlQueryCondition" label="字段默认值" prop="default">
191
- <a-input v-model="item.default" placeholder="当查询结果为null时,指定默认值"/>
192
- </a-form-model-item>
193
- </template>
194
- </a-card>
195
- </a-col>
196
- <a-col v-if="!dataMode.group && item.formType && (((dataMode.addOrEditForm || dataMode.queryForm ) && (item.formType === 'input' || item.formType === 'select')) || (dataMode.table && item.formType !== 'file' && item.formType !== 'image') || selectDataShow)" :span="9">
197
- <a-card :bodyStyle="bodyStyle" title="扩展属性">
198
- <template v-if="(dataMode.addOrEditForm || dataMode.queryForm ) && (item.formType === 'input' || item.formType === 'select')">
199
- <a-divider style="font-size: 14px;margin-top: 0">提示相关</a-divider>
200
- <a-form-model-item label="表单水印" prop="placeholder">
201
- <a-input v-model="item.placeholder" placeholder="表单水印(placeholder)" />
202
- </a-form-model-item>
203
- </template>
204
- <template v-if="selectDataShow">
205
- <a-divider style="font-size: 14px;margin-top: 0">数据源相关</a-divider>
206
- <a-form-model-item label="数据源类型" prop="selectType">
207
- <a-select v-model="item.selectType" placeholder="请选择数据源类型" @change="changeSelectKType">
208
- <a-select-option v-for="selectDataTypeItem in selectDataType.filter(h=>!h.noMatch.includes(item.formType))" :key="selectDataTypeItem.key">{{ selectDataTypeItem.label }}</a-select-option>
209
- <a-popover
210
- slot="suffixIcon"
211
- placement="bottom"
212
- title="关于数据源类型">
213
- <template slot="content">
214
- <p>设置数据源</p>
215
- <p>数据源类型分为三种,你可以根据需要选择</p>
216
- <p>字典键:选项从字典表(t_dictionary)获取,你只需要选择字典键的名称即可</p>
217
- <p>业务逻辑名称:选项通过发起http请求调用指定的业务逻辑(Logic)接口获取</p>
218
- <p>固定集合:选项为静态值,JSONArray格式</p>
219
- <p>当表单为树形选择框类型时,返回的数据需按照以下形式:</p>
220
- <json-viewer
221
- :expand-depth="parseInt('100')"
222
- :value="DemoJson"
223
- style="overflow: auto;max-height: 440px"></json-viewer>
224
- </template>
225
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
226
- </a-popover>
227
- </a-select>
228
- </a-form-model-item>
229
- <a-form-model-item v-if="item.selectType" label="数据源" prop="selectKey">
230
- <a-select
231
- v-if="item.selectType === 'key'"
232
- v-model="item.selectKey"
233
- :filter-option="filterOption"
234
- placeholder="请选择字典键"
235
- show-search
236
- @change="changeSelectKey(item)">
237
- <template>
238
- <a-select-option
239
- v-for="(optionItem,index) in option"
240
- :key="index"
241
- :value="Object.keys(optionItem)[0]">{{ optionItem[Object.keys(optionItem)[0]] }}
242
- </a-select-option>
243
- </template>
244
- </a-select>
245
- <a-input v-if="item.selectType === 'logic'" v-model="item.selectKey" placeholder="请输入业务逻辑名称"/>
246
- <a-textarea v-if="item.selectType === 'fixArray'" v-model="item.selectKey" placeholder="请录入数据源"/>
247
- </a-form-model-item>
248
- <a-form-model-item v-if="item.selectType === 'logic'" label="数据源加载方式" prop="selectLoadType">
249
- <a-radio-group v-model="item.lazyLoad" button-style="solid" default-value="false">
250
- <a-radio-button value="true">
251
- {{ item.formType === 'treeSelect' ? '异步加载节点' : '懒加载搜索' }}
252
- </a-radio-button>
253
- <a-radio-button value="false">
254
- 一次性加载
255
- </a-radio-button>
256
- </a-radio-group>
257
- </a-form-model-item>
258
- <a-form-model-item label="关联外键字段" prop="selectKeyName">
259
- <a-input v-model="item.selectKeyName" placeholder="该列关联的外键字段">
260
- <a-popover slot="suffix" placement="bottom" title="关于关联外键字段">
261
- <template slot="content">
262
- <p><span style="font-weight: bold;"><span style="color: #FF0036">非必需的实验性功能:</span>设置该参数需开发岗指导</span></p>
263
- <p>当字段与主子表外键有关系时,你可以指定<span style="font-weight: bold">该列所关联的外键字段名</span>
264
- </p>
265
- <p>设置该参数是为了该字段用作表单查询时,系统可以通过设置的关联外键字段,而非字面值作为查询条件</p>
266
- <p>示例:</p>
267
- <p>主表为t_userfiles(表档案)表,别名为u,与t_gasbrand(气表品牌表)有关联关系,别名为g,为了显示表档案对应的气表品牌数据,我们将数据字段名设置为g.f_gasbrand</p>
268
- <p>这样我们就可以在table中看到气表品牌了,但是用户如果通过气表品牌下拉框进行筛选,我们指定的g.f_gasbrand只是气表品牌的值,而实际关联字段是u.f_gasbrand_id</p>
269
- <p>所以如果我们指定了关联外键字段u.f_gasbrand_id,系统则会使用u.f_gasbrand_id筛选数据,而不是g.f_gasbrand,从而优化了查询效率
270
- </p>
271
- </template>
272
- <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
273
- </a-popover>
274
- </a-input>
275
- </a-form-model-item>
276
- </template>
277
- <template v-if="item.formType === 'file' || item.formType === 'image'">
278
- <a-divider style="font-size: 14px;margin-top: 0">文件上传相关</a-divider>
279
- <a-form-model-item label="允许上传文件数量" prop="accept" style="margin-bottom: 5px;">
280
- <a-slider
281
- v-model="item.acceptCount"
282
- :marks="{ 1: '1', 3: '3', 5: '5', 10: '10', 15: '15', 20: '20'}"
283
- :max="20"
284
- :min="1"
285
- />
286
- </a-form-model-item>
287
- <a-form-model-item label="附件用途" prop="useType">
288
- <a-select v-model="item.useType" placeholder="指定文件用途,同表单不同用途">
289
- <a-select-option v-for="userTypeItem in $appdata.getDictionaryList('useType')" :key="userTypeItem.value">{{ userTypeItem.value }}</a-select-option>
290
- </a-select>
291
- </a-form-model-item>
292
- <a-form-model-item label="上传的仓库" prop="resUploadStock">
293
- <a-select v-model="item.resUploadStock" placeholder="选择文件上传到的仓库" @change="changeStock">
294
- <a-select-option v-for="stock in stockList" :key="stock.id">{{ stock.f_name }}</a-select-option>
295
- </a-select>
296
- </a-form-model-item>
297
- <a-form-model-item v-if="item.resUploadStock" label="具体路径" prop="pathKey">
298
- <a-select v-model="item.pathKey" placeholder="仓库扩展路径">
299
- <a-select-option v-for="pathKey in lowerPath" :key="pathKey.label">{{ pathKey.label }}</a-select-option>
300
- </a-select>
301
- </a-form-model-item>
302
- <a-form-model-item v-if="item.formType === 'file'" label="允许上传文件类型" prop="accept">
303
- <a-select v-model="item.accept" mode="tags" placeholder="指定文件类型,默认不限制" @change="itemAcceptChange">
304
- <a-select-option v-for="type_item in fileType" :key="type_item.accept">{{ type_item.label }}</a-select-option>
305
- </a-select>
306
- </a-form-model-item>
307
- </template>
308
- </a-card>
309
- </a-col>
310
- <a-col :span="18" v-if="dataMode.group">
311
- <a-card :bodyStyle="bodyStyle" title="数据字段">
312
- <a-button type="primary" slot="extra" @click="addColumnItem()">增加</a-button>
313
- <a-row :gutter="24">
314
- <a-col :span="7">
315
- <span style="font-weight: bold">
316
- 标签名
317
- </span>
318
- </a-col>
319
- <a-col :span="7">
320
- <span style="font-weight: bold">
321
- 字段名
322
- </span>
323
- </a-col>
324
- <a-col :span="8">
325
- <span style="font-weight: bold">
326
- 数据模式
327
- </span>
328
- </a-col>
329
- <a-col :span="2">
330
- <span style="font-weight: bold">
331
- 操作
332
- </span>
333
- </a-col>
334
- </a-row>
335
- <a-divider style="margin: 6px 0" />
336
- <div
337
- v-for="(columnItem, index) in item.column"
338
- :key="index"
339
- draggable="true"
340
- @dragend="handleDragEnd($event, columnItem)"
341
- @dragenter="handleDragEnter($event, columnItem)"
342
- @dragstart="handleDragStart($event, columnItem)"
343
- @dragover.prevent="handleDragOver($event, columnItem)">
344
- <a-row v-if="ending && dragging && columnItem.key === ending.key && dragging.key !== ending.key" class="dragTipsWarp">
345
- <span class="dragTips">拖到此处放置</span>
346
- </a-row>
347
- <a-row :gutter="24" class="column_item dragTipsWarp">
348
- <a-col :span="7">
349
- <span style="font-weight: bold">
350
- {{ columnItem.title }}
351
- </span>
352
- </a-col>
353
- <a-col :span="7">
354
- <span style="font-weight: bold">
355
- {{ columnItem.key }}
356
- </span>
357
- </a-col>
358
- <a-col :span="8">
359
- <a-tooltip>
360
- <template slot="title">
361
- 查询表单项
362
- </template>
363
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('queryForm') ? 'blue' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="file-search" /></a-tag>
364
- </a-tooltip>
365
- <a-tooltip>
366
- <template slot="title">
367
- 表格列
368
- </template>
369
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('table') ? 'orange' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="table" /></a-tag>
370
- </a-tooltip>
371
- <a-tooltip>
372
- <template slot="title">
373
- 新增/修改表单项
374
- </template>
375
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('addOrEditForm') ? 'green' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="form" /></a-tag>
376
- </a-tooltip>
377
- <a-tooltip>
378
- <template slot="title">
379
- SQL查询项
380
- </template>
381
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('sqlQueryItem') ? 'cyan' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="bars" /></a-tag>
382
- </a-tooltip>
383
- <a-tooltip>
384
- <template slot="title">
385
- SQL查询表达式
386
- </template>
387
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('sqlQueryCondition') ? 'purple' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="search" /></a-tag>
388
- </a-tooltip>
389
- <a-tooltip>
390
- <template slot="title">
391
- Excel导入项
392
- </template>
393
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('excelImportItem') ? '#107C41' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="file-excel" /></a-tag>
394
- </a-tooltip>
395
- <a-tooltip>
396
- <template slot="title">
397
- 数据组
398
- </template>
399
- <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('group') ? '#82A0D8' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="crown" /></a-tag>
400
- </a-tooltip>
401
- </a-col>
402
- <a-col :span="1">
403
- <a-icon type="edit" @click="editColumnItem(columnItem.key,index)"/>
404
- </a-col>
405
- <a-col :span="1">
406
- <a-icon type="close" @click="removeColumnItem(columnItem.key,index)"/>
407
- </a-col>
408
- </a-row>
409
- </div>
410
- </a-card>
411
- </a-col>
412
- </a-row>
413
- <a-alert
414
- v-if="dataModeArrayData.length === 0"
415
- message="错误:请至少选择一种数据模式"
416
- show-icon
417
- style="margin-top: 5px"
418
- type="error"/>
419
- <a-alert
420
- v-if="dataMode.addOrEditForm && !dataMode.sqlQueryItem && item.formType !== 'file' && item.formType !== 'image'"
421
- message="错误:如果要生成新增/修改表单项,必须勾选生成SQL查询项"
422
- show-icon
423
- style="margin-top: 5px"
424
- type="error"/>
425
- <a-alert
426
- v-if="dataMode.queryForm && !dataMode.sqlQueryCondition"
427
- message="提示:您没有勾选生成SQL查询表达式,渲染的表单项不会生成SQL查询条件"
428
- show-icon
429
- style="margin-top: 5px"
430
- type="info"/>
431
- <a-alert
432
- v-if="dataMode.table && !dataMode.sqlQueryItem"
433
- message="提示:您没有勾选生成SQL查询项,渲染的表格列不会绑定SQL结果集数据"
434
- show-icon
435
- style="margin-top: 5px"
436
- type="info"/>
437
- <a-alert
438
- v-if="item.title.length > 8"
439
- message="提示:标签名称过长可能会影响表格列展示效果,建议不超过8个字符"
440
- show-icon
441
- style="margin-top: 5px"
442
- type="warning"/>
443
- </a-form-model>
444
- <create-query-item ref="queryItem" @getColumn="getColumnItem" @itemHandle="itemHandleItem"/>
445
- </a-modal>
446
- </template>
447
-
448
- <script>
449
- import {
450
- dataModeType,
451
- fileType,
452
- formRuleType,
453
- formType,
454
- queryType,
455
- slotType,
456
- silencePurposeType,
457
- addOrEditType,
458
- selectDataType
459
- } from '@vue2-client/config/CreateQueryConfig'
460
- import { post } from '@vue2-client/services/api'
461
- import JsonViewer from 'vue-json-viewer'
462
- import { getDictionaryParam } from '@vue2-client/services/api/common'
463
-
464
- const DemoJson = [{
465
- value: 'zhejiang',
466
- label: 'Zhejiang',
467
- children: [{ value: 'hangzhou', label: 'Hangzhou', children: [{ value: 'xihu', label: 'West Lake' }] }]
468
- }]
469
-
470
- export default {
471
- name: 'CreateQueryItem',
472
- components: {
473
- JsonViewer
474
- },
475
- computed: {
476
- // 是否展示数据源相关字段
477
- selectDataShow () {
478
- return this.item.formType === 'select' || this.item.formType === 'checkbox' || this.item.formType === 'radio' || this.item.formType === 'treeSelect'
479
- },
480
- // 作用域插槽是否禁用
481
- slotTypeDisabled () {
482
- return this.item.selectKey && this.item.selectType === 'key'
483
- },
484
- // 字段名称是否禁用
485
- keyDisabled () {
486
- return this.item.formType === 'file' || this.item.formType === 'image' || this.dataMode.mixinTableName
487
- },
488
- // 数据模式是否禁用
489
- dataModeDisabled () {
490
- return this.item.formType === 'file' || this.item.formType === 'image' || this.item.formType === 'addressSearch'
491
- },
492
- dataMode: function () {
493
- const result = {
494
- queryForm: false,
495
- table: false,
496
- addOrEditForm: false,
497
- sqlQueryItem: false,
498
- sqlQueryCondition: false,
499
- excelImportItem: false,
500
- group: false,
501
- mixinTableName: false
502
- }
503
- for (const item of this.dataModeArrayData) {
504
- result[item] = true
505
- }
506
- return result
507
- },
508
- queryTypeV () {
509
- return queryType.filter(item => {
510
- return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
511
- })
512
- },
513
- dataModeTypeV () {
514
- if (this.dataModeArrayData.includes('group')) {
515
- return [{
516
- label: 'SQL生成查询项',
517
- value: 'sqlQueryItem',
518
- noMatch: ['file', 'personSetting']
519
- }, {
520
- label: '字段组存储',
521
- value: 'group',
522
- noMatch: []
523
- }]
524
- }
525
- if (this.dataModeArrayData.includes('mixinTableName')) {
526
- return [
527
- {
528
- label: '渲染查询表单项',
529
- value: 'queryForm',
530
- noMatch: ['file', 'image', 'textarea', 'personSetting']
531
- },
532
- {
533
- label: '动态表名参数',
534
- value: 'mixinTableName',
535
- noMatch: []
536
- }
537
- ]
538
- }
539
- if (this.item.formType) {
540
- return dataModeType.filter(item => {
541
- return item.noMatch.findIndex(type => type === this.item.formType) === -1
542
- })
543
- } else {
544
- return dataModeType
545
- }
546
- },
547
- slotTypeV () {
548
- return slotType.filter(item => {
549
- return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
550
- })
551
- },
552
- addOrEditTypeV () {
553
- return addOrEditType.filter(item => {
554
- return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
555
- })
556
- }
557
- },
558
- data () {
559
- return {
560
- DemoJson,
561
- dataModeType,
562
- queryType,
563
- formType,
564
- formRuleType,
565
- slotType,
566
- fileType,
567
- silencePurposeType,
568
- addOrEditType,
569
- selectDataType,
570
- // 控制modal框
571
- visible: false,
572
- type: '',
573
- bodyStyle: {
574
- height: '500px',
575
- overflowY: 'auto'
576
- },
577
- // 表单查询方式是否禁用
578
- formQueryTypeDisabled: false,
579
- // 数据模式类型集合值
580
- dataModeArrayData: [],
581
- // 表单项
582
- item: {
583
- key: '',
584
- title: '',
585
- slot: {
586
- type: 'default'
587
- },
588
- rule: {
589
- required: 'false'
590
- },
591
- column: [],
592
- queryType: '=',
593
- formType: 'input',
594
- accept: undefined,
595
- acceptCount: 3,
596
- pathKey: undefined,
597
- selectType: undefined,
598
- selectKey: undefined,
599
- addOrEdit: 'all',
600
- fileRootPath: undefined,
601
- selectKeyName: undefined,
602
- resUploadStock: undefined,
603
- dataModeArray: []
604
- },
605
- // 数据仓库列表
606
- stockList: [],
607
- // 扩展目录
608
- lowerPath: [],
609
- parent_node: [],
610
- // 必填控制
611
- itemRules: {
612
- formType: [{ required: true, message: '请输入表单类型', trigger: 'change' }],
613
- key: [{
614
- required: true,
615
- validator: (rule, value, callback) => {
616
- // 判断必填
617
- if (!value) {
618
- callback(new Error('请输入字段名称'))
619
- } else {
620
- // 判断必须全部小写 并且不能包含空格
621
- if (value !== value.toLowerCase() || value.indexOf(' ') !== -1 && !value === '_mixinTableName_') {
622
- callback(new Error('字段名称必须全部小写,且不能包含空格'))
623
- } else {
624
- callback()
625
- }
626
- }
627
- },
628
- trigger: 'blur'
629
- }],
630
- title: [{
631
- required: true,
632
- validator: (rule, value, callback) => {
633
- // 判断必填
634
- if (!value) {
635
- callback(new Error('请输入标签名称'))
636
- } else {
637
- // // 大于8个字符给提示
638
- // if (value.length > 8) {
639
- // callback(new Error('标签名称过长,建议不超过8个字符,可能会影响展示效果'))
640
- // } else {
641
- callback()
642
- // }
643
- }
644
- },
645
- trigger: 'blur'
646
- }],
647
- selectType: [{ required: true, message: '请选择数据源类型', trigger: 'change' }],
648
- selectKey: [{ required: true, message: '请输入数据源内容', trigger: 'blur' }],
649
- 'slot.value': [{ required: true, message: '请输入文本溢出上限长度', trigger: 'blur' }],
650
- 'slot.keyMap': [{ required: true, message: '请输入徽标字典键', trigger: 'blur' }],
651
- silencePurpose: [{ required: true, message: '请选择字段用途', trigger: 'change' }],
652
- silenceSource: [{ required: true, message: '请输入业务逻辑名称', trigger: 'blur' }],
653
- resUploadStock: [{ required: true, message: '请选择上传到的仓库', trigger: 'blur' }],
654
- pathKey: [{ required: true, message: '请选择上传到的扩展目录', trigger: 'blur' }]
655
- },
656
- // 字典键集合
657
- option: [],
658
- selectIndex: null,
659
- ending: null,
660
- dragging: null,
661
- itemMap: {}
662
- }
663
- },
664
- mounted () {
665
- this.resetDataMode()
666
- },
667
- props: { },
668
- methods: {
669
- initItem (lysis = {}) {
670
- this.item = Object.assign({
671
- key: '',
672
- title: '',
673
- slot: {
674
- type: 'default'
675
- },
676
- rule: {
677
- required: 'false'
678
- },
679
- column: [],
680
- selectKey: undefined,
681
- queryType: '=',
682
- formType: 'input',
683
- acceptCount: 3,
684
- fileRootPath: undefined,
685
- pathKey: undefined,
686
- accept: undefined,
687
- selectType: undefined,
688
- addOrEdit: 'all',
689
- selectKeyName: undefined,
690
- resUploadStock: undefined,
691
- dataModeArray: []
692
- }, lysis)
693
- },
694
- // 控制 展示
695
- flashModal (show = 'None') {
696
- const bool = show === 'None' ? !this.visible : !!show
697
- if (bool && this.option.length === 0) {
698
- getDictionaryParam(true).then(res => {
699
- this.option = res
700
- })
701
- }
702
- this.visible = bool
703
- },
704
- // 编辑数据字段前准备数据
705
- editColumnItemExecute (_item) {
706
- this.type = '修改'
707
- const defaultValue = { formType: 'input', type: 'string', addOrEdit: 'all', slot: { type: 'default' }, rule: {}, selectKey: {}, column: [] }
708
- if (!_item.queryType) {
709
- defaultValue.queryType = '='
710
- }
711
- _item = Object.assign({}, defaultValue, _item)
712
- if (_item.formType === 'file' || _item.formType === 'image') {
713
- this.getStocks()
714
- // 如果有仓库 则获取该仓库的扩展路径
715
- if (_item.resUploadStock) {
716
- this.lowerPath = this.stockList.filter(item => item.id === _item.resUploadStock)[0]?.f_lower_path_json ?? []
717
- }
718
- }
719
- if (_item.selectKey && _item.selectKey.length >= 6 && _item.selectType === 'logic' && _item.selectKey.substring(0, 6) === 'logic@') {
720
- _item.selectKey = _item.selectKey.substring(6)
721
- } else if (_item.selectKey && _item.selectKey instanceof Array) {
722
- _item.selectKey = JSON.stringify(_item.selectKey)
723
- }
724
- // 兼容旧作用域插槽属性
725
- this.compatibleTheSlot(_item)
726
- this.item = _item
727
- this.dataModeArrayData = this.item.dataModeArray
728
- this.flashModal()
729
-
730
- for (const columnItem of this.item.column) {
731
- this.itemMap[columnItem.key] = Object.assign({
732
- key: '',
733
- title: '',
734
- slot: {},
735
- rule: {
736
- required: 'false'
737
- },
738
- dataModeArray: []
739
- }, columnItem)
740
- }
741
- },
742
- // 增加数据字段前数据处理
743
- addColumnItemExecute () {
744
- this.type = '新增'
745
- this.dataModeArrayData = ['queryForm', 'table', 'addOrEditForm', 'sqlQueryItem', 'sqlQueryCondition']
746
- this.initItem()
747
- this.flashModal()
748
- },
749
- modelCancel () {
750
- this.flashModal()
751
- },
752
- submitItem () {
753
- this.$refs.itemForm.validate(valid => {
754
- if (valid) {
755
- const fileBool = this.item.formType === 'file' || this.item.formType === 'image'
756
- if (this.dataModeArrayData.length === 0) {
757
- this.$message.error('请至少选择一种数据模式')
758
- return
759
- }
760
- if (!fileBool && (this.dataMode.addOrEditForm && !this.dataMode.sqlQueryItem)) {
761
- this.$message.error('如果要生成新增/修改表单项,必须勾选生成SQL查询项')
762
- return
763
- }
764
- if (fileBool && !(!this.dataMode.table && !this.dataMode.sqlQueryCondition && !this.dataMode.queryForm)) {
765
- this.$message.error(`上传类表单项只能选择 "渲染新增/修改表单项"`)
766
- return
767
- }
768
- this.itemHandle()
769
- }
770
- })
771
- },
772
- visitAcceptFile () {
773
- window.open('https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file#attr-accept')
774
- },
775
- // 修改上传到哪个仓库
776
- changeStock (stock) {
777
- if (stock) {
778
- const stockValue = this.stockList.filter(item => item.id === stock)[0]
779
- this.lowerPath = stockValue.f_lower_path_json ?? []
780
- this.item.resUploadMode = stockValue.f_stock_type
781
- this.item.fileRootPath = stockValue.f_root_path
782
- this.item.stockAlias = stockValue.f_alias
783
- this.item.pathKey = undefined
784
- }
785
- },
786
- // 文件上传限制类型修改
787
- itemAcceptChange (newVal) {
788
- if (newVal.includes('*')) {
789
- this.item.accept = ['*']
790
- }
791
- },
792
- getColumn () {
793
- let result = {}
794
- this.$emit('getColumn', val => { result = val })
795
- return result
796
- },
797
- changeFormType (item) {
798
- this.initItem({ key: item.key, title: item.title, formType: item.formType })
799
- if (item.formType === 'file' || item.formType === 'image') {
800
- this.item.acceptCount = 3
801
- this.getStocks()
802
- this.item.accept = item.formType === 'file' ? ['*'] : ['.jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,']
803
- this.item.resUploadMode = 'server'
804
- this.item.key = item.formType === 'file' ? 'FilesId' : 'Images'
805
- this.dataModeArrayData = ['addOrEditForm']
806
- } else if (item.formType === 'addressSearch') {
807
- this.dataModeArrayData = ['addOrEditForm', 'sqlQueryItem', 'table']
808
- } else {
809
- if (['FilesId', 'Images'].includes(this.item.key)) { this.item.key = '' }
810
- this.resetDataMode()
811
- // 表单查询方式有预选项时
812
- if (this.queryTypeV.length) {
813
- this.item.queryType = this.queryTypeV[0].key
814
- }
815
- }
816
- },
817
- // 获取所有仓库
818
- getStocks () {
819
- if (this.stockList.length === 0) {
820
- post('/api/af-system/logic/getFilesStock', {}).then(res => {
821
- this.stockList = res.sort((a, b) => b.progress - a.progress)
822
- }).catch(e => {})
823
- }
824
- },
825
- // 重置数据模式
826
- resetDataMode () {
827
- this.dataModeArrayData = this.dataModeTypeV.map(item => item.value).filter(h => h !== 'group')
828
- },
829
- // 数据模式改变
830
- dataModeArrayDataChange (newVal) {
831
- if (newVal.includes('mixinTableName')) {
832
- this.item.key = '_mixinTableName_'
833
- this.dataModeArrayData = ['queryForm', 'mixinTableName']
834
- } else if (this.item.key === '_mixinTableName_') {
835
- this.item.key = ''
836
- }
837
- if (newVal.includes('group')) {
838
- this.dataModeArrayData = ['sqlQueryItem', 'group']
839
- }
840
- },
841
- itemHandle () {
842
- // 查询表单项或者新增/修改表单项
843
- if (this.dataMode.queryForm || this.dataMode.addOrEditForm || this.dataMode.sqlQueryCondition) {
844
- if (!this.dataMode.sqlQueryItem || !this.dataMode.addOrEditForm) {
845
- this.delKey(this.item, 'addOrEdit', 'silencePurpose', 'silenceSource')
846
- }
847
- if (this.item.selectType && this.item.selectType === 'logic' && this.item.selectKey.substring(0, 6) !== 'logic@') {
848
- // 数据源为logic
849
- this.item.selectKey = 'logic@' + this.item.selectKey
850
- } else if (this.item.selectType && this.item.selectType === 'fixArray' && !this.isJSON(this.item.selectKey)) {
851
- // 数据源为固定json集合
852
- this.$message.warning('下拉框数据源不是JSON集合')
853
- return
854
- }
855
- } else {
856
- this.delKey(this.item, 'queryType', 'formType', 'addOrEdit', 'silencePurpose', 'silenceSource', 'placeholder', 'rule', 'selectKey', 'selectKeyName', 'lazyLoad')
857
- }
858
- // 如果和数据源字段无关
859
- if (!this.selectDataShow) {
860
- this.delKey(this.item, 'selectType', 'selectKey', 'lazyLoad', 'selectKeyName')
861
- }
862
- // 删除空的关联外键字段
863
- if (!this.item.selectKeyName) {
864
- delete this.item.selectKeyName
865
- }
866
- // 默认插槽就先删除
867
- if (this.item.slot && (this.item.slot.type === 'default' || !this.item.slot.type)) { delete this.item.slot }
868
- // 根据数据模式处理数据
869
- if (!this.dataMode.sqlQueryCondition) {
870
- delete this.item.queryType
871
- }
872
- if (!this.dataMode.sqlQueryItem) { this.delKey(this.item, 'default') }
873
- this.item.dataModeArray = this.dataModeArrayData
874
- this.$emit('itemHandle', this.item, this.type)
875
- this.initItem()
876
- this.resetDataMode()
877
- },
878
- changeSelectKType () {
879
- this.item.selectKey = undefined
880
- },
881
- changeSelectKey (item) {
882
- if (item.selectType === 'key' && item.selectKey) {
883
- this.item.slot = Object.assign({}, this.item.slot, { keyMap: item.selectKey, type: 'badge' })
884
- }
885
- },
886
- filterOption (input, option) {
887
- return (
888
- option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
889
- )
890
- },
891
- delKey (obj, ...args) {
892
- args.forEach(v => {
893
- delete obj[v]
894
- })
895
- return obj
896
- },
897
- // 判断是否为json字符串
898
- isJSON (str) {
899
- if (typeof str == 'string') {
900
- try {
901
- const obj = JSON.parse(str)
902
- return !!(typeof obj == 'object' && obj)
903
- } catch (e) {
904
- return false
905
- }
906
- }
907
- },
908
- // 兼容旧插槽函数
909
- compatibleTheSlot (_item) {
910
- if (_item.slotKeyMap) {
911
- _item.slot.keyMap = _item.slotKeyMap
912
- delete _item.slotKeyMap
913
- }
914
- if (_item.slotValue) {
915
- _item.slot.value = _item.slotValue
916
- delete _item.slotValue
917
- }
918
- if (_item.actionText) {
919
- _item.slot.actionText = _item.actionText
920
- delete _item.actionText
921
- }
922
- },
923
- // 拖拽事件
924
- handleDragStart (e, item) {
925
- this.dragging = item
926
- },
927
- handleDragEnd (e, item) {
928
- if (this.ending.key === this.dragging.key) {
929
- return
930
- }
931
- const newItems = [...this.item.column]
932
- const src = newItems.indexOf(this.dragging)
933
- const dst = newItems.indexOf(this.ending)
934
- // newItems.splice(src, 1, ...newItems.splice(dst, 1, newItems[src])) 替换位置
935
- // 挪移位置
936
- newItems.splice(src, 1)
937
- newItems.splice(dst, 0, this.dragging)
938
- this.item.column = newItems
939
- this.$nextTick(() => {
940
- this.dragging = null
941
- this.ending = null
942
- })
943
- },
944
- handleDragOver (e) {
945
- // 首先把div变成可以放置的元素,即重写dragenter/dragover
946
- // e.dataTransfer.dropEffect="move";//在dragenter中针对放置目标来设置!
947
- e.dataTransfer.dropEffect = 'move'
948
- },
949
- handleDragEnter (e, item) {
950
- // 为需要移动的元素设置dragstart事件
951
- e.dataTransfer.effectAllowed = 'move'
952
- this.ending = item
953
- },
954
- editColumnItem (key, index) {
955
- if (this.itemMap[key]) {
956
- this.selectIndex = index
957
- this.$refs.queryItem.editColumnItemExecute(this.itemMap[key])
958
- } else {
959
- this.$message.warn('编辑失败')
960
- }
961
- },
962
- removeColumnItem (key, index) {
963
- const _this = this
964
- this.$confirm({
965
- title: '您确定要删除该数据项?',
966
- content: '删除的数据项无法恢复',
967
- okText: '确定',
968
- okType: 'danger',
969
- cancelText: '取消',
970
- zIndex: 9999,
971
- onOk () {
972
- delete _this.itemMap[key]
973
- _this.item.column.splice(index, 1)
974
- }
975
- })
976
- },
977
- addColumnItem () {
978
- this.type = '新增'
979
- this.$refs.queryItem.addColumnItemExecute()
980
- },
981
- getColumnItem (callback) {
982
- callback(JSON.parse(JSON.stringify(this.item.column)))
983
- },
984
- itemHandleItem (item, type) {
985
- this.itemMap[item.key] = item
986
- if (this.type === '新增') {
987
- this.item.column.push(item)
988
- } else {
989
- this.$set(this.item.column, this.selectIndex, item)
990
- }
991
- this.$message.success(`${type}成功`)
992
- this.$refs.queryItem.flashModal(false)
993
- },
994
- }
995
- }
996
- </script>
997
- <style scoped>
998
- table th, table td {
999
- border: 1px rgba(0, 0, 0, 0.65) solid;
1000
- text-align: center;
1001
- padding: 0 10px;
1002
- }
1003
- .column_item:hover {
1004
- background-color:rgba(64, 169, 255,0.25);
1005
- }
1006
- .dragTips{
1007
- display:block;
1008
- text-align: center;
1009
- border:1px dashed rgba(64, 169, 255,0.55);
1010
- }
1011
- .dragTipsWarp{
1012
- padding: .5rem 2rem;
1013
- }
1014
- </style>
1
+ <template>
2
+ <a-modal
3
+ :destroyOnClose="true"
4
+ :visible="visible"
5
+ :width="1250"
6
+ :zIndex="1001"
7
+ title="数据字段配置"
8
+ @cancel="modelCancel"
9
+ @ok="submitItem">
10
+ <a-form-model
11
+ ref="itemForm"
12
+ :model="item"
13
+ :rules="itemRules"
14
+ layout="vertical">
15
+ <a-row :gutter="16">
16
+ <a-col :span="6">
17
+ <a-card :bodyStyle="bodyStyle" title="基本属性">
18
+ <a-divider style="font-size: 14px;margin-top: 0">字段信息</a-divider>
19
+ <a-form-model-item label="标签名称" prop="title">
20
+ <a-input v-model="item.title" placeholder="请输入标签名称"/>
21
+ </a-form-model-item>
22
+ <a-form-model-item
23
+ label="字段名称"
24
+ prop="key">
25
+ <a-input ref="key" v-model="item.key" :disabled="keyDisabled" placeholder="请输入字段名">
26
+ <a-popover slot="suffix" placement="bottom" title="关于字段名称">
27
+ <template slot="content">
28
+ <p>设置数据字段的名称</p>
29
+ <p>用作SQL查询时为<span style="font-weight: bold">表别名.数据列名</span>的格式,如:i.id</p>
30
+ <p style="font-weight: bold">注意事项:</p>
31
+ <p>由于v2和v3版本产品中一些数据字段有差异,为了增强查询配置在不同版本产品中的通用性,
32
+ 现在查询配置中的数据字段现在可以通过`$`前缀指定通用兼容名了</p>
33
+ <p>通过指定数据字段为通用兼容名,查询配置将会在解析生成SQL时根据配置的产品版本自动适配实际的字段名。</p>
34
+ <p>目前支持的兼容性字段见下表:</p>
35
+ <table>
36
+ <thead>
37
+ <tr><th>数据表</th><th>字段含义</th><th>v2产品</th><th>v3产品</th><th>通用兼容名</th></tr>
38
+ </thead>
39
+ <tbody>
40
+ <tr><td>t_userfiles</td><td>表档案主键</td><td>f_user_id</td><td>f_userfiles_id</td><td>$userid</td></tr>
41
+ </tbody>
42
+ </table>
43
+ </template>
44
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
45
+ </a-popover>
46
+ </a-input>
47
+ </a-form-model-item>
48
+ <a-form-model-item
49
+ v-if="item.formType ==='addressSearch'"
50
+ label="坐标字段名">
51
+ <a-input :disabled="true" :value="`${item.key}_lng_lat`">
52
+ <a-popover slot="suffix" placement="bottom" title="坐标字段名">
53
+ <template slot="content">
54
+ <p>表单类型为地点搜索框时:</p>
55
+ <p>新增/修改表单时,字段名称会存放地址名称,坐标字段名会存放坐标信息</p>
56
+ </template>
57
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
58
+ </a-popover>
59
+ </a-input>
60
+ </a-form-model-item>
61
+ <a-divider style="font-size: 14px;margin-top: 0">数据模式</a-divider>
62
+ <a-form-model-item
63
+ prop="dataMode"
64
+ style="margin-top: 10px;">
65
+ <a-checkbox-group v-model="dataModeArrayData" :disabled="dataModeDisabled" @change="dataModeArrayDataChange" :options="dataModeTypeV"/>
66
+ </a-form-model-item>
67
+ </a-card>
68
+ </a-col>
69
+ <a-col v-show="!dataMode.group && (dataMode.queryForm || dataMode.addOrEditForm || dataMode.table || dataMode.sqlQueryCondition)" :span="9">
70
+ <a-card v-if="dataMode.queryForm || dataMode.addOrEditForm || dataMode.table || dataMode.sqlQueryCondition" :bodyStyle="bodyStyle" title="核心配置">
71
+ <template v-if="dataMode.queryForm || dataMode.addOrEditForm || dataMode.sqlQueryCondition">
72
+ <a-divider style="font-size: 14px;margin-top: 0">表单配置</a-divider>
73
+ <a-form-model-item label="表单类型" prop="formType">
74
+ <a-select v-model="item.formType" placeholder="请选择表单类型" @change="changeFormType(item)">
75
+ <a-select-option v-for="formTypeItem in formType" :key="formTypeItem.key">{{ formTypeItem.label }}</a-select-option>
76
+ </a-select>
77
+ </a-form-model-item>
78
+ <a-form-model-item v-if="dataMode.sqlQueryCondition && item.formType !=='file' && item.formType !=='image' " label="表单查询方式" prop="queryType">
79
+ <a-select
80
+ v-model="item.queryType"
81
+ :disabled="formQueryTypeDisabled"
82
+ :getPopupContainer=" triggerNode => { return triggerNode.parentNode } "
83
+ placeholder="表单查询方式">
84
+ <a-select-option v-for="queryTypeItem in queryTypeV" :key="queryTypeItem.key">{{ queryTypeItem.label }}</a-select-option>
85
+ </a-select>
86
+ </a-form-model-item>
87
+ <template v-if="item.formType">
88
+ <a-form-model-item v-if="dataMode.addOrEditForm || dataMode.queryForm" label="表单校验" prop="rule">
89
+ <a-row :gutter="16">
90
+ <a-col v-if="(item.formType === 'input' || item.formType === 'textarea' ) && item.formType !=='file' && item.formType !=='image' " :span="12" >
91
+ <a-select v-model="item.rule.type" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="校验类型">
92
+ <a-select-option v-for="ruleTypeItem in formRuleType" :key="ruleTypeItem.key">{{ ruleTypeItem.label }}</a-select-option>
93
+ <a-popover slot="suffixIcon" placement="bottom" title="关于表单校验类型">
94
+ <template slot="content">
95
+ <p>设置表单项的校验类型</p>
96
+ </template>
97
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
98
+ </a-popover>
99
+ </a-select>
100
+ </a-col>
101
+ <a-col :span="12">
102
+ <a-radio-group v-model="item.rule.required" button-style="solid" default-value="false">
103
+ <a-radio-button value="true">
104
+ 必选项
105
+ </a-radio-button>
106
+ <a-radio-button value="false">
107
+ 非必选项
108
+ </a-radio-button>
109
+ </a-radio-group>
110
+ </a-col>
111
+ </a-row>
112
+ </a-form-model-item>
113
+ <a-form-model-item v-if="dataMode.addOrEditForm" label="新增/修改场景选择" prop="addOrEdit">
114
+ <a-select v-model="item.addOrEdit" placeholder="请选择场景">
115
+ <a-select-option v-for="addOrEditItem in addOrEditTypeV" :key="addOrEditItem.key">{{ addOrEditItem.label }}</a-select-option>
116
+ <a-popover
117
+ slot="suffixIcon"
118
+ placement="bottom"
119
+ title="关于新增/修改场景选择">
120
+ <template slot="content">
121
+ <p>设置表单项的新增/修改场景</p>
122
+ <p>静默新增类型用于非人为新增的数据,不会生成表单项,且必须设置字段用途</p>
123
+ </template>
124
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
125
+ </a-popover>
126
+ </a-select>
127
+ </a-form-model-item>
128
+ <a-form-model-item v-if="item.addOrEdit === 'silenceAdd'" label="字段用途" prop="silencePurpose">
129
+ <a-select v-model="item.silencePurpose" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="请选择字段用途">
130
+ <a-select-option v-for="silencePurposeTypeItem in silencePurposeType" :key="silencePurposeTypeItem.key">{{ silencePurposeTypeItem.label }}</a-select-option>
131
+ <a-popover
132
+ slot="suffixIcon"
133
+ placement="bottom"
134
+ title="关于字段用途">
135
+ <template slot="content">
136
+ <p>用于静默新增时设置字段用途</p>
137
+ <p>在新增数据的表单提交时,页面会根据设置的字段用途自动获取相关数据并追加到表单中</p>
138
+ <p>当字段用途选择为<span style="font-weight: bold">自定义</span>时,必须指定一个业务逻辑(Logic)名称,表单提交前会将表单内容作为参数调用该Logic接口,并将Logic返回值作为表单值
139
+ </p>
140
+ </template>
141
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
142
+ </a-popover>
143
+ </a-select>
144
+ </a-form-model-item>
145
+ <a-form-model-item v-if="item.silencePurpose === 'customize'" label="字段用途对应Logic" prop="silenceSource">
146
+ <a-input v-model="item.silenceSource" placeholder="请输入业务逻辑名称"/>
147
+ </a-form-model-item>
148
+ </template>
149
+ </template>
150
+ <template v-if="dataMode.table">
151
+ <a-divider style="font-size: 14px;margin-top: 0">表格列配置</a-divider>
152
+ <a-form-model-item v-if="item.formType" label="作用域插槽" prop="slot">
153
+ <a-select v-model="item.slot.type" :disabled="slotTypeDisabled" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } " placeholder="插槽类型">
154
+ <a-select-option v-for="slotTypeItem in slotTypeV" :key="slotTypeItem.key">{{ slotTypeItem.label }}</a-select-option>
155
+ <a-popover slot="suffixIcon" placement="bottom" title="关于作用域插槽">
156
+ <template slot="content">
157
+ <p>你可以通过设置表格列的作用域插槽实现一些效果</p>
158
+ <p>如果没有指定,默认会设置为文本溢出省略(长度:16)</p>
159
+ <p>如果你选择文本溢出省略,需要设置文本溢出上限长度,建议ID主键等类型设置为8</p>
160
+ <p>如果你选择多彩徽标,需要设置徽标对应的数据样式字典键</p>
161
+ <a-divider style="font-size: 14px;margin-top: 0">关于表格列宽度</a-divider>
162
+ <p>V1.1之后不再支持自定义表格列宽度,表格列宽度将通过作用域插槽类型自适应</p>
163
+ <p>设置为文本溢出省略时,表格列宽度 = 文本溢出上限长度 * 7 + 42</p>
164
+ <p>设置为多彩徽标时,表格列宽度为130</p>
165
+ <p>设置为日期时间格式化时,表格列宽度为160</p>
166
+ </template>
167
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
168
+ </a-popover>
169
+ </a-select>
170
+ </a-form-model-item>
171
+ <a-form-model-item v-if="item.slot.type === 'badge'" label="徽标字典键" prop="slot.keyMap">
172
+ <a-input v-model="item.slot.keyMap" :disabled="slotTypeDisabled" placeholder="请输入徽标字典键">
173
+ <a-popover
174
+ slot="suffix"
175
+ placement="bottom"
176
+ title="关于徽标字典键">
177
+ <template slot="content">
178
+ <p>如果你设置了表单类型为选择框,且数据源是字典键,该值会自动带出</p>
179
+ </template>
180
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
181
+ </a-popover>
182
+ </a-input>
183
+ </a-form-model-item>
184
+ <a-form-model-item v-if="item.slot.type === 'ellipsis'" label="文本溢出上限长度" prop="slot.value">
185
+ <a-input-number v-model="item.slot.value" placeholder="请输入文本溢出上限长度" style="width: 100%"/>
186
+ </a-form-model-item>
187
+ <a-form-model-item v-if="item.slot.type === 'action'" label="操作列文本" prop="slot.actionText">
188
+ <a-input v-model="item.slot.actionText" placeholder="请输入操作列显示文本,默认为详情"/>
189
+ </a-form-model-item>
190
+ <a-form-model-item v-if="dataMode.sqlQueryItem || dataMode.sqlQueryCondition" label="字段默认值" prop="default">
191
+ <a-input v-model="item.default" placeholder="当查询结果为null时,指定默认值"/>
192
+ </a-form-model-item>
193
+ </template>
194
+ </a-card>
195
+ </a-col>
196
+ <a-col v-if="!dataMode.group && item.formType && (((dataMode.addOrEditForm || dataMode.queryForm ) && (item.formType === 'input' || item.formType === 'select')) || (dataMode.table && item.formType !== 'file' && item.formType !== 'image') || selectDataShow)" :span="9">
197
+ <a-card :bodyStyle="bodyStyle" title="扩展属性">
198
+ <template v-if="(dataMode.addOrEditForm || dataMode.queryForm ) && (item.formType === 'input' || item.formType === 'select')">
199
+ <a-divider style="font-size: 14px;margin-top: 0">提示相关</a-divider>
200
+ <a-form-model-item label="表单水印" prop="placeholder">
201
+ <a-input v-model="item.placeholder" placeholder="表单水印(placeholder)" />
202
+ </a-form-model-item>
203
+ </template>
204
+ <template v-if="selectDataShow">
205
+ <a-divider style="font-size: 14px;margin-top: 0">数据源相关</a-divider>
206
+ <a-form-model-item label="数据源类型" prop="selectType">
207
+ <a-select v-model="item.selectType" placeholder="请选择数据源类型" @change="changeSelectKType">
208
+ <a-select-option v-for="selectDataTypeItem in selectDataType.filter(h=>!h.noMatch.includes(item.formType))" :key="selectDataTypeItem.key">{{ selectDataTypeItem.label }}</a-select-option>
209
+ <a-popover
210
+ slot="suffixIcon"
211
+ placement="bottom"
212
+ title="关于数据源类型">
213
+ <template slot="content">
214
+ <p>设置数据源</p>
215
+ <p>数据源类型分为三种,你可以根据需要选择</p>
216
+ <p>字典键:选项从字典表(t_dictionary)获取,你只需要选择字典键的名称即可</p>
217
+ <p>业务逻辑名称:选项通过发起http请求调用指定的业务逻辑(Logic)接口获取</p>
218
+ <p>固定集合:选项为静态值,JSONArray格式</p>
219
+ <p>当表单为树形选择框类型时,返回的数据需按照以下形式:</p>
220
+ <json-viewer
221
+ :expand-depth="parseInt('100')"
222
+ :value="DemoJson"
223
+ style="overflow: auto;max-height: 440px"></json-viewer>
224
+ </template>
225
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
226
+ </a-popover>
227
+ </a-select>
228
+ </a-form-model-item>
229
+ <a-form-model-item v-if="item.selectType" label="数据源" prop="selectKey">
230
+ <a-select
231
+ v-if="item.selectType === 'key'"
232
+ v-model="item.selectKey"
233
+ :filter-option="filterOption"
234
+ placeholder="请选择字典键"
235
+ show-search
236
+ @change="changeSelectKey(item)">
237
+ <template>
238
+ <a-select-option
239
+ v-for="(optionItem,index) in option"
240
+ :key="index"
241
+ :value="Object.keys(optionItem)[0]">{{ optionItem[Object.keys(optionItem)[0]] }}
242
+ </a-select-option>
243
+ </template>
244
+ </a-select>
245
+ <a-input v-if="item.selectType === 'logic'" v-model="item.selectKey" placeholder="请输入业务逻辑名称"/>
246
+ <a-textarea v-if="item.selectType === 'fixArray'" v-model="item.selectKey" placeholder="请录入数据源"/>
247
+ </a-form-model-item>
248
+ <a-form-model-item v-if="item.selectType === 'logic'" label="数据源加载方式" prop="selectLoadType">
249
+ <a-radio-group v-model="item.lazyLoad" button-style="solid" default-value="false">
250
+ <a-radio-button value="true">
251
+ {{ item.formType === 'treeSelect' ? '异步加载节点' : '懒加载搜索' }}
252
+ </a-radio-button>
253
+ <a-radio-button value="false">
254
+ 一次性加载
255
+ </a-radio-button>
256
+ </a-radio-group>
257
+ </a-form-model-item>
258
+ <a-form-model-item label="关联外键字段" prop="selectKeyName">
259
+ <a-input v-model="item.selectKeyName" placeholder="该列关联的外键字段">
260
+ <a-popover slot="suffix" placement="bottom" title="关于关联外键字段">
261
+ <template slot="content">
262
+ <p><span style="font-weight: bold;"><span style="color: #FF0036">非必需的实验性功能:</span>设置该参数需开发岗指导</span></p>
263
+ <p>当字段与主子表外键有关系时,你可以指定<span style="font-weight: bold">该列所关联的外键字段名</span>
264
+ </p>
265
+ <p>设置该参数是为了该字段用作表单查询时,系统可以通过设置的关联外键字段,而非字面值作为查询条件</p>
266
+ <p>示例:</p>
267
+ <p>主表为t_userfiles(表档案)表,别名为u,与t_gasbrand(气表品牌表)有关联关系,别名为g,为了显示表档案对应的气表品牌数据,我们将数据字段名设置为g.f_gasbrand</p>
268
+ <p>这样我们就可以在table中看到气表品牌了,但是用户如果通过气表品牌下拉框进行筛选,我们指定的g.f_gasbrand只是气表品牌的值,而实际关联字段是u.f_gasbrand_id</p>
269
+ <p>所以如果我们指定了关联外键字段u.f_gasbrand_id,系统则会使用u.f_gasbrand_id筛选数据,而不是g.f_gasbrand,从而优化了查询效率
270
+ </p>
271
+ </template>
272
+ <a-icon style="color: rgba(0,0,0,.45)" type="info-circle"/>
273
+ </a-popover>
274
+ </a-input>
275
+ </a-form-model-item>
276
+ </template>
277
+ <template v-if="item.formType === 'file' || item.formType === 'image'">
278
+ <a-divider style="font-size: 14px;margin-top: 0">文件上传相关</a-divider>
279
+ <a-form-model-item label="允许上传文件数量" prop="accept" style="margin-bottom: 5px;">
280
+ <a-slider
281
+ v-model="item.acceptCount"
282
+ :marks="{ 1: '1', 3: '3', 5: '5', 10: '10', 15: '15', 20: '20'}"
283
+ :max="20"
284
+ :min="1"
285
+ />
286
+ </a-form-model-item>
287
+ <a-form-model-item label="附件用途" prop="useType">
288
+ <a-select v-model="item.useType" placeholder="指定文件用途,同表单不同用途">
289
+ <a-select-option v-for="userTypeItem in $appdata.getDictionaryList('useType')" :key="userTypeItem.value">{{ userTypeItem.value }}</a-select-option>
290
+ </a-select>
291
+ </a-form-model-item>
292
+ <a-form-model-item label="上传的仓库" prop="resUploadStock">
293
+ <a-select v-model="item.resUploadStock" placeholder="选择文件上传到的仓库" @change="changeStock">
294
+ <a-select-option v-for="stock in stockList" :key="stock.id">{{ stock.f_name }}</a-select-option>
295
+ </a-select>
296
+ </a-form-model-item>
297
+ <a-form-model-item v-if="item.resUploadStock" label="具体路径" prop="pathKey">
298
+ <a-select v-model="item.pathKey" placeholder="仓库扩展路径">
299
+ <a-select-option v-for="pathKey in lowerPath" :key="pathKey.label">{{ pathKey.label }}</a-select-option>
300
+ </a-select>
301
+ </a-form-model-item>
302
+ <a-form-model-item v-if="item.formType === 'file'" label="允许上传文件类型" prop="accept">
303
+ <a-select v-model="item.accept" mode="tags" placeholder="指定文件类型,默认不限制" @change="itemAcceptChange">
304
+ <a-select-option v-for="type_item in fileType" :key="type_item.accept">{{ type_item.label }}</a-select-option>
305
+ </a-select>
306
+ </a-form-model-item>
307
+ </template>
308
+ </a-card>
309
+ </a-col>
310
+ <a-col :span="18" v-if="dataMode.group">
311
+ <a-card :bodyStyle="bodyStyle" title="数据字段">
312
+ <a-button type="primary" slot="extra" @click="addColumnItem()">增加</a-button>
313
+ <a-row :gutter="24">
314
+ <a-col :span="7">
315
+ <span style="font-weight: bold">
316
+ 标签名
317
+ </span>
318
+ </a-col>
319
+ <a-col :span="7">
320
+ <span style="font-weight: bold">
321
+ 字段名
322
+ </span>
323
+ </a-col>
324
+ <a-col :span="8">
325
+ <span style="font-weight: bold">
326
+ 数据模式
327
+ </span>
328
+ </a-col>
329
+ <a-col :span="2">
330
+ <span style="font-weight: bold">
331
+ 操作
332
+ </span>
333
+ </a-col>
334
+ </a-row>
335
+ <a-divider style="margin: 6px 0" />
336
+ <div
337
+ v-for="(columnItem, index) in item.column"
338
+ :key="index"
339
+ draggable="true"
340
+ @dragend="handleDragEnd($event, columnItem)"
341
+ @dragenter="handleDragEnter($event, columnItem)"
342
+ @dragstart="handleDragStart($event, columnItem)"
343
+ @dragover.prevent="handleDragOver($event, columnItem)">
344
+ <a-row v-if="ending && dragging && columnItem.key === ending.key && dragging.key !== ending.key" class="dragTipsWarp">
345
+ <span class="dragTips">拖到此处放置</span>
346
+ </a-row>
347
+ <a-row :gutter="24" class="column_item dragTipsWarp">
348
+ <a-col :span="7">
349
+ <span style="font-weight: bold">
350
+ {{ columnItem.title }}
351
+ </span>
352
+ </a-col>
353
+ <a-col :span="7">
354
+ <span style="font-weight: bold">
355
+ {{ columnItem.key }}
356
+ </span>
357
+ </a-col>
358
+ <a-col :span="8">
359
+ <a-tooltip>
360
+ <template slot="title">
361
+ 查询表单项
362
+ </template>
363
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('queryForm') ? 'blue' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="file-search" /></a-tag>
364
+ </a-tooltip>
365
+ <a-tooltip>
366
+ <template slot="title">
367
+ 表格列
368
+ </template>
369
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('table') ? 'orange' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="table" /></a-tag>
370
+ </a-tooltip>
371
+ <a-tooltip>
372
+ <template slot="title">
373
+ 新增/修改表单项
374
+ </template>
375
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('addOrEditForm') ? 'green' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="form" /></a-tag>
376
+ </a-tooltip>
377
+ <a-tooltip>
378
+ <template slot="title">
379
+ SQL查询项
380
+ </template>
381
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('sqlQueryItem') ? 'cyan' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="bars" /></a-tag>
382
+ </a-tooltip>
383
+ <a-tooltip>
384
+ <template slot="title">
385
+ SQL查询表达式
386
+ </template>
387
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('sqlQueryCondition') ? 'purple' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="search" /></a-tag>
388
+ </a-tooltip>
389
+ <a-tooltip>
390
+ <template slot="title">
391
+ Excel导入项
392
+ </template>
393
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('excelImportItem') ? '#107C41' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="file-excel" /></a-tag>
394
+ </a-tooltip>
395
+ <a-tooltip>
396
+ <template slot="title">
397
+ 数据组
398
+ </template>
399
+ <a-tag :color="columnItem.dataModeArray && columnItem.dataModeArray.includes('group') ? '#82A0D8' : 'rgba(0, 0, 0, 0.25)'"><a-icon type="crown" /></a-tag>
400
+ </a-tooltip>
401
+ </a-col>
402
+ <a-col :span="1">
403
+ <a-icon type="edit" @click="editColumnItem(columnItem.key,index)"/>
404
+ </a-col>
405
+ <a-col :span="1">
406
+ <a-icon type="close" @click="removeColumnItem(columnItem.key,index)"/>
407
+ </a-col>
408
+ </a-row>
409
+ </div>
410
+ </a-card>
411
+ </a-col>
412
+ </a-row>
413
+ <a-alert
414
+ v-if="dataModeArrayData.length === 0"
415
+ message="错误:请至少选择一种数据模式"
416
+ show-icon
417
+ style="margin-top: 5px"
418
+ type="error"/>
419
+ <a-alert
420
+ v-if="dataMode.addOrEditForm && !dataMode.sqlQueryItem && item.formType !== 'file' && item.formType !== 'image'"
421
+ message="错误:如果要生成新增/修改表单项,必须勾选生成SQL查询项"
422
+ show-icon
423
+ style="margin-top: 5px"
424
+ type="error"/>
425
+ <a-alert
426
+ v-if="dataMode.queryForm && !dataMode.sqlQueryCondition"
427
+ message="提示:您没有勾选生成SQL查询表达式,渲染的表单项不会生成SQL查询条件"
428
+ show-icon
429
+ style="margin-top: 5px"
430
+ type="info"/>
431
+ <a-alert
432
+ v-if="dataMode.table && !dataMode.sqlQueryItem"
433
+ message="提示:您没有勾选生成SQL查询项,渲染的表格列不会绑定SQL结果集数据"
434
+ show-icon
435
+ style="margin-top: 5px"
436
+ type="info"/>
437
+ <a-alert
438
+ v-if="item.title.length > 8"
439
+ message="提示:标签名称过长可能会影响表格列展示效果,建议不超过8个字符"
440
+ show-icon
441
+ style="margin-top: 5px"
442
+ type="warning"/>
443
+ </a-form-model>
444
+ <create-query-item ref="queryItem" @getColumn="getColumnItem" @itemHandle="itemHandleItem"/>
445
+ </a-modal>
446
+ </template>
447
+
448
+ <script>
449
+ import {
450
+ dataModeType,
451
+ fileType,
452
+ formRuleType,
453
+ formType,
454
+ queryType,
455
+ slotType,
456
+ silencePurposeType,
457
+ addOrEditType,
458
+ selectDataType
459
+ } from '@vue2-client/config/CreateQueryConfig'
460
+ import { post } from '@vue2-client/services/api'
461
+ import JsonViewer from 'vue-json-viewer'
462
+ import { getDictionaryParam } from '@vue2-client/services/api/common'
463
+
464
+ const DemoJson = [{
465
+ value: 'zhejiang',
466
+ label: 'Zhejiang',
467
+ children: [{ value: 'hangzhou', label: 'Hangzhou', children: [{ value: 'xihu', label: 'West Lake' }] }]
468
+ }]
469
+
470
+ export default {
471
+ name: 'CreateQueryItem',
472
+ components: {
473
+ JsonViewer
474
+ },
475
+ computed: {
476
+ // 是否展示数据源相关字段
477
+ selectDataShow () {
478
+ return this.item.formType === 'select' || this.item.formType === 'checkbox' || this.item.formType === 'radio' || this.item.formType === 'treeSelect'
479
+ },
480
+ // 作用域插槽是否禁用
481
+ slotTypeDisabled () {
482
+ return this.item.selectKey && this.item.selectType === 'key'
483
+ },
484
+ // 字段名称是否禁用
485
+ keyDisabled () {
486
+ return this.item.formType === 'file' || this.item.formType === 'image' || this.dataMode.mixinTableName
487
+ },
488
+ // 数据模式是否禁用
489
+ dataModeDisabled () {
490
+ return this.item.formType === 'file' || this.item.formType === 'image' || this.item.formType === 'addressSearch'
491
+ },
492
+ dataMode: function () {
493
+ const result = {
494
+ queryForm: false,
495
+ table: false,
496
+ addOrEditForm: false,
497
+ sqlQueryItem: false,
498
+ sqlQueryCondition: false,
499
+ excelImportItem: false,
500
+ group: false,
501
+ mixinTableName: false
502
+ }
503
+ for (const item of this.dataModeArrayData) {
504
+ result[item] = true
505
+ }
506
+ return result
507
+ },
508
+ queryTypeV () {
509
+ return queryType.filter(item => {
510
+ return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
511
+ })
512
+ },
513
+ dataModeTypeV () {
514
+ if (this.dataModeArrayData.includes('group')) {
515
+ return [{
516
+ label: 'SQL生成查询项',
517
+ value: 'sqlQueryItem',
518
+ noMatch: ['file', 'personSetting']
519
+ }, {
520
+ label: '字段组存储',
521
+ value: 'group',
522
+ noMatch: []
523
+ }]
524
+ }
525
+ if (this.dataModeArrayData.includes('mixinTableName')) {
526
+ return [
527
+ {
528
+ label: '渲染查询表单项',
529
+ value: 'queryForm',
530
+ noMatch: ['file', 'image', 'textarea', 'personSetting']
531
+ },
532
+ {
533
+ label: '动态表名参数',
534
+ value: 'mixinTableName',
535
+ noMatch: []
536
+ }
537
+ ]
538
+ }
539
+ if (this.item.formType) {
540
+ return dataModeType.filter(item => {
541
+ return item.noMatch.findIndex(type => type === this.item.formType) === -1
542
+ })
543
+ } else {
544
+ return dataModeType
545
+ }
546
+ },
547
+ slotTypeV () {
548
+ return slotType.filter(item => {
549
+ return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
550
+ })
551
+ },
552
+ addOrEditTypeV () {
553
+ return addOrEditType.filter(item => {
554
+ return item.match.findIndex(type => type === this.item.formType || type === 'all') > -1
555
+ })
556
+ }
557
+ },
558
+ data () {
559
+ return {
560
+ DemoJson,
561
+ dataModeType,
562
+ queryType,
563
+ formType,
564
+ formRuleType,
565
+ slotType,
566
+ fileType,
567
+ silencePurposeType,
568
+ addOrEditType,
569
+ selectDataType,
570
+ // 控制modal框
571
+ visible: false,
572
+ type: '',
573
+ bodyStyle: {
574
+ height: '500px',
575
+ overflowY: 'auto'
576
+ },
577
+ // 表单查询方式是否禁用
578
+ formQueryTypeDisabled: false,
579
+ // 数据模式类型集合值
580
+ dataModeArrayData: [],
581
+ // 表单项
582
+ item: {
583
+ key: '',
584
+ title: '',
585
+ slot: {
586
+ type: 'default'
587
+ },
588
+ rule: {
589
+ required: 'false'
590
+ },
591
+ column: [],
592
+ queryType: '=',
593
+ formType: 'input',
594
+ accept: undefined,
595
+ acceptCount: 3,
596
+ pathKey: undefined,
597
+ selectType: undefined,
598
+ selectKey: undefined,
599
+ addOrEdit: 'all',
600
+ fileRootPath: undefined,
601
+ selectKeyName: undefined,
602
+ resUploadStock: undefined,
603
+ dataModeArray: []
604
+ },
605
+ // 数据仓库列表
606
+ stockList: [],
607
+ // 扩展目录
608
+ lowerPath: [],
609
+ parent_node: [],
610
+ // 必填控制
611
+ itemRules: {
612
+ formType: [{ required: true, message: '请输入表单类型', trigger: 'change' }],
613
+ key: [{
614
+ required: true,
615
+ validator: (rule, value, callback) => {
616
+ // 判断必填
617
+ if (!value) {
618
+ callback(new Error('请输入字段名称'))
619
+ } else {
620
+ // 判断必须全部小写 并且不能包含空格
621
+ if (value !== value.toLowerCase() || value.indexOf(' ') !== -1 && !value === '_mixinTableName_') {
622
+ callback(new Error('字段名称必须全部小写,且不能包含空格'))
623
+ } else {
624
+ callback()
625
+ }
626
+ }
627
+ },
628
+ trigger: 'blur'
629
+ }],
630
+ title: [{
631
+ required: true,
632
+ validator: (rule, value, callback) => {
633
+ // 判断必填
634
+ if (!value) {
635
+ callback(new Error('请输入标签名称'))
636
+ } else {
637
+ // // 大于8个字符给提示
638
+ // if (value.length > 8) {
639
+ // callback(new Error('标签名称过长,建议不超过8个字符,可能会影响展示效果'))
640
+ // } else {
641
+ callback()
642
+ // }
643
+ }
644
+ },
645
+ trigger: 'blur'
646
+ }],
647
+ selectType: [{ required: true, message: '请选择数据源类型', trigger: 'change' }],
648
+ selectKey: [{ required: true, message: '请输入数据源内容', trigger: 'blur' }],
649
+ 'slot.value': [{ required: true, message: '请输入文本溢出上限长度', trigger: 'blur' }],
650
+ 'slot.keyMap': [{ required: true, message: '请输入徽标字典键', trigger: 'blur' }],
651
+ silencePurpose: [{ required: true, message: '请选择字段用途', trigger: 'change' }],
652
+ silenceSource: [{ required: true, message: '请输入业务逻辑名称', trigger: 'blur' }],
653
+ resUploadStock: [{ required: true, message: '请选择上传到的仓库', trigger: 'blur' }],
654
+ pathKey: [{ required: true, message: '请选择上传到的扩展目录', trigger: 'blur' }]
655
+ },
656
+ // 字典键集合
657
+ option: [],
658
+ selectIndex: null,
659
+ ending: null,
660
+ dragging: null,
661
+ itemMap: {}
662
+ }
663
+ },
664
+ mounted () {
665
+ this.resetDataMode()
666
+ },
667
+ props: { },
668
+ methods: {
669
+ initItem (lysis = {}) {
670
+ this.item = Object.assign({
671
+ key: '',
672
+ title: '',
673
+ slot: {
674
+ type: 'default'
675
+ },
676
+ rule: {
677
+ required: 'false'
678
+ },
679
+ column: [],
680
+ selectKey: undefined,
681
+ queryType: '=',
682
+ formType: 'input',
683
+ acceptCount: 3,
684
+ fileRootPath: undefined,
685
+ pathKey: undefined,
686
+ accept: undefined,
687
+ selectType: undefined,
688
+ addOrEdit: 'all',
689
+ selectKeyName: undefined,
690
+ resUploadStock: undefined,
691
+ dataModeArray: []
692
+ }, lysis)
693
+ },
694
+ // 控制 展示
695
+ flashModal (show = 'None') {
696
+ const bool = show === 'None' ? !this.visible : !!show
697
+ if (bool && this.option.length === 0) {
698
+ getDictionaryParam(true).then(res => {
699
+ this.option = res
700
+ })
701
+ }
702
+ this.visible = bool
703
+ },
704
+ // 编辑数据字段前准备数据
705
+ editColumnItemExecute (_item) {
706
+ this.type = '修改'
707
+ const defaultValue = { formType: 'input', type: 'string', addOrEdit: 'all', slot: { type: 'default' }, rule: {}, selectKey: {}, column: [] }
708
+ if (!_item.queryType) {
709
+ defaultValue.queryType = '='
710
+ }
711
+ _item = Object.assign({}, defaultValue, _item)
712
+ if (_item.formType === 'file' || _item.formType === 'image') {
713
+ this.getStocks()
714
+ // 如果有仓库 则获取该仓库的扩展路径
715
+ if (_item.resUploadStock) {
716
+ this.lowerPath = this.stockList.filter(item => item.id === _item.resUploadStock)[0]?.f_lower_path_json ?? []
717
+ }
718
+ }
719
+ if (_item.selectKey && _item.selectKey.length >= 6 && _item.selectType === 'logic' && _item.selectKey.substring(0, 6) === 'logic@') {
720
+ _item.selectKey = _item.selectKey.substring(6)
721
+ } else if (_item.selectKey && _item.selectKey instanceof Array) {
722
+ _item.selectKey = JSON.stringify(_item.selectKey)
723
+ }
724
+ // 兼容旧作用域插槽属性
725
+ this.compatibleTheSlot(_item)
726
+ this.item = _item
727
+ this.dataModeArrayData = this.item.dataModeArray
728
+ this.flashModal()
729
+
730
+ for (const columnItem of this.item.column) {
731
+ this.itemMap[columnItem.key] = Object.assign({
732
+ key: '',
733
+ title: '',
734
+ slot: {},
735
+ rule: {
736
+ required: 'false'
737
+ },
738
+ dataModeArray: []
739
+ }, columnItem)
740
+ }
741
+ },
742
+ // 增加数据字段前数据处理
743
+ addColumnItemExecute () {
744
+ this.type = '新增'
745
+ this.dataModeArrayData = ['queryForm', 'table', 'addOrEditForm', 'sqlQueryItem', 'sqlQueryCondition']
746
+ this.initItem()
747
+ this.flashModal()
748
+ },
749
+ modelCancel () {
750
+ this.flashModal()
751
+ },
752
+ submitItem () {
753
+ this.$refs.itemForm.validate(valid => {
754
+ if (valid) {
755
+ const fileBool = this.item.formType === 'file' || this.item.formType === 'image'
756
+ if (this.dataModeArrayData.length === 0) {
757
+ this.$message.error('请至少选择一种数据模式')
758
+ return
759
+ }
760
+ if (!fileBool && (this.dataMode.addOrEditForm && !this.dataMode.sqlQueryItem)) {
761
+ this.$message.error('如果要生成新增/修改表单项,必须勾选生成SQL查询项')
762
+ return
763
+ }
764
+ if (fileBool && !(!this.dataMode.table && !this.dataMode.sqlQueryCondition && !this.dataMode.queryForm)) {
765
+ this.$message.error(`上传类表单项只能选择 "渲染新增/修改表单项"`)
766
+ return
767
+ }
768
+ this.itemHandle()
769
+ }
770
+ })
771
+ },
772
+ visitAcceptFile () {
773
+ window.open('https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input/file#attr-accept')
774
+ },
775
+ // 修改上传到哪个仓库
776
+ changeStock (stock) {
777
+ if (stock) {
778
+ const stockValue = this.stockList.filter(item => item.id === stock)[0]
779
+ this.lowerPath = stockValue.f_lower_path_json ?? []
780
+ this.item.resUploadMode = stockValue.f_stock_type
781
+ this.item.fileRootPath = stockValue.f_root_path
782
+ this.item.stockAlias = stockValue.f_alias
783
+ this.item.pathKey = undefined
784
+ }
785
+ },
786
+ // 文件上传限制类型修改
787
+ itemAcceptChange (newVal) {
788
+ if (newVal.includes('*')) {
789
+ this.item.accept = ['*']
790
+ }
791
+ },
792
+ getColumn () {
793
+ let result = {}
794
+ this.$emit('getColumn', val => { result = val })
795
+ return result
796
+ },
797
+ changeFormType (item) {
798
+ this.initItem({ key: item.key, title: item.title, formType: item.formType })
799
+ if (item.formType === 'file' || item.formType === 'image') {
800
+ this.item.acceptCount = 3
801
+ this.getStocks()
802
+ this.item.accept = item.formType === 'file' ? ['*'] : ['.jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,']
803
+ this.item.resUploadMode = 'server'
804
+ this.item.key = item.formType === 'file' ? 'FilesId' : 'Images'
805
+ this.dataModeArrayData = ['addOrEditForm']
806
+ } else if (item.formType === 'addressSearch') {
807
+ this.dataModeArrayData = ['addOrEditForm', 'sqlQueryItem', 'table']
808
+ } else {
809
+ if (['FilesId', 'Images'].includes(this.item.key)) { this.item.key = '' }
810
+ this.resetDataMode()
811
+ // 表单查询方式有预选项时
812
+ if (this.queryTypeV.length) {
813
+ this.item.queryType = this.queryTypeV[0].key
814
+ }
815
+ }
816
+ },
817
+ // 获取所有仓库
818
+ getStocks () {
819
+ if (this.stockList.length === 0) {
820
+ post('/api/af-system/logic/getFilesStock', {}).then(res => {
821
+ this.stockList = res.sort((a, b) => b.progress - a.progress)
822
+ }).catch(e => {})
823
+ }
824
+ },
825
+ // 重置数据模式
826
+ resetDataMode () {
827
+ this.dataModeArrayData = this.dataModeTypeV.map(item => item.value).filter(h => h !== 'group')
828
+ },
829
+ // 数据模式改变
830
+ dataModeArrayDataChange (newVal) {
831
+ if (newVal.includes('mixinTableName')) {
832
+ this.item.key = '_mixinTableName_'
833
+ this.dataModeArrayData = ['queryForm', 'mixinTableName']
834
+ } else if (this.item.key === '_mixinTableName_') {
835
+ this.item.key = ''
836
+ }
837
+ if (newVal.includes('group')) {
838
+ this.dataModeArrayData = ['sqlQueryItem', 'group']
839
+ }
840
+ },
841
+ itemHandle () {
842
+ // 查询表单项或者新增/修改表单项
843
+ if (this.dataMode.queryForm || this.dataMode.addOrEditForm || this.dataMode.sqlQueryCondition) {
844
+ if (!this.dataMode.sqlQueryItem || !this.dataMode.addOrEditForm) {
845
+ this.delKey(this.item, 'addOrEdit', 'silencePurpose', 'silenceSource')
846
+ }
847
+ if (this.item.selectType && this.item.selectType === 'logic' && this.item.selectKey.substring(0, 6) !== 'logic@') {
848
+ // 数据源为logic
849
+ this.item.selectKey = 'logic@' + this.item.selectKey
850
+ } else if (this.item.selectType && this.item.selectType === 'fixArray' && !this.isJSON(this.item.selectKey)) {
851
+ // 数据源为固定json集合
852
+ this.$message.warning('下拉框数据源不是JSON集合')
853
+ return
854
+ }
855
+ } else {
856
+ this.delKey(this.item, 'queryType', 'formType', 'addOrEdit', 'silencePurpose', 'silenceSource', 'placeholder', 'rule', 'selectKey', 'selectKeyName', 'lazyLoad')
857
+ }
858
+ // 如果和数据源字段无关
859
+ if (!this.selectDataShow) {
860
+ this.delKey(this.item, 'selectType', 'selectKey', 'lazyLoad', 'selectKeyName')
861
+ }
862
+ // 删除空的关联外键字段
863
+ if (!this.item.selectKeyName) {
864
+ delete this.item.selectKeyName
865
+ }
866
+ // 默认插槽就先删除
867
+ if (this.item.slot && (this.item.slot.type === 'default' || !this.item.slot.type)) { delete this.item.slot }
868
+ // 根据数据模式处理数据
869
+ if (!this.dataMode.sqlQueryCondition) {
870
+ delete this.item.queryType
871
+ }
872
+ if (!this.dataMode.sqlQueryItem) { this.delKey(this.item, 'default') }
873
+ this.item.dataModeArray = this.dataModeArrayData
874
+ this.$emit('itemHandle', this.item, this.type)
875
+ this.initItem()
876
+ this.resetDataMode()
877
+ },
878
+ changeSelectKType () {
879
+ this.item.selectKey = undefined
880
+ },
881
+ changeSelectKey (item) {
882
+ if (item.selectType === 'key' && item.selectKey) {
883
+ this.item.slot = Object.assign({}, this.item.slot, { keyMap: item.selectKey, type: 'badge' })
884
+ }
885
+ },
886
+ filterOption (input, option) {
887
+ return (
888
+ option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
889
+ )
890
+ },
891
+ delKey (obj, ...args) {
892
+ args.forEach(v => {
893
+ delete obj[v]
894
+ })
895
+ return obj
896
+ },
897
+ // 判断是否为json字符串
898
+ isJSON (str) {
899
+ if (typeof str == 'string') {
900
+ try {
901
+ const obj = JSON.parse(str)
902
+ return !!(typeof obj == 'object' && obj)
903
+ } catch (e) {
904
+ return false
905
+ }
906
+ }
907
+ },
908
+ // 兼容旧插槽函数
909
+ compatibleTheSlot (_item) {
910
+ if (_item.slotKeyMap) {
911
+ _item.slot.keyMap = _item.slotKeyMap
912
+ delete _item.slotKeyMap
913
+ }
914
+ if (_item.slotValue) {
915
+ _item.slot.value = _item.slotValue
916
+ delete _item.slotValue
917
+ }
918
+ if (_item.actionText) {
919
+ _item.slot.actionText = _item.actionText
920
+ delete _item.actionText
921
+ }
922
+ },
923
+ // 拖拽事件
924
+ handleDragStart (e, item) {
925
+ this.dragging = item
926
+ },
927
+ handleDragEnd (e, item) {
928
+ if (this.ending.key === this.dragging.key) {
929
+ return
930
+ }
931
+ const newItems = [...this.item.column]
932
+ const src = newItems.indexOf(this.dragging)
933
+ const dst = newItems.indexOf(this.ending)
934
+ // newItems.splice(src, 1, ...newItems.splice(dst, 1, newItems[src])) 替换位置
935
+ // 挪移位置
936
+ newItems.splice(src, 1)
937
+ newItems.splice(dst, 0, this.dragging)
938
+ this.item.column = newItems
939
+ this.$nextTick(() => {
940
+ this.dragging = null
941
+ this.ending = null
942
+ })
943
+ },
944
+ handleDragOver (e) {
945
+ // 首先把div变成可以放置的元素,即重写dragenter/dragover
946
+ // e.dataTransfer.dropEffect="move";//在dragenter中针对放置目标来设置!
947
+ e.dataTransfer.dropEffect = 'move'
948
+ },
949
+ handleDragEnter (e, item) {
950
+ // 为需要移动的元素设置dragstart事件
951
+ e.dataTransfer.effectAllowed = 'move'
952
+ this.ending = item
953
+ },
954
+ editColumnItem (key, index) {
955
+ if (this.itemMap[key]) {
956
+ this.selectIndex = index
957
+ this.$refs.queryItem.editColumnItemExecute(this.itemMap[key])
958
+ } else {
959
+ this.$message.warn('编辑失败')
960
+ }
961
+ },
962
+ removeColumnItem (key, index) {
963
+ const _this = this
964
+ this.$confirm({
965
+ title: '您确定要删除该数据项?',
966
+ content: '删除的数据项无法恢复',
967
+ okText: '确定',
968
+ okType: 'danger',
969
+ cancelText: '取消',
970
+ zIndex: 9999,
971
+ onOk () {
972
+ delete _this.itemMap[key]
973
+ _this.item.column.splice(index, 1)
974
+ }
975
+ })
976
+ },
977
+ addColumnItem () {
978
+ this.type = '新增'
979
+ this.$refs.queryItem.addColumnItemExecute()
980
+ },
981
+ getColumnItem (callback) {
982
+ callback(JSON.parse(JSON.stringify(this.item.column)))
983
+ },
984
+ itemHandleItem (item, type) {
985
+ this.itemMap[item.key] = item
986
+ if (this.type === '新增') {
987
+ this.item.column.push(item)
988
+ } else {
989
+ this.$set(this.item.column, this.selectIndex, item)
990
+ }
991
+ this.$message.success(`${type}成功`)
992
+ this.$refs.queryItem.flashModal(false)
993
+ },
994
+ }
995
+ }
996
+ </script>
997
+ <style scoped>
998
+ table th, table td {
999
+ border: 1px rgba(0, 0, 0, 0.65) solid;
1000
+ text-align: center;
1001
+ padding: 0 10px;
1002
+ }
1003
+ .column_item:hover {
1004
+ background-color:rgba(64, 169, 255,0.25);
1005
+ }
1006
+ .dragTips{
1007
+ display:block;
1008
+ text-align: center;
1009
+ border:1px dashed rgba(64, 169, 255,0.55);
1010
+ }
1011
+ .dragTipsWarp{
1012
+ padding: .5rem 2rem;
1013
+ }
1014
+ </style>