vue2-client 1.15.107 → 1.15.109

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,1169 +1,1169 @@
1
- <template>
2
- <div id="XAddNativeForm">
3
- <a-form-model
4
- v-if="loaded"
5
- ref="selectForm"
6
- :zIndex="1001"
7
- :model="form"
8
- v-bind="formItemLayoutGen"
9
- :layout="layout">
10
- <template v-for="(item, key) in childTableData">
11
- <a-row
12
- v-if="childTablePriority"
13
- :gutter="16"
14
- :key="'childTableRow' + key">
15
- <a-card :title="item.name" :bordered="false" size="small">
16
- <x-form-table
17
- :key="'childTable_' + item.model"
18
- :title="item.name"
19
- :queryParamsName="item.childTableConfigName"
20
- :localEditMode="true"
21
- :fixed-query-form="childTableFixedQueryForm(item)"
22
- :service-name="serviceName"
23
- @innerXFormTableEmit="innerXFormTableEmit"
24
- @afterTableInit="childTableMounted(item)"
25
- :ref="'childXFormTable_' + item.model">
26
- </x-form-table>
27
- </a-card>
28
- </a-row>
29
- </template>
30
- <a-row ref="GroupItemRow">
31
- <a-col :span="3" v-if="!inXFormGroup && !(groups[0].groupName === DEFAULT_GROUP_NAME)">
32
- <a-tabs tab-position="left" v-model="activeTab" @change="scrollToGroup">
33
- <a-tab-pane
34
- v-for="(groupsItem,groupsIndex) in groups"
35
- :tab="groupsItem.groupName"
36
- :key="groupsIndex">
37
- </a-tab-pane>
38
- </a-tabs>
39
- </a-col>
40
- <a-col
41
- :span="(!inXFormGroup && !(groups[0].groupName === DEFAULT_GROUP_NAME)) ? 21: 24">
42
- <a-row
43
- :gutter="16"
44
- type="flex"
45
- :key="groupsIndex"
46
- v-for="(groupsItem,groupsIndex) in groups"
47
- >
48
- <a-col
49
- :span="24"
50
- :style="{ marginTop: groupsIndex === 0 ? '' : '8px',fontSize:inXFormGroup?'15px':'14px', marginLeft:'-5px' }"
51
- v-if="groupsItem.groupName !== DEFAULT_GROUP_NAME">
52
- <span class="xFormGroupTitle" :ref="`group-title-${groupsIndex}`">{{ groupsItem.groupName }}</span>
53
- </a-col>
54
- <x-form-item
55
- v-for="(item, index) in groupsItem.realJsonData"
56
- :key="index"
57
- :attr="item"
58
- :disabled="itemDisabled(item)"
59
- :read-only="readonly(item)"
60
- :files="files"
61
- v-bind="formItemLayoutGen"
62
- :style="layout === 'inline' ? { marginTop:'5px' } : undefined"
63
- :form="form"
64
- :images="images"
65
- :service-name="serviceName"
66
- mode="新增/修改"
67
- :layout="layout"
68
- :rules="rules[`${item.name}${item.model}`]"
69
- :get-data-params="getDataParams"
70
- :env="env"
71
- @x-form-item-emit-func="emitFunc"
72
- @rowChoose="rowChoose"
73
- :setForm="setForm"
74
- />
75
- </a-row>
76
- </a-col>
77
- </a-row>
78
- <a-row :gutter="16" v-for="(groupItem, groupIndex) in groupJsonData" :key="groupIndex">
79
- <a-card v-if="groupItem.groupItems.length > 0" :title="groupItem.name" :bordered="false" size="small">
80
- <x-form-item
81
- v-for="(item, index) in groupItem.groupItems"
82
- :key="index"
83
- :attr="item"
84
- :disabled="itemDisabled(item)"
85
- :readonly="readonly(item)"
86
- :files="files"
87
- v-bind="formItemLayoutGen"
88
- :style="layout ==='inline'?{marginTop:'5px'}:undefined"
89
- :form="form[groupItem.model]"
90
- :images="images"
91
- :service-name="serviceName"
92
- mode="新增/修改"
93
- :rules="rules[`${item.name}${item.model}`]"
94
- :get-data-params="getDataParams"
95
- :env="env"
96
- :setForm="setForm"
97
- @rowChoose="rowChoose"
98
- />
99
- </a-card>
100
- <template v-else>
101
- <slot
102
- name="groupFormItems"
103
- :form="form"
104
- :model="groupItem.model"
105
- :rules="rules"
106
- :modifyModelData="modifyModelData"></slot>
107
- </template>
108
- </a-row>
109
- <a-row :gutter="16" v-for="(item, key) in simpleFormJsonData" :key="'row' + key">
110
- <a-card v-if="item.value.length > 0" :title="item.name" :bordered="false" size="small">
111
- <x-form-item
112
- v-for="(formItem, formItemIndex) in item.value"
113
- :key="key + formItemIndex"
114
- :attr="formItem"
115
- :disabled="itemDisabled(formItem)"
116
- :readonly="readonly(formItem)"
117
- :files="files"
118
- v-bind="formItemLayoutGen"
119
- :style="layout ==='inline'?{marginTop:'5px'}:undefined"
120
- :form="form[groupItem.model]"
121
- :images="images"
122
- :service-name="serviceName"
123
- mode="新增/修改"
124
- :rules="rules[`${item.name}${item.model}`]"
125
- :get-data-params="getDataParams"
126
- :env="env"
127
- :setForm="setForm"
128
- @rowChoose="rowChoose"
129
- />
130
- </a-card>
131
- </a-row>
132
- <template v-for="(item, key) in childTableData">
133
- <a-row
134
- v-if="!childTablePriority"
135
- :gutter="16"
136
- :key="'childTableRow' + key">
137
- <a-card :title="item.name" :bordered="false" size="small">
138
- <x-form-table
139
- :key="'childTable_' + item.model"
140
- :title="item.name"
141
- :queryParamsName="item.childTableConfigName"
142
- :localEditMode="true"
143
- @innerXFormTableEmit="innerXFormTableEmit"
144
- :fixed-query-form="childTableFixedQueryForm(item)"
145
- :service-name="serviceName"
146
- @afterTableInit="childTableMounted(item)"
147
- :ref="'childXFormTable_' + item.model">
148
- </x-form-table>
149
- </a-card>
150
- </a-row>
151
- </template>
152
- <a-row type="flex" :justify="btnPlace" :style="{paddingLeft: '16px',paddingRight: '16px'}">
153
- <slot name="footer" :loading="loading">
154
- <a-button v-if="showSubmitBtn" :loading="loading" type="primary" @click="onSubmit()">{{ btnName }}</a-button>
155
- </slot>
156
- </a-row>
157
- </a-form-model>
158
- </div>
159
- </template>
160
- <script>
161
- import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
162
- import { formatDate, setDataByRealKey } from '@vue2-client/utils/util'
163
- import * as util from '@vue2-client/utils/util'
164
- import { mapState } from 'vuex'
165
- import { addOrModify, getConfigByName, getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
166
- import { checkIdNumber, REG_EMAIL, REG_LANDLINE, REG_PHONE } from '@vue2-client/utils/reg'
167
- import moment from 'moment/moment'
168
- import { executeStrFunction, executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
169
- import formValidationMixin from '@vue2-client/mixins/formValidationMixin'
170
-
171
- const DEFAULT_GROUP_NAME = '__default__'
172
- export default {
173
- name: 'XAddNativeForm',
174
- components: {
175
- XFormItem,
176
- XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
177
- },
178
- inject: {
179
- inXFormGroup: {
180
- default: false
181
- },
182
- formGroupContext: {
183
- default: null
184
- },
185
- formDataChange: {
186
- default: null
187
- }
188
- },
189
- props: {},
190
- data () {
191
- return {
192
- DEFAULT_GROUP_NAME,
193
- // 预览模式
194
- viewMode: false,
195
- // 是否处理表单Key值
196
- isHandleFormKey: true,
197
- // 内容加载是否完成
198
- loaded: false,
199
- // 业务类型
200
- businessType: '',
201
- // 业务标题
202
- title: '',
203
- // 新增或修改业务是否执行中
204
- loading: false,
205
- // 表单Model
206
- form: {},
207
- // 配置名称
208
- configName: undefined,
209
- // 配置内容,用于查询配置生成器的预览
210
- configContent: undefined,
211
- // 表单项集合
212
- formItems: [],
213
- // 服务名称
214
- serviceName: undefined,
215
- // 是否显示提交按钮
216
- showSubmitBtn: true,
217
- // 修改有文件的表单时使用
218
- files: [],
219
- images: [],
220
- // 校验
221
- rules: {},
222
- // 调用logic获取数据源的追加参数
223
- getDataParams: {},
224
- // 动态简易表单集合
225
- simpleFormJsonData: {},
226
- // 待修改的数据集
227
- modifyModelData: {},
228
- // 当前环境
229
- env: 'prod',
230
- // 表单主键
231
- primaryKey: null,
232
- // 表单模式 horizontal | vertical | inline
233
- layout: 'horizontal',
234
- // 提交按钮名称
235
- btnName: '提交',
236
- // 提交按钮位置 start / center / end
237
- btnPlace: 'center',
238
- // 子表是否排在前面
239
- childTablePriority: false
240
- }
241
- },
242
- computed: {
243
- // 过滤出用于新增/修改场景的表单项
244
- realJsonData: function () {
245
- return this.formItems.filter((item) => {
246
- return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version' && !this.itemDisabled(item)
247
- })
248
- },
249
- // 表单项组 / 不是 数据组
250
- groups: function () {
251
- if (!this.realJsonData || this.realJsonData.length === 0) {
252
- return [{
253
- groupName: DEFAULT_GROUP_NAME,
254
- realJsonData: this.realJsonData,
255
- xAddFormLayout: 'horizontal'
256
- }]
257
- }
258
- const uniqueGroups = new Set(this.realJsonData.map(item => item.group).filter(Boolean))
259
- const allGroup = Array.from(uniqueGroups).map(group => {
260
- return {
261
- groupName: group,
262
- realJsonData: this.realJsonData.filter(item => item.group === group),
263
- xAddFormLayout: 'horizontal'
264
- }
265
- })
266
- // 判断每一组得formJson 长度相加是否等于 realJsonData 长度 避免错误数据
267
- if (allGroup.reduce((total, item) => total + item.realJsonData.length, 0) === this.realJsonData.length) {
268
- return allGroup
269
- } else {
270
- return [{
271
- groupName: DEFAULT_GROUP_NAME,
272
- realJsonData: this.realJsonData,
273
- xAddFormLayout: 'horizontal'
274
- }]
275
- }
276
- },
277
- // 拥有自定义校验函数得表单项
278
- customValidateItems: function () {
279
- return this.formItems.filter((item) => {
280
- return item?.rule?.type === 'customJs'
281
- })
282
- },
283
- // 过滤出用于新增/修改场景的表单项
284
- groupJsonData: function () {
285
- return this.formItems.filter((item) => {
286
- return item.type === 'group'
287
- }).map((item) => {
288
- item.groupItems = item.groupItems.filter((item) => {
289
- return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version' && !this.itemDisabled(item)
290
- }).map((groupItem) => {
291
- // 只保留第一个下划线后面的内容
292
- // 多层校验规则需要将prop设置为 key1.key2.....
293
- groupItem.prop = `${item.model}.${groupItem.model.substring(groupItem.model.indexOf('_') + 1)}`
294
- groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
295
- return groupItem
296
- })
297
- return item
298
- }
299
- )
300
- },
301
- // 过滤出用于子表数据新增/修改场景的表单项
302
- childTableData: function () {
303
- return this.formItems.filter((item) => {
304
- return item.type === 'childTable'
305
- })
306
- },
307
- // 过滤出用于form子表数据新增/修改场景的表单项
308
- childFormData: function () {
309
- return this.formItems.filter((item) => {
310
- return item.type === 'rowEdit'
311
- })
312
- },
313
- // 过滤出用于静默新增场景的表单项
314
- silenceAddJsonData: function () {
315
- return this.formItems.filter(function (item) {
316
- return item.addOrEdit === 'silenceAdd'
317
- })
318
- },
319
- // 过滤出版本号表单项
320
- versionJsonData: function () {
321
- return this.formItems.filter(function (item) {
322
- return item.addOrEdit === 'version'
323
- })
324
- },
325
- formItemLayoutGen () {
326
- if (this.layout === 'horizontal') {
327
- return {
328
- labelCol: { span: 4, offset: 2 },
329
- wrapperCol: { span: 14 },
330
- }
331
- } else if (this.layout === 'vertical') {
332
- return {}
333
- } else {
334
- if (!this.formItemLayout.labelCol || !this.formItemLayout.wrapperCol) {
335
- return {
336
- labelCol: { span: 8 },
337
- wrapperCol: { span: 16 },
338
- }
339
- }
340
- return {
341
- labelCol: { span: this.formItemLayout.labelCol },
342
- wrapperCol: { span: this.formItemLayout.wrapperCol },
343
- }
344
- }
345
- },
346
- ...mapState('account', { currUser: 'user' })
347
- },
348
- provide () {
349
- return {
350
- getComponentByName: this.getComponentByName,
351
- registerComponent: this.registerComponent,
352
- XFormContext: this,
353
- // 移除必填项
354
- removeRequired: this.removeRequired,
355
- // 设置必填项
356
- setRequired: this.setRequired,
357
- getSelf: () => this,
358
- }
359
- },
360
- watch: {
361
- form: {
362
- handler (val) {
363
- if (this.formDataChange && typeof this.formDataChange === 'function') {
364
- this.formDataChange(val)
365
- }
366
- },
367
- deep: true
368
- }
369
- },
370
- /** //todo 本来想要实现 配置 自定义函数时,表单项得红星提示,根据自定义校验函数得返回值来判断
371
- * 但是监听不到父组件formgorup得其他form得变化,所以暂时不实现
372
- */
373
- //
374
- // watch: {
375
- // form: {
376
- // handler (val) {
377
- // // 遍历表单配置
378
- // if (this.customValidateItems.length > 0) {
379
- // for (const item of this.customValidateItems) {
380
- // const itemIndex = this.formItems.findIndex(formItem => formItem.model === item.model)
381
- // if (itemIndex < 0) {
382
- // continue
383
- // }
384
- // try {
385
- // this.customJsValidate(null, val[item.model], (res) => {
386
- // // 如果返回error则设置错误信息
387
- // if (res instanceof Error) {
388
- // // 设置表单项的错误状态
389
- // this.$set(this.formItems[itemIndex], 'tempRequired', true)
390
- // } else {
391
- // // 清除错误状态
392
- // this.$set(this.formItems[itemIndex], 'tempRequired', true)
393
- // }
394
- // }, item)
395
- // } catch (e) {
396
- // console.error(e)
397
- // this.$set(this.formItems[itemIndex], 'tempRequired', true)
398
- // }
399
- // }
400
- // console.log('customValidateItems', JSON.stringify(this.customValidateItems))
401
- // }
402
- // },
403
- // deep: true
404
- // }
405
- // },
406
- mixins: [formValidationMixin],
407
- methods: {
408
- runLogic,
409
- getConfigByNameAsync,
410
- getConfigByName,
411
- init (params) {
412
- const {
413
- configName,
414
- configContent,
415
- formItems,
416
- formJson,
417
- viewMode,
418
- isHandleFormKey,
419
- isKeyHandle = true,
420
- showSubmitBtn = true,
421
- serviceName,
422
- primaryKey,
423
- modifyModelData = {},
424
- businessType,
425
- title,
426
- fixedAddForm = {},
427
- getDataParams = {},
428
- simpleFormJsonData = {},
429
- env = 'prod',
430
- layout,
431
- xAddFormLayout = 'horizontal',
432
- formItemLayout = {},
433
- btnName = '提交',
434
- childTablePriority = false,
435
- btnPlace = 'center'
436
- } = params
437
- this.loaded = false
438
- // 兼容需要省略 传递 layout: res.xAddFormLayout 可以使用 ...res 展开运算符 直接转递
439
- if (xAddFormLayout && layout === undefined) {
440
- this.layout = xAddFormLayout
441
- } else {
442
- this.layout = layout
443
- }
444
- this.formItemLayout = formItemLayout
445
- if ((isHandleFormKey === null || isHandleFormKey === undefined) && !isKeyHandle) {
446
- this.isHandleFormKey = isKeyHandle
447
- } else if (isHandleFormKey) {
448
- this.isHandleFormKey = isHandleFormKey
449
- } else {
450
- this.isHandleFormKey = isKeyHandle
451
- }
452
- this.childTablePriority = childTablePriority
453
- this.configName = configName
454
- this.configContent = configContent
455
- this.formItems = this.getFromItem(formItems, formJson)
456
- this.viewMode = viewMode
457
- this.showSubmitBtn = showSubmitBtn
458
- this.primaryKey = primaryKey
459
- this.serviceName = serviceName
460
- this.businessType = businessType
461
- this.title = title
462
- this.getDataParams = getDataParams
463
- this.simpleFormJsonData = simpleFormJsonData
464
- this.env = env
465
- this.btnName = btnName
466
- this.btnPlace = btnPlace
467
- // 如果 fixedAddForm 有 selected_id 值,并且设置了处理表单key值,则多给 selected_id 加前缀 避免处理错误
468
- if (fixedAddForm.selected_id && this.isHandleFormKey) {
469
- fixedAddForm._selected_id = fixedAddForm.selected_id
470
- delete fixedAddForm.selected_id
471
- }
472
- // 设置普通表单项的相关参数
473
- const formData = Object.assign({}, fixedAddForm)
474
- for (let i = 0; i < this.realJsonData.length; i++) {
475
- const item = this.realJsonData[i]
476
- this.setFormProps(formData, item, null)
477
- }
478
- // 设置表单分组项目相关参数
479
- for (let i = 0; i < this.groupJsonData.length; i++) {
480
- const groupItem = this.groupJsonData[i]
481
- formData[groupItem.model] = {}
482
- for (let j = 0; j < groupItem.groupItems.length; j++) {
483
- const item = groupItem.groupItems[j]
484
- this.setFormProps(formData[groupItem.model], item, item.prop)
485
- }
486
- }
487
- // 设置动态简易表单项的相关参数
488
- for (const key in this.simpleFormJsonData) {
489
- for (const item of this.simpleFormJsonData[key].value) {
490
- item.model = key + '@' + item.model
491
- this.setFormProps(formData, item, null)
492
- }
493
- }
494
-
495
- this.form = formData
496
- // 修改场景下对表单项赋值
497
- if (modifyModelData && modifyModelData.data) {
498
- this.modifyModelData = modifyModelData
499
- if (Object.keys(modifyModelData.data).length > 0) {
500
- this.getModifyModelData(modifyModelData)
501
- }
502
- }
503
- // 处理表单得附件
504
- if (modifyModelData && modifyModelData.files) {
505
- this.files = modifyModelData.files
506
- }
507
- if (modifyModelData && modifyModelData.images) {
508
- this.images = modifyModelData.images
509
- }
510
- this.loaded = true
511
- },
512
- scrollToGroup (index) {
513
- const groupElement = this.$refs[`group-title-${index}`][0]
514
- if (groupElement) {
515
- groupElement.scrollIntoView({ behavior: 'smooth' })
516
- }
517
- },
518
- registerComponent (componentName, component) {
519
- console.log('内部注册', this.$options.name, componentName)
520
- this.$refs[componentName] = component
521
- console.log('内部注册完成', this.$refs)
522
- },
523
- // 根据名字从注册到组件中获取组件
524
- getComponentByName (componentName) {
525
- console.log('内部取组件', this.$options.name, componentName)
526
- console.log('内部组件内容', this.$refs)
527
- return this.$refs[componentName]
528
- },
529
- // 兼容需要省略 传递 [formItems: res.formJson ] 可以使用 ...res 展开运算符 直接转递
530
- getFromItem (formItems, formJson) {
531
- const _formItems = formItems || formJson
532
- if (typeof formItems === 'string') {
533
- return JSON.parse(_formItems)
534
- } else {
535
- return JSON.parse(JSON.stringify(_formItems))
536
- }
537
- },
538
- innerXFormTableEmit (fun, record, id, actionType, index) {
539
- this.$emit(fun, record, id, actionType, index)
540
- },
541
- // 时间组件赋默认值
542
- // .type, item.formDefault
543
- getDateRange ({ type, formDefault: defaultValue, formValueFormat }) {
544
- // const format = type === 'datePicker' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss'
545
- let format = 'YYYY-MM-DD HH:mm:ss'
546
- if (formValueFormat) {
547
- format = formValueFormat
548
- }
549
- let start
550
- switch (defaultValue) {
551
- case 'curYear':
552
- start = moment().startOf('year').format(format)
553
- break
554
- case 'curMonth':
555
- start = moment().startOf('month').format(format)
556
- break
557
- case 'curDay':
558
- start = moment().startOf('day').format(format)
559
- break
560
- case 'curTime':
561
- start = moment().format(format)
562
- break
563
- default:
564
- return defaultValue
565
- }
566
- return start
567
- },
568
- setFormProps (formData, item, groupItem) {
569
- const rulesKey = `${item.name}${item.model}`
570
- if (formData[item.model] === undefined || formData[item.model] === null) {
571
- formData[item.model] = undefined
572
- }
573
- if (!formData[item.model] && item.formDefault) {
574
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
575
- formData[item.model] = this.getDateRange(item)
576
- } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.formDefault)) {
577
- if (item.formDefault === 'curOrgId') {
578
- formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
579
- }
580
- if (item.formDefault === 'curDepId') {
581
- formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
582
- }
583
- if (item.formDefault === 'curUserId') {
584
- formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
585
- }
586
- } else {
587
- formData[item.model] = item.formDefault
588
- }
589
- }
590
- // 处理表单校验情况
591
- if (item.rule) {
592
- if (groupItem) {
593
- this.rules[groupItem] = []
594
- } else {
595
- this.rules[rulesKey] = []
596
- }
597
- const required = item.rule.required ? item.rule.required === true || item.rule.required === 'true' : false
598
- let trigger
599
- let message
600
- if (required) {
601
- switch (item.type) {
602
- case 'select':
603
- case 'checkbox':
604
- case 'radio':
605
- case 'treeSelect':
606
- case 'rangePicker':
607
- case 'monthPicker':
608
- case 'yearPicker':
609
- case 'datePicker':
610
- case 'file':
611
- case 'image':
612
- case 'citySelect':
613
- case 'addressSearch':
614
- case 'personSetting':
615
- message = '请选择' + item.name
616
- trigger = 'change'
617
- break
618
- default:
619
- message = '请输入' + item.name
620
- trigger = 'blur'
621
- }
622
- if (groupItem) {
623
- this.rules[groupItem].push({
624
- required: true,
625
- message: message,
626
- trigger: trigger
627
- })
628
- } else {
629
- this.rules[rulesKey].push({
630
- required: true,
631
- message: message,
632
- trigger: trigger
633
- })
634
- }
635
- }
636
-
637
- switch (item.rule.type) {
638
- case 'number':
639
- case 'integer':
640
- case 'float':
641
- // eslint-disable-next-line no-case-declarations
642
- let defaultValue
643
- // eslint-disable-next-line no-case-declarations
644
- let message
645
- switch (item.rule.type) {
646
- case 'number':
647
- item.numberInput = true
648
- message = '数字'
649
- defaultValue = 0
650
- break
651
- case 'integer':
652
- item.numberInput = true
653
- message = '整数'
654
- defaultValue = 0
655
- break
656
- case 'float':
657
- item.numberInput = true
658
- message = '小数'
659
- defaultValue = 0.0
660
- break
661
- }
662
- if (groupItem) {
663
- this.rules[groupItem].push({
664
- type: item.rule.type,
665
- message: item.name + '必须为' + message,
666
- transform: (value) => {
667
- if (value && value.length !== 0) {
668
- return Number(value)
669
- } else {
670
- return defaultValue
671
- }
672
- },
673
- trigger: 'blur'
674
- })
675
- } else {
676
- this.rules[rulesKey].push({
677
- type: item.rule.type,
678
- message: item.name + '必须为' + message,
679
- transform: (value) => {
680
- if (value && value.length !== 0) {
681
- return Number(value)
682
- } else {
683
- return defaultValue
684
- }
685
- },
686
- trigger: 'blur'
687
- })
688
- }
689
- break
690
- case 'email': {
691
- const validator = (rule, value, callback) => {
692
- if (value && !REG_EMAIL.test(value)) {
693
- callback(new Error('请输入正确的邮箱地址'))
694
- } else {
695
- callback()
696
- }
697
- }
698
- this.rules[groupItem || rulesKey].push({
699
- type: 'email',
700
- validator: validator,
701
- message: '请输入正确的邮箱地址',
702
- trigger: 'blur'
703
- })
704
- break
705
- }
706
- case 'userPhone': {
707
- this.rules[groupItem || rulesKey].push({
708
- type: 'userPhone',
709
- validator: (rule, value, callback) => {
710
- if (value && !REG_PHONE.test(value)) {
711
- callback(new Error('请输入正确的手机号码'))
712
- } else {
713
- callback()
714
- }
715
- },
716
- message: '请输入正确的手机号码',
717
- trigger: 'blur'
718
- })
719
- break
720
- }
721
- case 'idNumber': {
722
- this.rules[groupItem || rulesKey].push({
723
- validator: (rule, value, callback) => {
724
- if (value && !checkIdNumber(value)) {
725
- callback(new Error('请输入正确的身份证号码'))
726
- } else {
727
- callback()
728
- }
729
- },
730
- trigger: 'blur'
731
- })
732
- break
733
- }
734
- case 'landlineNumber': {
735
- this.rules[rulesKey].push({
736
- validator: (rule, value, callback) => {
737
- if (value && !REG_LANDLINE.test(value)) {
738
- callback(new Error('请输入正确的座机号码'))
739
- } else {
740
- callback()
741
- }
742
- },
743
- trigger: 'blur'
744
- })
745
- break
746
- }
747
- // 大于0
748
- case 'greaterThanZero': {
749
- item.numberInput = true
750
- this.rules[rulesKey].push({
751
- validator: (rule, value, callback) => {
752
- if (isNaN(value) || value <= 0) {
753
- callback(new Error('请输入一个大于0的数字'))
754
- } else {
755
- callback()
756
- }
757
- },
758
- trigger: 'blur'
759
- })
760
- break
761
- }
762
- // 大于等于0
763
- case 'greaterThanOrEqualZero': {
764
- item.numberInput = true
765
- this.rules[rulesKey].push({
766
- validator: (rule, value, callback) => {
767
- if (isNaN(value) || value < 0) {
768
- callback(new Error('请输入一个大于等于0的数字'))
769
- } else {
770
- callback()
771
- }
772
- },
773
- trigger: 'blur'
774
- })
775
- break
776
- }
777
- case 'stringLength': {
778
- this.rules[rulesKey].push({
779
- validator: (rule, value, callback) => {
780
- if (value && value.length < item.rule.minLen) {
781
- callback(new Error('长度不能少于' + item.rule.minLen + '个字符'))
782
- } else if (value && value.length > item.rule.maxLen) {
783
- callback(new Error('长度不能超过' + item.rule.maxLen + '个字符'))
784
- } else {
785
- callback()
786
- }
787
- },
788
- trigger: 'blur'
789
- })
790
- break
791
- }
792
- case 'customJs': {
793
- this.rules[rulesKey].push({
794
- validator: (rule, value, callback) => {
795
- this.customJsValidate(rule, value, callback, item)
796
- },
797
- trigger: 'blur'
798
- })
799
- break
800
- }
801
- }
802
- }
803
- },
804
- childTableMounted (item) {
805
- // 子表初始化时,设置表格数据
806
- if (this.form[item.model] && this.form[item.model].length > 0) {
807
- this.$refs[`childXFormTable_${item.model}`][0].setTableData(this.form[item.model])
808
- }
809
- },
810
- customJsValidate (rule, value, callback, item) {
811
- if (item.rule.customValidatorFunc) {
812
- executeStrFunctionByContext(this, item.rule.customValidatorFunc, [rule, value, callback, this.form, item, this.util, runLogic, getConfigByNameAsync])
813
- } else {
814
- callback()
815
- }
816
- },
817
- itemDisabled (value) {
818
- return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
819
- (this.businessType === '修改' && value.addOrEdit === 'add')
820
- },
821
- readonly (value) {
822
- return value.addOrEdit === 'readonly'
823
- },
824
- async onSubmit () {
825
- const valid = await this.validateForm()
826
- if (!valid) return false
827
- if (this.viewMode) {
828
- this.$message.info('预览模式禁止新增和修改')
829
- return false
830
- }
831
- this.loading = true
832
- const requestForm = this.prepareForm()
833
- await this.appendSilenceAddFields(requestForm)
834
- const realForm = this.handleFormKeys(requestForm)
835
- // 增加子表数据
836
- if (this.childTableData.length > 0) {
837
- for (const item of this.childTableData) {
838
- const childModel = item.model
839
- const childDataRef = this.$refs['childXFormTable_' + item.model][0].getTableData()
840
- const childData = []
841
- for (const item of childDataRef) {
842
- childData.push(JSON.parse(JSON.stringify(item)))
843
- }
844
- for (let i = 0; i < childData.length; i++) {
845
- childData[i] = this.handleFormKeys(childData[i])
846
- // 外键不需要带表别名,所以此处放到表单处理后赋值
847
- if (realForm.id) {
848
- childData[i][item.childTableForeignKeyName] = realForm.id
849
- }
850
- }
851
- realForm[childModel] = childData
852
- }
853
- }
854
- // 增加form子表数据
855
- if (this.childFormData.length > 0) {
856
- for (const item of this.childFormData) {
857
- const childModel = item.model
858
- const childData = this.$refs[item.model].getTableData()
859
- for (let i = 0; i < childData.length; i++) {
860
- childData[i] = this.handleFormKeys(childData[i], true)
861
- // 外键不需要带表别名,所以此处放到表单处理后赋值
862
- if (realForm.id) {
863
- childData[i][item.foreignKey] = realForm.id
864
- }
865
- }
866
- realForm[childModel] = childData
867
- }
868
- }
869
- if (this.$listeners.onSubmit) {
870
- // 交由父级处理
871
- this.$emit('onSubmit', {
872
- businessType: this.businessType,
873
- serviceName: this.serviceName,
874
- realForm: realForm,
875
- currUserName: this.currUser.name,
876
- currUserId: this.currUser.id,
877
- orgId: this.currUser.orgid
878
- })
879
- } else {
880
- this.defaultSubmit(realForm)
881
- }
882
- },
883
-
884
- async asyncSubmit () {
885
- return new Promise((resolve, reject) => {
886
- this.$refs.selectForm.validate(async valid => {
887
- if (!valid) {
888
- reject(new Error('Form validation failed'))
889
- return
890
- }
891
- this.loading = true
892
- const requestForm = this.prepareForm()
893
- await this.appendSilenceAddFields(requestForm)
894
- const realForm = this.handleFormKeys(requestForm)
895
- resolve({
896
- realForm,
897
- businessType: this.businessType,
898
- serviceName: this.serviceName,
899
- currUserName: this.currUser.name,
900
- currUserId: this.currUser.id,
901
- orgId: this.currUser.orgid
902
- })
903
- })
904
- })
905
- },
906
-
907
- validateForm () {
908
- return new Promise((resolve) => {
909
- this.$refs.selectForm.validate(valid => resolve(valid))
910
- })
911
- },
912
-
913
- childTableFixedQueryForm (item) {
914
- if (this.modifyModelData?.primaryKeyData) {
915
- const fixedForm = {}
916
- fixedForm[item.childTableForeignKeyName] = Object.values(this.modifyModelData.primaryKeyData)[0]
917
- return fixedForm
918
- }
919
- return null
920
- },
921
-
922
- prepareForm () {
923
- const form = { ...this.form }
924
- for (const key of Object.keys(form)) {
925
- const value = form[key]
926
- if (value === null || (typeof value === 'object' && Object.keys(value).length === 0)) {
927
- form[key] = undefined
928
- }
929
- }
930
- return form
931
- },
932
-
933
- async appendSilenceAddFields (form) {
934
- if (this.businessType === '新增') {
935
- for (const item of this.silenceAddJsonData) {
936
- switch (item.silencePurpose) {
937
- case 'createTime':
938
- form[item.model] = formatDate('now')
939
- break
940
- case 'operator':
941
- form[item.model] = this.currUser.name
942
- break
943
- case 'operatorId':
944
- form[item.model] = this.currUser.id
945
- break
946
- case 'orgId':
947
- form[item.model] = this.currUser.orgid
948
- break
949
- case 'orgName':
950
- form[item.model] = this.currUser.orgs
951
- break
952
- case 'depId':
953
- form[item.model] = this.currUser.depids
954
- break
955
- case 'depName':
956
- form[item.model] = this.currUser.deps
957
- break
958
- }
959
- }
960
- for (const item of this.silenceAddJsonData.filter((item) => item.silencePurpose === 'customize')) {
961
- const result = await runLogic(item.silenceSource, form, this.serviceName)
962
- if (result) {
963
- const keys = Object.keys(result)
964
- if (keys.length === 1 && keys[0] === 'value') {
965
- form[item.model] = result.value
966
- } else {
967
- form[item.model] = result
968
- }
969
- } else {
970
- form[item.model] = result
971
- }
972
- }
973
- }
974
- },
975
-
976
- handleFormKeys (form, mustHandleKey = false) {
977
- const realForm = {}
978
- for (const key of Object.keys(form)) {
979
- const value = form[key]
980
- const extraFormKeyTagIndex = key.indexOf('@')
981
- if (extraFormKeyTagIndex !== -1) {
982
- const extraFormKey = key.substring(0, extraFormKeyTagIndex)
983
- const realKey = key.substring(extraFormKeyTagIndex + 1)
984
- if (!realForm[extraFormKey]) {
985
- realForm[extraFormKey] = {}
986
- }
987
- realForm[extraFormKey][realKey] = value
988
- } else {
989
- const realKey = this.isHandleFormKey || mustHandleKey ? this.getRealKey(key, mustHandleKey) : key
990
- // 如果发生重名,不覆盖,把key的别名带上
991
- if (realForm[realKey]) {
992
- realForm[key] = value
993
- } else {
994
- realForm[realKey] = value
995
- }
996
- }
997
- }
998
- return realForm
999
- },
1000
- // 默认提交事件
1001
- defaultSubmit (realForm, callback) {
1002
- // 新增移除id
1003
- if (this.businessType === '新增') {
1004
- delete realForm.id
1005
- }
1006
- // 组织请求
1007
- const requestParameters = {
1008
- queryParamsName: this.configName,
1009
- queryParams: this.configContent,
1010
- form: realForm,
1011
- businessType: this.businessType,
1012
- operator: this.currUser.name
1013
- }
1014
- addOrModify(requestParameters, this.serviceName, this.env === 'dev').then(data => {
1015
- this.$message.success(this.businessType + '成功!')
1016
- // commit
1017
- this.$emit('afterSubmit', { type: this.businessType, id: data.id, data: data, form: requestParameters.form })
1018
- this.loading = false
1019
- if (callback) {
1020
- callback()
1021
- }
1022
- }).catch(e => {
1023
- this.loading = false
1024
- this.$message.error(this.businessType + '失败:' + e)
1025
- })
1026
- },
1027
- // 获取表单字段实际值
1028
- getRealKey (key, mustHandleKey = false) {
1029
- if (key === 'selected_id') return key
1030
- if (this.isHandleFormKey || mustHandleKey) {
1031
- return key.substring(key.indexOf('_') + 1)
1032
- } else {
1033
- return key
1034
- }
1035
- },
1036
- /**
1037
- * 获取被修改记录数据
1038
- * @param modifyModelData 被修改记录的数据
1039
- */
1040
- getModifyModelData (modifyModelData) {
1041
- if (modifyModelData.primaryKeyData) {
1042
- this.form = Object.assign(this.form, modifyModelData.primaryKeyData)
1043
- }
1044
- // 对动态简易表单项特殊处理
1045
- for (const key in modifyModelData.data) {
1046
- const realKey = this.isHandleFormKey ? this.getRealKey(key) : key
1047
- if (this.simpleFormJsonData[realKey]) {
1048
- const extraForm = JSON.parse(modifyModelData.data[key])
1049
- for (const key in extraForm) {
1050
- const model = realKey + '@' + key
1051
- this.form[model] = extraForm[key]
1052
- }
1053
- }
1054
- }
1055
- // 对普通表单项处理
1056
- for (let i = 0; i < this.realJsonData.length; i++) {
1057
- if (['FilesId', 'Images'].includes(this.realJsonData[i])) {
1058
- // 附件需要跳过 因为会通过 modifyModelData中的files,images属性给upload赋值
1059
- // 新增修改表单每次提交时只会提交最新添加的文件
1060
- continue
1061
- }
1062
- const item = this.realJsonData[i]
1063
- if (modifyModelData.data[item.model] || modifyModelData.data[item.model] === 0) {
1064
- if (modifyModelData.data[item.model] instanceof Array) {
1065
- this.form[item.model] = modifyModelData.data[item.model]
1066
- } else {
1067
- this.form[item.model] = modifyModelData.data[item.model] + ''
1068
- }
1069
- }
1070
- }
1071
- // 对分组表单进行处理
1072
- for (let i = 0; i < this.groupJsonData.length; i++) {
1073
- const item = this.groupJsonData[i]
1074
- try {
1075
- if (modifyModelData.data[item.model]) {
1076
- this.form[item.model] = JSON.parse(modifyModelData.data[item.model])
1077
- }
1078
- } catch (e) {
1079
- if (modifyModelData.data[item.model]) {
1080
- this.form[item.model] = modifyModelData.data[item.model]
1081
- }
1082
- }
1083
- }
1084
- // 追加版本号信息
1085
- for (const item of this.versionJsonData) {
1086
- if (!modifyModelData.data[item.model]) {
1087
- this.form[item.model] = 0
1088
- } else {
1089
- this.form[item.model] = modifyModelData.data[item.model] + ''
1090
- }
1091
- }
1092
- },
1093
- setForm (obj) {
1094
- this.form = Object.assign(this.form, obj)
1095
- // 给子表赋外键条件
1096
- if (this.childFormData.length > 0) {
1097
- for (const item of this.childFormData) {
1098
- const child = this.$refs[item.model]
1099
- // 获取子表别名,以便在条件上添加别名
1100
- const alias = child.realQueryConfig.tableAliasName
1101
- // 有主键,且主键有值,添加主键条件
1102
- if (this.primaryKey && this.form[this.primaryKey]) {
1103
- const foreignKey = item.foreignKey
1104
- const fixedQueryForm = { [alias + '_' + foreignKey]: this.form[this.primaryKey] }
1105
- if (!child.fixedQueryForm) {
1106
- child.fixedQueryForm = fixedQueryForm
1107
- } else {
1108
- Object.assign(child.fixedQueryForm, fixedQueryForm)
1109
- }
1110
- child.refreshTable()
1111
- }
1112
- }
1113
- }
1114
- },
1115
- setFormWithKey (obj) {
1116
- setDataByRealKey(this.form, obj)
1117
- },
1118
- setFormWithNoKey (obj) {
1119
- setDataByRealKey(this.form, obj)
1120
- },
1121
- emitFunc (func, data, value) {
1122
- this.$emit(func, data, value)
1123
- this.$emit('x-form-item-emit-func', func, data, value)
1124
- },
1125
- // 直接转发事件的函数
1126
- emitEvent (event, ...args) {
1127
- this.$emit(event, ...args)
1128
- },
1129
- close () {
1130
- this.loaded = false
1131
- },
1132
- /**
1133
- * 行选择事件
1134
- * @param row 选中行集合
1135
- * @param attr 表单项属性
1136
- */
1137
- async rowChoose (row, attr, callback) {
1138
- // 如果配置了自定义函数
1139
- if (attr.dataChangeFunc) {
1140
- await executeStrFunction(attr.dataChangeFunc, [this.form, this.setForm, {
1141
- ...attr,
1142
- selectRows: row
1143
- }, util, this.mode, runLogic, getConfigByNameAsync])
1144
- } else {
1145
- // 默认填充选中行数据到当前表单
1146
- setDataByRealKey(this.form, row[0])
1147
- }
1148
- if (callback) {
1149
- callback()
1150
- }
1151
- },
1152
- }
1153
- }
1154
- </script>
1155
-
1156
- <style scoped lang="less">
1157
- :deep(.ant-form-inline .ant-form-item ) {
1158
- display: block !important;
1159
- }
1160
-
1161
- :deep(.ant-form-item-with-help) {
1162
- margin-bottom: 0;
1163
- }
1164
-
1165
- .xFormGroupTitle {
1166
- font-weight: bold;
1167
- color: @primary-color;
1168
- }
1169
- </style>
1
+ <template>
2
+ <div id="XAddNativeForm">
3
+ <a-form-model
4
+ v-if="loaded"
5
+ ref="selectForm"
6
+ :zIndex="1001"
7
+ :model="form"
8
+ v-bind="formItemLayoutGen"
9
+ :layout="layout">
10
+ <template v-for="(item, key) in childTableData">
11
+ <a-row
12
+ v-if="childTablePriority"
13
+ :gutter="16"
14
+ :key="'childTableRow' + key">
15
+ <a-card :title="item.name" :bordered="false" size="small">
16
+ <x-form-table
17
+ :key="'childTable_' + item.model"
18
+ :title="item.name"
19
+ :queryParamsName="item.childTableConfigName"
20
+ :localEditMode="true"
21
+ :fixed-query-form="childTableFixedQueryForm(item)"
22
+ :service-name="serviceName"
23
+ @innerXFormTableEmit="innerXFormTableEmit"
24
+ @afterTableInit="childTableMounted(item)"
25
+ :ref="'childXFormTable_' + item.model">
26
+ </x-form-table>
27
+ </a-card>
28
+ </a-row>
29
+ </template>
30
+ <a-row ref="GroupItemRow">
31
+ <a-col :span="3" v-if="!inXFormGroup && !(groups[0].groupName === DEFAULT_GROUP_NAME)">
32
+ <a-tabs tab-position="left" v-model="activeTab" @change="scrollToGroup">
33
+ <a-tab-pane
34
+ v-for="(groupsItem,groupsIndex) in groups"
35
+ :tab="groupsItem.groupName"
36
+ :key="groupsIndex">
37
+ </a-tab-pane>
38
+ </a-tabs>
39
+ </a-col>
40
+ <a-col
41
+ :span="(!inXFormGroup && !(groups[0].groupName === DEFAULT_GROUP_NAME)) ? 21: 24">
42
+ <a-row
43
+ :gutter="16"
44
+ type="flex"
45
+ :key="groupsIndex"
46
+ v-for="(groupsItem,groupsIndex) in groups"
47
+ >
48
+ <a-col
49
+ :span="24"
50
+ :style="{ marginTop: groupsIndex === 0 ? '' : '8px',fontSize:inXFormGroup?'15px':'14px', marginLeft:'-5px' }"
51
+ v-if="groupsItem.groupName !== DEFAULT_GROUP_NAME">
52
+ <span class="xFormGroupTitle" :ref="`group-title-${groupsIndex}`">{{ groupsItem.groupName }}</span>
53
+ </a-col>
54
+ <x-form-item
55
+ v-for="(item, index) in groupsItem.realJsonData"
56
+ :key="index"
57
+ :attr="item"
58
+ :disabled="itemDisabled(item)"
59
+ :read-only="readonly(item)"
60
+ :files="files"
61
+ v-bind="formItemLayoutGen"
62
+ :style="layout === 'inline' ? { marginTop:'5px' } : undefined"
63
+ :form="form"
64
+ :images="images"
65
+ :service-name="serviceName"
66
+ mode="新增/修改"
67
+ :layout="layout"
68
+ :rules="rules[`${item.name}${item.model}`]"
69
+ :get-data-params="getDataParams"
70
+ :env="env"
71
+ @x-form-item-emit-func="emitFunc"
72
+ @rowChoose="rowChoose"
73
+ :setForm="setForm"
74
+ />
75
+ </a-row>
76
+ </a-col>
77
+ </a-row>
78
+ <a-row :gutter="16" v-for="(groupItem, groupIndex) in groupJsonData" :key="groupIndex">
79
+ <a-card v-if="groupItem.groupItems.length > 0" :title="groupItem.name" :bordered="false" size="small">
80
+ <x-form-item
81
+ v-for="(item, index) in groupItem.groupItems"
82
+ :key="index"
83
+ :attr="item"
84
+ :disabled="itemDisabled(item)"
85
+ :readonly="readonly(item)"
86
+ :files="files"
87
+ v-bind="formItemLayoutGen"
88
+ :style="layout ==='inline'?{marginTop:'5px'}:undefined"
89
+ :form="form[groupItem.model]"
90
+ :images="images"
91
+ :service-name="serviceName"
92
+ mode="新增/修改"
93
+ :rules="rules[`${item.name}${item.model}`]"
94
+ :get-data-params="getDataParams"
95
+ :env="env"
96
+ :setForm="setForm"
97
+ @rowChoose="rowChoose"
98
+ />
99
+ </a-card>
100
+ <template v-else>
101
+ <slot
102
+ name="groupFormItems"
103
+ :form="form"
104
+ :model="groupItem.model"
105
+ :rules="rules"
106
+ :modifyModelData="modifyModelData"></slot>
107
+ </template>
108
+ </a-row>
109
+ <a-row :gutter="16" v-for="(item, key) in simpleFormJsonData" :key="'row' + key">
110
+ <a-card v-if="item.value.length > 0" :title="item.name" :bordered="false" size="small">
111
+ <x-form-item
112
+ v-for="(formItem, formItemIndex) in item.value"
113
+ :key="key + formItemIndex"
114
+ :attr="formItem"
115
+ :disabled="itemDisabled(formItem)"
116
+ :readonly="readonly(formItem)"
117
+ :files="files"
118
+ v-bind="formItemLayoutGen"
119
+ :style="layout ==='inline'?{marginTop:'5px'}:undefined"
120
+ :form="form[groupItem.model]"
121
+ :images="images"
122
+ :service-name="serviceName"
123
+ mode="新增/修改"
124
+ :rules="rules[`${item.name}${item.model}`]"
125
+ :get-data-params="getDataParams"
126
+ :env="env"
127
+ :setForm="setForm"
128
+ @rowChoose="rowChoose"
129
+ />
130
+ </a-card>
131
+ </a-row>
132
+ <template v-for="(item, key) in childTableData">
133
+ <a-row
134
+ v-if="!childTablePriority"
135
+ :gutter="16"
136
+ :key="'childTableRow' + key">
137
+ <a-card :title="item.name" :bordered="false" size="small">
138
+ <x-form-table
139
+ :key="'childTable_' + item.model"
140
+ :title="item.name"
141
+ :queryParamsName="item.childTableConfigName"
142
+ :localEditMode="true"
143
+ @innerXFormTableEmit="innerXFormTableEmit"
144
+ :fixed-query-form="childTableFixedQueryForm(item)"
145
+ :service-name="serviceName"
146
+ @afterTableInit="childTableMounted(item)"
147
+ :ref="'childXFormTable_' + item.model">
148
+ </x-form-table>
149
+ </a-card>
150
+ </a-row>
151
+ </template>
152
+ <a-row type="flex" :justify="btnPlace" :style="{paddingLeft: '16px',paddingRight: '16px'}">
153
+ <slot name="footer" :loading="loading">
154
+ <a-button v-if="showSubmitBtn" :loading="loading" type="primary" @click="onSubmit()">{{ btnName }}</a-button>
155
+ </slot>
156
+ </a-row>
157
+ </a-form-model>
158
+ </div>
159
+ </template>
160
+ <script>
161
+ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
162
+ import { formatDate, setDataByRealKey } from '@vue2-client/utils/util'
163
+ import * as util from '@vue2-client/utils/util'
164
+ import { mapState } from 'vuex'
165
+ import { addOrModify, getConfigByName, getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
166
+ import { checkIdNumber, REG_EMAIL, REG_LANDLINE, REG_PHONE } from '@vue2-client/utils/reg'
167
+ import moment from 'moment/moment'
168
+ import { executeStrFunction, executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
169
+ import formValidationMixin from '@vue2-client/mixins/formValidationMixin'
170
+
171
+ const DEFAULT_GROUP_NAME = '__default__'
172
+ export default {
173
+ name: 'XAddNativeForm',
174
+ components: {
175
+ XFormItem,
176
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue')
177
+ },
178
+ inject: {
179
+ inXFormGroup: {
180
+ default: false
181
+ },
182
+ formGroupContext: {
183
+ default: null
184
+ },
185
+ formDataChange: {
186
+ default: null
187
+ }
188
+ },
189
+ props: {},
190
+ data () {
191
+ return {
192
+ DEFAULT_GROUP_NAME,
193
+ // 预览模式
194
+ viewMode: false,
195
+ // 是否处理表单Key值
196
+ isHandleFormKey: true,
197
+ // 内容加载是否完成
198
+ loaded: false,
199
+ // 业务类型
200
+ businessType: '',
201
+ // 业务标题
202
+ title: '',
203
+ // 新增或修改业务是否执行中
204
+ loading: false,
205
+ // 表单Model
206
+ form: {},
207
+ // 配置名称
208
+ configName: undefined,
209
+ // 配置内容,用于查询配置生成器的预览
210
+ configContent: undefined,
211
+ // 表单项集合
212
+ formItems: [],
213
+ // 服务名称
214
+ serviceName: undefined,
215
+ // 是否显示提交按钮
216
+ showSubmitBtn: true,
217
+ // 修改有文件的表单时使用
218
+ files: [],
219
+ images: [],
220
+ // 校验
221
+ rules: {},
222
+ // 调用logic获取数据源的追加参数
223
+ getDataParams: {},
224
+ // 动态简易表单集合
225
+ simpleFormJsonData: {},
226
+ // 待修改的数据集
227
+ modifyModelData: {},
228
+ // 当前环境
229
+ env: 'prod',
230
+ // 表单主键
231
+ primaryKey: null,
232
+ // 表单模式 horizontal | vertical | inline
233
+ layout: 'horizontal',
234
+ // 提交按钮名称
235
+ btnName: '提交',
236
+ // 提交按钮位置 start / center / end
237
+ btnPlace: 'center',
238
+ // 子表是否排在前面
239
+ childTablePriority: false
240
+ }
241
+ },
242
+ computed: {
243
+ // 过滤出用于新增/修改场景的表单项
244
+ realJsonData: function () {
245
+ return this.formItems.filter((item) => {
246
+ return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version' && !this.itemDisabled(item)
247
+ })
248
+ },
249
+ // 表单项组 / 不是 数据组
250
+ groups: function () {
251
+ if (!this.realJsonData || this.realJsonData.length === 0) {
252
+ return [{
253
+ groupName: DEFAULT_GROUP_NAME,
254
+ realJsonData: this.realJsonData,
255
+ xAddFormLayout: 'horizontal'
256
+ }]
257
+ }
258
+ const uniqueGroups = new Set(this.realJsonData.map(item => item.group).filter(Boolean))
259
+ const allGroup = Array.from(uniqueGroups).map(group => {
260
+ return {
261
+ groupName: group,
262
+ realJsonData: this.realJsonData.filter(item => item.group === group),
263
+ xAddFormLayout: 'horizontal'
264
+ }
265
+ })
266
+ // 判断每一组得formJson 长度相加是否等于 realJsonData 长度 避免错误数据
267
+ if (allGroup.reduce((total, item) => total + item.realJsonData.length, 0) === this.realJsonData.length) {
268
+ return allGroup
269
+ } else {
270
+ return [{
271
+ groupName: DEFAULT_GROUP_NAME,
272
+ realJsonData: this.realJsonData,
273
+ xAddFormLayout: 'horizontal'
274
+ }]
275
+ }
276
+ },
277
+ // 拥有自定义校验函数得表单项
278
+ customValidateItems: function () {
279
+ return this.formItems.filter((item) => {
280
+ return item?.rule?.type === 'customJs'
281
+ })
282
+ },
283
+ // 过滤出用于新增/修改场景的表单项
284
+ groupJsonData: function () {
285
+ return this.formItems.filter((item) => {
286
+ return item.type === 'group'
287
+ }).map((item) => {
288
+ item.groupItems = item.groupItems.filter((item) => {
289
+ return item.addOrEdit && item.addOrEdit !== 'no' && item.addOrEdit !== 'silenceAdd' && item.addOrEdit !== 'version' && !this.itemDisabled(item)
290
+ }).map((groupItem) => {
291
+ // 只保留第一个下划线后面的内容
292
+ // 多层校验规则需要将prop设置为 key1.key2.....
293
+ groupItem.prop = `${item.model}.${groupItem.model.substring(groupItem.model.indexOf('_') + 1)}`
294
+ groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
295
+ return groupItem
296
+ })
297
+ return item
298
+ }
299
+ )
300
+ },
301
+ // 过滤出用于子表数据新增/修改场景的表单项
302
+ childTableData: function () {
303
+ return this.formItems.filter((item) => {
304
+ return item.type === 'childTable'
305
+ })
306
+ },
307
+ // 过滤出用于form子表数据新增/修改场景的表单项
308
+ childFormData: function () {
309
+ return this.formItems.filter((item) => {
310
+ return item.type === 'rowEdit'
311
+ })
312
+ },
313
+ // 过滤出用于静默新增场景的表单项
314
+ silenceAddJsonData: function () {
315
+ return this.formItems.filter(function (item) {
316
+ return item.addOrEdit === 'silenceAdd'
317
+ })
318
+ },
319
+ // 过滤出版本号表单项
320
+ versionJsonData: function () {
321
+ return this.formItems.filter(function (item) {
322
+ return item.addOrEdit === 'version'
323
+ })
324
+ },
325
+ formItemLayoutGen () {
326
+ if (this.layout === 'horizontal') {
327
+ return {
328
+ labelCol: { span: 4, offset: 2 },
329
+ wrapperCol: { span: 14 },
330
+ }
331
+ } else if (this.layout === 'vertical') {
332
+ return {}
333
+ } else {
334
+ if (!this.formItemLayout.labelCol || !this.formItemLayout.wrapperCol) {
335
+ return {
336
+ labelCol: { span: 8 },
337
+ wrapperCol: { span: 16 },
338
+ }
339
+ }
340
+ return {
341
+ labelCol: { span: this.formItemLayout.labelCol },
342
+ wrapperCol: { span: this.formItemLayout.wrapperCol },
343
+ }
344
+ }
345
+ },
346
+ ...mapState('account', { currUser: 'user' })
347
+ },
348
+ provide () {
349
+ return {
350
+ getComponentByName: this.getComponentByName,
351
+ registerComponent: this.registerComponent,
352
+ XFormContext: this,
353
+ // 移除必填项
354
+ removeRequired: this.removeRequired,
355
+ // 设置必填项
356
+ setRequired: this.setRequired,
357
+ getSelf: () => this,
358
+ }
359
+ },
360
+ watch: {
361
+ form: {
362
+ handler (val) {
363
+ if (this.formDataChange && typeof this.formDataChange === 'function') {
364
+ this.formDataChange(val)
365
+ }
366
+ },
367
+ deep: true
368
+ }
369
+ },
370
+ /** //todo 本来想要实现 配置 自定义函数时,表单项得红星提示,根据自定义校验函数得返回值来判断
371
+ * 但是监听不到父组件formgorup得其他form得变化,所以暂时不实现
372
+ */
373
+ //
374
+ // watch: {
375
+ // form: {
376
+ // handler (val) {
377
+ // // 遍历表单配置
378
+ // if (this.customValidateItems.length > 0) {
379
+ // for (const item of this.customValidateItems) {
380
+ // const itemIndex = this.formItems.findIndex(formItem => formItem.model === item.model)
381
+ // if (itemIndex < 0) {
382
+ // continue
383
+ // }
384
+ // try {
385
+ // this.customJsValidate(null, val[item.model], (res) => {
386
+ // // 如果返回error则设置错误信息
387
+ // if (res instanceof Error) {
388
+ // // 设置表单项的错误状态
389
+ // this.$set(this.formItems[itemIndex], 'tempRequired', true)
390
+ // } else {
391
+ // // 清除错误状态
392
+ // this.$set(this.formItems[itemIndex], 'tempRequired', true)
393
+ // }
394
+ // }, item)
395
+ // } catch (e) {
396
+ // console.error(e)
397
+ // this.$set(this.formItems[itemIndex], 'tempRequired', true)
398
+ // }
399
+ // }
400
+ // console.log('customValidateItems', JSON.stringify(this.customValidateItems))
401
+ // }
402
+ // },
403
+ // deep: true
404
+ // }
405
+ // },
406
+ mixins: [formValidationMixin],
407
+ methods: {
408
+ runLogic,
409
+ getConfigByNameAsync,
410
+ getConfigByName,
411
+ init (params) {
412
+ const {
413
+ configName,
414
+ configContent,
415
+ formItems,
416
+ formJson,
417
+ viewMode,
418
+ isHandleFormKey,
419
+ isKeyHandle = true,
420
+ showSubmitBtn = true,
421
+ serviceName,
422
+ primaryKey,
423
+ modifyModelData = {},
424
+ businessType,
425
+ title,
426
+ fixedAddForm = {},
427
+ getDataParams = {},
428
+ simpleFormJsonData = {},
429
+ env = 'prod',
430
+ layout,
431
+ xAddFormLayout = 'horizontal',
432
+ formItemLayout = {},
433
+ btnName = '提交',
434
+ childTablePriority = false,
435
+ btnPlace = 'center'
436
+ } = params
437
+ this.loaded = false
438
+ // 兼容需要省略 传递 layout: res.xAddFormLayout 可以使用 ...res 展开运算符 直接转递
439
+ if (xAddFormLayout && layout === undefined) {
440
+ this.layout = xAddFormLayout
441
+ } else {
442
+ this.layout = layout
443
+ }
444
+ this.formItemLayout = formItemLayout
445
+ if ((isHandleFormKey === null || isHandleFormKey === undefined) && !isKeyHandle) {
446
+ this.isHandleFormKey = isKeyHandle
447
+ } else if (isHandleFormKey) {
448
+ this.isHandleFormKey = isHandleFormKey
449
+ } else {
450
+ this.isHandleFormKey = isKeyHandle
451
+ }
452
+ this.childTablePriority = childTablePriority
453
+ this.configName = configName
454
+ this.configContent = configContent
455
+ this.formItems = this.getFromItem(formItems, formJson)
456
+ this.viewMode = viewMode
457
+ this.showSubmitBtn = showSubmitBtn
458
+ this.primaryKey = primaryKey
459
+ this.serviceName = serviceName
460
+ this.businessType = businessType
461
+ this.title = title
462
+ this.getDataParams = getDataParams
463
+ this.simpleFormJsonData = simpleFormJsonData
464
+ this.env = env
465
+ this.btnName = btnName
466
+ this.btnPlace = btnPlace
467
+ // 如果 fixedAddForm 有 selected_id 值,并且设置了处理表单key值,则多给 selected_id 加前缀 避免处理错误
468
+ if (fixedAddForm.selected_id && this.isHandleFormKey) {
469
+ fixedAddForm._selected_id = fixedAddForm.selected_id
470
+ delete fixedAddForm.selected_id
471
+ }
472
+ // 设置普通表单项的相关参数
473
+ const formData = Object.assign({}, fixedAddForm)
474
+ for (let i = 0; i < this.realJsonData.length; i++) {
475
+ const item = this.realJsonData[i]
476
+ this.setFormProps(formData, item, null)
477
+ }
478
+ // 设置表单分组项目相关参数
479
+ for (let i = 0; i < this.groupJsonData.length; i++) {
480
+ const groupItem = this.groupJsonData[i]
481
+ formData[groupItem.model] = {}
482
+ for (let j = 0; j < groupItem.groupItems.length; j++) {
483
+ const item = groupItem.groupItems[j]
484
+ this.setFormProps(formData[groupItem.model], item, item.prop)
485
+ }
486
+ }
487
+ // 设置动态简易表单项的相关参数
488
+ for (const key in this.simpleFormJsonData) {
489
+ for (const item of this.simpleFormJsonData[key].value) {
490
+ item.model = key + '@' + item.model
491
+ this.setFormProps(formData, item, null)
492
+ }
493
+ }
494
+
495
+ this.form = formData
496
+ // 修改场景下对表单项赋值
497
+ if (modifyModelData && modifyModelData.data) {
498
+ this.modifyModelData = modifyModelData
499
+ if (Object.keys(modifyModelData.data).length > 0) {
500
+ this.getModifyModelData(modifyModelData)
501
+ }
502
+ }
503
+ // 处理表单得附件
504
+ if (modifyModelData && modifyModelData.files) {
505
+ this.files = modifyModelData.files
506
+ }
507
+ if (modifyModelData && modifyModelData.images) {
508
+ this.images = modifyModelData.images
509
+ }
510
+ this.loaded = true
511
+ },
512
+ scrollToGroup (index) {
513
+ const groupElement = this.$refs[`group-title-${index}`][0]
514
+ if (groupElement) {
515
+ groupElement.scrollIntoView({ behavior: 'smooth' })
516
+ }
517
+ },
518
+ registerComponent (componentName, component) {
519
+ console.log('内部注册', this.$options.name, componentName)
520
+ this.$refs[componentName] = component
521
+ console.log('内部注册完成', this.$refs)
522
+ },
523
+ // 根据名字从注册到组件中获取组件
524
+ getComponentByName (componentName) {
525
+ console.log('内部取组件', this.$options.name, componentName)
526
+ console.log('内部组件内容', this.$refs)
527
+ return this.$refs[componentName]
528
+ },
529
+ // 兼容需要省略 传递 [formItems: res.formJson ] 可以使用 ...res 展开运算符 直接转递
530
+ getFromItem (formItems, formJson) {
531
+ const _formItems = formItems || formJson
532
+ if (typeof formItems === 'string') {
533
+ return JSON.parse(_formItems)
534
+ } else {
535
+ return JSON.parse(JSON.stringify(_formItems))
536
+ }
537
+ },
538
+ innerXFormTableEmit (fun, record, id, actionType, index) {
539
+ this.$emit(fun, record, id, actionType, index)
540
+ },
541
+ // 时间组件赋默认值
542
+ // .type, item.formDefault
543
+ getDateRange ({ type, formDefault: defaultValue, formValueFormat }) {
544
+ // const format = type === 'datePicker' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss'
545
+ let format = 'YYYY-MM-DD HH:mm:ss'
546
+ if (formValueFormat) {
547
+ format = formValueFormat
548
+ }
549
+ let start
550
+ switch (defaultValue) {
551
+ case 'curYear':
552
+ start = moment().startOf('year').format(format)
553
+ break
554
+ case 'curMonth':
555
+ start = moment().startOf('month').format(format)
556
+ break
557
+ case 'curDay':
558
+ start = moment().startOf('day').format(format)
559
+ break
560
+ case 'curTime':
561
+ start = moment().format(format)
562
+ break
563
+ default:
564
+ return defaultValue
565
+ }
566
+ return start
567
+ },
568
+ setFormProps (formData, item, groupItem) {
569
+ const rulesKey = `${item.name}${item.model}`
570
+ if (formData[item.model] === undefined || formData[item.model] === null) {
571
+ formData[item.model] = undefined
572
+ }
573
+ if (!formData[item.model] && item.formDefault) {
574
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
575
+ formData[item.model] = this.getDateRange(item)
576
+ } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.formDefault)) {
577
+ if (item.formDefault === 'curOrgId') {
578
+ formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
579
+ }
580
+ if (item.formDefault === 'curDepId') {
581
+ formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
582
+ }
583
+ if (item.formDefault === 'curUserId') {
584
+ formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
585
+ }
586
+ } else {
587
+ formData[item.model] = item.formDefault
588
+ }
589
+ }
590
+ // 处理表单校验情况
591
+ if (item.rule) {
592
+ if (groupItem) {
593
+ this.rules[groupItem] = []
594
+ } else {
595
+ this.rules[rulesKey] = []
596
+ }
597
+ const required = item.rule.required ? item.rule.required === true || item.rule.required === 'true' : false
598
+ let trigger
599
+ let message
600
+ if (required) {
601
+ switch (item.type) {
602
+ case 'select':
603
+ case 'checkbox':
604
+ case 'radio':
605
+ case 'treeSelect':
606
+ case 'rangePicker':
607
+ case 'monthPicker':
608
+ case 'yearPicker':
609
+ case 'datePicker':
610
+ case 'file':
611
+ case 'image':
612
+ case 'citySelect':
613
+ case 'addressSearch':
614
+ case 'personSetting':
615
+ message = '请选择' + item.name
616
+ trigger = 'change'
617
+ break
618
+ default:
619
+ message = '请输入' + item.name
620
+ trigger = 'blur'
621
+ }
622
+ if (groupItem) {
623
+ this.rules[groupItem].push({
624
+ required: true,
625
+ message: message,
626
+ trigger: trigger
627
+ })
628
+ } else {
629
+ this.rules[rulesKey].push({
630
+ required: true,
631
+ message: message,
632
+ trigger: trigger
633
+ })
634
+ }
635
+ }
636
+
637
+ switch (item.rule.type) {
638
+ case 'number':
639
+ case 'integer':
640
+ case 'float':
641
+ // eslint-disable-next-line no-case-declarations
642
+ let defaultValue
643
+ // eslint-disable-next-line no-case-declarations
644
+ let message
645
+ switch (item.rule.type) {
646
+ case 'number':
647
+ item.numberInput = true
648
+ message = '数字'
649
+ defaultValue = 0
650
+ break
651
+ case 'integer':
652
+ item.numberInput = true
653
+ message = '整数'
654
+ defaultValue = 0
655
+ break
656
+ case 'float':
657
+ item.numberInput = true
658
+ message = '小数'
659
+ defaultValue = 0.0
660
+ break
661
+ }
662
+ if (groupItem) {
663
+ this.rules[groupItem].push({
664
+ type: item.rule.type,
665
+ message: item.name + '必须为' + message,
666
+ transform: (value) => {
667
+ if (value && value.length !== 0) {
668
+ return Number(value)
669
+ } else {
670
+ return defaultValue
671
+ }
672
+ },
673
+ trigger: 'blur'
674
+ })
675
+ } else {
676
+ this.rules[rulesKey].push({
677
+ type: item.rule.type,
678
+ message: item.name + '必须为' + message,
679
+ transform: (value) => {
680
+ if (value && value.length !== 0) {
681
+ return Number(value)
682
+ } else {
683
+ return defaultValue
684
+ }
685
+ },
686
+ trigger: 'blur'
687
+ })
688
+ }
689
+ break
690
+ case 'email': {
691
+ const validator = (rule, value, callback) => {
692
+ if (value && !REG_EMAIL.test(value)) {
693
+ callback(new Error('请输入正确的邮箱地址'))
694
+ } else {
695
+ callback()
696
+ }
697
+ }
698
+ this.rules[groupItem || rulesKey].push({
699
+ type: 'email',
700
+ validator: validator,
701
+ message: '请输入正确的邮箱地址',
702
+ trigger: 'blur'
703
+ })
704
+ break
705
+ }
706
+ case 'userPhone': {
707
+ this.rules[groupItem || rulesKey].push({
708
+ type: 'userPhone',
709
+ validator: (rule, value, callback) => {
710
+ if (value && !REG_PHONE.test(value)) {
711
+ callback(new Error('请输入正确的手机号码'))
712
+ } else {
713
+ callback()
714
+ }
715
+ },
716
+ message: '请输入正确的手机号码',
717
+ trigger: 'blur'
718
+ })
719
+ break
720
+ }
721
+ case 'idNumber': {
722
+ this.rules[groupItem || rulesKey].push({
723
+ validator: (rule, value, callback) => {
724
+ if (value && !checkIdNumber(value)) {
725
+ callback(new Error('请输入正确的身份证号码'))
726
+ } else {
727
+ callback()
728
+ }
729
+ },
730
+ trigger: 'blur'
731
+ })
732
+ break
733
+ }
734
+ case 'landlineNumber': {
735
+ this.rules[rulesKey].push({
736
+ validator: (rule, value, callback) => {
737
+ if (value && !REG_LANDLINE.test(value)) {
738
+ callback(new Error('请输入正确的座机号码'))
739
+ } else {
740
+ callback()
741
+ }
742
+ },
743
+ trigger: 'blur'
744
+ })
745
+ break
746
+ }
747
+ // 大于0
748
+ case 'greaterThanZero': {
749
+ item.numberInput = true
750
+ this.rules[rulesKey].push({
751
+ validator: (rule, value, callback) => {
752
+ if (isNaN(value) || value <= 0) {
753
+ callback(new Error('请输入一个大于0的数字'))
754
+ } else {
755
+ callback()
756
+ }
757
+ },
758
+ trigger: 'blur'
759
+ })
760
+ break
761
+ }
762
+ // 大于等于0
763
+ case 'greaterThanOrEqualZero': {
764
+ item.numberInput = true
765
+ this.rules[rulesKey].push({
766
+ validator: (rule, value, callback) => {
767
+ if (isNaN(value) || value < 0) {
768
+ callback(new Error('请输入一个大于等于0的数字'))
769
+ } else {
770
+ callback()
771
+ }
772
+ },
773
+ trigger: 'blur'
774
+ })
775
+ break
776
+ }
777
+ case 'stringLength': {
778
+ this.rules[rulesKey].push({
779
+ validator: (rule, value, callback) => {
780
+ if (value && value.length < item.rule.minLen) {
781
+ callback(new Error('长度不能少于' + item.rule.minLen + '个字符'))
782
+ } else if (value && value.length > item.rule.maxLen) {
783
+ callback(new Error('长度不能超过' + item.rule.maxLen + '个字符'))
784
+ } else {
785
+ callback()
786
+ }
787
+ },
788
+ trigger: 'blur'
789
+ })
790
+ break
791
+ }
792
+ case 'customJs': {
793
+ this.rules[rulesKey].push({
794
+ validator: (rule, value, callback) => {
795
+ this.customJsValidate(rule, value, callback, item)
796
+ },
797
+ trigger: 'blur'
798
+ })
799
+ break
800
+ }
801
+ }
802
+ }
803
+ },
804
+ childTableMounted (item) {
805
+ // 子表初始化时,设置表格数据
806
+ if (this.form[item.model] && this.form[item.model].length > 0) {
807
+ this.$refs[`childXFormTable_${item.model}`][0].setTableData(this.form[item.model])
808
+ }
809
+ },
810
+ customJsValidate (rule, value, callback, item) {
811
+ if (item.rule.customValidatorFunc) {
812
+ executeStrFunctionByContext(this, item.rule.customValidatorFunc, [rule, value, callback, this.form, item, this.util, runLogic, getConfigByNameAsync])
813
+ } else {
814
+ callback()
815
+ }
816
+ },
817
+ itemDisabled (value) {
818
+ return (this.businessType === '新增' && value.addOrEdit === 'edit') ||
819
+ (this.businessType === '修改' && value.addOrEdit === 'add')
820
+ },
821
+ readonly (value) {
822
+ return value.addOrEdit === 'readonly'
823
+ },
824
+ async onSubmit () {
825
+ const valid = await this.validateForm()
826
+ if (!valid) return false
827
+ if (this.viewMode) {
828
+ this.$message.info('预览模式禁止新增和修改')
829
+ return false
830
+ }
831
+ this.loading = true
832
+ const requestForm = this.prepareForm()
833
+ await this.appendSilenceAddFields(requestForm)
834
+ const realForm = this.handleFormKeys(requestForm)
835
+ // 增加子表数据
836
+ if (this.childTableData.length > 0) {
837
+ for (const item of this.childTableData) {
838
+ const childModel = item.model
839
+ const childDataRef = this.$refs['childXFormTable_' + item.model][0].getTableData()
840
+ const childData = []
841
+ for (const item of childDataRef) {
842
+ childData.push(JSON.parse(JSON.stringify(item)))
843
+ }
844
+ for (let i = 0; i < childData.length; i++) {
845
+ childData[i] = this.handleFormKeys(childData[i])
846
+ // 外键不需要带表别名,所以此处放到表单处理后赋值
847
+ if (realForm.id) {
848
+ childData[i][item.childTableForeignKeyName] = realForm.id
849
+ }
850
+ }
851
+ realForm[childModel] = childData
852
+ }
853
+ }
854
+ // 增加form子表数据
855
+ if (this.childFormData.length > 0) {
856
+ for (const item of this.childFormData) {
857
+ const childModel = item.model
858
+ const childData = this.$refs[item.model].getTableData()
859
+ for (let i = 0; i < childData.length; i++) {
860
+ childData[i] = this.handleFormKeys(childData[i], true)
861
+ // 外键不需要带表别名,所以此处放到表单处理后赋值
862
+ if (realForm.id) {
863
+ childData[i][item.foreignKey] = realForm.id
864
+ }
865
+ }
866
+ realForm[childModel] = childData
867
+ }
868
+ }
869
+ if (this.$listeners.onSubmit) {
870
+ // 交由父级处理
871
+ this.$emit('onSubmit', {
872
+ businessType: this.businessType,
873
+ serviceName: this.serviceName,
874
+ realForm: realForm,
875
+ currUserName: this.currUser.name,
876
+ currUserId: this.currUser.id,
877
+ orgId: this.currUser.orgid
878
+ })
879
+ } else {
880
+ this.defaultSubmit(realForm)
881
+ }
882
+ },
883
+
884
+ async asyncSubmit () {
885
+ return new Promise((resolve, reject) => {
886
+ this.$refs.selectForm.validate(async valid => {
887
+ if (!valid) {
888
+ reject(new Error('Form validation failed'))
889
+ return
890
+ }
891
+ this.loading = true
892
+ const requestForm = this.prepareForm()
893
+ await this.appendSilenceAddFields(requestForm)
894
+ const realForm = this.handleFormKeys(requestForm)
895
+ resolve({
896
+ realForm,
897
+ businessType: this.businessType,
898
+ serviceName: this.serviceName,
899
+ currUserName: this.currUser.name,
900
+ currUserId: this.currUser.id,
901
+ orgId: this.currUser.orgid
902
+ })
903
+ })
904
+ })
905
+ },
906
+
907
+ validateForm () {
908
+ return new Promise((resolve) => {
909
+ this.$refs.selectForm.validate(valid => resolve(valid))
910
+ })
911
+ },
912
+
913
+ childTableFixedQueryForm (item) {
914
+ if (this.modifyModelData?.primaryKeyData) {
915
+ const fixedForm = {}
916
+ fixedForm[item.childTableForeignKeyName] = Object.values(this.modifyModelData.primaryKeyData)[0]
917
+ return fixedForm
918
+ }
919
+ return null
920
+ },
921
+
922
+ prepareForm () {
923
+ const form = { ...this.form }
924
+ for (const key of Object.keys(form)) {
925
+ const value = form[key]
926
+ if (value === null || (typeof value === 'object' && Object.keys(value).length === 0)) {
927
+ form[key] = undefined
928
+ }
929
+ }
930
+ return form
931
+ },
932
+
933
+ async appendSilenceAddFields (form) {
934
+ if (this.businessType === '新增') {
935
+ for (const item of this.silenceAddJsonData) {
936
+ switch (item.silencePurpose) {
937
+ case 'createTime':
938
+ form[item.model] = formatDate('now')
939
+ break
940
+ case 'operator':
941
+ form[item.model] = this.currUser.name
942
+ break
943
+ case 'operatorId':
944
+ form[item.model] = this.currUser.id
945
+ break
946
+ case 'orgId':
947
+ form[item.model] = this.currUser.orgid
948
+ break
949
+ case 'orgName':
950
+ form[item.model] = this.currUser.orgs
951
+ break
952
+ case 'depId':
953
+ form[item.model] = this.currUser.depids
954
+ break
955
+ case 'depName':
956
+ form[item.model] = this.currUser.deps
957
+ break
958
+ }
959
+ }
960
+ for (const item of this.silenceAddJsonData.filter((item) => item.silencePurpose === 'customize')) {
961
+ const result = await runLogic(item.silenceSource, form, this.serviceName)
962
+ if (result) {
963
+ const keys = Object.keys(result)
964
+ if (keys.length === 1 && keys[0] === 'value') {
965
+ form[item.model] = result.value
966
+ } else {
967
+ form[item.model] = result
968
+ }
969
+ } else {
970
+ form[item.model] = result
971
+ }
972
+ }
973
+ }
974
+ },
975
+
976
+ handleFormKeys (form, mustHandleKey = false) {
977
+ const realForm = {}
978
+ for (const key of Object.keys(form)) {
979
+ const value = form[key]
980
+ const extraFormKeyTagIndex = key.indexOf('@')
981
+ if (extraFormKeyTagIndex !== -1) {
982
+ const extraFormKey = key.substring(0, extraFormKeyTagIndex)
983
+ const realKey = key.substring(extraFormKeyTagIndex + 1)
984
+ if (!realForm[extraFormKey]) {
985
+ realForm[extraFormKey] = {}
986
+ }
987
+ realForm[extraFormKey][realKey] = value
988
+ } else {
989
+ const realKey = this.isHandleFormKey || mustHandleKey ? this.getRealKey(key, mustHandleKey) : key
990
+ // 如果发生重名,不覆盖,把key的别名带上
991
+ if (realForm[realKey]) {
992
+ realForm[key] = value
993
+ } else {
994
+ realForm[realKey] = value
995
+ }
996
+ }
997
+ }
998
+ return realForm
999
+ },
1000
+ // 默认提交事件
1001
+ defaultSubmit (realForm, callback) {
1002
+ // 新增移除id
1003
+ if (this.businessType === '新增') {
1004
+ delete realForm.id
1005
+ }
1006
+ // 组织请求
1007
+ const requestParameters = {
1008
+ queryParamsName: this.configName,
1009
+ queryParams: this.configContent,
1010
+ form: realForm,
1011
+ businessType: this.businessType,
1012
+ operator: this.currUser.name
1013
+ }
1014
+ addOrModify(requestParameters, this.serviceName, this.env === 'dev').then(data => {
1015
+ this.$message.success(this.businessType + '成功!')
1016
+ // commit
1017
+ this.$emit('afterSubmit', { type: this.businessType, id: data.id, data: data, form: requestParameters.form })
1018
+ this.loading = false
1019
+ if (callback) {
1020
+ callback()
1021
+ }
1022
+ }).catch(e => {
1023
+ this.loading = false
1024
+ this.$message.error(this.businessType + '失败:' + e)
1025
+ })
1026
+ },
1027
+ // 获取表单字段实际值
1028
+ getRealKey (key, mustHandleKey = false) {
1029
+ if (key === 'selected_id') return key
1030
+ if (this.isHandleFormKey || mustHandleKey) {
1031
+ return key.substring(key.indexOf('_') + 1)
1032
+ } else {
1033
+ return key
1034
+ }
1035
+ },
1036
+ /**
1037
+ * 获取被修改记录数据
1038
+ * @param modifyModelData 被修改记录的数据
1039
+ */
1040
+ getModifyModelData (modifyModelData) {
1041
+ if (modifyModelData.primaryKeyData) {
1042
+ this.form = Object.assign(this.form, modifyModelData.primaryKeyData)
1043
+ }
1044
+ // 对动态简易表单项特殊处理
1045
+ for (const key in modifyModelData.data) {
1046
+ const realKey = this.isHandleFormKey ? this.getRealKey(key) : key
1047
+ if (this.simpleFormJsonData[realKey]) {
1048
+ const extraForm = JSON.parse(modifyModelData.data[key])
1049
+ for (const key in extraForm) {
1050
+ const model = realKey + '@' + key
1051
+ this.form[model] = extraForm[key]
1052
+ }
1053
+ }
1054
+ }
1055
+ // 对普通表单项处理
1056
+ for (let i = 0; i < this.realJsonData.length; i++) {
1057
+ if (['FilesId', 'Images'].includes(this.realJsonData[i])) {
1058
+ // 附件需要跳过 因为会通过 modifyModelData中的files,images属性给upload赋值
1059
+ // 新增修改表单每次提交时只会提交最新添加的文件
1060
+ continue
1061
+ }
1062
+ const item = this.realJsonData[i]
1063
+ if (modifyModelData.data[item.model] || modifyModelData.data[item.model] === 0) {
1064
+ if (modifyModelData.data[item.model] instanceof Array) {
1065
+ this.form[item.model] = modifyModelData.data[item.model]
1066
+ } else {
1067
+ this.form[item.model] = modifyModelData.data[item.model] + ''
1068
+ }
1069
+ }
1070
+ }
1071
+ // 对分组表单进行处理
1072
+ for (let i = 0; i < this.groupJsonData.length; i++) {
1073
+ const item = this.groupJsonData[i]
1074
+ try {
1075
+ if (modifyModelData.data[item.model]) {
1076
+ this.form[item.model] = JSON.parse(modifyModelData.data[item.model])
1077
+ }
1078
+ } catch (e) {
1079
+ if (modifyModelData.data[item.model]) {
1080
+ this.form[item.model] = modifyModelData.data[item.model]
1081
+ }
1082
+ }
1083
+ }
1084
+ // 追加版本号信息
1085
+ for (const item of this.versionJsonData) {
1086
+ if (!modifyModelData.data[item.model]) {
1087
+ this.form[item.model] = 0
1088
+ } else {
1089
+ this.form[item.model] = modifyModelData.data[item.model] + ''
1090
+ }
1091
+ }
1092
+ },
1093
+ setForm (obj) {
1094
+ this.form = Object.assign(this.form, obj)
1095
+ // 给子表赋外键条件
1096
+ if (this.childFormData.length > 0) {
1097
+ for (const item of this.childFormData) {
1098
+ const child = this.$refs[item.model]
1099
+ // 获取子表别名,以便在条件上添加别名
1100
+ const alias = child.realQueryConfig.tableAliasName
1101
+ // 有主键,且主键有值,添加主键条件
1102
+ if (this.primaryKey && this.form[this.primaryKey]) {
1103
+ const foreignKey = item.foreignKey
1104
+ const fixedQueryForm = { [alias + '_' + foreignKey]: this.form[this.primaryKey] }
1105
+ if (!child.fixedQueryForm) {
1106
+ child.fixedQueryForm = fixedQueryForm
1107
+ } else {
1108
+ Object.assign(child.fixedQueryForm, fixedQueryForm)
1109
+ }
1110
+ child.refreshTable()
1111
+ }
1112
+ }
1113
+ }
1114
+ },
1115
+ setFormWithKey (obj) {
1116
+ setDataByRealKey(this.form, obj)
1117
+ },
1118
+ setFormWithNoKey (obj) {
1119
+ setDataByRealKey(this.form, obj)
1120
+ },
1121
+ emitFunc (func, data, value) {
1122
+ this.$emit(func, data, value)
1123
+ this.$emit('x-form-item-emit-func', func, data, value)
1124
+ },
1125
+ // 直接转发事件的函数
1126
+ emitEvent (event, ...args) {
1127
+ this.$emit(event, ...args)
1128
+ },
1129
+ close () {
1130
+ this.loaded = false
1131
+ },
1132
+ /**
1133
+ * 行选择事件
1134
+ * @param row 选中行集合
1135
+ * @param attr 表单项属性
1136
+ */
1137
+ async rowChoose (row, attr, callback) {
1138
+ // 如果配置了自定义函数
1139
+ if (attr.dataChangeFunc) {
1140
+ await executeStrFunction(attr.dataChangeFunc, [this.form, this.setForm, {
1141
+ ...attr,
1142
+ selectRows: row
1143
+ }, util, this.mode, runLogic, getConfigByNameAsync])
1144
+ } else {
1145
+ // 默认填充选中行数据到当前表单
1146
+ setDataByRealKey(this.form, row[0])
1147
+ }
1148
+ if (callback) {
1149
+ callback()
1150
+ }
1151
+ },
1152
+ }
1153
+ }
1154
+ </script>
1155
+
1156
+ <style scoped lang="less">
1157
+ :deep(.ant-form-inline .ant-form-item ) {
1158
+ display: block !important;
1159
+ }
1160
+
1161
+ :deep(.ant-form-item-with-help) {
1162
+ margin-bottom: 0;
1163
+ }
1164
+
1165
+ .xFormGroupTitle {
1166
+ font-weight: bold;
1167
+ color: @primary-color;
1168
+ }
1169
+ </style>