vue2-client 1.15.107 → 1.15.110

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 (888) hide show
  1. package/.cursorrules +19 -19
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.apply +19 -19
  5. package/.env.development +1 -1
  6. package/.env.gaslink +19 -19
  7. package/.env.his +19 -19
  8. package/.env.iot +19 -19
  9. package/.env.liuli +20 -20
  10. package/.env.message +19 -19
  11. package/.env.revenue +19 -19
  12. package/.env.runtime +19 -19
  13. package/.env.scada +19 -19
  14. package/.eslintrc.js +90 -90
  15. package/.eslintrc.json +5 -5
  16. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  17. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  18. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  19. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  20. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  21. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  22. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  23. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  24. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  25. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  26. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  27. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  28. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  29. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  30. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  31. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  32. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  33. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  34. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  35. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  36. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  37. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  38. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  65. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  66. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  67. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  68. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  69. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  70. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  71. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  72. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  73. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  74. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  75. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  76. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  77. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  94. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  95. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  96. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  97. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  98. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  99. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  100. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  101. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  106. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  107. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  108. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  109. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  110. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  111. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  112. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  113. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  114. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  115. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  116. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  117. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  118. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  119. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  120. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134604.vue +263 -0
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134615.vue +302 -0
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134621.vue +301 -0
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134634.vue +311 -0
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134644.vue +330 -0
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134653.vue +330 -0
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134836.vue +330 -0
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135247.vue +330 -0
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135303.vue +354 -0
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135316.vue +363 -0
  131. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135323.vue +363 -0
  132. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135334.vue +366 -0
  133. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135342.vue +364 -0
  134. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135349.vue +364 -0
  135. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135351.vue +346 -0
  136. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135354.vue +346 -0
  137. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135401.vue +346 -0
  138. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135406.vue +346 -0
  139. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135424.vue +346 -0
  140. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807143043.vue +254 -0
  141. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155506.vue +329 -0
  142. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155535.vue +330 -0
  143. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155543.vue +330 -0
  144. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155926.vue +304 -0
  145. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155928.vue +304 -0
  146. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172548.vue +298 -0
  147. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172609.vue +298 -0
  148. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172623.vue +298 -0
  149. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172631.vue +298 -0
  150. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172701.vue +298 -0
  151. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172704.vue +298 -0
  152. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175937.vue +290 -0
  153. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175942.vue +290 -0
  154. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180210.vue +290 -0
  155. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180424.vue +290 -0
  156. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180448.vue +290 -0
  157. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180915.vue +262 -0
  158. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180917.vue +262 -0
  159. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101106.vue +283 -0
  160. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101112.vue +289 -0
  161. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101118.vue +289 -0
  162. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101129.vue +294 -0
  163. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101137.vue +318 -0
  164. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101145.vue +320 -0
  165. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101154.vue +320 -0
  166. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101211.vue +320 -0
  167. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101236.vue +320 -0
  168. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101239.vue +320 -0
  169. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114001.vue +342 -0
  170. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114005.vue +342 -0
  171. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114014.vue +345 -0
  172. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114020.vue +345 -0
  173. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114028.vue +345 -0
  174. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114108.vue +345 -0
  175. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114115.vue +345 -0
  176. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114333.vue +346 -0
  177. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114339.vue +350 -0
  178. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114344.vue +355 -0
  179. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114351.vue +355 -0
  180. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114408.vue +355 -0
  181. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114410.vue +355 -0
  182. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103845.vue +142 -0
  183. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103852.vue +142 -0
  184. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103857.vue +142 -0
  185. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103859.vue +142 -0
  186. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103907.vue +142 -0
  187. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103910.vue +142 -0
  188. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103911.vue +142 -0
  189. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103913.vue +142 -0
  190. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103916.vue +142 -0
  191. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103931.vue +142 -0
  192. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145127.vue +85 -0
  193. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145136.vue +81 -0
  194. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145142.vue +81 -0
  195. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145145.vue +81 -0
  196. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145148.vue +81 -0
  197. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145151.vue +81 -0
  198. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145155.vue +81 -0
  199. package/CHANGELOG.md +824 -824
  200. package/CLAUDE.md +89 -89
  201. package/Components.md +60 -60
  202. package/README.md +65 -65
  203. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +213 -0
  204. package/babel.config.js +21 -21
  205. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  206. package/docs/LowCode/lowcode.md +155 -155
  207. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  208. package/docs/index.md +30 -30
  209. package/docs/notice.md +22 -22
  210. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +185 -179
  211. package/index.js +31 -31
  212. package/jest-transform-stub.js +8 -8
  213. package/jest.config.js +22 -22
  214. package/jest.setup.js +7 -7
  215. package/jsconfig.json +19 -19
  216. package/package.json +111 -111
  217. package/public/his/editor/editor.html +51 -51
  218. package/public/his/editor/mock/bind_data.html +779 -779
  219. package/public/his/editor/mock/data_table.html +40 -40
  220. package/public/his/editor/mock/sign.html +75 -75
  221. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  222. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  223. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  224. package/public/his/editor/vender/date97/calendar.js +4 -4
  225. package/public/his/editor/vender/date97/lang/en.js +13 -13
  226. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  227. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  228. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  229. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  230. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  231. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  232. package/public/his/editor/vender/diff.js +1627 -1627
  233. package/public/his/editor/vender/editor.js +1 -1
  234. package/public/his/editor/vender/fabric.js +31187 -31187
  235. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  236. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  237. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  238. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  239. package/public/his/editor/vender/mui/mui.min.css +4 -4
  240. package/public/his/editor/vender/mui/mui.min.js +5 -5
  241. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  242. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  243. package/public/his/editor/vender/qrcode.js +7 -7
  244. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  245. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  246. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  247. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  248. package/public/his/editor/vender/validator.js +5094 -5094
  249. package/public/his/editor/vender/weui/weui.css +5659 -5659
  250. package/public/his/editor/vender/weui/weui.min.css +4 -4
  251. package/public/his/editor/vender/weui/weui.min.js +11 -11
  252. package/public/index.html +27 -27
  253. package/src/App.vue +196 -196
  254. package/src/ReportView.js +13 -13
  255. package/src/assets/img/querySlotDemo.svg +15 -15
  256. package/src/assets/svg/badtwo.svg +1 -1
  257. package/src/assets/svg/goodtwo.svg +1 -1
  258. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  259. package/src/base-client/components/AI/demo.vue +31 -31
  260. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  261. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  262. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  263. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  264. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  265. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  266. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  267. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  268. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  269. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  270. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  271. package/src/base-client/components/common/CitySelect/index.js +3 -3
  272. package/src/base-client/components/common/CitySelect/index.md +109 -109
  273. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  274. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  275. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  276. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  277. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  278. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  279. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  280. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  281. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  282. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  283. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  284. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  285. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  286. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  287. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  288. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  289. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  290. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  291. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  292. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  293. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  294. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  295. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  296. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  297. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  298. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  299. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  300. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  301. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  302. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  303. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  304. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  305. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  306. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  307. package/src/base-client/components/common/Recording/index.js +3 -3
  308. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  309. package/src/base-client/components/common/Tree/index.js +2 -2
  310. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  311. package/src/base-client/components/common/Upload/index.js +3 -3
  312. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  313. package/src/base-client/components/common/XAddForm/index.js +3 -3
  314. package/src/base-client/components/common/XAddForm/index.md +61 -61
  315. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  316. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  317. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  318. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  319. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  320. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  321. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  322. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  323. package/src/base-client/components/common/XAddReport/index.js +3 -3
  324. package/src/base-client/components/common/XAddReport/index.md +56 -56
  325. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  326. package/src/base-client/components/common/XBadge/index.js +3 -3
  327. package/src/base-client/components/common/XBadge/index.md +39 -39
  328. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  329. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  330. package/src/base-client/components/common/XButtons/index.js +3 -3
  331. package/src/base-client/components/common/XButtons/index.md +61 -61
  332. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  333. package/src/base-client/components/common/XCalendar/index.md +284 -284
  334. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  335. package/src/base-client/components/common/XCard/index.js +3 -3
  336. package/src/base-client/components/common/XCard/index.md +43 -43
  337. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  338. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  339. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  340. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  341. package/src/base-client/components/common/XCollapse/XCollapse.vue +355 -355
  342. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  343. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  344. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  345. package/src/base-client/components/common/XDataCard/index.js +3 -3
  346. package/src/base-client/components/common/XDataCard/index.md +1 -1
  347. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  348. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  349. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  350. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  351. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  352. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  353. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  354. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  355. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  356. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  357. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  358. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  359. package/src/base-client/components/common/XForm/XForm.vue +426 -426
  360. package/src/base-client/components/common/XForm/XFormItem.vue +1479 -1479
  361. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  362. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  363. package/src/base-client/components/common/XForm/demo.vue +105 -105
  364. package/src/base-client/components/common/XForm/index.js +3 -3
  365. package/src/base-client/components/common/XForm/index.md +178 -178
  366. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  367. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  368. package/src/base-client/components/common/XFormCol/index.js +3 -3
  369. package/src/base-client/components/common/XFormCol/index.md +35 -35
  370. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  371. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  372. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  373. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  374. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  375. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  376. package/src/base-client/components/common/XFormTable/XFormTable.vue +939 -939
  377. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  378. package/src/base-client/components/common/XFormTable/index.js +3 -3
  379. package/src/base-client/components/common/XFormTable/index.md +92 -92
  380. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  381. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  382. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  383. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  384. package/src/base-client/components/common/XInput/index.js +3 -3
  385. package/src/base-client/components/common/XInput/index.md +97 -97
  386. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  387. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  388. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  389. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  390. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  391. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  392. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  393. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  394. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  395. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  396. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  397. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  398. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  399. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  400. package/src/base-client/components/common/XPrint/index.vue +97 -97
  401. package/src/base-client/components/common/XRate/demo.vue +102 -102
  402. package/src/base-client/components/common/XRate/index.vue +149 -149
  403. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  404. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  405. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  406. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  407. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  408. package/src/base-client/components/common/XReport/index.js +3 -3
  409. package/src/base-client/components/common/XReport/index.md +103 -103
  410. package/src/base-client/components/common/XReport/print.js +186 -186
  411. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  412. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  413. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  414. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  415. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  416. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +724 -724
  417. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  418. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  419. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  420. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  421. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  422. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  423. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  424. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  425. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  426. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  427. package/src/base-client/components/common/XStepView/index.js +3 -3
  428. package/src/base-client/components/common/XStepView/index.md +31 -31
  429. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  430. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  431. package/src/base-client/components/common/XTab/index.js +3 -3
  432. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  433. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  434. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  435. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  436. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  437. package/src/base-client/components/common/XTable/index.js +3 -3
  438. package/src/base-client/components/common/XTable/index.md +255 -255
  439. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  440. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  441. package/src/base-client/components/common/XTimeline/index.md +191 -191
  442. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  443. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  444. package/src/base-client/components/common/XTree/index.js +3 -3
  445. package/src/base-client/components/common/XTree/index.md +36 -36
  446. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  447. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  448. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  449. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  450. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  451. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  452. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  453. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  454. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  455. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  456. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  457. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +678 -629
  458. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  459. package/src/base-client/components/his/XHisEditor/dome.vue +144 -0
  460. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  461. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcel.vue +218 -218
  462. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcelDemo.vue +23 -21
  463. package/src/base-client/components/his/XImportExcelButton/XImportExcelButton.vue +103 -103
  464. package/src/base-client/components/his/XList/XList.vue +495 -495
  465. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  466. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  467. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  468. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  469. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  470. package/src/base-client/components/his/XRadio/index.md +234 -234
  471. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  472. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +354 -339
  473. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  474. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  475. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +119 -119
  476. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  477. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  478. package/src/base-client/components/his/XTitle/README.md +113 -113
  479. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  480. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  481. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  482. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  483. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  484. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  485. package/src/base-client/components/index.js +51 -51
  486. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  487. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  488. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  489. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  490. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  491. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  492. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  493. package/src/base-client/components/layout/XPageView/index.js +2 -2
  494. package/src/base-client/components/layout/XPageView/index.md +96 -96
  495. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  496. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  497. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  498. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  499. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  500. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  501. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  502. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  503. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  504. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  505. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  506. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  507. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  508. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  509. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  510. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  511. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  512. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  513. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  514. package/src/base-client/plugins/AppData.js +126 -126
  515. package/src/base-client/plugins/Config.js +19 -19
  516. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  517. package/src/base-client/plugins/PagedList.js +177 -177
  518. package/src/base-client/plugins/Recording.js +258 -258
  519. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  520. package/src/base-client/plugins/authority-plugin.js +167 -167
  521. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  522. package/src/base-client/plugins/i18n-extend.js +32 -32
  523. package/src/base-client/plugins/index.js +23 -23
  524. package/src/base-client/plugins/moment.js +8 -8
  525. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  526. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  527. package/src/bootstrap.js +51 -51
  528. package/src/components/Charts/Bar.vue +62 -62
  529. package/src/components/Charts/ChartCard.vue +134 -134
  530. package/src/components/Charts/Liquid.vue +67 -67
  531. package/src/components/Charts/MiniArea.vue +39 -39
  532. package/src/components/Charts/MiniBar.vue +39 -39
  533. package/src/components/Charts/MiniProgress.vue +75 -75
  534. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  535. package/src/components/Charts/Radar.vue +68 -68
  536. package/src/components/Charts/RankList.vue +77 -77
  537. package/src/components/Charts/TagCloud.vue +113 -113
  538. package/src/components/Charts/TransferBar.vue +64 -64
  539. package/src/components/Charts/Trend.vue +82 -82
  540. package/src/components/Charts/chart.less +12 -12
  541. package/src/components/Charts/smooth.area.less +13 -13
  542. package/src/components/CodeMirror/inedx.vue +118 -118
  543. package/src/components/CodeMirror/setting.js +40 -40
  544. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  545. package/src/components/Ellipsis/index.js +3 -3
  546. package/src/components/Ellipsis/index.md +38 -38
  547. package/src/components/FileImageItem/FileItem.vue +320 -320
  548. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  549. package/src/components/FileImageItem/ImageItem.vue +107 -107
  550. package/src/components/FileImageItem/index.js +4 -4
  551. package/src/components/FilePreview/FilePreview.vue +181 -181
  552. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  553. package/src/components/FilePreview/index.js +3 -3
  554. package/src/components/HeightScanner/index.vue +615 -615
  555. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  556. package/src/components/NumberInfo/index.js +3 -3
  557. package/src/components/NumberInfo/index.less +54 -54
  558. package/src/components/NumberInfo/index.md +43 -43
  559. package/src/components/STable/README.md +341 -341
  560. package/src/components/STable/index.js +558 -558
  561. package/src/components/TableSetting/TableSetting.vue +143 -143
  562. package/src/components/TableSetting/index.js +3 -3
  563. package/src/components/Trend/Trend.vue +41 -41
  564. package/src/components/Trend/index.js +3 -3
  565. package/src/components/Trend/index.less +41 -41
  566. package/src/components/Trend/index.md +45 -45
  567. package/src/components/_util/util.js +46 -46
  568. package/src/components/cache/AKeepAlive.js +179 -179
  569. package/src/components/card/ChartCard.vue +79 -79
  570. package/src/components/chart/Bar.vue +60 -60
  571. package/src/components/chart/MiniArea.vue +67 -67
  572. package/src/components/chart/MiniBar.vue +59 -59
  573. package/src/components/chart/MiniProgress.vue +57 -57
  574. package/src/components/chart/Radar.vue +80 -80
  575. package/src/components/chart/RankingList.vue +60 -60
  576. package/src/components/chart/Trend.vue +79 -79
  577. package/src/components/chart/index.less +9 -9
  578. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  579. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  580. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  581. package/src/components/checkbox/index.js +9 -9
  582. package/src/components/exception/ExceptionPage.vue +70 -70
  583. package/src/components/exception/typeConfig.js +19 -19
  584. package/src/components/form/FormRow.vue +52 -52
  585. package/src/components/g2Charts/constants.js +202 -202
  586. package/src/components/g2Charts/demo.vue +808 -808
  587. package/src/components/g2Charts/designer.vue +228 -228
  588. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  589. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  590. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  591. package/src/components/g2Charts/index.vue +397 -397
  592. package/src/components/index.js +36 -36
  593. package/src/components/index.less +5 -5
  594. package/src/components/input/IInput.vue +66 -66
  595. package/src/components/menu/Contextmenu.vue +84 -84
  596. package/src/components/menu/SideMenu.vue +75 -75
  597. package/src/components/menu/index.less +38 -38
  598. package/src/components/menu/menu.js +273 -273
  599. package/src/components/page/header/PageHeader.vue +64 -64
  600. package/src/components/page/header/index.less +40 -40
  601. package/src/components/result/Result.vue +77 -77
  602. package/src/components/setting/Setting.vue +234 -234
  603. package/src/components/setting/SettingItem.vue +26 -26
  604. package/src/components/setting/i18n.js +117 -117
  605. package/src/components/table/StandardTable.vue +141 -141
  606. package/src/components/table/advance/ActionColumns.vue +158 -158
  607. package/src/components/table/advance/ActionSize.vue +45 -45
  608. package/src/components/table/advance/AdvanceTable.vue +275 -275
  609. package/src/components/table/advance/SearchArea.vue +355 -355
  610. package/src/components/table/advance/index.js +2 -2
  611. package/src/components/table/api/ApiTable.vue +50 -50
  612. package/src/components/task/TaskGroup.vue +80 -80
  613. package/src/components/task/TaskItem.vue +26 -26
  614. package/src/components/tool/AStepItem.vue +60 -60
  615. package/src/components/tool/AvatarList.vue +68 -68
  616. package/src/components/tool/DetailList.vue +157 -157
  617. package/src/components/tool/Drawer.vue +142 -142
  618. package/src/components/tool/FooterToolBar.vue +30 -30
  619. package/src/components/tool/HeadInfo.vue +35 -35
  620. package/src/components/tool/TagSelect.vue +83 -83
  621. package/src/components/tool/TagSelectOption.vue +33 -33
  622. package/src/components/transition/PageToggleTransition.vue +97 -97
  623. package/src/config/CreateQueryConfig.js +325 -325
  624. package/src/config/default/admin.config.js +18 -18
  625. package/src/config/default/animate.config.js +21 -21
  626. package/src/config/default/antd.config.js +89 -89
  627. package/src/config/default/index.js +6 -6
  628. package/src/config/default/setting.config.js +55 -55
  629. package/src/config/index.js +3 -3
  630. package/src/config/replacer/index.js +10 -10
  631. package/src/config/replacer/resolve.config.js +67 -67
  632. package/src/expression/ExpressionRunner.js +26 -26
  633. package/src/expression/TestExpression.js +509 -509
  634. package/src/expression/core/Delegate.js +115 -115
  635. package/src/expression/core/Expression.js +1358 -1358
  636. package/src/expression/core/Program.js +932 -932
  637. package/src/expression/core/Token.js +27 -27
  638. package/src/expression/enums/ExpressionType.js +81 -81
  639. package/src/expression/enums/TokenType.js +11 -11
  640. package/src/expression/exception/BreakWayException.js +2 -2
  641. package/src/expression/exception/ContinueWayException.js +2 -2
  642. package/src/expression/exception/ExpressionException.js +28 -28
  643. package/src/expression/exception/ReturnWayException.js +14 -14
  644. package/src/expression/exception/ServiceException.js +22 -22
  645. package/src/expression/instances/LogicConsole.js +44 -44
  646. package/src/expression/ts/ExpressionRunner.ts +28 -28
  647. package/src/expression/ts/TestExpression.ts +509 -509
  648. package/src/expression/ts/core/Delegate.ts +114 -114
  649. package/src/expression/ts/core/Expression.ts +1309 -1309
  650. package/src/expression/ts/core/Program.ts +950 -950
  651. package/src/expression/ts/core/Token.ts +29 -29
  652. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  653. package/src/expression/ts/enums/TokenType.ts +13 -13
  654. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  655. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  656. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  657. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  658. package/src/expression/ts/exception/ServiceException.ts +22 -22
  659. package/src/expression/ts/instances/JSONArray.ts +48 -48
  660. package/src/expression/ts/instances/JSONObject.ts +109 -109
  661. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  662. package/src/font-style/font.css +4 -4
  663. package/src/layouts/AdminLayout.vue +176 -176
  664. package/src/layouts/BlankView.vue +81 -81
  665. package/src/layouts/CommonLayout.vue +56 -56
  666. package/src/layouts/ComponentLayoutOne.vue +47 -47
  667. package/src/layouts/GridView.vue +43 -43
  668. package/src/layouts/PageLayout.vue +151 -151
  669. package/src/layouts/PageView.vue +55 -55
  670. package/src/layouts/SinglePageView.vue +136 -136
  671. package/src/layouts/footer/PageFooter.vue +49 -49
  672. package/src/layouts/header/AdminHeader.vue +132 -132
  673. package/src/layouts/header/HeaderAvatar.vue +64 -64
  674. package/src/layouts/header/HeaderNotice.vue +177 -177
  675. package/src/layouts/header/HeaderSearch.vue +67 -67
  676. package/src/layouts/header/InstitutionDetail.vue +181 -181
  677. package/src/layouts/header/index.less +92 -92
  678. package/src/layouts/tabs/TabsHead.vue +189 -189
  679. package/src/layouts/tabs/TabsView.vue +383 -383
  680. package/src/layouts/tabs/i18n.js +25 -25
  681. package/src/layouts/tabs/index.js +2 -2
  682. package/src/lib.js +1 -1
  683. package/src/logic/LogicRunner.js +62 -62
  684. package/src/logic/TestLogic.js +13 -13
  685. package/src/logic/plugins/common/DateTools.js +35 -35
  686. package/src/logic/plugins/common/VueTools.js +30 -30
  687. package/src/logic/plugins/index.js +7 -7
  688. package/src/logic/ts/LogicRunner.ts +67 -67
  689. package/src/logic/ts/TestLogic.ts +13 -13
  690. package/src/main.js +33 -33
  691. package/src/mixins/formValidationMixin.js +46 -46
  692. package/src/mock/common/activityData.js +32 -32
  693. package/src/mock/common/index.js +89 -89
  694. package/src/mock/common/reportData.js +20 -20
  695. package/src/mock/common/tableData.js +118 -118
  696. package/src/mock/extend/index.js +84 -84
  697. package/src/mock/goods/index.js +108 -108
  698. package/src/mock/index.js +12 -12
  699. package/src/mock/project/index.js +17 -17
  700. package/src/mock/user/current.js +13 -13
  701. package/src/mock/user/login.js +39 -39
  702. package/src/mock/user/routes.js +61 -61
  703. package/src/mock/workplace/index.js +15 -15
  704. package/src/pages/DefaultExample/index.vue +77 -77
  705. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  706. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  707. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  708. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  709. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  710. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  711. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  712. package/src/pages/DynamicStatistics/index.vue +282 -282
  713. package/src/pages/Example/childIndex.vue +15 -15
  714. package/src/pages/Example/index.vue +30 -30
  715. package/src/pages/LogicCallExample/index.vue +46 -46
  716. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  717. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  718. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  719. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  720. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  721. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  722. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  723. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  724. package/src/pages/Recording/index.vue +77 -77
  725. package/src/pages/ReportGrid/index.vue +76 -76
  726. package/src/pages/ReportView.vue +50 -50
  727. package/src/pages/ServiceReview/index.vue +284 -284
  728. package/src/pages/SubExample/index.vue +26 -26
  729. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  730. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  731. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  732. package/src/pages/WorkflowDetail/WorkflowDetail.vue +397 -397
  733. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  734. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  735. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  736. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  737. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  738. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  739. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +125 -125
  740. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  741. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +218 -218
  742. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  743. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  744. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  745. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  746. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  747. package/src/pages/XPageViewExample/index.vue +149 -149
  748. package/src/pages/XReportView/index.vue +64 -64
  749. package/src/pages/XTreeOneProExample/index.vue +67 -67
  750. package/src/pages/addressSelect/addressDemo.vue +24 -24
  751. package/src/pages/addressSelect/index.vue +270 -270
  752. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  753. package/src/pages/dashboard/workplace/i18n.js +40 -40
  754. package/src/pages/dashboard/workplace/index.js +2 -2
  755. package/src/pages/dashboard/workplace/index.less +59 -59
  756. package/src/pages/exception/403.vue +21 -21
  757. package/src/pages/exception/404.vue +24 -24
  758. package/src/pages/exception/500.vue +21 -21
  759. package/src/pages/login/Login.vue +380 -380
  760. package/src/pages/login/LoginV3.vue +389 -389
  761. package/src/pages/login/index.js +2 -2
  762. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  763. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  764. package/src/pages/report/ReportTable.js +124 -124
  765. package/src/pages/report/ReportTableHome.vue +28 -28
  766. package/src/pages/resourceManage/depListManage.vue +23 -23
  767. package/src/pages/resourceManage/funListManage.vue +23 -23
  768. package/src/pages/resourceManage/index.js +15 -15
  769. package/src/pages/resourceManage/orgListManage.vue +98 -98
  770. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  771. package/src/pages/resourceManage/roleListManage.vue +23 -23
  772. package/src/pages/resourceManage/staffListManage.vue +23 -23
  773. package/src/pages/system/dictionary/index.vue +44 -44
  774. package/src/pages/system/file/Info.vue +56 -56
  775. package/src/pages/system/file/index.vue +317 -317
  776. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  777. package/src/pages/system/monitor/operLog/index.vue +37 -37
  778. package/src/pages/system/settings/index.vue +126 -126
  779. package/src/pages/system/settings/modifyPassword.vue +117 -117
  780. package/src/pages/system/ticket/index.vue +480 -480
  781. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  782. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  783. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  784. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  785. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  786. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  787. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  788. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  789. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  790. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  791. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  792. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  793. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  794. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  795. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  796. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  797. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  798. package/src/pages/userInfoDetailManage/index.vue +290 -290
  799. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  800. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  801. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  802. package/src/plugins/EventLogPlugin.js +33 -33
  803. package/src/plugins/FindParentsData.js +17 -17
  804. package/src/plugins/HiPrintPlugin.js +164 -164
  805. package/src/router/async/config.async.js +35 -35
  806. package/src/router/async/router.map.js +127 -127
  807. package/src/router/guards.js +262 -262
  808. package/src/router/i18n.js +57 -57
  809. package/src/router/index.js +27 -27
  810. package/src/router.js +17 -17
  811. package/src/services/DataModel.js +30 -30
  812. package/src/services/LodopFuncs.js +137 -137
  813. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  814. package/src/services/api/LogDetailsViewApi.js +10 -10
  815. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  816. package/src/services/api/TicketDetailsViewApi.js +46 -46
  817. package/src/services/api/cas.js +79 -79
  818. package/src/services/api/common.js +346 -346
  819. package/src/services/api/entity.js +18 -18
  820. package/src/services/api/index.js +17 -17
  821. package/src/services/api/logininfor/index.js +6 -6
  822. package/src/services/api/manage.js +8 -8
  823. package/src/services/api/restTools.js +215 -215
  824. package/src/services/api/workFlow.js +57 -57
  825. package/src/services/apiService.js +16 -16
  826. package/src/services/dataSource.js +12 -12
  827. package/src/services/index.js +7 -7
  828. package/src/services/user.js +92 -92
  829. package/src/services/v3Api.js +116 -116
  830. package/src/store/index.js +5 -5
  831. package/src/store/modules/account.js +115 -115
  832. package/src/store/modules/index.js +5 -5
  833. package/src/store/modules/lowCode.js +33 -33
  834. package/src/store/modules/setting.js +119 -119
  835. package/src/store/mutation-types.js +4 -4
  836. package/src/theme/antd/ant-menu.less +2 -2
  837. package/src/theme/antd/ant-message.less +3 -3
  838. package/src/theme/antd/ant-table.less +22 -22
  839. package/src/theme/antd/ant-time-picker.less +3 -3
  840. package/src/theme/antd/index.less +3 -3
  841. package/src/theme/default/color.less +43 -43
  842. package/src/theme/default/index.less +3 -3
  843. package/src/theme/default/nprogress.less +76 -76
  844. package/src/theme/default/style.less +58 -58
  845. package/src/theme/global.less +279 -279
  846. package/src/theme/index.less +5 -5
  847. package/src/theme/reportTable.less +58 -58
  848. package/src/theme/theme.less +1 -1
  849. package/src/utils/EncryptUtil.js +162 -162
  850. package/src/utils/Objects.js +25 -25
  851. package/src/utils/authority-utils.js +85 -85
  852. package/src/utils/axios-interceptors.js +100 -100
  853. package/src/utils/colors.js +107 -107
  854. package/src/utils/common.js +10 -10
  855. package/src/utils/errorCode.js +6 -6
  856. package/src/utils/excel/Blob.js +180 -180
  857. package/src/utils/excel/Export2Excel.js +184 -184
  858. package/src/utils/filter.js +21 -21
  859. package/src/utils/formatter.js +74 -74
  860. package/src/utils/htmlToPDF.js +108 -108
  861. package/src/utils/htmlToPDFApi.js +5 -5
  862. package/src/utils/i18n.js +80 -80
  863. package/src/utils/indexedDB.js +549 -549
  864. package/src/utils/login.js +188 -188
  865. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  866. package/src/utils/lowcode/lowcodeLog.js +29 -29
  867. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  868. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  869. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  870. package/src/utils/map-utils.js +47 -47
  871. package/src/utils/microAppUtils.js +49 -49
  872. package/src/utils/reg.js +95 -95
  873. package/src/utils/request.js +395 -395
  874. package/src/utils/routerUtil.js +574 -567
  875. package/src/utils/runEvalFunction.js +14 -14
  876. package/src/utils/theme-color-replacer-extend.js +92 -92
  877. package/src/utils/themeUtil.js +100 -100
  878. package/src/utils/util.js +329 -329
  879. package/src/utils/waterMark.js +31 -31
  880. package/test/Tree.spec.js +168 -168
  881. package/test/myDialog.spec.js +47 -47
  882. package/test/request.test.js +17 -17
  883. package/test/util.test.js +53 -53
  884. package/test/v3Api.test.js +1984 -1984
  885. package/tests/unit/ReportTable.spec.js +16 -16
  886. package/vue.config.js +222 -222
  887. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  888. package/.claude/settings.local.json +0 -12
@@ -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>