vue2-client 1.15.107 → 1.15.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (888) hide show
  1. package/.cursorrules +19 -19
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.apply +19 -19
  5. package/.env.development +1 -1
  6. package/.env.gaslink +19 -19
  7. package/.env.his +19 -19
  8. package/.env.iot +19 -19
  9. package/.env.liuli +20 -20
  10. package/.env.message +19 -19
  11. package/.env.revenue +19 -19
  12. package/.env.runtime +19 -19
  13. package/.env.scada +19 -19
  14. package/.eslintrc.js +90 -90
  15. package/.eslintrc.json +5 -5
  16. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  17. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  18. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  19. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  20. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  21. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  22. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  23. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  24. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  25. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  26. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  27. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  28. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  29. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  30. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  31. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  32. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  33. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  34. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  35. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  36. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  37. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  38. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  58. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  59. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  60. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  61. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  62. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  63. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  64. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  65. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  66. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  67. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  68. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  69. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  70. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  71. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  72. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  73. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  74. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  75. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  76. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  77. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  94. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  95. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  96. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  97. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  98. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  99. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  100. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  101. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  106. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  107. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  108. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  109. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  110. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  111. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  112. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  113. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  114. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  115. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  116. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  117. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  118. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  119. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  120. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134604.vue +263 -0
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134615.vue +302 -0
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134621.vue +301 -0
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134634.vue +311 -0
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134644.vue +330 -0
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134653.vue +330 -0
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134836.vue +330 -0
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135247.vue +330 -0
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135303.vue +354 -0
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135316.vue +363 -0
  131. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135323.vue +363 -0
  132. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135334.vue +366 -0
  133. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135342.vue +364 -0
  134. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135349.vue +364 -0
  135. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135351.vue +346 -0
  136. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135354.vue +346 -0
  137. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135401.vue +346 -0
  138. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135406.vue +346 -0
  139. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135424.vue +346 -0
  140. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807143043.vue +254 -0
  141. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155506.vue +329 -0
  142. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155535.vue +330 -0
  143. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155543.vue +330 -0
  144. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155926.vue +304 -0
  145. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155928.vue +304 -0
  146. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172548.vue +298 -0
  147. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172609.vue +298 -0
  148. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172623.vue +298 -0
  149. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172631.vue +298 -0
  150. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172701.vue +298 -0
  151. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172704.vue +298 -0
  152. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175937.vue +290 -0
  153. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175942.vue +290 -0
  154. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180210.vue +290 -0
  155. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180424.vue +290 -0
  156. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180448.vue +290 -0
  157. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180915.vue +262 -0
  158. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180917.vue +262 -0
  159. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101106.vue +283 -0
  160. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101112.vue +289 -0
  161. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101118.vue +289 -0
  162. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101129.vue +294 -0
  163. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101137.vue +318 -0
  164. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101145.vue +320 -0
  165. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101154.vue +320 -0
  166. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101211.vue +320 -0
  167. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101236.vue +320 -0
  168. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101239.vue +320 -0
  169. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114001.vue +342 -0
  170. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114005.vue +342 -0
  171. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114014.vue +345 -0
  172. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114020.vue +345 -0
  173. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114028.vue +345 -0
  174. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114108.vue +345 -0
  175. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114115.vue +345 -0
  176. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114333.vue +346 -0
  177. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114339.vue +350 -0
  178. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114344.vue +355 -0
  179. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114351.vue +355 -0
  180. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114408.vue +355 -0
  181. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250811114410.vue +355 -0
  182. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103845.vue +142 -0
  183. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103852.vue +142 -0
  184. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103857.vue +142 -0
  185. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103859.vue +142 -0
  186. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103907.vue +142 -0
  187. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103910.vue +142 -0
  188. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103911.vue +142 -0
  189. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103913.vue +142 -0
  190. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103916.vue +142 -0
  191. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103931.vue +142 -0
  192. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145127.vue +85 -0
  193. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145136.vue +81 -0
  194. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145142.vue +81 -0
  195. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145145.vue +81 -0
  196. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145148.vue +81 -0
  197. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145151.vue +81 -0
  198. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145155.vue +81 -0
  199. package/CHANGELOG.md +824 -824
  200. package/CLAUDE.md +89 -89
  201. package/Components.md +60 -60
  202. package/README.md +65 -65
  203. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +213 -0
  204. package/babel.config.js +21 -21
  205. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  206. package/docs/LowCode/lowcode.md +155 -155
  207. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  208. package/docs/index.md +30 -30
  209. package/docs/notice.md +22 -22
  210. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +185 -179
  211. package/index.js +31 -31
  212. package/jest-transform-stub.js +8 -8
  213. package/jest.config.js +22 -22
  214. package/jest.setup.js +7 -7
  215. package/jsconfig.json +19 -19
  216. package/package.json +111 -111
  217. package/public/his/editor/editor.html +51 -51
  218. package/public/his/editor/mock/bind_data.html +779 -779
  219. package/public/his/editor/mock/data_table.html +40 -40
  220. package/public/his/editor/mock/sign.html +75 -75
  221. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  222. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  223. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  224. package/public/his/editor/vender/date97/calendar.js +4 -4
  225. package/public/his/editor/vender/date97/lang/en.js +13 -13
  226. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  227. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  228. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  229. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  230. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  231. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  232. package/public/his/editor/vender/diff.js +1627 -1627
  233. package/public/his/editor/vender/editor.js +1 -1
  234. package/public/his/editor/vender/fabric.js +31187 -31187
  235. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  236. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  237. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  238. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  239. package/public/his/editor/vender/mui/mui.min.css +4 -4
  240. package/public/his/editor/vender/mui/mui.min.js +5 -5
  241. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  242. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  243. package/public/his/editor/vender/qrcode.js +7 -7
  244. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  245. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  246. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  247. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  248. package/public/his/editor/vender/validator.js +5094 -5094
  249. package/public/his/editor/vender/weui/weui.css +5659 -5659
  250. package/public/his/editor/vender/weui/weui.min.css +4 -4
  251. package/public/his/editor/vender/weui/weui.min.js +11 -11
  252. package/public/index.html +27 -27
  253. package/src/App.vue +196 -196
  254. package/src/ReportView.js +13 -13
  255. package/src/assets/img/querySlotDemo.svg +15 -15
  256. package/src/assets/svg/badtwo.svg +1 -1
  257. package/src/assets/svg/goodtwo.svg +1 -1
  258. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  259. package/src/base-client/components/AI/demo.vue +31 -31
  260. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  261. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  262. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  263. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  264. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  265. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  266. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  267. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  268. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  269. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  270. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  271. package/src/base-client/components/common/CitySelect/index.js +3 -3
  272. package/src/base-client/components/common/CitySelect/index.md +109 -109
  273. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  274. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  275. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  276. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  277. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  278. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  279. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  280. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  281. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  282. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  283. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  284. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  285. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  286. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  287. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  288. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  289. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  290. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  291. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  292. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  293. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  294. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  295. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  296. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  297. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  298. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  299. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  300. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  301. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  302. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  303. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  304. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  305. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  306. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  307. package/src/base-client/components/common/Recording/index.js +3 -3
  308. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  309. package/src/base-client/components/common/Tree/index.js +2 -2
  310. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  311. package/src/base-client/components/common/Upload/index.js +3 -3
  312. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  313. package/src/base-client/components/common/XAddForm/index.js +3 -3
  314. package/src/base-client/components/common/XAddForm/index.md +61 -61
  315. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  316. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  317. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  318. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  319. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  320. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  321. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  322. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  323. package/src/base-client/components/common/XAddReport/index.js +3 -3
  324. package/src/base-client/components/common/XAddReport/index.md +56 -56
  325. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  326. package/src/base-client/components/common/XBadge/index.js +3 -3
  327. package/src/base-client/components/common/XBadge/index.md +39 -39
  328. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  329. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  330. package/src/base-client/components/common/XButtons/index.js +3 -3
  331. package/src/base-client/components/common/XButtons/index.md +61 -61
  332. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  333. package/src/base-client/components/common/XCalendar/index.md +284 -284
  334. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  335. package/src/base-client/components/common/XCard/index.js +3 -3
  336. package/src/base-client/components/common/XCard/index.md +43 -43
  337. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  338. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  339. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  340. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  341. package/src/base-client/components/common/XCollapse/XCollapse.vue +355 -355
  342. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  343. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  344. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  345. package/src/base-client/components/common/XDataCard/index.js +3 -3
  346. package/src/base-client/components/common/XDataCard/index.md +1 -1
  347. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  348. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  349. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  350. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  351. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  352. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  353. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  354. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  355. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  356. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  357. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  358. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  359. package/src/base-client/components/common/XForm/XForm.vue +426 -426
  360. package/src/base-client/components/common/XForm/XFormItem.vue +1479 -1479
  361. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  362. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  363. package/src/base-client/components/common/XForm/demo.vue +105 -105
  364. package/src/base-client/components/common/XForm/index.js +3 -3
  365. package/src/base-client/components/common/XForm/index.md +178 -178
  366. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  367. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  368. package/src/base-client/components/common/XFormCol/index.js +3 -3
  369. package/src/base-client/components/common/XFormCol/index.md +35 -35
  370. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  371. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  372. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  373. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  374. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  375. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  376. package/src/base-client/components/common/XFormTable/XFormTable.vue +939 -939
  377. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  378. package/src/base-client/components/common/XFormTable/index.js +3 -3
  379. package/src/base-client/components/common/XFormTable/index.md +92 -92
  380. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  381. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  382. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  383. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  384. package/src/base-client/components/common/XInput/index.js +3 -3
  385. package/src/base-client/components/common/XInput/index.md +97 -97
  386. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  387. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  388. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  389. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  390. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  391. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  392. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  393. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  394. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  395. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  396. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  397. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  398. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  399. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  400. package/src/base-client/components/common/XPrint/index.vue +97 -97
  401. package/src/base-client/components/common/XRate/demo.vue +102 -102
  402. package/src/base-client/components/common/XRate/index.vue +149 -149
  403. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  404. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  405. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  406. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  407. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  408. package/src/base-client/components/common/XReport/index.js +3 -3
  409. package/src/base-client/components/common/XReport/index.md +103 -103
  410. package/src/base-client/components/common/XReport/print.js +186 -186
  411. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  412. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  413. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  414. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  415. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  416. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +724 -724
  417. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  418. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  419. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  420. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  421. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  422. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  423. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  424. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  425. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  426. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  427. package/src/base-client/components/common/XStepView/index.js +3 -3
  428. package/src/base-client/components/common/XStepView/index.md +31 -31
  429. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  430. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  431. package/src/base-client/components/common/XTab/index.js +3 -3
  432. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  433. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  434. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  435. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  436. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  437. package/src/base-client/components/common/XTable/index.js +3 -3
  438. package/src/base-client/components/common/XTable/index.md +255 -255
  439. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  440. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  441. package/src/base-client/components/common/XTimeline/index.md +191 -191
  442. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  443. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  444. package/src/base-client/components/common/XTree/index.js +3 -3
  445. package/src/base-client/components/common/XTree/index.md +36 -36
  446. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  447. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  448. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  449. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  450. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  451. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  452. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  453. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  454. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  455. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  456. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  457. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +678 -629
  458. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  459. package/src/base-client/components/his/XHisEditor/dome.vue +144 -0
  460. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  461. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcel.vue +218 -218
  462. package/src/base-client/components/his/XImportExcelButton/XFrontImportExcelDemo.vue +23 -21
  463. package/src/base-client/components/his/XImportExcelButton/XImportExcelButton.vue +103 -103
  464. package/src/base-client/components/his/XList/XList.vue +495 -495
  465. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  466. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  467. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  468. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  469. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  470. package/src/base-client/components/his/XRadio/index.md +234 -234
  471. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  472. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +354 -339
  473. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  474. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  475. package/src/base-client/components/his/XSimpleTable/XSimpleTable.vue +119 -119
  476. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  477. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  478. package/src/base-client/components/his/XTitle/README.md +113 -113
  479. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  480. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  481. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  482. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  483. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  484. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  485. package/src/base-client/components/index.js +51 -51
  486. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  487. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  488. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  489. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  490. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  491. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  492. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  493. package/src/base-client/components/layout/XPageView/index.js +2 -2
  494. package/src/base-client/components/layout/XPageView/index.md +96 -96
  495. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  496. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  497. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  498. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  499. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  500. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  501. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  502. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  503. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  504. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  505. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  506. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  507. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  508. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  509. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  510. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  511. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  512. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  513. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  514. package/src/base-client/plugins/AppData.js +126 -126
  515. package/src/base-client/plugins/Config.js +19 -19
  516. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  517. package/src/base-client/plugins/PagedList.js +177 -177
  518. package/src/base-client/plugins/Recording.js +258 -258
  519. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  520. package/src/base-client/plugins/authority-plugin.js +167 -167
  521. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  522. package/src/base-client/plugins/i18n-extend.js +32 -32
  523. package/src/base-client/plugins/index.js +23 -23
  524. package/src/base-client/plugins/moment.js +8 -8
  525. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  526. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  527. package/src/bootstrap.js +51 -51
  528. package/src/components/Charts/Bar.vue +62 -62
  529. package/src/components/Charts/ChartCard.vue +134 -134
  530. package/src/components/Charts/Liquid.vue +67 -67
  531. package/src/components/Charts/MiniArea.vue +39 -39
  532. package/src/components/Charts/MiniBar.vue +39 -39
  533. package/src/components/Charts/MiniProgress.vue +75 -75
  534. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  535. package/src/components/Charts/Radar.vue +68 -68
  536. package/src/components/Charts/RankList.vue +77 -77
  537. package/src/components/Charts/TagCloud.vue +113 -113
  538. package/src/components/Charts/TransferBar.vue +64 -64
  539. package/src/components/Charts/Trend.vue +82 -82
  540. package/src/components/Charts/chart.less +12 -12
  541. package/src/components/Charts/smooth.area.less +13 -13
  542. package/src/components/CodeMirror/inedx.vue +118 -118
  543. package/src/components/CodeMirror/setting.js +40 -40
  544. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  545. package/src/components/Ellipsis/index.js +3 -3
  546. package/src/components/Ellipsis/index.md +38 -38
  547. package/src/components/FileImageItem/FileItem.vue +320 -320
  548. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  549. package/src/components/FileImageItem/ImageItem.vue +107 -107
  550. package/src/components/FileImageItem/index.js +4 -4
  551. package/src/components/FilePreview/FilePreview.vue +181 -181
  552. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  553. package/src/components/FilePreview/index.js +3 -3
  554. package/src/components/HeightScanner/index.vue +615 -615
  555. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  556. package/src/components/NumberInfo/index.js +3 -3
  557. package/src/components/NumberInfo/index.less +54 -54
  558. package/src/components/NumberInfo/index.md +43 -43
  559. package/src/components/STable/README.md +341 -341
  560. package/src/components/STable/index.js +558 -558
  561. package/src/components/TableSetting/TableSetting.vue +143 -143
  562. package/src/components/TableSetting/index.js +3 -3
  563. package/src/components/Trend/Trend.vue +41 -41
  564. package/src/components/Trend/index.js +3 -3
  565. package/src/components/Trend/index.less +41 -41
  566. package/src/components/Trend/index.md +45 -45
  567. package/src/components/_util/util.js +46 -46
  568. package/src/components/cache/AKeepAlive.js +179 -179
  569. package/src/components/card/ChartCard.vue +79 -79
  570. package/src/components/chart/Bar.vue +60 -60
  571. package/src/components/chart/MiniArea.vue +67 -67
  572. package/src/components/chart/MiniBar.vue +59 -59
  573. package/src/components/chart/MiniProgress.vue +57 -57
  574. package/src/components/chart/Radar.vue +80 -80
  575. package/src/components/chart/RankingList.vue +60 -60
  576. package/src/components/chart/Trend.vue +79 -79
  577. package/src/components/chart/index.less +9 -9
  578. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  579. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  580. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  581. package/src/components/checkbox/index.js +9 -9
  582. package/src/components/exception/ExceptionPage.vue +70 -70
  583. package/src/components/exception/typeConfig.js +19 -19
  584. package/src/components/form/FormRow.vue +52 -52
  585. package/src/components/g2Charts/constants.js +202 -202
  586. package/src/components/g2Charts/demo.vue +808 -808
  587. package/src/components/g2Charts/designer.vue +228 -228
  588. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  589. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  590. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  591. package/src/components/g2Charts/index.vue +397 -397
  592. package/src/components/index.js +36 -36
  593. package/src/components/index.less +5 -5
  594. package/src/components/input/IInput.vue +66 -66
  595. package/src/components/menu/Contextmenu.vue +84 -84
  596. package/src/components/menu/SideMenu.vue +75 -75
  597. package/src/components/menu/index.less +38 -38
  598. package/src/components/menu/menu.js +273 -273
  599. package/src/components/page/header/PageHeader.vue +64 -64
  600. package/src/components/page/header/index.less +40 -40
  601. package/src/components/result/Result.vue +77 -77
  602. package/src/components/setting/Setting.vue +234 -234
  603. package/src/components/setting/SettingItem.vue +26 -26
  604. package/src/components/setting/i18n.js +117 -117
  605. package/src/components/table/StandardTable.vue +141 -141
  606. package/src/components/table/advance/ActionColumns.vue +158 -158
  607. package/src/components/table/advance/ActionSize.vue +45 -45
  608. package/src/components/table/advance/AdvanceTable.vue +275 -275
  609. package/src/components/table/advance/SearchArea.vue +355 -355
  610. package/src/components/table/advance/index.js +2 -2
  611. package/src/components/table/api/ApiTable.vue +50 -50
  612. package/src/components/task/TaskGroup.vue +80 -80
  613. package/src/components/task/TaskItem.vue +26 -26
  614. package/src/components/tool/AStepItem.vue +60 -60
  615. package/src/components/tool/AvatarList.vue +68 -68
  616. package/src/components/tool/DetailList.vue +157 -157
  617. package/src/components/tool/Drawer.vue +142 -142
  618. package/src/components/tool/FooterToolBar.vue +30 -30
  619. package/src/components/tool/HeadInfo.vue +35 -35
  620. package/src/components/tool/TagSelect.vue +83 -83
  621. package/src/components/tool/TagSelectOption.vue +33 -33
  622. package/src/components/transition/PageToggleTransition.vue +97 -97
  623. package/src/config/CreateQueryConfig.js +325 -325
  624. package/src/config/default/admin.config.js +18 -18
  625. package/src/config/default/animate.config.js +21 -21
  626. package/src/config/default/antd.config.js +89 -89
  627. package/src/config/default/index.js +6 -6
  628. package/src/config/default/setting.config.js +55 -55
  629. package/src/config/index.js +3 -3
  630. package/src/config/replacer/index.js +10 -10
  631. package/src/config/replacer/resolve.config.js +67 -67
  632. package/src/expression/ExpressionRunner.js +26 -26
  633. package/src/expression/TestExpression.js +509 -509
  634. package/src/expression/core/Delegate.js +115 -115
  635. package/src/expression/core/Expression.js +1358 -1358
  636. package/src/expression/core/Program.js +932 -932
  637. package/src/expression/core/Token.js +27 -27
  638. package/src/expression/enums/ExpressionType.js +81 -81
  639. package/src/expression/enums/TokenType.js +11 -11
  640. package/src/expression/exception/BreakWayException.js +2 -2
  641. package/src/expression/exception/ContinueWayException.js +2 -2
  642. package/src/expression/exception/ExpressionException.js +28 -28
  643. package/src/expression/exception/ReturnWayException.js +14 -14
  644. package/src/expression/exception/ServiceException.js +22 -22
  645. package/src/expression/instances/LogicConsole.js +44 -44
  646. package/src/expression/ts/ExpressionRunner.ts +28 -28
  647. package/src/expression/ts/TestExpression.ts +509 -509
  648. package/src/expression/ts/core/Delegate.ts +114 -114
  649. package/src/expression/ts/core/Expression.ts +1309 -1309
  650. package/src/expression/ts/core/Program.ts +950 -950
  651. package/src/expression/ts/core/Token.ts +29 -29
  652. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  653. package/src/expression/ts/enums/TokenType.ts +13 -13
  654. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  655. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  656. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  657. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  658. package/src/expression/ts/exception/ServiceException.ts +22 -22
  659. package/src/expression/ts/instances/JSONArray.ts +48 -48
  660. package/src/expression/ts/instances/JSONObject.ts +109 -109
  661. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  662. package/src/font-style/font.css +4 -4
  663. package/src/layouts/AdminLayout.vue +176 -176
  664. package/src/layouts/BlankView.vue +81 -81
  665. package/src/layouts/CommonLayout.vue +56 -56
  666. package/src/layouts/ComponentLayoutOne.vue +47 -47
  667. package/src/layouts/GridView.vue +43 -43
  668. package/src/layouts/PageLayout.vue +151 -151
  669. package/src/layouts/PageView.vue +55 -55
  670. package/src/layouts/SinglePageView.vue +136 -136
  671. package/src/layouts/footer/PageFooter.vue +49 -49
  672. package/src/layouts/header/AdminHeader.vue +132 -132
  673. package/src/layouts/header/HeaderAvatar.vue +64 -64
  674. package/src/layouts/header/HeaderNotice.vue +177 -177
  675. package/src/layouts/header/HeaderSearch.vue +67 -67
  676. package/src/layouts/header/InstitutionDetail.vue +181 -181
  677. package/src/layouts/header/index.less +92 -92
  678. package/src/layouts/tabs/TabsHead.vue +189 -189
  679. package/src/layouts/tabs/TabsView.vue +383 -383
  680. package/src/layouts/tabs/i18n.js +25 -25
  681. package/src/layouts/tabs/index.js +2 -2
  682. package/src/lib.js +1 -1
  683. package/src/logic/LogicRunner.js +62 -62
  684. package/src/logic/TestLogic.js +13 -13
  685. package/src/logic/plugins/common/DateTools.js +35 -35
  686. package/src/logic/plugins/common/VueTools.js +30 -30
  687. package/src/logic/plugins/index.js +7 -7
  688. package/src/logic/ts/LogicRunner.ts +67 -67
  689. package/src/logic/ts/TestLogic.ts +13 -13
  690. package/src/main.js +33 -33
  691. package/src/mixins/formValidationMixin.js +46 -46
  692. package/src/mock/common/activityData.js +32 -32
  693. package/src/mock/common/index.js +89 -89
  694. package/src/mock/common/reportData.js +20 -20
  695. package/src/mock/common/tableData.js +118 -118
  696. package/src/mock/extend/index.js +84 -84
  697. package/src/mock/goods/index.js +108 -108
  698. package/src/mock/index.js +12 -12
  699. package/src/mock/project/index.js +17 -17
  700. package/src/mock/user/current.js +13 -13
  701. package/src/mock/user/login.js +39 -39
  702. package/src/mock/user/routes.js +61 -61
  703. package/src/mock/workplace/index.js +15 -15
  704. package/src/pages/DefaultExample/index.vue +77 -77
  705. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  706. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  707. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  708. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  709. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  710. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  711. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  712. package/src/pages/DynamicStatistics/index.vue +282 -282
  713. package/src/pages/Example/childIndex.vue +15 -15
  714. package/src/pages/Example/index.vue +30 -30
  715. package/src/pages/LogicCallExample/index.vue +46 -46
  716. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  717. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  718. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  719. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  720. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  721. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  722. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  723. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  724. package/src/pages/Recording/index.vue +77 -77
  725. package/src/pages/ReportGrid/index.vue +76 -76
  726. package/src/pages/ReportView.vue +50 -50
  727. package/src/pages/ServiceReview/index.vue +284 -284
  728. package/src/pages/SubExample/index.vue +26 -26
  729. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  730. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  731. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  732. package/src/pages/WorkflowDetail/WorkflowDetail.vue +397 -397
  733. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  734. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  735. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  736. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  737. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  738. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  739. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +125 -125
  740. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  741. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +218 -218
  742. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  743. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  744. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  745. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  746. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  747. package/src/pages/XPageViewExample/index.vue +149 -149
  748. package/src/pages/XReportView/index.vue +64 -64
  749. package/src/pages/XTreeOneProExample/index.vue +67 -67
  750. package/src/pages/addressSelect/addressDemo.vue +24 -24
  751. package/src/pages/addressSelect/index.vue +270 -270
  752. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  753. package/src/pages/dashboard/workplace/i18n.js +40 -40
  754. package/src/pages/dashboard/workplace/index.js +2 -2
  755. package/src/pages/dashboard/workplace/index.less +59 -59
  756. package/src/pages/exception/403.vue +21 -21
  757. package/src/pages/exception/404.vue +24 -24
  758. package/src/pages/exception/500.vue +21 -21
  759. package/src/pages/login/Login.vue +380 -380
  760. package/src/pages/login/LoginV3.vue +389 -389
  761. package/src/pages/login/index.js +2 -2
  762. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  763. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  764. package/src/pages/report/ReportTable.js +124 -124
  765. package/src/pages/report/ReportTableHome.vue +28 -28
  766. package/src/pages/resourceManage/depListManage.vue +23 -23
  767. package/src/pages/resourceManage/funListManage.vue +23 -23
  768. package/src/pages/resourceManage/index.js +15 -15
  769. package/src/pages/resourceManage/orgListManage.vue +98 -98
  770. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  771. package/src/pages/resourceManage/roleListManage.vue +23 -23
  772. package/src/pages/resourceManage/staffListManage.vue +23 -23
  773. package/src/pages/system/dictionary/index.vue +44 -44
  774. package/src/pages/system/file/Info.vue +56 -56
  775. package/src/pages/system/file/index.vue +317 -317
  776. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  777. package/src/pages/system/monitor/operLog/index.vue +37 -37
  778. package/src/pages/system/settings/index.vue +126 -126
  779. package/src/pages/system/settings/modifyPassword.vue +117 -117
  780. package/src/pages/system/ticket/index.vue +480 -480
  781. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  782. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  783. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  784. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  785. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  786. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  787. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  788. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  789. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  790. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  791. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  792. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  793. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  794. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  795. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  796. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  797. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  798. package/src/pages/userInfoDetailManage/index.vue +290 -290
  799. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  800. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  801. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  802. package/src/plugins/EventLogPlugin.js +33 -33
  803. package/src/plugins/FindParentsData.js +17 -17
  804. package/src/plugins/HiPrintPlugin.js +164 -164
  805. package/src/router/async/config.async.js +35 -35
  806. package/src/router/async/router.map.js +127 -127
  807. package/src/router/guards.js +262 -262
  808. package/src/router/i18n.js +57 -57
  809. package/src/router/index.js +27 -27
  810. package/src/router.js +17 -17
  811. package/src/services/DataModel.js +30 -30
  812. package/src/services/LodopFuncs.js +137 -137
  813. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  814. package/src/services/api/LogDetailsViewApi.js +10 -10
  815. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  816. package/src/services/api/TicketDetailsViewApi.js +46 -46
  817. package/src/services/api/cas.js +79 -79
  818. package/src/services/api/common.js +346 -346
  819. package/src/services/api/entity.js +18 -18
  820. package/src/services/api/index.js +17 -17
  821. package/src/services/api/logininfor/index.js +6 -6
  822. package/src/services/api/manage.js +8 -8
  823. package/src/services/api/restTools.js +215 -215
  824. package/src/services/api/workFlow.js +57 -57
  825. package/src/services/apiService.js +16 -16
  826. package/src/services/dataSource.js +12 -12
  827. package/src/services/index.js +7 -7
  828. package/src/services/user.js +92 -92
  829. package/src/services/v3Api.js +116 -116
  830. package/src/store/index.js +5 -5
  831. package/src/store/modules/account.js +115 -115
  832. package/src/store/modules/index.js +5 -5
  833. package/src/store/modules/lowCode.js +33 -33
  834. package/src/store/modules/setting.js +119 -119
  835. package/src/store/mutation-types.js +4 -4
  836. package/src/theme/antd/ant-menu.less +2 -2
  837. package/src/theme/antd/ant-message.less +3 -3
  838. package/src/theme/antd/ant-table.less +22 -22
  839. package/src/theme/antd/ant-time-picker.less +3 -3
  840. package/src/theme/antd/index.less +3 -3
  841. package/src/theme/default/color.less +43 -43
  842. package/src/theme/default/index.less +3 -3
  843. package/src/theme/default/nprogress.less +76 -76
  844. package/src/theme/default/style.less +58 -58
  845. package/src/theme/global.less +279 -279
  846. package/src/theme/index.less +5 -5
  847. package/src/theme/reportTable.less +58 -58
  848. package/src/theme/theme.less +1 -1
  849. package/src/utils/EncryptUtil.js +162 -162
  850. package/src/utils/Objects.js +25 -25
  851. package/src/utils/authority-utils.js +85 -85
  852. package/src/utils/axios-interceptors.js +100 -100
  853. package/src/utils/colors.js +107 -107
  854. package/src/utils/common.js +10 -10
  855. package/src/utils/errorCode.js +6 -6
  856. package/src/utils/excel/Blob.js +180 -180
  857. package/src/utils/excel/Export2Excel.js +184 -184
  858. package/src/utils/filter.js +21 -21
  859. package/src/utils/formatter.js +74 -74
  860. package/src/utils/htmlToPDF.js +108 -108
  861. package/src/utils/htmlToPDFApi.js +5 -5
  862. package/src/utils/i18n.js +80 -80
  863. package/src/utils/indexedDB.js +549 -549
  864. package/src/utils/login.js +188 -188
  865. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  866. package/src/utils/lowcode/lowcodeLog.js +29 -29
  867. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  868. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  869. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  870. package/src/utils/map-utils.js +47 -47
  871. package/src/utils/microAppUtils.js +49 -49
  872. package/src/utils/reg.js +95 -95
  873. package/src/utils/request.js +395 -395
  874. package/src/utils/routerUtil.js +574 -567
  875. package/src/utils/runEvalFunction.js +14 -14
  876. package/src/utils/theme-color-replacer-extend.js +92 -92
  877. package/src/utils/themeUtil.js +100 -100
  878. package/src/utils/util.js +329 -329
  879. package/src/utils/waterMark.js +31 -31
  880. package/test/Tree.spec.js +168 -168
  881. package/test/myDialog.spec.js +47 -47
  882. package/test/request.test.js +17 -17
  883. package/test/util.test.js +53 -53
  884. package/test/v3Api.test.js +1984 -1984
  885. package/tests/unit/ReportTable.spec.js +16 -16
  886. package/vue.config.js +222 -222
  887. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  888. package/.claude/settings.local.json +0 -12
@@ -1,1479 +1,1479 @@
1
- <template>
2
- <!-- 输入框 -->
3
- <x-form-col
4
- v-if="attr.type === 'input' && show"
5
- :occupyCol="attr.occupyCol"
6
- :labelCol="labelCol"
7
- :flex="attr.flex">
8
- <a-form-model-item
9
- v-bind="bindOther"
10
- :rules="rules"
11
- :ref="attr.model"
12
- :label="showLabel?attr.name:undefined"
13
- :prop="attr.prop ? attr.prop : attr.model">
14
- <!-- 如果配置了后置按钮插槽 -->
15
- <a-input-group
16
- v-if="((attr.inputOnAfterName && attr.inputOnAfterFunc) || (attr.inputOnAfterIcon && attr.inputOnAfterIconFunc)) && mode !== '查询'"
17
- style="display: flex; width: 100%; padding: 4px 0"
18
- compact>
19
- <a-input
20
- v-model="form[attr.model]"
21
- :read-only="readOnly"
22
- :disabled="disabled && !readOnly"
23
- :whitespace="true"
24
- @input="attr.dataChangeFunc && debouncedDataChangeFunc()"
25
- :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
26
- @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
27
- @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
28
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
29
- :ref="`${attr.model}input`"/>
30
- <a-button
31
- v-if="attr.inputOnAfterName && attr.inputOnAfterFunc && !attr.inputOnAfterName.includes('|')"
32
- style="width: auto; min-width: 4rem;max-width: 6rem"
33
- type="primary"
34
- @click="emitFunc(attr.inputOnAfterFunc,attr)">
35
- {{ attr.inputOnAfterName }}
36
- </a-button>
37
- <!-- 仅可以配置 一个按钮 以及 一个图标插槽 -->
38
- <a-button
39
- style="width: 2rem; flex-shrink: 0;"
40
- v-else-if="attr.inputOnAfterIcon"
41
- :type="attr.inputOnAfterIcon && attr.inputOnAfterName ? 'primary' :''"
42
- :icon="attr.inputOnAfterIcon || 'question'"
43
- @click="emitFunc(attr.inputOnAfterIconFunc,attr)">
44
- </a-button>
45
- <!-- 状态按钮 -->
46
- <x-status-button
47
- v-else
48
- :states="parseStates(attr.inputOnAfterName, attr.inputOnAfterFunc)"
49
- v-on="generateDynamicEvents(attr.inputOnAfterFunc, attr)"
50
- style="width: auto; min-width: 4rem; max-width: 6rem"
51
- />
52
- </a-input-group>
53
- <a-input-number
54
- v-else-if="attr.numberInput && !readOnly"
55
- v-model="form[attr.model]"
56
- :whitespace="true"
57
- @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
58
- :disabled="disabled && !readOnly"
59
- style="width:100%"
60
- @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
61
- @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
62
- :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
63
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
64
- :ref="`${attr.model}input`"/>
65
- <a-input
66
- v-else
67
- v-model="form[attr.model]"
68
- :whitespace="true"
69
- :read-only="readOnly"
70
- :disabled="disabled && !readOnly"
71
- @input="attr.dataChangeFunc && debouncedDataChangeFunc()"
72
- :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
73
- style="width:100%"
74
- @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
75
- @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
76
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
77
- :ref="`${attr.model}input`"/>
78
- </a-form-model-item>
79
- </x-form-col>
80
- <!-- 下拉框 -->
81
- <x-form-col
82
- v-else-if="attr.type === 'select' && show"
83
- :labelCol="labelCol"
84
- :flex="attr.flex">
85
- <a-form-model-item
86
- v-bind="bindOther"
87
- :rules="rules"
88
- v-if="!attr.showMode || mode === '查询' || attr.showMode === 'select' "
89
- :ref="attr.model"
90
- :label="showLabel?attr.name:undefined"
91
- :prop="attr.prop ? attr.prop : attr.model">
92
- <!-- <span slot="label" class="label-box">{{ showLabel?attr.name:undefined }}</span>-->
93
- <a-select
94
- v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
95
- v-model="form[attr.model]"
96
- :disabled="disabled"
97
- @change="handleSelectChange"
98
- :filter-option="filterOption"
99
- :getPopupContainer="getPopupContainer"
100
- dropdownClassName="custom-dropdown"
101
- :dropdownMatchSelectWidth="false"
102
- :dropdownStyle="{ position: 'absolute'}"
103
- :placeholder="attr.placeholder ? attr.placeholder : '请选择'"
104
- show-search
105
- :allowClear="true"
106
- :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
107
- >
108
- <a-select-option
109
- v-if="mode === '查询'"
110
- key="999999"
111
- value="">全部
112
- </a-select-option>
113
- <template v-if="attr.keys">
114
- <a-select-option
115
- v-for="(item,index) in attr.keys"
116
- :key="index.value"
117
- :value="item.value + ''">
118
- {{ item.label }}
119
- </a-select-option>
120
- </template>
121
- <template v-else>
122
- <template
123
- v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
124
- ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
125
- <a-select-option
126
- v-for="(item,index) in option"
127
- :key="index.value"
128
- :value="item.value + ''">
129
- <template v-if="attr.keyName.indexOf('config@') !== -1 && item.status">
130
- <!-- 徽标(badge) -->
131
- <a-badge v-if="item.status !== 'gary'" :color="item.status" :text="item.label"/>
132
- <a-badge v-else color="#D9D9D9" :text="item.label"/>
133
- </template>
134
- <template v-else>
135
- {{ item.label }}
136
- </template>
137
- </a-select-option>
138
- </template>
139
- <template
140
- v-else-if="attr.keyName.indexOf('async ') !== -1 || attr.keyName.indexOf('function ') !== -1">
141
- <a-select-option
142
- v-for="(item,index) in optionForFunc"
143
- :key="index.value"
144
- :value="item.value + ''">
145
- <template>
146
- {{ item.label }}
147
- </template>
148
- </a-select-option>
149
- </template>
150
- <template v-else>
151
- <a-select-option
152
- v-for="item in $appdata.getDictionaryList(attr.keyName)"
153
- :key="item.value"
154
- :value="item.value + ''">
155
- <!-- 徽标(badge) -->
156
- <x-badge
157
- :badge-key="attr.keyName"
158
- :replaceText="item.text"
159
- :value="item.value"
160
- :service-name="serviceName"
161
- :env="env"/>
162
- </a-select-option>
163
- </template>
164
- </template>
165
- </a-select>
166
- <a-select
167
- v-else
168
- v-model="form[attr.model]"
169
- :disabled="disabled"
170
- @change="handleSelectChange"
171
- :filter-option="filterOption"
172
- :getPopupContainer="getPopupContainer"
173
- dropdownClassName="custom-dropdown"
174
- :dropdownMatchSelectWidth="false"
175
- :dropdownStyle="{ position: 'absolute'}"
176
- :placeholder="attr.placeholder ? attr.placeholder : '搜索' + attr.name"
177
- show-search
178
- @search="fetchFunction"
179
- >
180
- <template #notFoundContent>
181
- <a-spin v-if="searching" size="small"/>
182
- </template>
183
- <a-select-option
184
- v-if="mode === '查询'"
185
- key="999999"
186
- value="">全部
187
- </a-select-option>
188
- <a-select-option
189
- v-for="(item,index) in option"
190
- :key="index"
191
- :value="item.value + ''">{{ item.label }}
192
- </a-select-option>
193
- </a-select>
194
- </a-form-model-item>
195
- <a-form-model-item
196
- v-bind="bindOther"
197
- :rules="rules"
198
- v-else-if="attr.showMode === 'radioGroup'"
199
- :ref="attr.model"
200
- :label="showLabel?attr.name:undefined"
201
- :prop="attr.prop ? attr.prop : attr.model">
202
- <a-radio-group v-model="form[attr.model]">
203
- <a-radio-button v-for="modeItem in option" :key="modeItem.value" :value="modeItem.value">
204
- {{ modeItem.label }}
205
- </a-radio-button>
206
- </a-radio-group>
207
- </a-form-model-item>
208
- <a-form-model-item
209
- v-bind="bindOther"
210
- v-else-if="attr.showMode === 'clickChange' && option.length > 0"
211
- :ref="attr.model"
212
- :label="showLabel?attr.name:undefined"
213
- :prop="attr.prop ? attr.prop : attr.model">
214
- <XClickChangeBtn></XClickChangeBtn>
215
- </a-form-model-item>
216
- </x-form-col>
217
- <!-- 多选框 -->
218
- <x-form-col
219
- v-else-if="attr.type === 'checkbox' && show"
220
- :labelCol="labelCol"
221
- :flex="attr.flex">
222
- <a-form-model-item
223
- v-bind="bindOther"
224
- :rules="rules"
225
- v-if="!attr.showMode || mode === '查询' || attr.showMode === 'select' "
226
- :ref="attr.model"
227
- :label="showLabel?attr.name:undefined"
228
- :prop="attr.prop ? attr.prop : attr.model">
229
- <a-select
230
- class="multiple_select"
231
- style="width:100%"
232
- v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
233
- v-model="form[attr.model]"
234
- :disabled="disabled"
235
- :filter-option="filterOption"
236
- :getPopupContainer="getPopupContainer"
237
- :placeholder="attr.placeholder ? attr.placeholder : '请选择'"
238
- @change="handleCheckboxChange"
239
- mode="multiple"
240
- show-search
241
- allowClear
242
- >
243
- <template v-if="attr.keys">
244
- <a-select-option
245
- v-for="(item,index) in attr.keys"
246
- :key="index"
247
- :value="item.value + ''">
248
- {{ item.label }}
249
- </a-select-option>
250
- </template>
251
- <template v-else>
252
- <template
253
- v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
254
- ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
255
- <a-select-option
256
- v-for="(item,index) in option"
257
- :key="index"
258
- :value="item.value">{{ item.label }}
259
- </a-select-option>
260
- </template>
261
- <template v-else>
262
- <a-select-option
263
- v-for="item in $appdata.getDictionaryList(attr.keyName)"
264
- :key="item.value"
265
- :value="item.value + ''">{{ item.text }}
266
- </a-select-option>
267
- </template>
268
- </template>
269
- </a-select>
270
- <a-select
271
- v-else
272
- class="multiple_select"
273
- v-model="form[attr.model]"
274
- :disabled="disabled"
275
- :filter-option="filterOption"
276
- :getPopupContainer="getPopupContainer"
277
- :placeholder="attr.placeholder ? attr.placeholder : '搜索' + attr.name"
278
- mode="multiple"
279
- style="width:100%"
280
- @change="handleCheckboxChange"
281
- show-search
282
- allowClear
283
- @search="fetchFunction"
284
- >
285
- <template #notFoundContent>
286
- <a-spin v-if="searching" size="small"/>
287
- </template>
288
- <a-select-option
289
- v-for="(item,index) in option"
290
- :key="index"
291
- :value="item.value + ''">{{ item.label }}
292
- </a-select-option>
293
- </a-select>
294
- </a-form-model-item>
295
- <a-form-model-item
296
- v-bind="bindOther"
297
- :rules="rules"
298
- v-else
299
- :ref="attr.model"
300
- :label="showLabel?attr.name:undefined"
301
- :prop="attr.prop ? attr.prop : attr.model">
302
- <a-checkbox-group
303
- v-model="form[attr.model]"
304
- :options="option"
305
- @change="handleCheckboxChange"
306
- />
307
- </a-form-model-item>
308
- </x-form-col>
309
- <!-- 单选框 -->
310
- <x-form-col
311
- v-else-if="attr.type === 'radio' && show"
312
- :labelCol="labelCol"
313
- :flex="attr.flex">
314
- <a-form-model-item
315
- v-bind="bindOther"
316
- :rules="rules"
317
- v-if="!attr.showMode || attr.type === 'radio' "
318
- :ref="attr.model"
319
- :label="showLabel?attr.name:undefined"
320
- :prop="attr.prop ? attr.prop : attr.model">
321
- <a-radio-group
322
- v-model="form[attr.model]"
323
- @change="handleRadioChange"
324
- >
325
- <template v-if="attr.keys">
326
- <a-radio v-for="(item,index) in attr.keys" :key="index" :value="item.value">
327
- {{ item.label }}
328
- </a-radio>
329
- </template>
330
- <template v-else>
331
- <template
332
- v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
333
- ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
334
- <a-radio v-for="(item,index) in option" :key="index" :value="item.value">
335
- {{ item.label }}
336
- </a-radio>
337
- </template>
338
- <template v-else>
339
- <a-radio v-for="(item,index) in $appdata.getDictionaryList(attr.keyName)" :key="index" :value="item.value">
340
- {{ item.text }}
341
- </a-radio>
342
- </template>
343
- </template>
344
- </a-radio-group>
345
- </a-form-model-item>
346
- <a-form-model-item
347
- v-bind="bindOther"
348
- :rules="rules"
349
- v-else-if="attr.showMode === 'radioGroup'"
350
- :ref="attr.model"
351
- :label="showLabel?attr.name:undefined"
352
- :prop="attr.prop ? attr.prop : attr.model">
353
- <a-radio-group v-model="form[attr.model]">
354
- <a-radio-button v-for="modeItem in option" :key="modeItem.value" :value="modeItem.value">
355
- {{ modeItem.label }}
356
- </a-radio-button>
357
- </a-radio-group>
358
- </a-form-model-item>
359
- <a-form-model-item
360
- v-bind="bindOther"
361
- :rules="rules"
362
- v-else-if="attr.showMode === 'clickChange' && option.length > 0"
363
- :ref="attr.model"
364
- :label="showLabel?attr.name:undefined"
365
- :prop="attr.prop ? attr.prop : attr.model">
366
- <XClickChangeBtn></XClickChangeBtn>
367
- </a-form-model-item>
368
- </x-form-col>
369
- <!-- 时间 日期 框整合 -->
370
- <x-form-col
371
- v-else-if="['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(attr.type) && show"
372
- :labelCol="labelCol"
373
- :flex="attr.flex">
374
- <a-form-model-item
375
- v-bind="bindOther"
376
- :rules="rules"
377
- :ref="attr.model"
378
- :label="showLabel?attr.name:undefined"
379
- :prop="attr.prop ? attr.prop : attr.model">
380
- <XFormDatePicker
381
- :attr="attr"
382
- :mode="mode"
383
- :disabled="disabled"
384
- :readOnly="readOnly"
385
- :showLabel="showLabel"
386
- @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
387
- v-model="form[attr.model]"/>
388
- </a-form-model-item>
389
- </x-form-col>
390
- <!-- 文本域 -->
391
- <x-form-col
392
- v-else-if="attr.type === 'textarea' && show"
393
- :labelCol="labelCol"
394
- :flex="attr.flex">
395
- <!-- :style="layout === 'inline'?{width:'calc(100% - 60px)'}:{}"-->
396
- <a-form-model-item
397
- v-bind="bindOther"
398
- :rules="rules"
399
- :ref="attr.model"
400
- :label="showLabel?attr.name:undefined"
401
- :prop="attr.prop ? attr.prop : attr.model">
402
- <a-textarea
403
- v-model="form[attr.model]"
404
- style="width: 100%;"
405
- :disabled="disabled"
406
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
407
- :rows="4"/>
408
- </a-form-model-item>
409
- </x-form-col>
410
- <!-- 文件上传 -->
411
- <x-form-col
412
- v-else-if="(attr.type === 'file' || attr.type === 'image') && show"
413
- :labelCol="labelCol"
414
- :flex="attr.flex">
415
- <a-form-model-item
416
- v-bind="bindOther"
417
- :rules="rules"
418
- :ref="attr.model"
419
- :label="showLabel?attr.name:undefined"
420
- :prop="attr.prop ? attr.prop : attr.model">
421
- <upload
422
- :files="files"
423
- :images="images"
424
- :model="attr"
425
- v-bind="attr"
426
- :service-name="serviceName"
427
- @setFiles="setFiles"></upload>
428
- </a-form-model-item>
429
- </x-form-col>
430
- <!-- 省市区选择框 -->
431
- <x-form-col
432
- v-else-if="attr.type === 'citySelect' && show"
433
- :labelCol="labelCol"
434
- :flex="attr.flex">
435
- <a-form-model-item
436
- v-bind="bindOther"
437
- :rules="rules"
438
- :ref="attr.model"
439
- :label="showLabel?attr.name:undefined"
440
- :prop="attr.prop ? attr.prop : attr.model">
441
- <citySelect
442
- @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
443
- ref="citySelect"
444
- v-model="form[attr.model]"
445
- :contexts="attr.contexts"
446
- :value-type="attr.valueType"
447
- :default-value="form[attr.model]"></citySelect>
448
- </a-form-model-item>
449
- </x-form-col>
450
- <!-- 地点搜索框 -->
451
- <x-form-col
452
- v-else-if="(attr.type === 'addressSearch' || attr.type === 'coordinateSearch') && show"
453
- :labelCol="labelCol"
454
- :occupyCol="attr.occupyCol"
455
- :flex="attr.flex">
456
- <a-form-model-item
457
- v-bind="bindOther"
458
- :rules="rules"
459
- :ref="attr.model"
460
- :label="showLabel?attr.name:undefined"
461
- :prop="attr.prop ? attr.prop : attr.model">
462
- <address-search-combobox
463
- :emitFunc="emitFunc"
464
- :attr="attr"
465
- :read-only="readOnly"
466
- v-model="searchResult"
467
- :resultKeys="{ address: attr.model, coords: `${attr.model}_lng_lat` }"
468
- ref="addressSearchCombobox"
469
- searchResultType="Object"
470
- @onSelect="addressSearchComboboxSelect"
471
- @onDivisionsChange="onDivisionsChange"
472
- ></address-search-combobox>
473
- </a-form-model-item>
474
- </x-form-col>
475
- <!-- 颜色选择器 -->
476
- <x-form-col
477
- v-else-if="attr.type === 'colorPicker' && show"
478
- :labelCol="labelCol"
479
- :flex="attr.flex">
480
- <a-form-model-item
481
- v-bind="bindOther"
482
- :rules="rules"
483
- :ref="attr.model"
484
- :label="showLabel?attr.name:undefined"
485
- :prop="attr.prop ? attr.prop : attr.model">
486
- <color-picker-combobox
487
- :value="form[attr.model]"
488
- :read-only="readOnly"
489
- @onSelect="colorPickerComboboxSelect"
490
- />
491
- </a-form-model-item>
492
- </x-form-col>
493
- <!-- 人员选择框 -->
494
- <x-form-col
495
- v-else-if="attr.type === 'personSetting' && show"
496
- :labelCol="labelCol"
497
- :flex="attr.flex">
498
- <a-form-model-item
499
- v-bind="bindOther"
500
- :rules="rules"
501
- :ref="attr.model"
502
- :label="showLabel?attr.name:undefined"
503
- :prop="attr.prop ? attr.prop : attr.model">
504
- <PersonSetting v-model="form[attr.model]"></PersonSetting>
505
- </a-form-model-item>
506
- </x-form-col>
507
- <!-- 树形选择框 -->
508
- <x-form-col
509
- v-else-if="attr.type === 'treeSelect' && show"
510
- :labelCol="labelCol"
511
- :flex="attr.flex">
512
- <x-tree-select
513
- :rules="rules"
514
- @onChange="handleTreeSelectChange"
515
- v-model="form[attr.model]"
516
- :attr="attr"
517
- @mounted="itemMounted"
518
- ref="xTreeSelect">
519
- </x-tree-select>
520
- </x-form-col>
521
- <!-- 列表选择框 -->
522
- <x-form-col
523
- v-else-if="attr.type === 'listSelect' && show"
524
- :labelCol="labelCol"
525
- :flex="attr.flex">
526
- <a-form-model-item
527
- v-bind="bindOther"
528
- :rules="rules"
529
- :ref="attr.model"
530
- :label="showLabel?attr.name:undefined"
531
- :style="layout === 'inline'&& attr.occupyCol && attr.occupyCol > 1? {width:`calc(100% - ${attr.occupyCol * 1.533}rem)`}:{}"
532
- :prop="attr.prop ? attr.prop : attr.model">
533
- <a-popover
534
- ref="rowChoosePopover"
535
- :visible="rowChoosePopoverVisible"
536
- title="选择数据"
537
- placement="bottom"
538
- trigger="focus"
539
- :arrowPointAtCenter="true"
540
- :overlayStyle="{ width: '1000px', height: '30vh' }">
541
- <template #content>
542
- <x-report
543
- v-if="isCover"
544
- :use-oss-for-img="false"
545
- :config-name="queryParamsName"
546
- :service-name="serviceName"
547
- :show-img-in-cell="true"
548
- :display-only="true"
549
- :edit-mode="false"
550
- :show-save-button="true"
551
- :no-padding="true"
552
- :dont-format="true"
553
- @rowChoose="rowChoose"
554
- @cancel="closeRowChooseInput"
555
- >
556
- </x-report>
557
- <x-form-table
558
- v-else
559
- title="请选择数据"
560
- :queryParamsName="queryParamsName"
561
- :rowSelectMode="true"
562
- :allowSelectRowNum="1"
563
- :service-name="serviceName"
564
- :fixed-query-form="rowChooseFixedQueryValue"
565
- @rowChoose="rowChoose"
566
- @afterQuery="rowChooseSearchAfterQuery"
567
- ref="rowChooseTable">
568
- <template #button>
569
- <a-button @click="closeRowChooseInput">
570
- 关闭
571
- </a-button>
572
- </template>
573
- </x-form-table>
574
- </template>
575
- <a-input
576
- v-model="form[attr.model]"
577
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
578
- @change="searchRowChooseData"
579
- @focus="showCloseRowChooseInput"/>
580
- </a-popover>
581
- </a-form-model-item>
582
- </x-form-col>
583
- <!-- 评分框 -->
584
- <x-form-col
585
- v-else-if="attr.type === 'rate' && show"
586
- :labelCol="labelCol"
587
- :flex="attr.flex">
588
- <a-form-model-item
589
- v-bind="bindOther"
590
- :rules="rules"
591
- :ref="attr.model"
592
- :label="showLabel?attr.name:undefined"
593
- :prop="attr.prop ? attr.prop : attr.model">
594
- <x-rate
595
- v-model="form[attr.model]"
596
- :mode="mode"
597
- :disabled="disabled"
598
- :query-type="attr.queryType"
599
- :max-count="attr.maxCount"
600
- :allow-half="attr.allowHalf"
601
- :icon="attr.rateIcon"
602
- :placeholder="attr.placeholder ? attr.placeholder : '请选择'+attr.name.replace(/\s*/g, '')"
603
- @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
604
- />
605
- </a-form-model-item>
606
- </x-form-col>
607
- <!-- 区间选择器 -->
608
- <x-form-col
609
- v-else-if="attr.type === 'intervalPicker' && show"
610
- :labelCol="labelCol"
611
- :flex="attr.flex">
612
- <a-form-model-item
613
- v-bind="bindOther"
614
- :rules="rules"
615
- :ref="attr.model"
616
- :label="showLabel?attr.name:undefined"
617
- :prop="attr.prop ? attr.prop : attr.model">
618
- <x-interval-picker
619
- v-model="form[attr.model]"
620
- :mode="mode"
621
- :read-only="readOnly"
622
- :disabled="disabled && !readOnly"
623
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
624
- :start-placeholder="attr.startPlaceholder || '起始值'"
625
- :end-placeholder="attr.endPlaceholder || '结束值'"
626
- @blur="attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
627
- />
628
- </a-form-model-item>
629
- </x-form-col>
630
- <!-- 车牌号选择 -->
631
- <x-form-col
632
- v-else-if="attr.type === 'licensePlate' && show"
633
- :labelCol="labelCol"
634
- :flex="attr.flex">
635
- <a-form-model-item
636
- v-bind="bindOther"
637
- :rules="rules"
638
- :ref="attr.model"
639
- :label="showLabel?attr.name:undefined"
640
- :style="layout === 'inline'&& attr.occupyCol && attr.occupyCol > 1? {width:`calc(100% - ${attr.occupyCol * 1.533}rem)`}:{}"
641
- :prop="attr.prop ? attr.prop : attr.model">
642
- <!-- 如果配置了后置按钮插槽 -->
643
- <a-input
644
- v-if="mode ==='查询'"
645
- v-model="form[attr.model]"
646
- :whitespace="true"
647
- :read-only="readOnly"
648
- :disabled="disabled && !readOnly"
649
- style="width:100%"
650
- @blur="attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
651
- :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
652
- :ref="`${attr.model}input`"/>
653
- <x-license-plate
654
- v-else
655
- v-model="form[attr.model]"
656
- @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
657
- ></x-license-plate>
658
- </a-form-model-item>
659
- </x-form-col>
660
- <!-- 录音 -->
661
- <x-form-col
662
- v-else-if="attr.type === 'recording' && show"
663
- :labelCol="labelCol"
664
- :flex="attr.flex">
665
- <recording
666
- ref="recording"
667
- @recordingData="recordingData"
668
- >
669
- </recording>
670
- </x-form-col>
671
- <!-- 表格录入 -->
672
- <x-form-col
673
- v-else-if="attr.type === 'rowEdit' && show"
674
- :labelCol="labelCol"
675
- :flex="attr.flex">
676
- <a-form-model-item
677
- v-bind="bindOther"
678
- :rules="rules"
679
- :ref="attr.model"
680
- :label="showLabel?attr.name:undefined"
681
- :prop="attr.prop ? attr.prop : attr.model">
682
- <x-form-table
683
- :key="'childTable_' + attr.model"
684
- :title="attr.name"
685
- :queryParamsName="attr.crud"
686
- :localEditMode="true"
687
- :fixed-query-form="childTableFixedQueryForm(attr)"
688
- :service-name="serviceName"
689
- @hook:mounted="(h)=>onComponentMounted(h, attr)"
690
- :ref="'childXFormTable_' + attr.model">
691
- </x-form-table>
692
- </a-form-model-item>
693
- </x-form-col>
694
- </template>
695
- <script>
696
- import { debounce } from 'ant-design-vue/lib/vc-table/src/utils'
697
- import XFormCol from '@vue2-client/base-client/components/common/XFormCol'
698
- import XBadge from '@vue2-client/base-client/components/common/XBadge'
699
- import CitySelect from '@vue2-client/base-client/components/common/CitySelect'
700
- import PersonSetting from '@vue2-client/base-client/components/common/PersonSetting'
701
- import AddressSearchCombobox from '@vue2-client/base-client/components/common/AddressSearchCombobox'
702
- import Upload from '@vue2-client/base-client/components/common/Upload'
703
- import moment from 'moment'
704
- import { getConfigByName, runLogic, getConfigByNameAsync } from '@vue2-client/services/api/common'
705
- import * as util from '@vue2-client/utils/util'
706
- import XTreeSelect from '@vue2-client/base-client/components/common/XForm/XTreeSelect'
707
- import { searchToListOption, searchToOption } from '@vue2-client/services/v3Api'
708
- import { mapState } from 'vuex'
709
- import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
710
- import XLicensePlate from '@vue2-client/base-client/components/common/XLicensePlate/XLicensePlate.vue'
711
- import XStatusButton from './XStatusButton.vue'
712
- import XClickChangeBtn from './itemComponent/XClickChangeBtn'
713
- import 'moment/locale/zh-cn'
714
- import XFormDatePicker from '@vue2-client/base-client/components/common/XDatePicker/index.vue'
715
- import XIntervalPicker from '@vue2-client/base-client/components/common/XIntervalPicker/XIntervalPicker.vue'
716
- import XRate from '@vue2-client/base-client/components/common/XRate/index.vue'
717
- import { post } from '@vue2-client/services/api/restTools'
718
- import ColorPickerCombobox from '@vue2-client/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue'
719
- import { createSelectValueTypeHandler } from '@vue2-client/base-client/plugins/selectValueTypeHelper'
720
-
721
- export default {
722
- name: 'XFormItem',
723
- components: {
724
- XFormDatePicker,
725
- XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'),
726
- Recording: () => import('@vue2-client/base-client/components/common/Recording/Recording.vue'),
727
- XReport: () => import('@vue2-client/base-client/components/common/XReportGrid/XReport.vue'),
728
- XLicensePlate,
729
- XTreeSelect,
730
- XFormCol,
731
- XBadge,
732
- CitySelect,
733
- PersonSetting,
734
- AddressSearchCombobox,
735
- Upload,
736
- XStatusButton,
737
- XClickChangeBtn,
738
- XIntervalPicker,
739
- XRate,
740
- ColorPickerCombobox
741
- },
742
- data () {
743
- // 检索去抖
744
- this.fetchFunction = debounce(this.fetchFunction, 800)
745
- // 初始化selectValueType处理器
746
- this.selectValueTypeHandler = createSelectValueTypeHandler(this)
747
- return {
748
- option: [],
749
- // 最后检索版本
750
- lastFetchId: 0,
751
- // 检索中
752
- searching: false,
753
- searchResult: '',
754
- optionForFunc: [],
755
- // 控制当前表单项是否展示
756
- show: true,
757
- // moment
758
- moment,
759
- // 行选择器浮层是否显示
760
- rowChoosePopoverVisible: false,
761
- // 行选择器CRUD固定查询值
762
- rowChooseFixedQueryValue: undefined,
763
- bindOther: {}
764
- }
765
- },
766
- props: {
767
- attr: {
768
- type: Object,
769
- default:
770
- () => {
771
- return {}
772
- }
773
- },
774
- form: {
775
- type: Object,
776
- required:
777
- true
778
- },
779
- disabled: {
780
- type: Boolean,
781
- default:
782
- () => {
783
- return false
784
- }
785
- },
786
- readOnly: {
787
- type: Boolean,
788
- default:
789
- () => {
790
- return false
791
- }
792
- },
793
- mode: {
794
- type: String,
795
- default:
796
- () => {
797
- return '查询'
798
- }
799
- },
800
- files: {
801
- type: Array,
802
- default:
803
- () => {
804
- return []
805
- }
806
- },
807
- images: {
808
- type: Array,
809
- default:
810
- () => {
811
- return []
812
- }
813
- },
814
- serviceName: {
815
- type: String,
816
- default:
817
- undefined
818
- },
819
- // 调用logic获取数据源的追加参数
820
- getDataParams: {
821
- type: Object,
822
- default:
823
- undefined
824
- },
825
- // 布局
826
- layout: {
827
- type: String,
828
- default:
829
- 'horizontal'
830
- },
831
- // 环境
832
- env: {
833
- type: String,
834
- default:
835
- () => {
836
- return 'prod'
837
- }
838
- },
839
- // 设置表单值
840
- setForm: {
841
- type: Function,
842
- default: (val) => {
843
- console.log(val)
844
- }
845
- },
846
- showLabel: {
847
- type: Boolean,
848
- default:
849
- () => {
850
- return true
851
- }
852
- },
853
- labelCol: {
854
- type: Object,
855
- default: () => {
856
- return { span: 8 }
857
- }
858
- },
859
- rules: {
860
- type: Array,
861
- default:
862
- () => {
863
- return undefined
864
- }
865
- }
866
- },
867
- provide () {
868
- return {
869
- FormItemContext: this
870
- }
871
- },
872
- created () {
873
- this.init()
874
- if (this.attr.keyName && (this.attr?.keyName?.toString().indexOf('async ') !== -1 || this.attr?.keyName?.toString()?.indexOf('function') !== -1)) {
875
- this.debouncedUpdateOptions = debounce(this.updateOptions, 200)
876
- }
877
- if (this.attr.dataChangeFunc) {
878
- this.debouncedDataChangeFunc = debounce(this.dataChangeFunc, 200)
879
- // 执行一次
880
- this.dataChangeFunc()
881
- }
882
- if (this.attr.showFormItemFunc) {
883
- this.debouncedShowFormItemFunc = debounce(this.showFormItemFunc, 100)
884
- // 执行一次
885
- this.showFormItemFunc()
886
- }
887
- if (this.attr.showQueryFormItemFunc) {
888
- this.debouncedShowQueryFormItemFunc = debounce(this.showQueryFormItemFunc, 100)
889
- // 执行一次
890
- this.showFormItemFunc()
891
- }
892
- // 人员联动框增加监听
893
- if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动人员')) {
894
- this.debouncedUserLinkFunc = debounce(() => this.updateResOptions('人员'), 200)
895
- }
896
- if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动部门')) {
897
- this.debouncedDepLinkFunc = debounce(() => this.updateResOptions('部门'), 200)
898
- }
899
- // xTreeSelect 自己调用 mounted
900
- if (this.attr.type !== 'treeSelect') {
901
- this.$emit('mounted', this.attr)
902
- }
903
- },
904
- computed: {
905
- ...mapState('account', { currUser: 'user', curRoles: 'roles', curPermissions: 'permissions' }),
906
- queryParamsName () {
907
- if (this.attr.keyName.startsWith('function')) {
908
- // 调用异步函数获取内容
909
- return executeStrFunctionByContext(this, this.attr.keyName, [this.form, runLogic, this.mode, getConfigByNameAsync])
910
- } else {
911
- // 按现有方式处理
912
- return this.attr.keyName.split('@')[this.attr.keyName.split('@').length - 1]
913
- }
914
- },
915
- // 判断弹出时是否Cover,弹出只支持Cover以及CRUD
916
- isCover () {
917
- // 如果 queryParamsName 为空,返回空
918
- if (!this.queryParamsName) {
919
- return false
920
- }
921
- const result = this.queryParamsName.endsWith('Cover')
922
- return result
923
- },
924
- },
925
- watch: {
926
- attr: {
927
- handler () {
928
- this.init()
929
- },
930
- deep: true
931
- },
932
- form: {
933
- handler (newVal, oldVal) {
934
- // 如果是从函数获取 options
935
- if (this.attr.keyName && (this.attr.keyName.toString().indexOf('async ') !== -1 || this.attr.keyName.toString().indexOf('function') !== -1)) {
936
- this.debouncedUpdateOptions()
937
- }
938
- // 如果有自定义是否展示表单项函数
939
- if (this.attr.showFormItemFunc) {
940
- this.debouncedShowFormItemFunc()
941
- }
942
- // 如果有自定义是否展示查询表单项函数
943
- if (this.attr.showQueryFormItemFunc) {
944
- this.debouncedShowQueryFormItemFunc()
945
- }
946
- // 地址搜索框赋值
947
- if (this.attr.type === 'addressSearch' || this.attr.type === 'coordinateSearch') {
948
- this.$refs.addressSearchCombobox.addressInput = this.form[this.attr.model]
949
- }
950
- // 数据源来自人员联动时更新数据
951
- if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动人员')) {
952
- this.debouncedUserLinkFunc()
953
- }
954
- // 数据源来自人员联动时更新数据
955
- if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动部门')) {
956
- this.debouncedDepLinkFunc()
957
- }
958
- },
959
- deep: true
960
- }
961
- },
962
- inject: {
963
- getComponentByName: {
964
- default: () => () => {
965
- console.warn('getComponentByName is not provided')
966
- return null // 或者返回一个默认的函数
967
- },
968
- },
969
- registerComponent: {
970
- default: () => () => {
971
- console.warn('registerComponent is not provided')
972
- return null // 或者返回一个默认的函数
973
- },
974
- },
975
- getSelf: {
976
- default: () => () => {
977
- console.warn('getSelf is not provided')
978
- return null // 或者返回一个默认的函数
979
- },
980
- },
981
- XFormContext: {
982
- default: () => () => {
983
- console.warn('XFormContext is not provided')
984
- return null // 或者返回一个默认的函数
985
- },
986
- },
987
- setRequired: {
988
- default: () => () => {
989
- console.warn('setRequired is not provided')
990
- return null // 或者返回一个默认的函数
991
- },
992
- },
993
- removeRequired: {
994
- default: () => () => {
995
- console.warn('removeRequired is not provided')
996
- return null // 或者返回一个默认的函数
997
- },
998
- }
999
- },
1000
- methods: {
1001
- // 根据selectValueType预处理options数据
1002
- processOptionsForValueType (options) {
1003
- return this.selectValueTypeHandler.processOptions(options, this.attr.selectValueType)
1004
- },
1005
-
1006
- // 处理both模式的数据,为表单添加label字段
1007
- processBothModeData () {
1008
- this.selectValueTypeHandler.processBothMode(
1009
- this.form,
1010
- this.attr.model,
1011
- this.attr.selectValueType,
1012
- this.option
1013
- )
1014
- },
1015
-
1016
- // 根据value查找对应的label(支持单选和多选)
1017
- findLabelByValue (value) {
1018
- return this.selectValueTypeHandler.findLabel(value, this.option)
1019
- },
1020
-
1021
- // 统一的表单项change处理逻辑
1022
- handleFormItemChange () {
1023
- // 处理both模式
1024
- if (this.attr.selectValueType === 'both') {
1025
- this.$nextTick(() => {
1026
- this.selectValueTypeHandler.processBothMode(
1027
- this.form,
1028
- this.attr.model,
1029
- this.form[this.attr.model],
1030
- this.option
1031
- )
1032
- })
1033
- }
1034
- // 处理label模式
1035
- if (this.attr.selectValueType === 'label') {
1036
- this.$nextTick(() => {
1037
- this.selectValueTypeHandler.processLabelMode(
1038
- this.form,
1039
- this.attr.model,
1040
- this.form[this.attr.model],
1041
- this.option
1042
- )
1043
- })
1044
- }
1045
- // 处理原有的dataChangeFunc
1046
- if (this.attr.dataChangeFunc) {
1047
- this.debouncedDataChangeFunc()
1048
- }
1049
- },
1050
-
1051
- // Select组件change处理
1052
- handleSelectChange () {
1053
- this.handleFormItemChange()
1054
- },
1055
-
1056
- // Checkbox组件change处理
1057
- handleCheckboxChange () {
1058
- this.handleFormItemChange()
1059
- },
1060
-
1061
- // Radio组件change处理
1062
- handleRadioChange () {
1063
- this.handleFormItemChange()
1064
- },
1065
-
1066
- // TreeSelect组件change处理(通过XTreeSelect组件回调)
1067
- handleTreeSelectChange () {
1068
- this.handleFormItemChange()
1069
- },
1070
-
1071
- // 把内部的crud表单录入放到表单中,以便外部可以调用
1072
- onComponentMounted (h, attr) {
1073
- console.log('crud表单', h)
1074
- if (attr.crud) {
1075
- this.registerComponent(attr.model, this.$refs['childXFormTable_' + attr.model])
1076
- }
1077
- },
1078
- childTableFixedQueryForm (item) {
1079
- console.log('传递的form', this.form)
1080
- if (this.modifyModelData?.primaryKeyData) {
1081
- const fixedForm = {}
1082
- fixedForm[item.childTableForeignKeyName] = Object.values(this.modifyModelData.primaryKeyData)[0]
1083
- return fixedForm
1084
- }
1085
- return null
1086
- },
1087
- // 动态生成事件绑定对象
1088
- generateDynamicEvents (inputOnAfterFunc, attr) {
1089
- const events = {}
1090
- const states = this.parseStates(attr.inputOnAfterName, inputOnAfterFunc)
1091
-
1092
- states.forEach((state) => {
1093
- // 动态绑定事件名到 emitFunc
1094
- events[state.event] = () => {
1095
- console.info('事件名', state.event)
1096
- this.emitFunc(state.event, attr)
1097
- }
1098
- })
1099
-
1100
- return events // 返回 { state1Event: handler, state2Event: handler, ... }
1101
- },
1102
- parseStates (input, events) {
1103
- const eventNames = events.split('|')
1104
- return input.split('|').map((label, index) => ({
1105
- label,
1106
- event: eventNames[index] // 如果没有提供事件名称,则使用默认值
1107
- }))
1108
- },
1109
- focusInput () {
1110
- if (this.attr.defaultFocus) {
1111
- this.$nextTick(h => {
1112
- const el = this.$refs[`${this.attr.model}input`]?.$el
1113
- let inputEl
1114
- if (el) {
1115
- if (el.tagName.toLowerCase() === 'input') {
1116
- inputEl = el
1117
- } else {
1118
- inputEl = el.querySelector('input')
1119
- }
1120
- }
1121
- if (inputEl) {
1122
- inputEl.focus()
1123
- if (inputEl.type === 'number') {
1124
- if (inputEl.valueAsNumber) {
1125
- inputEl.setSelectionRange(0, inputEl.valueAsNumber.toString().length)
1126
- }
1127
- } else {
1128
- if (inputEl.value) {
1129
- inputEl.setSelectionRange(0, inputEl.value.length)
1130
- }
1131
- }
1132
- }
1133
- })
1134
- }
1135
- },
1136
- // 更新人员下拉框数据
1137
- async updateResOptions (type) {
1138
- if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString()?.endsWith(`]联动${type}`)) {
1139
- const startIndex = this.attr.keyName.indexOf('[') + 1
1140
- const endIndex = this.attr.keyName.indexOf(']', startIndex)
1141
- const fromModel = this.attr.keyName.substring(startIndex, endIndex).replace('.', '_')
1142
- // 获取表单字段的实际值(优先使用originData中的原始值)
1143
- const rawFieldValue = this.form.originData && this.form.originData[fromModel]
1144
- ? this.form.originData[fromModel]
1145
- : this.form[fromModel]
1146
-
1147
- // 确保数据为数组格式(用于filter参数)
1148
- const filterValues = Array.isArray(rawFieldValue)
1149
- ? rawFieldValue
1150
- : [rawFieldValue]
1151
- if (fromModel?.length && filterValues?.length) {
1152
- const searchData = {
1153
- source: `获取${type}`,
1154
- userid: this.currUser.id,
1155
- filter: filterValues,
1156
- filterType: fromModel.indexOf('org') > -1 ? 'org' : 'dep'
1157
- }
1158
- const tempArray = []
1159
- await searchToListOption(searchData, res => {
1160
- this.getDataCallback(
1161
- res.filter(h => {
1162
- if (fromModel.indexOf('org') > -1) {
1163
- if (type === '部门') {
1164
- if (filterValues?.includes(h.orgid || h.f_organization_id) || filterValues?.includes(h.parentid) || tempArray.includes(h.parentid)) {
1165
- tempArray.push(h.value)
1166
- return true
1167
- }
1168
- return false
1169
- } else {
1170
- return filterValues?.includes(h.orgid || h.f_organization_id || h.parentid)
1171
- }
1172
- } else {
1173
- return filterValues?.includes(h?.parentid)
1174
- }
1175
- }
1176
- )
1177
- )
1178
- })
1179
- }
1180
- }
1181
- },
1182
- // js 函数作为数据源
1183
- async updateOptions () {
1184
- if (this.attr.keyName && (this.attr.keyName.indexOf('async ') !== -1 || this.attr.keyName.indexOf('function ') !== -1)) {
1185
- const rawOptions = await executeStrFunctionByContext(this, this.attr.keyName, [this.form, runLogic, this.mode, getConfigByNameAsync, post])
1186
- // 根据selectValueType预处理options数据
1187
- this.optionForFunc = this.processOptionsForValueType(rawOptions)
1188
- }
1189
- },
1190
- async dataChangeFunc () {
1191
- if (this.attr.dataChangeFunc) {
1192
- await executeStrFunctionByContext(this, this.attr.dataChangeFunc, [this.form, this.setForm, this.attr, util, this.mode, runLogic, getConfigByNameAsync])
1193
- }
1194
- },
1195
- async showFormItemFunc () {
1196
- if (this.attr.showFormItemFunc) {
1197
- const obj = executeStrFunctionByContext(this, this.attr.showFormItemFunc, [this.form, this.setForm, this.attr, util, this.mode, this.curPermissions, this.curRoles])
1198
- // 判断是 bool 还是 obj 兼容
1199
- if (typeof obj === 'boolean') {
1200
- this.show = obj
1201
- } else if (obj && typeof obj === 'object') {
1202
- // obj 是一个对象,并且不是数组
1203
- if (Object.prototype.hasOwnProperty.call(obj, 'show')) {
1204
- this.show = obj?.show
1205
- }
1206
- if (Object.prototype.hasOwnProperty.call(obj, 'readOnly')) {
1207
- this.readOnly = obj?.readOnly
1208
- }
1209
- if (Object.prototype.hasOwnProperty.call(obj, 'disabled')) {
1210
- this.disabled = obj?.disabled
1211
- }
1212
- }
1213
- } else {
1214
- this.show = true
1215
- }
1216
- },
1217
- async showQueryFormItemFunc () {
1218
- if (this.attr.showQueryFormItemFunc) {
1219
- const obj = executeStrFunctionByContext(this, this.attr.showQueryFormItemFunc, [this.form, this.setForm, this.attr, util, this.mode, this.curPermissions, this.curRoles])
1220
- // 判断是 bool 还是 obj 兼容
1221
- if (typeof obj === 'boolean') {
1222
- this.show = obj
1223
- } else if (obj && typeof obj === 'object') {
1224
- // obj 是一个对象,并且不是数组
1225
- if (Object.prototype.hasOwnProperty.call(obj, 'show')) {
1226
- this.show = obj?.show
1227
- }
1228
- if (Object.prototype.hasOwnProperty.call(obj, 'readOnly')) {
1229
- this.readOnly = obj?.readOnly
1230
- }
1231
- if (Object.prototype.hasOwnProperty.call(obj, 'disabled')) {
1232
- this.disabled = obj?.disabled
1233
- }
1234
- }
1235
- } else {
1236
- this.show = true
1237
- }
1238
- },
1239
- init () {
1240
- if (!this.attr.flex) {
1241
- if (this.mode === '新增/修改') {
1242
- if (['horizontal', 'vertical'].includes(this.layout) || ['textarea', 'file', 'image'].includes(this.attr.type)) {
1243
- // 新增修改表单 horizontal 模式下默认为一行
1244
- this.attr.flex = {
1245
- xs: 24,
1246
- sm: 24,
1247
- md: 24,
1248
- lg: 24,
1249
- xl: 24,
1250
- xxl: 24,
1251
- fullWidth: true
1252
- }
1253
- } else {
1254
- // 新增修改表单 vertical 模式下默认为1列
1255
- this.attr.flex = {
1256
- xs: 24,
1257
- sm: 12,
1258
- md: 8,
1259
- lg: 8,
1260
- xl: 6,
1261
- xxl: 6
1262
- }
1263
- }
1264
- } else {
1265
- this.attr.flex = {
1266
- xs: 24,
1267
- sm: 24,
1268
- md: 8,
1269
- lg: 6,
1270
- xl: 6,
1271
- xxl: 6
1272
- }
1273
- }
1274
- }
1275
- if (this.attr.keyName && typeof this.attr.keyName === 'string') {
1276
- if (this.attr.keyName.indexOf('logic@') !== -1) {
1277
- this.getData({}, res => this.getDataCallback(res))
1278
- } else if (this.attr.keyName.indexOf('search@') !== -1) {
1279
- // `tool.getFullTree(this.getRights().where(row.getType()==$organization$))`
1280
- // 判断是否根据角色查询
1281
- let source = this.attr.keyName.substring(7)
1282
- const userid = this.currUser.id
1283
- let roleName = 'roleName'
1284
- if (source.startsWith('根据角色[') && source.endsWith(']获取人员')) {
1285
- const startIndex = source.indexOf('[') + 1
1286
- const endIndex = source.indexOf(']', startIndex)
1287
- roleName = source.substring(startIndex, endIndex)
1288
- source = '根据角色获取人员'
1289
- }
1290
- const searchData = { source, userid, roleName }
1291
- // 判断是否根据某个表单项联动 仅返回列表结构并筛选
1292
- if (source.startsWith('根据表单项[') && source.endsWith(']联动人员')) {
1293
- this.updateResOptions('人员')
1294
- } else if (source.startsWith('根据表单项[') && source.endsWith(']联动部门')) {
1295
- this.updateResOptions('部门')
1296
- } else if (this.attr.type === 'select' || this.attr.type === 'checkbox') {
1297
- // 仅获取最内层数据
1298
- searchToListOption(searchData, res => this.getDataCallback(res))
1299
- } else {
1300
- // 其他资源通用逻辑
1301
- searchToOption(searchData, res => this.getDataCallback(res))
1302
- }
1303
- } else if (this.attr.keyName.indexOf('config@') !== -1) {
1304
- const configName = this.attr.keyName.substring(7)
1305
- getConfigByName(configName, this.serviceName, res => {
1306
- this.getDataCallback(res.value)
1307
- }, this.env === 'dev')
1308
- } else if (this.attr.keyName.indexOf('async ') !== -1 || this.attr.keyName.indexOf('function ') !== -1) {
1309
- this.updateOptions()
1310
- }
1311
- } else if (this.attr.keys) {
1312
- // 对静态配置的keys也进行预处理
1313
- this.getDataCallback(this.attr.keys)
1314
- }
1315
- this.focusInput()
1316
- },
1317
- addressSearchComboboxSelect (data) {
1318
- this.form = Object.assign(this.form, JSON.parse(data))
1319
- },
1320
- onDivisionsChange (data) {
1321
- this.emitFunc('addressSearchComboboxSelect', {
1322
- key: this.attr.model,
1323
- value: data
1324
- })
1325
- },
1326
- getDataCallback (res) {
1327
- // 根据selectValueType预处理options数据
1328
- this.option = this.processOptionsForValueType(res)
1329
-
1330
- if (this.attr.type === 'treeSelect') {
1331
- this.$nextTick(() => {
1332
- this.$refs.xTreeSelect.init({
1333
- option: this.option,
1334
- form: this.form,
1335
- queryType: this.attr.queryType,
1336
- name: this.attr.name,
1337
- model: this.attr.model,
1338
- mode: this.mode,
1339
- disabled: this.disabled
1340
- })
1341
- })
1342
- } else if (this.attr.type === 'radio' || ['radioGroup', 'clickChange'].includes(this.attr.showMode)) {
1343
- this.initRadioValue()
1344
- }
1345
- },
1346
- initRadioValue () {
1347
- const model = this.attr.model
1348
- if (this.mode === '新增/修改' && (this.form[model] === undefined || this.form[model] === null) && !this.attr.prop) {
1349
- if (this.attr.keys && this.attr.keys.length > 1) {
1350
- this.form[model] = this.attr.keys[0].value
1351
- } else if (this.option.length > 1) {
1352
- this.form[model] = this.option[0].value
1353
- }
1354
- }
1355
- },
1356
- // 文件框时设置上传组件的值
1357
- setFiles (fileIds) {
1358
- if (!this.form[this.attr.model]) {
1359
- this.form[this.attr.model] = []
1360
- }
1361
- this.form[this.attr.model] = [...fileIds]
1362
- },
1363
- // 懒加载检索方法
1364
- fetchFunction (value) {
1365
- this.lastFetchId += 1
1366
- const fetchId = this.lastFetchId
1367
- this.option = []
1368
- this.searching = true
1369
- this.getData({
1370
- word: value
1371
- }, res => {
1372
- if (fetchId !== this.lastFetchId) {
1373
- return
1374
- }
1375
- this.option = res
1376
- this.searching = false
1377
- })
1378
- },
1379
- // 获取数据
1380
- getData (value, callbackFun) {
1381
- if (value !== '') {
1382
- const logicName = this.attr.keyName
1383
- const logic = logicName.substring(6)
1384
- // 调用logic前设置参数
1385
- if (this.getDataParams && this.getDataParams[this.attr.model]) {
1386
- Object.assign(value, this.getDataParams[this.attr.model])
1387
- }
1388
- runLogic(logic, Object.assign(value, {
1389
- orgId: this.currUser.orgid,
1390
- userId: this.currUser.id
1391
- }), this.serviceName, this.env === 'dev').then(res => {
1392
- callbackFun(res)
1393
- }).catch(e => {
1394
- callbackFun([])
1395
- console.error('获取数据失败:' + e)
1396
- })
1397
- }
1398
- },
1399
- filterOption (input, option) {
1400
- const child = option.componentOptions.children[0]
1401
- if (child.text) {
1402
- return child.text.toLowerCase().indexOf(input.toLowerCase()) >= 0
1403
- } else if (child.elm.innerText) {
1404
- return child.elm.innerText.toLowerCase().indexOf(input.toLowerCase()) >= 0
1405
- } else {
1406
- return child.child.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
1407
- }
1408
- },
1409
- // 表单项变更函数中调用 控制表单组中表单项组名为 groupName 的表单是否展示
1410
- // func:x-form-show(显示)/x-form-no-show(不显示)
1411
- emitShowFormFunc (func, groupName) {
1412
- this.emitFunc(func, groupName)
1413
- },
1414
- emitFunc (func, data) {
1415
- this.$emit('x-form-item-emit-func', func, data, data?.model ? this.form[data.model] : this.form)
1416
- },
1417
- itemMounted (h) {
1418
- this.$emit('mounted', h)
1419
- },
1420
- rowChoose (rows) {
1421
- this.$emit('rowChoose', rows, this.attr, this.closeRowChooseInput)
1422
- },
1423
- searchRowChooseData () {
1424
- if (this.searching) {
1425
- return
1426
- }
1427
- this.lastFetchId += 1
1428
- const fetchId = this.lastFetchId
1429
- this.searching = true
1430
- if (fetchId !== this.lastFetchId) {
1431
- return
1432
- }
1433
- this.rowChooseFixedQueryValue = []
1434
- this.rowChooseFixedQueryValue[this.attr.model] = this.form[this.attr.model]
1435
- this.$nextTick(() => {
1436
- this.$refs.rowChooseTable.refresh(true)
1437
- })
1438
- },
1439
- showCloseRowChooseInput () {
1440
- this.rowChoosePopoverVisible = true
1441
- },
1442
- closeRowChooseInput () {
1443
- this.rowChoosePopoverVisible = false
1444
- },
1445
- rowChooseSearchAfterQuery () {
1446
- this.searching = false
1447
- },
1448
- // 获取 recording 转换后的数据
1449
- getRecodingData () {
1450
- return this.$refs.recording.getRecordingData()
1451
- },
1452
- recordingData (data) {
1453
- this.emitFunc('recordingData', data)
1454
- },
1455
- getPopupContainer (triggerNode) {
1456
- // return document.body
1457
- return triggerNode.parentNode
1458
- },
1459
- colorPickerComboboxSelect (val) {
1460
- this.form[this.attr.model] = val
1461
- },
1462
- }
1463
- }
1464
- </script>
1465
-
1466
- <style lang="less" scoped>
1467
- .custom-dropdown {
1468
- position: absolute;
1469
- z-index: 1050;
1470
- }
1471
-
1472
- .multiple_select {
1473
- :deep(.ant-select-selection) {
1474
- max-height: 32px;
1475
- overflow-y: scroll;
1476
- }
1477
- }
1478
-
1479
- </style>
1
+ <template>
2
+ <!-- 输入框 -->
3
+ <x-form-col
4
+ v-if="attr.type === 'input' && show"
5
+ :occupyCol="attr.occupyCol"
6
+ :labelCol="labelCol"
7
+ :flex="attr.flex">
8
+ <a-form-model-item
9
+ v-bind="bindOther"
10
+ :rules="rules"
11
+ :ref="attr.model"
12
+ :label="showLabel?attr.name:undefined"
13
+ :prop="attr.prop ? attr.prop : attr.model">
14
+ <!-- 如果配置了后置按钮插槽 -->
15
+ <a-input-group
16
+ v-if="((attr.inputOnAfterName && attr.inputOnAfterFunc) || (attr.inputOnAfterIcon && attr.inputOnAfterIconFunc)) && mode !== '查询'"
17
+ style="display: flex; width: 100%; padding: 4px 0"
18
+ compact>
19
+ <a-input
20
+ v-model="form[attr.model]"
21
+ :read-only="readOnly"
22
+ :disabled="disabled && !readOnly"
23
+ :whitespace="true"
24
+ @input="attr.dataChangeFunc && debouncedDataChangeFunc()"
25
+ :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
26
+ @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
27
+ @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
28
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
29
+ :ref="`${attr.model}input`"/>
30
+ <a-button
31
+ v-if="attr.inputOnAfterName && attr.inputOnAfterFunc && !attr.inputOnAfterName.includes('|')"
32
+ style="width: auto; min-width: 4rem;max-width: 6rem"
33
+ type="primary"
34
+ @click="emitFunc(attr.inputOnAfterFunc,attr)">
35
+ {{ attr.inputOnAfterName }}
36
+ </a-button>
37
+ <!-- 仅可以配置 一个按钮 以及 一个图标插槽 -->
38
+ <a-button
39
+ style="width: 2rem; flex-shrink: 0;"
40
+ v-else-if="attr.inputOnAfterIcon"
41
+ :type="attr.inputOnAfterIcon && attr.inputOnAfterName ? 'primary' :''"
42
+ :icon="attr.inputOnAfterIcon || 'question'"
43
+ @click="emitFunc(attr.inputOnAfterIconFunc,attr)">
44
+ </a-button>
45
+ <!-- 状态按钮 -->
46
+ <x-status-button
47
+ v-else
48
+ :states="parseStates(attr.inputOnAfterName, attr.inputOnAfterFunc)"
49
+ v-on="generateDynamicEvents(attr.inputOnAfterFunc, attr)"
50
+ style="width: auto; min-width: 4rem; max-width: 6rem"
51
+ />
52
+ </a-input-group>
53
+ <a-input-number
54
+ v-else-if="attr.numberInput && !readOnly"
55
+ v-model="form[attr.model]"
56
+ :whitespace="true"
57
+ @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
58
+ :disabled="disabled && !readOnly"
59
+ style="width:100%"
60
+ @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
61
+ @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
62
+ :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
63
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
64
+ :ref="`${attr.model}input`"/>
65
+ <a-input
66
+ v-else
67
+ v-model="form[attr.model]"
68
+ :whitespace="true"
69
+ :read-only="readOnly"
70
+ :disabled="disabled && !readOnly"
71
+ @input="attr.dataChangeFunc && debouncedDataChangeFunc()"
72
+ :suffix="attr.inputSuffix && mode !== '新增' ? attr.inputSuffix : ''"
73
+ style="width:100%"
74
+ @blur="mode !== '查询' && attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
75
+ @keyup.enter="mode !== '查询' && attr.inputOnEnterFunc && emitFunc(attr.inputOnEnterFunc, attr)"
76
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
77
+ :ref="`${attr.model}input`"/>
78
+ </a-form-model-item>
79
+ </x-form-col>
80
+ <!-- 下拉框 -->
81
+ <x-form-col
82
+ v-else-if="attr.type === 'select' && show"
83
+ :labelCol="labelCol"
84
+ :flex="attr.flex">
85
+ <a-form-model-item
86
+ v-bind="bindOther"
87
+ :rules="rules"
88
+ v-if="!attr.showMode || mode === '查询' || attr.showMode === 'select' "
89
+ :ref="attr.model"
90
+ :label="showLabel?attr.name:undefined"
91
+ :prop="attr.prop ? attr.prop : attr.model">
92
+ <!-- <span slot="label" class="label-box">{{ showLabel?attr.name:undefined }}</span>-->
93
+ <a-select
94
+ v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
95
+ v-model="form[attr.model]"
96
+ :disabled="disabled"
97
+ @change="handleSelectChange"
98
+ :filter-option="filterOption"
99
+ :getPopupContainer="getPopupContainer"
100
+ dropdownClassName="custom-dropdown"
101
+ :dropdownMatchSelectWidth="false"
102
+ :dropdownStyle="{ position: 'absolute'}"
103
+ :placeholder="attr.placeholder ? attr.placeholder : '请选择'"
104
+ show-search
105
+ :allowClear="true"
106
+ :getCalendarContainer="(triggerNode) => triggerNode.parentNode"
107
+ >
108
+ <a-select-option
109
+ v-if="mode === '查询'"
110
+ key="999999"
111
+ value="">全部
112
+ </a-select-option>
113
+ <template v-if="attr.keys">
114
+ <a-select-option
115
+ v-for="(item,index) in attr.keys"
116
+ :key="index.value"
117
+ :value="item.value + ''">
118
+ {{ item.label }}
119
+ </a-select-option>
120
+ </template>
121
+ <template v-else>
122
+ <template
123
+ v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
124
+ ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
125
+ <a-select-option
126
+ v-for="(item,index) in option"
127
+ :key="index.value"
128
+ :value="item.value + ''">
129
+ <template v-if="attr.keyName.indexOf('config@') !== -1 && item.status">
130
+ <!-- 徽标(badge) -->
131
+ <a-badge v-if="item.status !== 'gary'" :color="item.status" :text="item.label"/>
132
+ <a-badge v-else color="#D9D9D9" :text="item.label"/>
133
+ </template>
134
+ <template v-else>
135
+ {{ item.label }}
136
+ </template>
137
+ </a-select-option>
138
+ </template>
139
+ <template
140
+ v-else-if="attr.keyName.indexOf('async ') !== -1 || attr.keyName.indexOf('function ') !== -1">
141
+ <a-select-option
142
+ v-for="(item,index) in optionForFunc"
143
+ :key="index.value"
144
+ :value="item.value + ''">
145
+ <template>
146
+ {{ item.label }}
147
+ </template>
148
+ </a-select-option>
149
+ </template>
150
+ <template v-else>
151
+ <a-select-option
152
+ v-for="item in $appdata.getDictionaryList(attr.keyName)"
153
+ :key="item.value"
154
+ :value="item.value + ''">
155
+ <!-- 徽标(badge) -->
156
+ <x-badge
157
+ :badge-key="attr.keyName"
158
+ :replaceText="item.text"
159
+ :value="item.value"
160
+ :service-name="serviceName"
161
+ :env="env"/>
162
+ </a-select-option>
163
+ </template>
164
+ </template>
165
+ </a-select>
166
+ <a-select
167
+ v-else
168
+ v-model="form[attr.model]"
169
+ :disabled="disabled"
170
+ @change="handleSelectChange"
171
+ :filter-option="filterOption"
172
+ :getPopupContainer="getPopupContainer"
173
+ dropdownClassName="custom-dropdown"
174
+ :dropdownMatchSelectWidth="false"
175
+ :dropdownStyle="{ position: 'absolute'}"
176
+ :placeholder="attr.placeholder ? attr.placeholder : '搜索' + attr.name"
177
+ show-search
178
+ @search="fetchFunction"
179
+ >
180
+ <template #notFoundContent>
181
+ <a-spin v-if="searching" size="small"/>
182
+ </template>
183
+ <a-select-option
184
+ v-if="mode === '查询'"
185
+ key="999999"
186
+ value="">全部
187
+ </a-select-option>
188
+ <a-select-option
189
+ v-for="(item,index) in option"
190
+ :key="index"
191
+ :value="item.value + ''">{{ item.label }}
192
+ </a-select-option>
193
+ </a-select>
194
+ </a-form-model-item>
195
+ <a-form-model-item
196
+ v-bind="bindOther"
197
+ :rules="rules"
198
+ v-else-if="attr.showMode === 'radioGroup'"
199
+ :ref="attr.model"
200
+ :label="showLabel?attr.name:undefined"
201
+ :prop="attr.prop ? attr.prop : attr.model">
202
+ <a-radio-group v-model="form[attr.model]">
203
+ <a-radio-button v-for="modeItem in option" :key="modeItem.value" :value="modeItem.value">
204
+ {{ modeItem.label }}
205
+ </a-radio-button>
206
+ </a-radio-group>
207
+ </a-form-model-item>
208
+ <a-form-model-item
209
+ v-bind="bindOther"
210
+ v-else-if="attr.showMode === 'clickChange' && option.length > 0"
211
+ :ref="attr.model"
212
+ :label="showLabel?attr.name:undefined"
213
+ :prop="attr.prop ? attr.prop : attr.model">
214
+ <XClickChangeBtn></XClickChangeBtn>
215
+ </a-form-model-item>
216
+ </x-form-col>
217
+ <!-- 多选框 -->
218
+ <x-form-col
219
+ v-else-if="attr.type === 'checkbox' && show"
220
+ :labelCol="labelCol"
221
+ :flex="attr.flex">
222
+ <a-form-model-item
223
+ v-bind="bindOther"
224
+ :rules="rules"
225
+ v-if="!attr.showMode || mode === '查询' || attr.showMode === 'select' "
226
+ :ref="attr.model"
227
+ :label="showLabel?attr.name:undefined"
228
+ :prop="attr.prop ? attr.prop : attr.model">
229
+ <a-select
230
+ class="multiple_select"
231
+ style="width:100%"
232
+ v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
233
+ v-model="form[attr.model]"
234
+ :disabled="disabled"
235
+ :filter-option="filterOption"
236
+ :getPopupContainer="getPopupContainer"
237
+ :placeholder="attr.placeholder ? attr.placeholder : '请选择'"
238
+ @change="handleCheckboxChange"
239
+ mode="multiple"
240
+ show-search
241
+ allowClear
242
+ >
243
+ <template v-if="attr.keys">
244
+ <a-select-option
245
+ v-for="(item,index) in attr.keys"
246
+ :key="index"
247
+ :value="item.value + ''">
248
+ {{ item.label }}
249
+ </a-select-option>
250
+ </template>
251
+ <template v-else>
252
+ <template
253
+ v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
254
+ ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
255
+ <a-select-option
256
+ v-for="(item,index) in option"
257
+ :key="index"
258
+ :value="item.value">{{ item.label }}
259
+ </a-select-option>
260
+ </template>
261
+ <template v-else>
262
+ <a-select-option
263
+ v-for="item in $appdata.getDictionaryList(attr.keyName)"
264
+ :key="item.value"
265
+ :value="item.value + ''">{{ item.text }}
266
+ </a-select-option>
267
+ </template>
268
+ </template>
269
+ </a-select>
270
+ <a-select
271
+ v-else
272
+ class="multiple_select"
273
+ v-model="form[attr.model]"
274
+ :disabled="disabled"
275
+ :filter-option="filterOption"
276
+ :getPopupContainer="getPopupContainer"
277
+ :placeholder="attr.placeholder ? attr.placeholder : '搜索' + attr.name"
278
+ mode="multiple"
279
+ style="width:100%"
280
+ @change="handleCheckboxChange"
281
+ show-search
282
+ allowClear
283
+ @search="fetchFunction"
284
+ >
285
+ <template #notFoundContent>
286
+ <a-spin v-if="searching" size="small"/>
287
+ </template>
288
+ <a-select-option
289
+ v-for="(item,index) in option"
290
+ :key="index"
291
+ :value="item.value + ''">{{ item.label }}
292
+ </a-select-option>
293
+ </a-select>
294
+ </a-form-model-item>
295
+ <a-form-model-item
296
+ v-bind="bindOther"
297
+ :rules="rules"
298
+ v-else
299
+ :ref="attr.model"
300
+ :label="showLabel?attr.name:undefined"
301
+ :prop="attr.prop ? attr.prop : attr.model">
302
+ <a-checkbox-group
303
+ v-model="form[attr.model]"
304
+ :options="option"
305
+ @change="handleCheckboxChange"
306
+ />
307
+ </a-form-model-item>
308
+ </x-form-col>
309
+ <!-- 单选框 -->
310
+ <x-form-col
311
+ v-else-if="attr.type === 'radio' && show"
312
+ :labelCol="labelCol"
313
+ :flex="attr.flex">
314
+ <a-form-model-item
315
+ v-bind="bindOther"
316
+ :rules="rules"
317
+ v-if="!attr.showMode || attr.type === 'radio' "
318
+ :ref="attr.model"
319
+ :label="showLabel?attr.name:undefined"
320
+ :prop="attr.prop ? attr.prop : attr.model">
321
+ <a-radio-group
322
+ v-model="form[attr.model]"
323
+ @change="handleRadioChange"
324
+ >
325
+ <template v-if="attr.keys">
326
+ <a-radio v-for="(item,index) in attr.keys" :key="index" :value="item.value">
327
+ {{ item.label }}
328
+ </a-radio>
329
+ </template>
330
+ <template v-else>
331
+ <template
332
+ v-if="attr.keyName.indexOf('logic@') !== -1 || attr.keyName.indexOf('config@') !== -1
333
+ ||attr.keyName.indexOf('search@') !== -1 || attr.keyName.indexOf('search@') !== -1">
334
+ <a-radio v-for="(item,index) in option" :key="index" :value="item.value">
335
+ {{ item.label }}
336
+ </a-radio>
337
+ </template>
338
+ <template v-else>
339
+ <a-radio v-for="(item,index) in $appdata.getDictionaryList(attr.keyName)" :key="index" :value="item.value">
340
+ {{ item.text }}
341
+ </a-radio>
342
+ </template>
343
+ </template>
344
+ </a-radio-group>
345
+ </a-form-model-item>
346
+ <a-form-model-item
347
+ v-bind="bindOther"
348
+ :rules="rules"
349
+ v-else-if="attr.showMode === 'radioGroup'"
350
+ :ref="attr.model"
351
+ :label="showLabel?attr.name:undefined"
352
+ :prop="attr.prop ? attr.prop : attr.model">
353
+ <a-radio-group v-model="form[attr.model]">
354
+ <a-radio-button v-for="modeItem in option" :key="modeItem.value" :value="modeItem.value">
355
+ {{ modeItem.label }}
356
+ </a-radio-button>
357
+ </a-radio-group>
358
+ </a-form-model-item>
359
+ <a-form-model-item
360
+ v-bind="bindOther"
361
+ :rules="rules"
362
+ v-else-if="attr.showMode === 'clickChange' && option.length > 0"
363
+ :ref="attr.model"
364
+ :label="showLabel?attr.name:undefined"
365
+ :prop="attr.prop ? attr.prop : attr.model">
366
+ <XClickChangeBtn></XClickChangeBtn>
367
+ </a-form-model-item>
368
+ </x-form-col>
369
+ <!-- 时间 日期 框整合 -->
370
+ <x-form-col
371
+ v-else-if="['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(attr.type) && show"
372
+ :labelCol="labelCol"
373
+ :flex="attr.flex">
374
+ <a-form-model-item
375
+ v-bind="bindOther"
376
+ :rules="rules"
377
+ :ref="attr.model"
378
+ :label="showLabel?attr.name:undefined"
379
+ :prop="attr.prop ? attr.prop : attr.model">
380
+ <XFormDatePicker
381
+ :attr="attr"
382
+ :mode="mode"
383
+ :disabled="disabled"
384
+ :readOnly="readOnly"
385
+ :showLabel="showLabel"
386
+ @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
387
+ v-model="form[attr.model]"/>
388
+ </a-form-model-item>
389
+ </x-form-col>
390
+ <!-- 文本域 -->
391
+ <x-form-col
392
+ v-else-if="attr.type === 'textarea' && show"
393
+ :labelCol="labelCol"
394
+ :flex="attr.flex">
395
+ <!-- :style="layout === 'inline'?{width:'calc(100% - 60px)'}:{}"-->
396
+ <a-form-model-item
397
+ v-bind="bindOther"
398
+ :rules="rules"
399
+ :ref="attr.model"
400
+ :label="showLabel?attr.name:undefined"
401
+ :prop="attr.prop ? attr.prop : attr.model">
402
+ <a-textarea
403
+ v-model="form[attr.model]"
404
+ style="width: 100%;"
405
+ :disabled="disabled"
406
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
407
+ :rows="4"/>
408
+ </a-form-model-item>
409
+ </x-form-col>
410
+ <!-- 文件上传 -->
411
+ <x-form-col
412
+ v-else-if="(attr.type === 'file' || attr.type === 'image') && show"
413
+ :labelCol="labelCol"
414
+ :flex="attr.flex">
415
+ <a-form-model-item
416
+ v-bind="bindOther"
417
+ :rules="rules"
418
+ :ref="attr.model"
419
+ :label="showLabel?attr.name:undefined"
420
+ :prop="attr.prop ? attr.prop : attr.model">
421
+ <upload
422
+ :files="files"
423
+ :images="images"
424
+ :model="attr"
425
+ v-bind="attr"
426
+ :service-name="serviceName"
427
+ @setFiles="setFiles"></upload>
428
+ </a-form-model-item>
429
+ </x-form-col>
430
+ <!-- 省市区选择框 -->
431
+ <x-form-col
432
+ v-else-if="attr.type === 'citySelect' && show"
433
+ :labelCol="labelCol"
434
+ :flex="attr.flex">
435
+ <a-form-model-item
436
+ v-bind="bindOther"
437
+ :rules="rules"
438
+ :ref="attr.model"
439
+ :label="showLabel?attr.name:undefined"
440
+ :prop="attr.prop ? attr.prop : attr.model">
441
+ <citySelect
442
+ @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
443
+ ref="citySelect"
444
+ v-model="form[attr.model]"
445
+ :contexts="attr.contexts"
446
+ :value-type="attr.valueType"
447
+ :default-value="form[attr.model]"></citySelect>
448
+ </a-form-model-item>
449
+ </x-form-col>
450
+ <!-- 地点搜索框 -->
451
+ <x-form-col
452
+ v-else-if="(attr.type === 'addressSearch' || attr.type === 'coordinateSearch') && show"
453
+ :labelCol="labelCol"
454
+ :occupyCol="attr.occupyCol"
455
+ :flex="attr.flex">
456
+ <a-form-model-item
457
+ v-bind="bindOther"
458
+ :rules="rules"
459
+ :ref="attr.model"
460
+ :label="showLabel?attr.name:undefined"
461
+ :prop="attr.prop ? attr.prop : attr.model">
462
+ <address-search-combobox
463
+ :emitFunc="emitFunc"
464
+ :attr="attr"
465
+ :read-only="readOnly"
466
+ v-model="searchResult"
467
+ :resultKeys="{ address: attr.model, coords: `${attr.model}_lng_lat` }"
468
+ ref="addressSearchCombobox"
469
+ searchResultType="Object"
470
+ @onSelect="addressSearchComboboxSelect"
471
+ @onDivisionsChange="onDivisionsChange"
472
+ ></address-search-combobox>
473
+ </a-form-model-item>
474
+ </x-form-col>
475
+ <!-- 颜色选择器 -->
476
+ <x-form-col
477
+ v-else-if="attr.type === 'colorPicker' && show"
478
+ :labelCol="labelCol"
479
+ :flex="attr.flex">
480
+ <a-form-model-item
481
+ v-bind="bindOther"
482
+ :rules="rules"
483
+ :ref="attr.model"
484
+ :label="showLabel?attr.name:undefined"
485
+ :prop="attr.prop ? attr.prop : attr.model">
486
+ <color-picker-combobox
487
+ :value="form[attr.model]"
488
+ :read-only="readOnly"
489
+ @onSelect="colorPickerComboboxSelect"
490
+ />
491
+ </a-form-model-item>
492
+ </x-form-col>
493
+ <!-- 人员选择框 -->
494
+ <x-form-col
495
+ v-else-if="attr.type === 'personSetting' && show"
496
+ :labelCol="labelCol"
497
+ :flex="attr.flex">
498
+ <a-form-model-item
499
+ v-bind="bindOther"
500
+ :rules="rules"
501
+ :ref="attr.model"
502
+ :label="showLabel?attr.name:undefined"
503
+ :prop="attr.prop ? attr.prop : attr.model">
504
+ <PersonSetting v-model="form[attr.model]"></PersonSetting>
505
+ </a-form-model-item>
506
+ </x-form-col>
507
+ <!-- 树形选择框 -->
508
+ <x-form-col
509
+ v-else-if="attr.type === 'treeSelect' && show"
510
+ :labelCol="labelCol"
511
+ :flex="attr.flex">
512
+ <x-tree-select
513
+ :rules="rules"
514
+ @onChange="handleTreeSelectChange"
515
+ v-model="form[attr.model]"
516
+ :attr="attr"
517
+ @mounted="itemMounted"
518
+ ref="xTreeSelect">
519
+ </x-tree-select>
520
+ </x-form-col>
521
+ <!-- 列表选择框 -->
522
+ <x-form-col
523
+ v-else-if="attr.type === 'listSelect' && show"
524
+ :labelCol="labelCol"
525
+ :flex="attr.flex">
526
+ <a-form-model-item
527
+ v-bind="bindOther"
528
+ :rules="rules"
529
+ :ref="attr.model"
530
+ :label="showLabel?attr.name:undefined"
531
+ :style="layout === 'inline'&& attr.occupyCol && attr.occupyCol > 1? {width:`calc(100% - ${attr.occupyCol * 1.533}rem)`}:{}"
532
+ :prop="attr.prop ? attr.prop : attr.model">
533
+ <a-popover
534
+ ref="rowChoosePopover"
535
+ :visible="rowChoosePopoverVisible"
536
+ title="选择数据"
537
+ placement="bottom"
538
+ trigger="focus"
539
+ :arrowPointAtCenter="true"
540
+ :overlayStyle="{ width: '1000px', height: '30vh' }">
541
+ <template #content>
542
+ <x-report
543
+ v-if="isCover"
544
+ :use-oss-for-img="false"
545
+ :config-name="queryParamsName"
546
+ :service-name="serviceName"
547
+ :show-img-in-cell="true"
548
+ :display-only="true"
549
+ :edit-mode="false"
550
+ :show-save-button="true"
551
+ :no-padding="true"
552
+ :dont-format="true"
553
+ @rowChoose="rowChoose"
554
+ @cancel="closeRowChooseInput"
555
+ >
556
+ </x-report>
557
+ <x-form-table
558
+ v-else
559
+ title="请选择数据"
560
+ :queryParamsName="queryParamsName"
561
+ :rowSelectMode="true"
562
+ :allowSelectRowNum="1"
563
+ :service-name="serviceName"
564
+ :fixed-query-form="rowChooseFixedQueryValue"
565
+ @rowChoose="rowChoose"
566
+ @afterQuery="rowChooseSearchAfterQuery"
567
+ ref="rowChooseTable">
568
+ <template #button>
569
+ <a-button @click="closeRowChooseInput">
570
+ 关闭
571
+ </a-button>
572
+ </template>
573
+ </x-form-table>
574
+ </template>
575
+ <a-input
576
+ v-model="form[attr.model]"
577
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
578
+ @change="searchRowChooseData"
579
+ @focus="showCloseRowChooseInput"/>
580
+ </a-popover>
581
+ </a-form-model-item>
582
+ </x-form-col>
583
+ <!-- 评分框 -->
584
+ <x-form-col
585
+ v-else-if="attr.type === 'rate' && show"
586
+ :labelCol="labelCol"
587
+ :flex="attr.flex">
588
+ <a-form-model-item
589
+ v-bind="bindOther"
590
+ :rules="rules"
591
+ :ref="attr.model"
592
+ :label="showLabel?attr.name:undefined"
593
+ :prop="attr.prop ? attr.prop : attr.model">
594
+ <x-rate
595
+ v-model="form[attr.model]"
596
+ :mode="mode"
597
+ :disabled="disabled"
598
+ :query-type="attr.queryType"
599
+ :max-count="attr.maxCount"
600
+ :allow-half="attr.allowHalf"
601
+ :icon="attr.rateIcon"
602
+ :placeholder="attr.placeholder ? attr.placeholder : '请选择'+attr.name.replace(/\s*/g, '')"
603
+ @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
604
+ />
605
+ </a-form-model-item>
606
+ </x-form-col>
607
+ <!-- 区间选择器 -->
608
+ <x-form-col
609
+ v-else-if="attr.type === 'intervalPicker' && show"
610
+ :labelCol="labelCol"
611
+ :flex="attr.flex">
612
+ <a-form-model-item
613
+ v-bind="bindOther"
614
+ :rules="rules"
615
+ :ref="attr.model"
616
+ :label="showLabel?attr.name:undefined"
617
+ :prop="attr.prop ? attr.prop : attr.model">
618
+ <x-interval-picker
619
+ v-model="form[attr.model]"
620
+ :mode="mode"
621
+ :read-only="readOnly"
622
+ :disabled="disabled && !readOnly"
623
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
624
+ :start-placeholder="attr.startPlaceholder || '起始值'"
625
+ :end-placeholder="attr.endPlaceholder || '结束值'"
626
+ @blur="attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
627
+ />
628
+ </a-form-model-item>
629
+ </x-form-col>
630
+ <!-- 车牌号选择 -->
631
+ <x-form-col
632
+ v-else-if="attr.type === 'licensePlate' && show"
633
+ :labelCol="labelCol"
634
+ :flex="attr.flex">
635
+ <a-form-model-item
636
+ v-bind="bindOther"
637
+ :rules="rules"
638
+ :ref="attr.model"
639
+ :label="showLabel?attr.name:undefined"
640
+ :style="layout === 'inline'&& attr.occupyCol && attr.occupyCol > 1? {width:`calc(100% - ${attr.occupyCol * 1.533}rem)`}:{}"
641
+ :prop="attr.prop ? attr.prop : attr.model">
642
+ <!-- 如果配置了后置按钮插槽 -->
643
+ <a-input
644
+ v-if="mode ==='查询'"
645
+ v-model="form[attr.model]"
646
+ :whitespace="true"
647
+ :read-only="readOnly"
648
+ :disabled="disabled && !readOnly"
649
+ style="width:100%"
650
+ @blur="attr.inputOnBlurFunc && emitFunc(attr.inputOnBlurFunc,attr)"
651
+ :placeholder="attr.placeholder ? attr.placeholder : '请输入'+attr.name.replace(/\s*/g, '')"
652
+ :ref="`${attr.model}input`"/>
653
+ <x-license-plate
654
+ v-else
655
+ v-model="form[attr.model]"
656
+ @change="attr.dataChangeFunc && debouncedDataChangeFunc()"
657
+ ></x-license-plate>
658
+ </a-form-model-item>
659
+ </x-form-col>
660
+ <!-- 录音 -->
661
+ <x-form-col
662
+ v-else-if="attr.type === 'recording' && show"
663
+ :labelCol="labelCol"
664
+ :flex="attr.flex">
665
+ <recording
666
+ ref="recording"
667
+ @recordingData="recordingData"
668
+ >
669
+ </recording>
670
+ </x-form-col>
671
+ <!-- 表格录入 -->
672
+ <x-form-col
673
+ v-else-if="attr.type === 'rowEdit' && show"
674
+ :labelCol="labelCol"
675
+ :flex="attr.flex">
676
+ <a-form-model-item
677
+ v-bind="bindOther"
678
+ :rules="rules"
679
+ :ref="attr.model"
680
+ :label="showLabel?attr.name:undefined"
681
+ :prop="attr.prop ? attr.prop : attr.model">
682
+ <x-form-table
683
+ :key="'childTable_' + attr.model"
684
+ :title="attr.name"
685
+ :queryParamsName="attr.crud"
686
+ :localEditMode="true"
687
+ :fixed-query-form="childTableFixedQueryForm(attr)"
688
+ :service-name="serviceName"
689
+ @hook:mounted="(h)=>onComponentMounted(h, attr)"
690
+ :ref="'childXFormTable_' + attr.model">
691
+ </x-form-table>
692
+ </a-form-model-item>
693
+ </x-form-col>
694
+ </template>
695
+ <script>
696
+ import { debounce } from 'ant-design-vue/lib/vc-table/src/utils'
697
+ import XFormCol from '@vue2-client/base-client/components/common/XFormCol'
698
+ import XBadge from '@vue2-client/base-client/components/common/XBadge'
699
+ import CitySelect from '@vue2-client/base-client/components/common/CitySelect'
700
+ import PersonSetting from '@vue2-client/base-client/components/common/PersonSetting'
701
+ import AddressSearchCombobox from '@vue2-client/base-client/components/common/AddressSearchCombobox'
702
+ import Upload from '@vue2-client/base-client/components/common/Upload'
703
+ import moment from 'moment'
704
+ import { getConfigByName, runLogic, getConfigByNameAsync } from '@vue2-client/services/api/common'
705
+ import * as util from '@vue2-client/utils/util'
706
+ import XTreeSelect from '@vue2-client/base-client/components/common/XForm/XTreeSelect'
707
+ import { searchToListOption, searchToOption } from '@vue2-client/services/v3Api'
708
+ import { mapState } from 'vuex'
709
+ import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
710
+ import XLicensePlate from '@vue2-client/base-client/components/common/XLicensePlate/XLicensePlate.vue'
711
+ import XStatusButton from './XStatusButton.vue'
712
+ import XClickChangeBtn from './itemComponent/XClickChangeBtn'
713
+ import 'moment/locale/zh-cn'
714
+ import XFormDatePicker from '@vue2-client/base-client/components/common/XDatePicker/index.vue'
715
+ import XIntervalPicker from '@vue2-client/base-client/components/common/XIntervalPicker/XIntervalPicker.vue'
716
+ import XRate from '@vue2-client/base-client/components/common/XRate/index.vue'
717
+ import { post } from '@vue2-client/services/api/restTools'
718
+ import ColorPickerCombobox from '@vue2-client/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue'
719
+ import { createSelectValueTypeHandler } from '@vue2-client/base-client/plugins/selectValueTypeHelper'
720
+
721
+ export default {
722
+ name: 'XFormItem',
723
+ components: {
724
+ XFormDatePicker,
725
+ XFormTable: () => import('@vue2-client/base-client/components/common/XFormTable/XFormTable.vue'),
726
+ Recording: () => import('@vue2-client/base-client/components/common/Recording/Recording.vue'),
727
+ XReport: () => import('@vue2-client/base-client/components/common/XReportGrid/XReport.vue'),
728
+ XLicensePlate,
729
+ XTreeSelect,
730
+ XFormCol,
731
+ XBadge,
732
+ CitySelect,
733
+ PersonSetting,
734
+ AddressSearchCombobox,
735
+ Upload,
736
+ XStatusButton,
737
+ XClickChangeBtn,
738
+ XIntervalPicker,
739
+ XRate,
740
+ ColorPickerCombobox
741
+ },
742
+ data () {
743
+ // 检索去抖
744
+ this.fetchFunction = debounce(this.fetchFunction, 800)
745
+ // 初始化selectValueType处理器
746
+ this.selectValueTypeHandler = createSelectValueTypeHandler(this)
747
+ return {
748
+ option: [],
749
+ // 最后检索版本
750
+ lastFetchId: 0,
751
+ // 检索中
752
+ searching: false,
753
+ searchResult: '',
754
+ optionForFunc: [],
755
+ // 控制当前表单项是否展示
756
+ show: true,
757
+ // moment
758
+ moment,
759
+ // 行选择器浮层是否显示
760
+ rowChoosePopoverVisible: false,
761
+ // 行选择器CRUD固定查询值
762
+ rowChooseFixedQueryValue: undefined,
763
+ bindOther: {}
764
+ }
765
+ },
766
+ props: {
767
+ attr: {
768
+ type: Object,
769
+ default:
770
+ () => {
771
+ return {}
772
+ }
773
+ },
774
+ form: {
775
+ type: Object,
776
+ required:
777
+ true
778
+ },
779
+ disabled: {
780
+ type: Boolean,
781
+ default:
782
+ () => {
783
+ return false
784
+ }
785
+ },
786
+ readOnly: {
787
+ type: Boolean,
788
+ default:
789
+ () => {
790
+ return false
791
+ }
792
+ },
793
+ mode: {
794
+ type: String,
795
+ default:
796
+ () => {
797
+ return '查询'
798
+ }
799
+ },
800
+ files: {
801
+ type: Array,
802
+ default:
803
+ () => {
804
+ return []
805
+ }
806
+ },
807
+ images: {
808
+ type: Array,
809
+ default:
810
+ () => {
811
+ return []
812
+ }
813
+ },
814
+ serviceName: {
815
+ type: String,
816
+ default:
817
+ undefined
818
+ },
819
+ // 调用logic获取数据源的追加参数
820
+ getDataParams: {
821
+ type: Object,
822
+ default:
823
+ undefined
824
+ },
825
+ // 布局
826
+ layout: {
827
+ type: String,
828
+ default:
829
+ 'horizontal'
830
+ },
831
+ // 环境
832
+ env: {
833
+ type: String,
834
+ default:
835
+ () => {
836
+ return 'prod'
837
+ }
838
+ },
839
+ // 设置表单值
840
+ setForm: {
841
+ type: Function,
842
+ default: (val) => {
843
+ console.log(val)
844
+ }
845
+ },
846
+ showLabel: {
847
+ type: Boolean,
848
+ default:
849
+ () => {
850
+ return true
851
+ }
852
+ },
853
+ labelCol: {
854
+ type: Object,
855
+ default: () => {
856
+ return { span: 8 }
857
+ }
858
+ },
859
+ rules: {
860
+ type: Array,
861
+ default:
862
+ () => {
863
+ return undefined
864
+ }
865
+ }
866
+ },
867
+ provide () {
868
+ return {
869
+ FormItemContext: this
870
+ }
871
+ },
872
+ created () {
873
+ this.init()
874
+ if (this.attr.keyName && (this.attr?.keyName?.toString().indexOf('async ') !== -1 || this.attr?.keyName?.toString()?.indexOf('function') !== -1)) {
875
+ this.debouncedUpdateOptions = debounce(this.updateOptions, 200)
876
+ }
877
+ if (this.attr.dataChangeFunc) {
878
+ this.debouncedDataChangeFunc = debounce(this.dataChangeFunc, 200)
879
+ // 执行一次
880
+ this.dataChangeFunc()
881
+ }
882
+ if (this.attr.showFormItemFunc) {
883
+ this.debouncedShowFormItemFunc = debounce(this.showFormItemFunc, 100)
884
+ // 执行一次
885
+ this.showFormItemFunc()
886
+ }
887
+ if (this.attr.showQueryFormItemFunc) {
888
+ this.debouncedShowQueryFormItemFunc = debounce(this.showQueryFormItemFunc, 100)
889
+ // 执行一次
890
+ this.showFormItemFunc()
891
+ }
892
+ // 人员联动框增加监听
893
+ if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动人员')) {
894
+ this.debouncedUserLinkFunc = debounce(() => this.updateResOptions('人员'), 200)
895
+ }
896
+ if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动部门')) {
897
+ this.debouncedDepLinkFunc = debounce(() => this.updateResOptions('部门'), 200)
898
+ }
899
+ // xTreeSelect 自己调用 mounted
900
+ if (this.attr.type !== 'treeSelect') {
901
+ this.$emit('mounted', this.attr)
902
+ }
903
+ },
904
+ computed: {
905
+ ...mapState('account', { currUser: 'user', curRoles: 'roles', curPermissions: 'permissions' }),
906
+ queryParamsName () {
907
+ if (this.attr.keyName.startsWith('function')) {
908
+ // 调用异步函数获取内容
909
+ return executeStrFunctionByContext(this, this.attr.keyName, [this.form, runLogic, this.mode, getConfigByNameAsync])
910
+ } else {
911
+ // 按现有方式处理
912
+ return this.attr.keyName.split('@')[this.attr.keyName.split('@').length - 1]
913
+ }
914
+ },
915
+ // 判断弹出时是否Cover,弹出只支持Cover以及CRUD
916
+ isCover () {
917
+ // 如果 queryParamsName 为空,返回空
918
+ if (!this.queryParamsName) {
919
+ return false
920
+ }
921
+ const result = this.queryParamsName.endsWith('Cover')
922
+ return result
923
+ },
924
+ },
925
+ watch: {
926
+ attr: {
927
+ handler () {
928
+ this.init()
929
+ },
930
+ deep: true
931
+ },
932
+ form: {
933
+ handler (newVal, oldVal) {
934
+ // 如果是从函数获取 options
935
+ if (this.attr.keyName && (this.attr.keyName.toString().indexOf('async ') !== -1 || this.attr.keyName.toString().indexOf('function') !== -1)) {
936
+ this.debouncedUpdateOptions()
937
+ }
938
+ // 如果有自定义是否展示表单项函数
939
+ if (this.attr.showFormItemFunc) {
940
+ this.debouncedShowFormItemFunc()
941
+ }
942
+ // 如果有自定义是否展示查询表单项函数
943
+ if (this.attr.showQueryFormItemFunc) {
944
+ this.debouncedShowQueryFormItemFunc()
945
+ }
946
+ // 地址搜索框赋值
947
+ if (this.attr.type === 'addressSearch' || this.attr.type === 'coordinateSearch') {
948
+ this.$refs.addressSearchCombobox.addressInput = this.form[this.attr.model]
949
+ }
950
+ // 数据源来自人员联动时更新数据
951
+ if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动人员')) {
952
+ this.debouncedUserLinkFunc()
953
+ }
954
+ // 数据源来自人员联动时更新数据
955
+ if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString().endsWith(']联动部门')) {
956
+ this.debouncedDepLinkFunc()
957
+ }
958
+ },
959
+ deep: true
960
+ }
961
+ },
962
+ inject: {
963
+ getComponentByName: {
964
+ default: () => () => {
965
+ console.warn('getComponentByName is not provided')
966
+ return null // 或者返回一个默认的函数
967
+ },
968
+ },
969
+ registerComponent: {
970
+ default: () => () => {
971
+ console.warn('registerComponent is not provided')
972
+ return null // 或者返回一个默认的函数
973
+ },
974
+ },
975
+ getSelf: {
976
+ default: () => () => {
977
+ console.warn('getSelf is not provided')
978
+ return null // 或者返回一个默认的函数
979
+ },
980
+ },
981
+ XFormContext: {
982
+ default: () => () => {
983
+ console.warn('XFormContext is not provided')
984
+ return null // 或者返回一个默认的函数
985
+ },
986
+ },
987
+ setRequired: {
988
+ default: () => () => {
989
+ console.warn('setRequired is not provided')
990
+ return null // 或者返回一个默认的函数
991
+ },
992
+ },
993
+ removeRequired: {
994
+ default: () => () => {
995
+ console.warn('removeRequired is not provided')
996
+ return null // 或者返回一个默认的函数
997
+ },
998
+ }
999
+ },
1000
+ methods: {
1001
+ // 根据selectValueType预处理options数据
1002
+ processOptionsForValueType (options) {
1003
+ return this.selectValueTypeHandler.processOptions(options, this.attr.selectValueType)
1004
+ },
1005
+
1006
+ // 处理both模式的数据,为表单添加label字段
1007
+ processBothModeData () {
1008
+ this.selectValueTypeHandler.processBothMode(
1009
+ this.form,
1010
+ this.attr.model,
1011
+ this.attr.selectValueType,
1012
+ this.option
1013
+ )
1014
+ },
1015
+
1016
+ // 根据value查找对应的label(支持单选和多选)
1017
+ findLabelByValue (value) {
1018
+ return this.selectValueTypeHandler.findLabel(value, this.option)
1019
+ },
1020
+
1021
+ // 统一的表单项change处理逻辑
1022
+ handleFormItemChange () {
1023
+ // 处理both模式
1024
+ if (this.attr.selectValueType === 'both') {
1025
+ this.$nextTick(() => {
1026
+ this.selectValueTypeHandler.processBothMode(
1027
+ this.form,
1028
+ this.attr.model,
1029
+ this.form[this.attr.model],
1030
+ this.option
1031
+ )
1032
+ })
1033
+ }
1034
+ // 处理label模式
1035
+ if (this.attr.selectValueType === 'label') {
1036
+ this.$nextTick(() => {
1037
+ this.selectValueTypeHandler.processLabelMode(
1038
+ this.form,
1039
+ this.attr.model,
1040
+ this.form[this.attr.model],
1041
+ this.option
1042
+ )
1043
+ })
1044
+ }
1045
+ // 处理原有的dataChangeFunc
1046
+ if (this.attr.dataChangeFunc) {
1047
+ this.debouncedDataChangeFunc()
1048
+ }
1049
+ },
1050
+
1051
+ // Select组件change处理
1052
+ handleSelectChange () {
1053
+ this.handleFormItemChange()
1054
+ },
1055
+
1056
+ // Checkbox组件change处理
1057
+ handleCheckboxChange () {
1058
+ this.handleFormItemChange()
1059
+ },
1060
+
1061
+ // Radio组件change处理
1062
+ handleRadioChange () {
1063
+ this.handleFormItemChange()
1064
+ },
1065
+
1066
+ // TreeSelect组件change处理(通过XTreeSelect组件回调)
1067
+ handleTreeSelectChange () {
1068
+ this.handleFormItemChange()
1069
+ },
1070
+
1071
+ // 把内部的crud表单录入放到表单中,以便外部可以调用
1072
+ onComponentMounted (h, attr) {
1073
+ console.log('crud表单', h)
1074
+ if (attr.crud) {
1075
+ this.registerComponent(attr.model, this.$refs['childXFormTable_' + attr.model])
1076
+ }
1077
+ },
1078
+ childTableFixedQueryForm (item) {
1079
+ console.log('传递的form', this.form)
1080
+ if (this.modifyModelData?.primaryKeyData) {
1081
+ const fixedForm = {}
1082
+ fixedForm[item.childTableForeignKeyName] = Object.values(this.modifyModelData.primaryKeyData)[0]
1083
+ return fixedForm
1084
+ }
1085
+ return null
1086
+ },
1087
+ // 动态生成事件绑定对象
1088
+ generateDynamicEvents (inputOnAfterFunc, attr) {
1089
+ const events = {}
1090
+ const states = this.parseStates(attr.inputOnAfterName, inputOnAfterFunc)
1091
+
1092
+ states.forEach((state) => {
1093
+ // 动态绑定事件名到 emitFunc
1094
+ events[state.event] = () => {
1095
+ console.info('事件名', state.event)
1096
+ this.emitFunc(state.event, attr)
1097
+ }
1098
+ })
1099
+
1100
+ return events // 返回 { state1Event: handler, state2Event: handler, ... }
1101
+ },
1102
+ parseStates (input, events) {
1103
+ const eventNames = events.split('|')
1104
+ return input.split('|').map((label, index) => ({
1105
+ label,
1106
+ event: eventNames[index] // 如果没有提供事件名称,则使用默认值
1107
+ }))
1108
+ },
1109
+ focusInput () {
1110
+ if (this.attr.defaultFocus) {
1111
+ this.$nextTick(h => {
1112
+ const el = this.$refs[`${this.attr.model}input`]?.$el
1113
+ let inputEl
1114
+ if (el) {
1115
+ if (el.tagName.toLowerCase() === 'input') {
1116
+ inputEl = el
1117
+ } else {
1118
+ inputEl = el.querySelector('input')
1119
+ }
1120
+ }
1121
+ if (inputEl) {
1122
+ inputEl.focus()
1123
+ if (inputEl.type === 'number') {
1124
+ if (inputEl.valueAsNumber) {
1125
+ inputEl.setSelectionRange(0, inputEl.valueAsNumber.toString().length)
1126
+ }
1127
+ } else {
1128
+ if (inputEl.value) {
1129
+ inputEl.setSelectionRange(0, inputEl.value.length)
1130
+ }
1131
+ }
1132
+ }
1133
+ })
1134
+ }
1135
+ },
1136
+ // 更新人员下拉框数据
1137
+ async updateResOptions (type) {
1138
+ if (this?.attr?.keyName?.toString()?.startsWith('search@根据表单项[') && this?.attr?.keyName?.toString()?.endsWith(`]联动${type}`)) {
1139
+ const startIndex = this.attr.keyName.indexOf('[') + 1
1140
+ const endIndex = this.attr.keyName.indexOf(']', startIndex)
1141
+ const fromModel = this.attr.keyName.substring(startIndex, endIndex).replace('.', '_')
1142
+ // 获取表单字段的实际值(优先使用originData中的原始值)
1143
+ const rawFieldValue = this.form.originData && this.form.originData[fromModel]
1144
+ ? this.form.originData[fromModel]
1145
+ : this.form[fromModel]
1146
+
1147
+ // 确保数据为数组格式(用于filter参数)
1148
+ const filterValues = Array.isArray(rawFieldValue)
1149
+ ? rawFieldValue
1150
+ : [rawFieldValue]
1151
+ if (fromModel?.length && filterValues?.length) {
1152
+ const searchData = {
1153
+ source: `获取${type}`,
1154
+ userid: this.currUser.id,
1155
+ filter: filterValues,
1156
+ filterType: fromModel.indexOf('org') > -1 ? 'org' : 'dep'
1157
+ }
1158
+ const tempArray = []
1159
+ await searchToListOption(searchData, res => {
1160
+ this.getDataCallback(
1161
+ res.filter(h => {
1162
+ if (fromModel.indexOf('org') > -1) {
1163
+ if (type === '部门') {
1164
+ if (filterValues?.includes(h.orgid || h.f_organization_id) || filterValues?.includes(h.parentid) || tempArray.includes(h.parentid)) {
1165
+ tempArray.push(h.value)
1166
+ return true
1167
+ }
1168
+ return false
1169
+ } else {
1170
+ return filterValues?.includes(h.orgid || h.f_organization_id || h.parentid)
1171
+ }
1172
+ } else {
1173
+ return filterValues?.includes(h?.parentid)
1174
+ }
1175
+ }
1176
+ )
1177
+ )
1178
+ })
1179
+ }
1180
+ }
1181
+ },
1182
+ // js 函数作为数据源
1183
+ async updateOptions () {
1184
+ if (this.attr.keyName && (this.attr.keyName.indexOf('async ') !== -1 || this.attr.keyName.indexOf('function ') !== -1)) {
1185
+ const rawOptions = await executeStrFunctionByContext(this, this.attr.keyName, [this.form, runLogic, this.mode, getConfigByNameAsync, post])
1186
+ // 根据selectValueType预处理options数据
1187
+ this.optionForFunc = this.processOptionsForValueType(rawOptions)
1188
+ }
1189
+ },
1190
+ async dataChangeFunc () {
1191
+ if (this.attr.dataChangeFunc) {
1192
+ await executeStrFunctionByContext(this, this.attr.dataChangeFunc, [this.form, this.setForm, this.attr, util, this.mode, runLogic, getConfigByNameAsync])
1193
+ }
1194
+ },
1195
+ async showFormItemFunc () {
1196
+ if (this.attr.showFormItemFunc) {
1197
+ const obj = executeStrFunctionByContext(this, this.attr.showFormItemFunc, [this.form, this.setForm, this.attr, util, this.mode, this.curPermissions, this.curRoles])
1198
+ // 判断是 bool 还是 obj 兼容
1199
+ if (typeof obj === 'boolean') {
1200
+ this.show = obj
1201
+ } else if (obj && typeof obj === 'object') {
1202
+ // obj 是一个对象,并且不是数组
1203
+ if (Object.prototype.hasOwnProperty.call(obj, 'show')) {
1204
+ this.show = obj?.show
1205
+ }
1206
+ if (Object.prototype.hasOwnProperty.call(obj, 'readOnly')) {
1207
+ this.readOnly = obj?.readOnly
1208
+ }
1209
+ if (Object.prototype.hasOwnProperty.call(obj, 'disabled')) {
1210
+ this.disabled = obj?.disabled
1211
+ }
1212
+ }
1213
+ } else {
1214
+ this.show = true
1215
+ }
1216
+ },
1217
+ async showQueryFormItemFunc () {
1218
+ if (this.attr.showQueryFormItemFunc) {
1219
+ const obj = executeStrFunctionByContext(this, this.attr.showQueryFormItemFunc, [this.form, this.setForm, this.attr, util, this.mode, this.curPermissions, this.curRoles])
1220
+ // 判断是 bool 还是 obj 兼容
1221
+ if (typeof obj === 'boolean') {
1222
+ this.show = obj
1223
+ } else if (obj && typeof obj === 'object') {
1224
+ // obj 是一个对象,并且不是数组
1225
+ if (Object.prototype.hasOwnProperty.call(obj, 'show')) {
1226
+ this.show = obj?.show
1227
+ }
1228
+ if (Object.prototype.hasOwnProperty.call(obj, 'readOnly')) {
1229
+ this.readOnly = obj?.readOnly
1230
+ }
1231
+ if (Object.prototype.hasOwnProperty.call(obj, 'disabled')) {
1232
+ this.disabled = obj?.disabled
1233
+ }
1234
+ }
1235
+ } else {
1236
+ this.show = true
1237
+ }
1238
+ },
1239
+ init () {
1240
+ if (!this.attr.flex) {
1241
+ if (this.mode === '新增/修改') {
1242
+ if (['horizontal', 'vertical'].includes(this.layout) || ['textarea', 'file', 'image'].includes(this.attr.type)) {
1243
+ // 新增修改表单 horizontal 模式下默认为一行
1244
+ this.attr.flex = {
1245
+ xs: 24,
1246
+ sm: 24,
1247
+ md: 24,
1248
+ lg: 24,
1249
+ xl: 24,
1250
+ xxl: 24,
1251
+ fullWidth: true
1252
+ }
1253
+ } else {
1254
+ // 新增修改表单 vertical 模式下默认为1列
1255
+ this.attr.flex = {
1256
+ xs: 24,
1257
+ sm: 12,
1258
+ md: 8,
1259
+ lg: 8,
1260
+ xl: 6,
1261
+ xxl: 6
1262
+ }
1263
+ }
1264
+ } else {
1265
+ this.attr.flex = {
1266
+ xs: 24,
1267
+ sm: 24,
1268
+ md: 8,
1269
+ lg: 6,
1270
+ xl: 6,
1271
+ xxl: 6
1272
+ }
1273
+ }
1274
+ }
1275
+ if (this.attr.keyName && typeof this.attr.keyName === 'string') {
1276
+ if (this.attr.keyName.indexOf('logic@') !== -1) {
1277
+ this.getData({}, res => this.getDataCallback(res))
1278
+ } else if (this.attr.keyName.indexOf('search@') !== -1) {
1279
+ // `tool.getFullTree(this.getRights().where(row.getType()==$organization$))`
1280
+ // 判断是否根据角色查询
1281
+ let source = this.attr.keyName.substring(7)
1282
+ const userid = this.currUser.id
1283
+ let roleName = 'roleName'
1284
+ if (source.startsWith('根据角色[') && source.endsWith(']获取人员')) {
1285
+ const startIndex = source.indexOf('[') + 1
1286
+ const endIndex = source.indexOf(']', startIndex)
1287
+ roleName = source.substring(startIndex, endIndex)
1288
+ source = '根据角色获取人员'
1289
+ }
1290
+ const searchData = { source, userid, roleName }
1291
+ // 判断是否根据某个表单项联动 仅返回列表结构并筛选
1292
+ if (source.startsWith('根据表单项[') && source.endsWith(']联动人员')) {
1293
+ this.updateResOptions('人员')
1294
+ } else if (source.startsWith('根据表单项[') && source.endsWith(']联动部门')) {
1295
+ this.updateResOptions('部门')
1296
+ } else if (this.attr.type === 'select' || this.attr.type === 'checkbox') {
1297
+ // 仅获取最内层数据
1298
+ searchToListOption(searchData, res => this.getDataCallback(res))
1299
+ } else {
1300
+ // 其他资源通用逻辑
1301
+ searchToOption(searchData, res => this.getDataCallback(res))
1302
+ }
1303
+ } else if (this.attr.keyName.indexOf('config@') !== -1) {
1304
+ const configName = this.attr.keyName.substring(7)
1305
+ getConfigByName(configName, this.serviceName, res => {
1306
+ this.getDataCallback(res.value)
1307
+ }, this.env === 'dev')
1308
+ } else if (this.attr.keyName.indexOf('async ') !== -1 || this.attr.keyName.indexOf('function ') !== -1) {
1309
+ this.updateOptions()
1310
+ }
1311
+ } else if (this.attr.keys) {
1312
+ // 对静态配置的keys也进行预处理
1313
+ this.getDataCallback(this.attr.keys)
1314
+ }
1315
+ this.focusInput()
1316
+ },
1317
+ addressSearchComboboxSelect (data) {
1318
+ this.form = Object.assign(this.form, JSON.parse(data))
1319
+ },
1320
+ onDivisionsChange (data) {
1321
+ this.emitFunc('addressSearchComboboxSelect', {
1322
+ key: this.attr.model,
1323
+ value: data
1324
+ })
1325
+ },
1326
+ getDataCallback (res) {
1327
+ // 根据selectValueType预处理options数据
1328
+ this.option = this.processOptionsForValueType(res)
1329
+
1330
+ if (this.attr.type === 'treeSelect') {
1331
+ this.$nextTick(() => {
1332
+ this.$refs.xTreeSelect.init({
1333
+ option: this.option,
1334
+ form: this.form,
1335
+ queryType: this.attr.queryType,
1336
+ name: this.attr.name,
1337
+ model: this.attr.model,
1338
+ mode: this.mode,
1339
+ disabled: this.disabled
1340
+ })
1341
+ })
1342
+ } else if (this.attr.type === 'radio' || ['radioGroup', 'clickChange'].includes(this.attr.showMode)) {
1343
+ this.initRadioValue()
1344
+ }
1345
+ },
1346
+ initRadioValue () {
1347
+ const model = this.attr.model
1348
+ if (this.mode === '新增/修改' && (this.form[model] === undefined || this.form[model] === null) && !this.attr.prop) {
1349
+ if (this.attr.keys && this.attr.keys.length > 1) {
1350
+ this.form[model] = this.attr.keys[0].value
1351
+ } else if (this.option.length > 1) {
1352
+ this.form[model] = this.option[0].value
1353
+ }
1354
+ }
1355
+ },
1356
+ // 文件框时设置上传组件的值
1357
+ setFiles (fileIds) {
1358
+ if (!this.form[this.attr.model]) {
1359
+ this.form[this.attr.model] = []
1360
+ }
1361
+ this.form[this.attr.model] = [...fileIds]
1362
+ },
1363
+ // 懒加载检索方法
1364
+ fetchFunction (value) {
1365
+ this.lastFetchId += 1
1366
+ const fetchId = this.lastFetchId
1367
+ this.option = []
1368
+ this.searching = true
1369
+ this.getData({
1370
+ word: value
1371
+ }, res => {
1372
+ if (fetchId !== this.lastFetchId) {
1373
+ return
1374
+ }
1375
+ this.option = res
1376
+ this.searching = false
1377
+ })
1378
+ },
1379
+ // 获取数据
1380
+ getData (value, callbackFun) {
1381
+ if (value !== '') {
1382
+ const logicName = this.attr.keyName
1383
+ const logic = logicName.substring(6)
1384
+ // 调用logic前设置参数
1385
+ if (this.getDataParams && this.getDataParams[this.attr.model]) {
1386
+ Object.assign(value, this.getDataParams[this.attr.model])
1387
+ }
1388
+ runLogic(logic, Object.assign(value, {
1389
+ orgId: this.currUser.orgid,
1390
+ userId: this.currUser.id
1391
+ }), this.serviceName, this.env === 'dev').then(res => {
1392
+ callbackFun(res)
1393
+ }).catch(e => {
1394
+ callbackFun([])
1395
+ console.error('获取数据失败:' + e)
1396
+ })
1397
+ }
1398
+ },
1399
+ filterOption (input, option) {
1400
+ const child = option.componentOptions.children[0]
1401
+ if (child.text) {
1402
+ return child.text.toLowerCase().indexOf(input.toLowerCase()) >= 0
1403
+ } else if (child.elm.innerText) {
1404
+ return child.elm.innerText.toLowerCase().indexOf(input.toLowerCase()) >= 0
1405
+ } else {
1406
+ return child.child.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
1407
+ }
1408
+ },
1409
+ // 表单项变更函数中调用 控制表单组中表单项组名为 groupName 的表单是否展示
1410
+ // func:x-form-show(显示)/x-form-no-show(不显示)
1411
+ emitShowFormFunc (func, groupName) {
1412
+ this.emitFunc(func, groupName)
1413
+ },
1414
+ emitFunc (func, data) {
1415
+ this.$emit('x-form-item-emit-func', func, data, data?.model ? this.form[data.model] : this.form)
1416
+ },
1417
+ itemMounted (h) {
1418
+ this.$emit('mounted', h)
1419
+ },
1420
+ rowChoose (rows) {
1421
+ this.$emit('rowChoose', rows, this.attr, this.closeRowChooseInput)
1422
+ },
1423
+ searchRowChooseData () {
1424
+ if (this.searching) {
1425
+ return
1426
+ }
1427
+ this.lastFetchId += 1
1428
+ const fetchId = this.lastFetchId
1429
+ this.searching = true
1430
+ if (fetchId !== this.lastFetchId) {
1431
+ return
1432
+ }
1433
+ this.rowChooseFixedQueryValue = []
1434
+ this.rowChooseFixedQueryValue[this.attr.model] = this.form[this.attr.model]
1435
+ this.$nextTick(() => {
1436
+ this.$refs.rowChooseTable.refresh(true)
1437
+ })
1438
+ },
1439
+ showCloseRowChooseInput () {
1440
+ this.rowChoosePopoverVisible = true
1441
+ },
1442
+ closeRowChooseInput () {
1443
+ this.rowChoosePopoverVisible = false
1444
+ },
1445
+ rowChooseSearchAfterQuery () {
1446
+ this.searching = false
1447
+ },
1448
+ // 获取 recording 转换后的数据
1449
+ getRecodingData () {
1450
+ return this.$refs.recording.getRecordingData()
1451
+ },
1452
+ recordingData (data) {
1453
+ this.emitFunc('recordingData', data)
1454
+ },
1455
+ getPopupContainer (triggerNode) {
1456
+ // return document.body
1457
+ return triggerNode.parentNode
1458
+ },
1459
+ colorPickerComboboxSelect (val) {
1460
+ this.form[this.attr.model] = val
1461
+ },
1462
+ }
1463
+ }
1464
+ </script>
1465
+
1466
+ <style lang="less" scoped>
1467
+ .custom-dropdown {
1468
+ position: absolute;
1469
+ z-index: 1050;
1470
+ }
1471
+
1472
+ .multiple_select {
1473
+ :deep(.ant-select-selection) {
1474
+ max-height: 32px;
1475
+ overflow-y: scroll;
1476
+ }
1477
+ }
1478
+
1479
+ </style>