easybill-ui 1.4.1 → 1.4.2

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 (281) hide show
  1. package/dist/_virtual/_plugin-vue_export-helper.js +9 -0
  2. package/dist/assets/easybill-ui.css +1 -0
  3. package/dist/components/ConstantStatus/index.d.ts +24 -0
  4. package/dist/components/ConstantStatus/index.js +7 -0
  5. package/dist/components/ConstantStatus/src/ConstantStatus.vue.d.ts +25 -0
  6. package/dist/components/ConstantStatus/src/ConstantStatus.vue.js +76 -0
  7. package/dist/components/ConstantStatus/src/ConstantStatus.vue2.js +4 -0
  8. package/dist/components/ConstantStatus/src/index.d.ts +3 -0
  9. package/dist/components/ConstantStatus/src/index.js +5 -0
  10. package/dist/components/ConstantStatus/src/types.d.ts +18 -0
  11. package/dist/components/CurdForm/index.d.ts +9 -0
  12. package/dist/components/CurdForm/index.js +9 -0
  13. package/dist/components/CurdForm/src/CurdForm.vue.js +7 -0
  14. package/dist/components/CurdForm/src/CurdForm.vue2.js +326 -0
  15. package/dist/components/CurdForm/src/CurdFormItem.vue.d.ts +37 -0
  16. package/dist/components/CurdForm/src/CurdFormItem.vue.js +55 -0
  17. package/dist/components/CurdForm/src/CurdFormItem.vue2.js +4 -0
  18. package/dist/components/CurdForm/src/FormItem.vue.d.ts +44 -0
  19. package/dist/components/CurdForm/src/FormItem.vue.js +128 -0
  20. package/dist/components/CurdForm/src/FormItem.vue2.js +4 -0
  21. package/dist/components/CurdForm/src/FormTooltip.vue.d.ts +33 -0
  22. package/dist/components/CurdForm/src/FormTooltip.vue.js +63 -0
  23. package/dist/components/CurdForm/src/FormTooltip.vue2.js +4 -0
  24. package/dist/components/CurdForm/src/components/index.d.ts +10 -0
  25. package/dist/components/CurdForm/src/components/index.js +38 -0
  26. package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue.d.ts +56 -0
  27. package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue.js +39 -0
  28. package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue2.js +4 -0
  29. package/dist/components/CurdForm/src/components/schema-form-cascader.vue.d.ts +56 -0
  30. package/dist/components/CurdForm/src/components/schema-form-cascader.vue.js +32 -0
  31. package/dist/components/CurdForm/src/components/schema-form-cascader.vue2.js +4 -0
  32. package/dist/components/CurdForm/src/components/schema-form-checkbox.vue.d.ts +59 -0
  33. package/dist/components/CurdForm/src/components/schema-form-checkbox.vue.js +86 -0
  34. package/dist/components/CurdForm/src/components/schema-form-checkbox.vue2.js +33 -0
  35. package/dist/components/CurdForm/src/components/schema-form-choose.vue.js +217 -0
  36. package/dist/components/CurdForm/src/components/schema-form-choose.vue2.js +4 -0
  37. package/dist/components/CurdForm/src/components/schema-form-color-picker.vue.d.ts +54 -0
  38. package/dist/components/CurdForm/src/components/schema-form-color-picker.vue.js +15 -0
  39. package/dist/components/CurdForm/src/components/schema-form-color-picker.vue2.js +19 -0
  40. package/dist/components/CurdForm/src/components/schema-form-date-picker.vue.d.ts +56 -0
  41. package/dist/components/CurdForm/src/components/schema-form-date-picker.vue.js +32 -0
  42. package/dist/components/CurdForm/src/components/schema-form-date-picker.vue2.js +27 -0
  43. package/dist/components/CurdForm/src/components/schema-form-input-number.vue.d.ts +54 -0
  44. package/dist/components/CurdForm/src/components/schema-form-input-number.vue.js +39 -0
  45. package/dist/components/CurdForm/src/components/schema-form-input-number.vue2.js +4 -0
  46. package/dist/components/CurdForm/src/components/schema-form-input.vue.d.ts +54 -0
  47. package/dist/components/CurdForm/src/components/schema-form-input.vue.js +44 -0
  48. package/dist/components/CurdForm/src/components/schema-form-input.vue2.js +4 -0
  49. package/dist/components/CurdForm/src/components/schema-form-radio.vue.d.ts +54 -0
  50. package/dist/components/CurdForm/src/components/schema-form-radio.vue.js +114 -0
  51. package/dist/components/CurdForm/src/components/schema-form-radio.vue2.js +4 -0
  52. package/dist/components/CurdForm/src/components/schema-form-select-v2.vue.d.ts +54 -0
  53. package/dist/components/CurdForm/src/components/schema-form-select-v2.vue.js +69 -0
  54. package/dist/components/CurdForm/src/components/schema-form-select-v2.vue2.js +4 -0
  55. package/dist/components/CurdForm/src/components/schema-form-select.vue.js +65 -0
  56. package/dist/components/CurdForm/src/components/schema-form-select.vue2.js +66 -0
  57. package/dist/components/CurdForm/src/components/schema-form-switch.vue.d.ts +54 -0
  58. package/dist/components/CurdForm/src/components/schema-form-switch.vue.js +14 -0
  59. package/dist/components/CurdForm/src/components/schema-form-switch.vue2.js +25 -0
  60. package/dist/components/CurdForm/src/components/schema-form-time-picker.vue.d.ts +57 -0
  61. package/dist/components/CurdForm/src/components/schema-form-time-picker.vue.js +29 -0
  62. package/dist/components/CurdForm/src/components/schema-form-time-picker.vue2.js +30 -0
  63. package/dist/components/CurdForm/src/components/schema-form-tree-select.vue.d.ts +58 -0
  64. package/dist/components/CurdForm/src/components/schema-form-tree-select.vue.js +55 -0
  65. package/dist/components/CurdForm/src/components/schema-form-tree-select.vue2.js +31 -0
  66. package/dist/components/CurdForm/src/components/schema-form-value.vue.d.ts +54 -0
  67. package/dist/components/CurdForm/src/components/schema-form-value.vue.js +11 -0
  68. package/dist/components/CurdForm/src/components/schema-form-value.vue2.js +21 -0
  69. package/dist/components/CurdForm/src/directive/index.d.ts +12 -0
  70. package/dist/components/CurdForm/src/directive/index.js +32 -0
  71. package/dist/components/CurdForm/src/hooks/index.d.ts +4 -0
  72. package/dist/components/CurdForm/src/hooks/index.js +7 -0
  73. package/dist/components/CurdForm/src/types.d.ts +136 -0
  74. package/dist/components/CurdForm/src/types.js +27 -0
  75. package/dist/components/CurdForm/src/utils/ajax.d.ts +25 -0
  76. package/dist/components/CurdForm/src/utils/common.d.ts +1 -0
  77. package/dist/components/CurdForm/src/utils/common.js +13 -0
  78. package/dist/components/CurdGroupForm/index.d.ts +2 -0
  79. package/dist/components/CurdGroupForm/src/CurdGroupForm.vue.d.ts +36 -0
  80. package/dist/components/CurdGroupForm/src/CurdGroupForm.vue.js +113 -0
  81. package/dist/components/CurdGroupForm/src/CurdGroupForm.vue2.js +4 -0
  82. package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue.d.ts +52 -0
  83. package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue.js +64 -0
  84. package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue2.js +4 -0
  85. package/dist/components/CurdGroupForm/src/hooks/useFormHook.d.ts +12 -0
  86. package/dist/components/CurdGroupForm/src/hooks/useFormHook.js +32 -0
  87. package/dist/components/CurdGroupForm/types.d.ts +33 -0
  88. package/dist/components/CurdTable/index.d.ts +13 -0
  89. package/dist/components/CurdTable/index.js +7 -0
  90. package/dist/components/CurdTable/src/CurdTable.vue.js +562 -0
  91. package/dist/components/CurdTable/src/CurdTable.vue2.js +4 -0
  92. package/dist/components/CurdTable/src/STableColumnControl.vue.d.ts +21 -0
  93. package/dist/components/CurdTable/src/STableColumnControl.vue.js +132 -0
  94. package/dist/components/CurdTable/src/STableColumnControl.vue2.js +4 -0
  95. package/dist/components/CurdTable/src/STableDetail.vue.d.ts +9 -0
  96. package/dist/components/CurdTable/src/STableDetail.vue.js +53 -0
  97. package/dist/components/CurdTable/src/STableDetail.vue2.js +4 -0
  98. package/dist/components/CurdTable/src/STableFilter.vue.d.ts +28 -0
  99. package/dist/components/CurdTable/src/STableFilter.vue.js +40 -0
  100. package/dist/components/CurdTable/src/STableFilter.vue2.js +4 -0
  101. package/dist/components/CurdTable/src/STableItem.vue.d.ts +127 -0
  102. package/dist/components/CurdTable/src/STableItem.vue.js +147 -0
  103. package/dist/components/CurdTable/src/STableItem.vue2.js +4 -0
  104. package/dist/components/CurdTable/src/STableItemFilter.vue.d.ts +34 -0
  105. package/dist/components/CurdTable/src/STableItemFilter.vue.js +71 -0
  106. package/dist/components/CurdTable/src/STableItemFilter.vue2.js +4 -0
  107. package/dist/components/CurdTable/src/STableItemFormatter.vue.d.ts +38 -0
  108. package/dist/components/CurdTable/src/STableItemFormatter.vue.js +34 -0
  109. package/dist/components/CurdTable/src/STableItemFormatter.vue2.js +4 -0
  110. package/dist/components/CurdTable/src/STableItemHeader.vue.d.ts +16 -0
  111. package/dist/components/CurdTable/src/STableItemHeader.vue.js +24 -0
  112. package/dist/components/CurdTable/src/STableItemHeader.vue2.js +4 -0
  113. package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue.d.ts +14 -0
  114. package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue.js +48 -0
  115. package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue2.js +4 -0
  116. package/dist/components/CurdTable/src/STableMenu.vue.d.ts +20 -0
  117. package/dist/components/CurdTable/src/STableMenu.vue.js +120 -0
  118. package/dist/components/CurdTable/src/STableMenu.vue2.js +4 -0
  119. package/dist/components/CurdTable/src/hooks/useColumnHook.d.ts +9 -0
  120. package/dist/components/CurdTable/src/hooks/useColumnHook.js +45 -0
  121. package/dist/components/CurdTable/src/types.d.ts +178 -0
  122. package/dist/components/CurdTable/utils/common.d.ts +5 -0
  123. package/dist/components/CurdTable/utils/common.js +18 -0
  124. package/dist/components/CurdTable/utils/tabelToExcel.d.ts +4 -0
  125. package/dist/components/CurdTable/utils/tabelToExcel.js +23 -0
  126. package/dist/components/DetailInfo/index.d.ts +147 -0
  127. package/dist/components/DetailInfo/index.js +7 -0
  128. package/dist/components/DetailInfo/src/DetailInfo.vue.d.ts +77 -0
  129. package/dist/components/DetailInfo/src/DetailInfo.vue.js +144 -0
  130. package/dist/components/DetailInfo/src/DetailInfo.vue2.js +4 -0
  131. package/dist/components/DetailInfo/src/DetailInfoContent.vue.d.ts +16 -0
  132. package/dist/components/DetailInfo/src/DetailInfoContent.vue.js +43 -0
  133. package/dist/components/DetailInfo/src/DetailInfoContent.vue2.js +4 -0
  134. package/dist/components/DetailInfo/src/DetailInfoTooltip.vue.d.ts +15 -0
  135. package/dist/components/DetailInfo/src/DetailInfoTooltip.vue.js +48 -0
  136. package/dist/components/DetailInfo/src/DetailInfoTooltip.vue2.js +4 -0
  137. package/dist/components/DetailInfo/src/types.d.ts +22 -0
  138. package/dist/components/FormDialog/index.d.ts +7 -0
  139. package/dist/components/FormDialog/index.js +6 -0
  140. package/dist/components/FormDialog/src/FormDialog.vue.d.ts +247 -0
  141. package/dist/components/FormDialog/src/FormDialog.vue.js +117 -0
  142. package/dist/components/FormDialog/src/FormDialog.vue2.js +191 -0
  143. package/dist/components/FormDialog/src/hooks/index.d.ts +2 -0
  144. package/dist/components/FormDialog/src/hooks/useStepList.d.ts +14 -0
  145. package/dist/components/FormDialog/src/hooks/useStepList.js +27 -0
  146. package/dist/components/FormDialog/src/hooks/useStepNavigation.d.ts +75 -0
  147. package/dist/components/FormDialog/src/hooks/useStepNavigation.js +34 -0
  148. package/dist/components/FormDialog/src/index.d.ts +13 -0
  149. package/dist/components/FormDialog/src/index.js +23 -0
  150. package/dist/components/FormDialog/src/types.d.ts +63 -0
  151. package/dist/components/TableFilter/index.d.ts +6 -0
  152. package/dist/components/TableFilter/index.js +7 -0
  153. package/dist/components/TableFilter/src/FilterExternal/FilterExternal.vue.js +91 -0
  154. package/dist/components/TableFilter/src/FilterExternal/FilterExternal.vue2.js +4 -0
  155. package/dist/components/TableFilter/src/FilterSearchBox.vue.d.ts +33 -0
  156. package/dist/components/TableFilter/src/FilterSearchBox.vue.js +71 -0
  157. package/dist/components/TableFilter/src/FilterSearchBox.vue2.js +4 -0
  158. package/dist/components/TableFilter/src/TableFilter.vue.js +180 -0
  159. package/dist/components/TableFilter/src/TableFilter.vue2.js +4 -0
  160. package/dist/components/TableFilter/src/components/FilterItem.vue.d.ts +37 -0
  161. package/dist/components/TableFilter/src/components/FilterItem.vue.js +63 -0
  162. package/dist/components/TableFilter/src/components/FilterItem.vue2.js +4 -0
  163. package/dist/components/TableFilter/src/components/FilterTags.vue.d.ts +114 -0
  164. package/dist/components/TableFilter/src/components/FilterTags.vue.js +142 -0
  165. package/dist/components/TableFilter/src/components/FilterTags.vue2.js +4 -0
  166. package/dist/components/TableFilter/src/components/FilterToggle.vue.d.ts +29 -0
  167. package/dist/components/TableFilter/src/components/FilterToggle.vue.js +70 -0
  168. package/dist/components/TableFilter/src/components/FilterToggle.vue2.js +4 -0
  169. package/dist/components/TableFilter/src/components/FilterType.vue.d.ts +30 -0
  170. package/dist/components/TableFilter/src/components/FilterType.vue.js +62 -0
  171. package/dist/components/TableFilter/src/components/FilterType.vue2.js +4 -0
  172. package/dist/components/TableFilter/src/components/containers/TagsSelect.vue.d.ts +42 -0
  173. package/dist/components/TableFilter/src/components/containers/TagsSelect.vue.js +99 -0
  174. package/dist/components/TableFilter/src/components/containers/TagsSelect.vue2.js +4 -0
  175. package/dist/components/TableFilter/types.d.ts +34 -0
  176. package/dist/index.d.ts +22 -0
  177. package/dist/index.js +35 -0
  178. package/dist/locale/index.d.ts +9 -0
  179. package/dist/locale/index.js +6 -0
  180. package/dist/locale/lang/en.d.ts +49 -0
  181. package/{locale/lang/en.ts → dist/locale/lang/en.js} +10 -7
  182. package/dist/locale/lang/zh-cn.d.ts +49 -0
  183. package/{locale/lang/zh-cn.ts → dist/locale/lang/zh-cn.js} +10 -7
  184. package/dist/utils/common/index.d.ts +8 -0
  185. package/dist/utils/common/index.js +13 -0
  186. package/dist/utils/hooks/useGlobalConfig.d.ts +13 -0
  187. package/dist/utils/hooks/useGlobalConfig.js +22 -0
  188. package/dist/utils/hooks/useLocal.d.ts +15 -0
  189. package/dist/utils/hooks/useLocal.js +33 -0
  190. package/dist/utils/index.d.ts +2 -0
  191. package/dist/utils/index.js +6 -0
  192. package/dist/utils/vue/index.d.ts +2 -0
  193. package/dist/utils/vue/index.js +4 -0
  194. package/dist/utils/vue/install.d.ts +2 -0
  195. package/dist/utils/vue/install.js +14 -0
  196. package/dist/utils/vue/make-installer.d.ts +5 -0
  197. package/dist/utils/vue/make-installer.js +9 -0
  198. package/dist/utils/vue/typescript.d.ts +5 -0
  199. package/package.json +55 -46
  200. package/components/ConstantStatus/index.ts +0 -5
  201. package/components/ConstantStatus/src/ConstantStatus.vue +0 -69
  202. package/components/ConstantStatus/src/index.ts +0 -3
  203. package/components/ConstantStatus/src/types.ts +0 -18
  204. package/components/CurdForm/index.ts +0 -9
  205. package/components/CurdForm/src/CurdForm.vue +0 -500
  206. package/components/CurdForm/src/CurdFormItem.vue +0 -70
  207. package/components/CurdForm/src/FormItem.vue +0 -105
  208. package/components/CurdForm/src/FormTooltip.vue +0 -54
  209. package/components/CurdForm/src/components/index.ts +0 -52
  210. package/components/CurdForm/src/components/schema-form-autocomplete.vue +0 -25
  211. package/components/CurdForm/src/components/schema-form-cascader.vue +0 -24
  212. package/components/CurdForm/src/components/schema-form-checkbox.vue +0 -53
  213. package/components/CurdForm/src/components/schema-form-choose.vue +0 -225
  214. package/components/CurdForm/src/components/schema-form-color-picker.vue +0 -23
  215. package/components/CurdForm/src/components/schema-form-date-picker.vue +0 -34
  216. package/components/CurdForm/src/components/schema-form-input-number.vue +0 -12
  217. package/components/CurdForm/src/components/schema-form-input.vue +0 -21
  218. package/components/CurdForm/src/components/schema-form-radio.vue +0 -59
  219. package/components/CurdForm/src/components/schema-form-select-v2.vue +0 -60
  220. package/components/CurdForm/src/components/schema-form-select.vue +0 -93
  221. package/components/CurdForm/src/components/schema-form-switch.vue +0 -29
  222. package/components/CurdForm/src/components/schema-form-time-picker.vue +0 -37
  223. package/components/CurdForm/src/components/schema-form-tree-select.vue +0 -45
  224. package/components/CurdForm/src/components/schema-form-value.vue +0 -25
  225. package/components/CurdForm/src/directive/index.ts +0 -60
  226. package/components/CurdForm/src/hooks/index.ts +0 -6
  227. package/components/CurdForm/src/types.ts +0 -146
  228. package/components/CurdForm/src/utils/ajax.ts +0 -125
  229. package/components/CurdForm/src/utils/common.ts +0 -17
  230. package/components/CurdGroupForm/index.ts +0 -2
  231. package/components/CurdGroupForm/src/CurdGroupForm.vue +0 -93
  232. package/components/CurdGroupForm/src/components/CurdFormGroup.vue +0 -39
  233. package/components/CurdGroupForm/src/hooks/useFormHook.ts +0 -55
  234. package/components/CurdGroupForm/types.ts +0 -22
  235. package/components/CurdTable/index.ts +0 -5
  236. package/components/CurdTable/src/CurdTable.vue +0 -470
  237. package/components/CurdTable/src/STableColumnControl.vue +0 -88
  238. package/components/CurdTable/src/STableDetail.vue +0 -52
  239. package/components/CurdTable/src/STableFilter.vue +0 -50
  240. package/components/CurdTable/src/STableItem.vue +0 -119
  241. package/components/CurdTable/src/STableItemFilter.vue +0 -53
  242. package/components/CurdTable/src/STableItemFormatter.vue +0 -35
  243. package/components/CurdTable/src/STableItemHeader.vue +0 -33
  244. package/components/CurdTable/src/STableItemHeaderTooltip.vue +0 -32
  245. package/components/CurdTable/src/STableMenu.vue +0 -77
  246. package/components/CurdTable/src/hooks/useColumnHook.ts +0 -77
  247. package/components/CurdTable/src/types.ts +0 -163
  248. package/components/CurdTable/utils/common.ts +0 -33
  249. package/components/CurdTable/utils/tabelToExcel.ts +0 -68
  250. package/components/DetailInfo/index.ts +0 -5
  251. package/components/DetailInfo/src/DetailInfo.vue +0 -108
  252. package/components/DetailInfo/src/DetailInfoContent.vue +0 -27
  253. package/components/DetailInfo/src/DetailInfoTooltip.vue +0 -33
  254. package/components/DetailInfo/src/types.ts +0 -23
  255. package/components/FormDialog/index.ts +0 -3
  256. package/components/FormDialog/src/FormDialog.vue +0 -276
  257. package/components/FormDialog/src/hooks/index.ts +0 -2
  258. package/components/FormDialog/src/hooks/useStepList.ts +0 -49
  259. package/components/FormDialog/src/hooks/useStepNavigation.ts +0 -74
  260. package/components/FormDialog/src/index.ts +0 -39
  261. package/components/FormDialog/src/types.ts +0 -51
  262. package/components/TableFilter/index.ts +0 -6
  263. package/components/TableFilter/src/FilterExternal/FilterExternal.vue +0 -121
  264. package/components/TableFilter/src/FilterSearchBox.vue +0 -65
  265. package/components/TableFilter/src/TableFilter.vue +0 -236
  266. package/components/TableFilter/src/components/FilterItem.vue +0 -76
  267. package/components/TableFilter/src/components/FilterTags.vue +0 -132
  268. package/components/TableFilter/src/components/FilterToggle.vue +0 -40
  269. package/components/TableFilter/src/components/FilterType.vue +0 -78
  270. package/components/TableFilter/src/components/containers/TagsSelect.vue +0 -89
  271. package/components/TableFilter/types.ts +0 -36
  272. package/index.ts +0 -25
  273. package/locale/index.ts +0 -11
  274. package/utils/common/index.ts +0 -24
  275. package/utils/hooks/useGlobalConfig.ts +0 -39
  276. package/utils/hooks/useLocal.ts +0 -61
  277. package/utils/index.ts +0 -2
  278. package/utils/vue/index.ts +0 -3
  279. package/utils/vue/install.ts +0 -18
  280. package/utils/vue/make-installer.ts +0 -16
  281. package/utils/vue/typescript.ts +0 -7
@@ -1,500 +0,0 @@
1
- <template>
2
- <el-form ref="schemaFormRef" :model="formModel" :rules="rules" v-bind="{ ...$attrs, ...getFormProps }" class="curd-form" :style="getFormStyle()" @submit.prevent>
3
- <template v-for="formItem in schemaItems" :key="formItem.prop">
4
- <!-- choose 类型特殊处理,不使用 el-form-item 包裹,避免嵌套问题 -->
5
- <template v-if="formItem.type === 'choose'">
6
- <div v-if="!$slots[formItem.prop + 'Item']" class="el-form-item choose-group-wrapper" :class="[getFormItemStyle(formItem), getChooseFormItemClass(formItem)]" :style="getChooseFormItemStyle(formItem)">
7
- <!-- label 区域 -->
8
- <label v-if="formItem.label" class="el-form-item__label" :style="{ width: getLabelWidth(formItem) }">
9
- {{ formItem.label }}
10
- </label>
11
-
12
- <!-- content 区域 -->
13
- <div class="el-form-item__content" :style="{ marginLeft: getLabelPosition(formItem) !== 'top' ? '' : '' }">
14
- <slot :name="formItem.prop" :form-item="formItem" :form-model="formModel"></slot>
15
- <FormItem v-if="!(formItem.prop && $slots[formItem.prop])" :form-item="formItem" :form-model="formModel" @change="onChange">
16
- <template #prefix>
17
- <slot :name="formItem.prop + 'Prefix'" :form-item="formItem" :form-model="formModel"></slot>
18
- </template>
19
- <template #suffix>
20
- <slot :name="formItem.prop + 'Suffix'" :form-item="formItem" :form-model="formModel"></slot>
21
- </template>
22
- </FormItem>
23
- <slot :name="formItem.prop + 'Bottom'" :form-item="formItem" :form-model="formModel"></slot>
24
- </div>
25
- </div>
26
- <slot :name="formItem.prop + 'Item'" :form-item="formItem" :form-model="formModel"></slot>
27
- </template>
28
-
29
- <!-- 其他类型使用 el-form-item 包裹 -->
30
- <template v-else>
31
- <el-form-item v-if="!$slots[formItem.prop + 'Item']" :required="hasRequiredRule(formItem.prop)" :label="formItem.label" :prop="formItem.prop" :label-width="formItem.labelWidth" :class="getFormItemStyle(formItem)" v-bind="getFormItemProps(formItem)">
32
- <template v-for="(item, key) in getFormItemProps(formItem)?.slots || {}" :key="key" #[key]="row">
33
- <component :is="item" v-bind="row" />
34
- </template>
35
- <component :is="formItem.slots?.top" :formItem="formItem" :formModel="formModel" />
36
- <slot :name="formItem.prop" :form-item="formItem" :form-model="formModel"></slot>
37
- <FormItem v-if="!(formItem.prop && $slots[formItem.prop])" :form-item="formItem" :form-model="formModel" @change="onChange">
38
- <template #prefix>
39
- <slot :name="formItem.prop + 'Prefix'" :formItem="formItem" :formModel="formModel"></slot>
40
- </template>
41
- <template #suffix>
42
- <slot :name="formItem.prop + 'Suffix'" :formItem="formItem" :formModel="formModel"></slot>
43
- </template>
44
- </FormItem>
45
- <slot :name="formItem.prop + 'Bottom'" :formItem="formItem" :formModel="formModel"></slot>
46
- <component :is="formItem.slots?.bottom" :formItem="formItem" :formModel="formModel" />
47
- </el-form-item>
48
- <slot :name="formItem.prop + 'Item'" :formItem="formItem" :formModel="formModel"></slot>
49
- </template>
50
- </template>
51
- <template v-if="$slots['operate-button']">
52
- <el-form-item style="max-width: 100%">
53
- <slot name="operate-button"></slot>
54
- </el-form-item>
55
- </template>
56
- </el-form>
57
- </template>
58
-
59
- <script lang="ts" setup>
60
- import { ElForm, type FormItemRule, type FormRules } from "element-plus"
61
- import { computed, getCurrentInstance, onMounted, provide, reactive, ref, triggerRef, watch, type PropType } from "vue"
62
- import FormItem from "./FormItem.vue"
63
- import type { CurdFormOptionItem, Fields, FormContext, FormItemProvider, FormItemSearchResult, FormItem as FormItemType, FormSchema } from "./types"
64
- import { deepClone } from "./utils/common"
65
-
66
- const props = defineProps({
67
- formSchema: {
68
- required: true,
69
- type: Object as PropType<FormSchema>,
70
- default: () => ({}),
71
- },
72
- fields: {
73
- type: Object as PropType<Fields>,
74
- default: () => ({}),
75
- },
76
- modelValue: {
77
- type: Object as PropType<Fields>,
78
- default: undefined,
79
- },
80
- extendContext: {
81
- type: Object as PropType<Partial<FormContext>>,
82
- default: undefined,
83
- },
84
- })
85
-
86
- const emit = defineEmits(["update:modelValue", "change"])
87
-
88
- const schemaFormRef = ref<InstanceType<typeof ElForm> | undefined>()
89
- const sFormSchema = ref(props.formSchema)
90
- let formModel = reactive<Fields>(props.modelValue || {})
91
- const curdFormContext = reactive<FormContext>({} as FormContext)
92
- const instance = getCurrentInstance()
93
- const formItemProviders = new Map<string | symbol, FormItemProvider["getItems"]>()
94
-
95
- const normalizeFormItems = (items?: FormItemType[] | null) => {
96
- return Array.isArray(items) ? items : []
97
- }
98
-
99
- const walkBuiltInFormItems = (items: FormItemType[], callback: (item: FormItemType, parent?: FormItemType, path?: string) => void | boolean, parent?: FormItemType, parentPath = "") => {
100
- for (const item of normalizeFormItems(items)) {
101
- const currentPath = parentPath ? `${parentPath}.${item.prop}` : item.prop
102
- const shouldStop = callback(item, parent, currentPath)
103
- if (shouldStop) return true
104
-
105
- if (item.type === "choose" && item.options) {
106
- for (const option of item.options) {
107
- if (option.items?.length && walkBuiltInFormItems(option.items, callback, item, `${currentPath}.${option.value}`)) {
108
- return true
109
- }
110
- }
111
- }
112
- }
113
- return false
114
- }
115
-
116
- const getRegisteredFormItems = (providerId?: string | symbol) => {
117
- const items: FormItemType[] = []
118
- formItemProviders.forEach((getItems, id) => {
119
- if (typeof providerId !== "undefined" && id !== providerId) return
120
- items.push(...normalizeFormItems(getItems()))
121
- })
122
- return items
123
- }
124
-
125
- const collectDefaultValues = (items: FormItemType[]) => {
126
- const values: Fields = {}
127
- walkBuiltInFormItems(items, (item) => {
128
- item.eventObject ??= {}
129
- if (typeof item.value !== "undefined" && item.prop && (typeof formModel[item.prop] == "undefined" || formModel[item.prop] === "" || formModel[item.prop] === null)) {
130
- values[item.prop] = item.value
131
- }
132
- })
133
- return values
134
- }
135
-
136
- const loadFormItemOptions = async (formItem: FormItemType, option?: unknown) => {
137
- if (formItem.asyncOptions && !instance?.isUnmounted) {
138
- formItem.loading = true
139
- triggerRef(schemaItems)
140
- formItem.options =
141
- (await formItem
142
- .asyncOptions(formModel, formItem, curdFormContext, option)
143
- .catch((err) => console.error("loadOptionError", err))
144
- .finally(() => (formItem.loading = false))) || []
145
- triggerRef(schemaItems)
146
- if (!instance?.isUnmounted && formItem.eventObject?.optionLoaded) formItem.eventObject.optionLoaded(formModel, formItem, curdFormContext, option)
147
- }
148
- return formItem.options || []
149
- }
150
-
151
- const loadAutoloadFormItems = (items: FormItemType[]) => {
152
- walkBuiltInFormItems(items, (item) => {
153
- if (item.asyncOptions && (item.autoload || typeof item.autoload == "undefined") && item.asyncOptions instanceof Function) {
154
- void loadFormItemOptions(item)
155
- }
156
- })
157
- }
158
-
159
- const findFormItemInItems = (items: FormItemType[], prop: string, providerId?: string | symbol): FormItemSearchResult | undefined => {
160
- let result: FormItemSearchResult | undefined
161
- walkBuiltInFormItems(items, (item, parent, path) => {
162
- if (item.prop == prop) {
163
- result = { item, parent, path: path || prop, providerId }
164
- return true
165
- }
166
- return false
167
- })
168
- return result
169
- }
170
-
171
- const refreshFormItems = (providerId?: string | symbol) => {
172
- const registeredItems = getRegisteredFormItems(providerId)
173
- Object.assign(formModel, collectDefaultValues(registeredItems))
174
- loadAutoloadFormItems(registeredItems)
175
- triggerRef(schemaItems)
176
- triggerRef(rules)
177
- }
178
-
179
- const registerFormItems = (provider: FormItemProvider) => {
180
- formItemProviders.set(provider.id, provider.getItems)
181
- refreshFormItems(provider.id)
182
- return () => {
183
- formItemProviders.delete(provider.id)
184
- triggerRef(schemaItems)
185
- triggerRef(rules)
186
- }
187
- }
188
-
189
- watch(
190
- () => props.modelValue,
191
- (val) => {
192
- const value = deepClone(val)
193
- for (let i in formModel) {
194
- delete formModel[i]
195
- }
196
- Object.assign(formModel, value)
197
- },
198
- )
199
- watch(
200
- () => formModel,
201
- (val) => {
202
- emit("update:modelValue", val)
203
- },
204
- { deep: true },
205
- )
206
- // 先从schema中读取默认值
207
- const schemaValues = collectDefaultValues(sFormSchema.value.formItem)
208
-
209
- Object.assign(formModel, schemaValues)
210
- // 如果有默认值,则覆盖
211
- if (props.fields) Object.assign(formModel, props.fields)
212
- // Object.assign(formModel, props.modelValue)
213
- // props.modelValue && Object.assign(formModel, props.modelValue)
214
-
215
- const schemaItems = computed(() => {
216
- return sFormSchema.value.formItem.filter((item) => {
217
- if (!item.hidden) {
218
- return true
219
- }
220
- if (item.hidden instanceof Function) {
221
- return !item.hidden(formModel)
222
- }
223
- return !item.hidden
224
- })
225
- })
226
- // 异步设置默认数据
227
- loadAutoloadFormItems(sFormSchema.value.formItem)
228
-
229
- // 生成表单验证规则
230
- const rules = computed(() => {
231
- // eslint-disable-next-line vue/no-async-in-computed-properties
232
- Promise.resolve().then(() => {
233
- triggerRef(rules)
234
- })
235
- let baseRules: FormRules = {}
236
- if (typeof sFormSchema.value.rules == "function") {
237
- baseRules = sFormSchema.value.rules(formModel, curdFormContext)
238
- } else if (typeof sFormSchema.value.getRules == "function") {
239
- baseRules = sFormSchema.value.getRules(formModel, curdFormContext)
240
- } else {
241
- baseRules = sFormSchema.value.rules || {}
242
- }
243
-
244
- // 合并 choose 类型 items 和自定义组件注册项的验证规则
245
- const mergedRules: FormRules = { ...baseRules }
246
- sFormSchema.value.formItem.forEach((formItem) => {
247
- if (formItem.type === "choose" && formItem.options) {
248
- formItem.options.forEach((option) => {
249
- if (option.items) {
250
- option.items.forEach((subItem) => {
251
- if (subItem.prop && subItem.rules) {
252
- mergedRules[subItem.prop] = subItem.rules
253
- }
254
- })
255
- }
256
- })
257
- }
258
- })
259
- walkBuiltInFormItems(getRegisteredFormItems(), (formItem) => {
260
- if (formItem.prop && formItem.rules) {
261
- mergedRules[formItem.prop] = formItem.rules
262
- }
263
- })
264
-
265
- return mergedRules
266
- })
267
- const normalizeFormItemRules = (rule: FormItemRule | FormItemRule[] | undefined) => {
268
- if (!rule) return []
269
- return Array.isArray(rule) ? rule : [rule]
270
- }
271
- const hasRequiredRule = (prop: string) => {
272
- return normalizeFormItemRules(rules.value[prop] as FormItemRule | FormItemRule[] | undefined).some((rule) => Object.prototype.hasOwnProperty.call(rule, "required") && rule.required)
273
- }
274
-
275
- /**
276
- * 递归查找表单项
277
- * @param prop 表单项的 prop
278
- * @returns 找到的表单项对象,包含 parent 信息
279
- */
280
- const findFormItem = (prop: string): FormItemSearchResult | undefined => {
281
- const schemaResult = findFormItemInItems(sFormSchema.value.formItem, prop)
282
- if (schemaResult) return schemaResult
283
-
284
- for (const [providerId, getItems] of formItemProviders) {
285
- const providerResult = findFormItemInItems(normalizeFormItems(getItems()), prop, providerId)
286
- if (providerResult) return providerResult
287
- }
288
-
289
- return undefined
290
- }
291
- const hasFormItem = (prop: string) => Boolean(findFormItem(prop))
292
-
293
- // 供外部使用
294
- const validate = (callback: (valid: boolean) => void) => {
295
- return schemaFormRef.value?.validate(callback)
296
- }
297
- // 调用某个表单项的异步数据接口
298
- const loadOptions = async (prop: string, option?: unknown) => {
299
- const result = findFormItem(prop)
300
- if (!result) {
301
- console.warn(`[CurdForm] loadOptions: 未找到 prop 为 "${prop}" 的表单项`)
302
- return []
303
- }
304
-
305
- const cur = result.item
306
- return loadFormItemOptions(cur, option)
307
- }
308
- const contextLoadOptions = (prop: string, option?: unknown) => {
309
- if (hasFormItem(prop)) {
310
- return loadOptions(prop, option)
311
- }
312
-
313
- return props.extendContext?.loadOptions?.(prop, option)
314
- }
315
- // 给某个item赋值options
316
- const setOptions = async (prop: string, options: CurdFormOptionItem[], option?: unknown) => {
317
- const result = findFormItem(prop)
318
- if (result) {
319
- result.item.options = options
320
- triggerRef(schemaItems)
321
- if (!instance?.isUnmounted && result.item.eventObject?.optionLoaded) result.item.eventObject.optionLoaded(formModel, result.item, curdFormContext, option)
322
- } else {
323
- console.warn(`[CurdForm] setOptions: 未找到 prop 为 "${prop}" 的表单项`)
324
- }
325
- // return cur
326
- }
327
- const onChange = (formModel: Fields, formItem: FormItemType) => {
328
- emit("change", formModel, formItem)
329
- }
330
- const getFormItemStyle = (formItem: FormItemType) => {
331
- if (!formItem.span) return "el-form-item-full"
332
- return "el-form-item-" + formItem.span
333
- }
334
- const getFormItemProps = (formItem: FormItemType) => {
335
- if (formItem.formItemProps) {
336
- if (formItem.formItemProps instanceof Function) {
337
- return formItem.formItemProps(formModel, formItem)
338
- }
339
- return { ...formItem.formItemProps }
340
- }
341
- return {}
342
- }
343
-
344
- // 获取表单项的 labelWidth
345
- const getLabelWidth = (formItem: FormItemType) => {
346
- const itemLabelWidth = formItem.labelWidth
347
- if (itemLabelWidth !== undefined) {
348
- return typeof itemLabelWidth === "number" ? itemLabelWidth + "px" : itemLabelWidth
349
- }
350
- const formLabelWidth = props.formSchema.labelWidth
351
- if (formLabelWidth !== undefined) {
352
- return typeof formLabelWidth === "number" ? formLabelWidth + "px" : formLabelWidth
353
- }
354
- return undefined
355
- }
356
-
357
- // 获取表单项的 labelPosition
358
- const getLabelPosition = (formItem: FormItemType) => {
359
- return formItem.labelPosition || props.formSchema.labelPosition || ""
360
- }
361
-
362
- // 获取 choose 类型的额外样式类
363
- const getChooseFormItemClass = (_formItem: FormItemType) => {
364
- const classes: string[] = []
365
- const labelPosition = getLabelPosition(_formItem)
366
- if (labelPosition) {
367
- classes.push("el-form-item--label-" + labelPosition)
368
- }
369
- return classes.join(" ")
370
- }
371
-
372
- // 获取 choose 类型的样式
373
- const getChooseFormItemStyle = (formItem: FormItemType) => {
374
- const style: Record<string, string> = {}
375
- const labelPosition = getLabelPosition(formItem)
376
- if (labelPosition === "top") {
377
- // top 模式下不需要额外样式
378
- } else {
379
- const labelWidth = getLabelWidth(formItem)
380
- if (labelWidth) {
381
- // 用于让 content 区域正确对齐
382
- }
383
- }
384
- return style
385
- }
386
- const getFormStyle = () => {
387
- const gutter = props.formSchema.gutter
388
- if (gutter) {
389
- const guPx = +parseFloat(String(gutter))
390
- return { "--curd-form-gutter": guPx + "px" }
391
- }
392
- return {}
393
- }
394
- const getFormProps = computed(() => {
395
- const args: Record<string, unknown> = {}
396
- const sm = props.formSchema
397
- for (const i in sm) {
398
- if (!["formItem", "rules", "getRules"].includes(i)) {
399
- args[i] = sm[i as keyof FormSchema]
400
- }
401
- }
402
- return { ...args }
403
- })
404
-
405
- curdFormContext.loadOptions = contextLoadOptions
406
- curdFormContext.setOptions = setOptions
407
- curdFormContext.change = onChange
408
- curdFormContext.formModel = formModel
409
- curdFormContext.formSchema = props.formSchema
410
- curdFormContext.findFormItem = findFormItem
411
- curdFormContext.hasFormItem = hasFormItem
412
- curdFormContext.registerFormItems = registerFormItems
413
- curdFormContext.refreshFormItems = refreshFormItems
414
-
415
- if (props.extendContext) {
416
- const extendContext = { ...props.extendContext }
417
- delete extendContext.loadOptions
418
- Object.assign(curdFormContext, extendContext)
419
- }
420
-
421
- provide("curdFormContext", curdFormContext)
422
- onMounted(() => {
423
- curdFormContext.formRef = schemaFormRef.value
424
- })
425
-
426
- defineExpose({
427
- formModel,
428
- schemaFormRef,
429
- rules,
430
- schemaItems,
431
- sFormSchema,
432
- getFormStyle,
433
- getFormProps,
434
- getFormItemStyle,
435
- getFormItemProps,
436
- validate,
437
- findFormItem,
438
- hasFormItem,
439
- registerFormItems,
440
- refreshFormItems,
441
- loadOptions,
442
- setOptions,
443
- onChange,
444
- })
445
- </script>
446
-
447
- <style scoped lang="scss">
448
- // choose 类型容器样式,模拟 el-form-item 布局
449
- /*
450
- .choose-group-wrapper {
451
- display: flex;
452
- align-items: flex-start;
453
-
454
- :deep(.el-form-item__label) {
455
- display: inline-flex;
456
- justify-content: flex-end;
457
- align-items: flex-start;
458
- flex-shrink: 0;
459
- font-size: var(--el-font-size-base);
460
- color: var(--el-text-color-regular);
461
- height: 32px;
462
- line-height: 32px;
463
- padding: 0 12px 0 0;
464
- box-sizing: border-box;
465
- }
466
-
467
- :deep(.el-form-item__asterisk) {
468
- color: var(--el-color-danger);
469
- font-size: var(--el-font-size-base);
470
- margin-left: 4px;
471
- }
472
-
473
- :deep(.el-form-item__content) {
474
- display: flex;
475
- flex-wrap: wrap;
476
- align-items: center;
477
- flex: 1;
478
- position: relative;
479
- font-size: var(--el-font-size-base);
480
- min-width: 0;
481
- }
482
-
483
- :deep(.top-label) {
484
- justify-content: flex-start;
485
- padding: 0 0 8px 0;
486
- height: auto;
487
- line-height: 1.5;
488
- }
489
-
490
- // label-top 模式
491
- &.el-form-item--label-top {
492
- flex-direction: column;
493
-
494
- :deep(.el-form-item__content) {
495
- margin-left: 0 !important;
496
- }
497
- }
498
- }
499
- */
500
- </style>
@@ -1,70 +0,0 @@
1
- <template>
2
- <FormItemVue :form-model="model" :form-item="props.formItem" @change="onChange"></FormItemVue>
3
- </template>
4
- <script lang="ts">
5
- export default {
6
- name: "CurdFormItem",
7
- }
8
- </script>
9
- <script lang="ts" setup>
10
- import { getCurrentInstance, type PropType, reactive, ref, watch } from "vue"
11
- import FormItemVue from "./FormItem.vue"
12
- import type { Fields, FormContext, FormItem } from "./types"
13
- const props = defineProps({
14
- formItem: {
15
- required: true,
16
- type: Object as PropType<FormItem>,
17
- },
18
- formModel: {
19
- type: Object as PropType<Fields>,
20
- default: () => ({}),
21
- },
22
- modelValue: {
23
- type: [String, Array, Object],
24
- default: "",
25
- },
26
- })
27
- const emit = defineEmits(["update:modelValue"])
28
- const model = ref(props.formModel || {})
29
- if (props.modelValue) {
30
- model.value[props.formItem.prop] = props.modelValue
31
- }
32
- const onChange = () => {
33
- emit("update:modelValue", model.value[props.formItem.prop])
34
- }
35
- watch(
36
- () => props.modelValue,
37
- (val) => {
38
- model.value[props.formItem.prop] = val
39
- },
40
- )
41
- const instance = getCurrentInstance()
42
- const curdFormContext = reactive<FormContext>({} as FormContext)
43
- // 调用某个表单项的异步数据接口
44
- const loadOptions = async (_prop: string) => {
45
- const cur = props.formItem
46
- if (cur && cur.asyncOptions && !instance?.isUnmounted) {
47
- cur.loading = true
48
- cur.options =
49
- (await cur
50
- .asyncOptions(model.value, cur, curdFormContext)
51
- .catch((err) => console.error("loadOptionError", err))
52
- .finally(() => (cur.loading = false))) || []
53
- if (!instance?.isUnmounted && cur.eventObject?.optionLoaded) cur.eventObject.optionLoaded(model.value, cur, curdFormContext)
54
- }
55
- return cur?.options || []
56
- }
57
- const init = () => {
58
- if (props.formItem.asyncOptions) {
59
- loadOptions(props.formItem.prop)
60
- }
61
- }
62
- curdFormContext.loadOptions = loadOptions
63
- init()
64
- watch(
65
- () => props.formItem,
66
- () => {
67
- init()
68
- },
69
- )
70
- </script>
@@ -1,105 +0,0 @@
1
- <template>
2
- <div class="form-item">
3
- <div v-if="props.formItem.prefix && isString(props.formItem.prefix)" class="form-item-prefix" v-html="props.formItem.prefix"></div>
4
- <component :is="item" v-for="(item, i) in prefixList" :key="i" v-model="modelRef[props.formItem.prop || '']" :form-item="props.formItem" :form-model="modelRef" :props="formItemProps" :event-object="eventObject" />
5
- <slot name="prefix"></slot>
6
- <component :is="comp" v-if="comp" v-model="modelRef[props.formItem.prop || '']" :form-item="props.formItem" :form-model="modelRef" :props="formItemProps" :event-object="eventObject">
7
- <template v-for="(item, key) in formItemProps.slots" :key="key" #[key]="slotScope">
8
- <component :is="item" v-model="modelRef[props.formItem.prop || '']" v-bind="slotScope" :form-item="props.formItem" :form-model="modelRef" :props="formItemProps" :event-object="eventObject" />
9
- </template>
10
- </component>
11
- <component :is="props.formItem.type" v-else v-model="modelRef[props.formItem.prop || '']" v-bind="formItemProps" v-on="eventObject">
12
- <template v-for="(item, key) in formItemProps.slots" :key="key" #[key]="slotScope">
13
- <component :is="item" v-model="modelRef[props.formItem.prop || '']" v-bind="slotScope" :form-item="props.formItem" :form-model="modelRef" :props="formItemProps" :event-object="eventObject" />
14
- </template>
15
- </component>
16
-
17
- <FormTooltip v-if="props.formItem.tooltip" :tooltip="props.formItem.tooltip" :form-item="props.formItem" :form-model="props.formModel" />
18
- <slot name="suffix"></slot>
19
- <div v-if="props.formItem.suffix && isString(props.formItem.suffix)" class="form-item-suffix" v-html="props.formItem.suffix"></div>
20
- <component :is="item" v-for="(item, i) in suffixList" :key="i" v-model="modelRef[props.formItem.prop || '']" :form-item="props.formItem" :form-model="modelRef" :props="formItemProps" :event-object="eventObject" />
21
- </div>
22
- </template>
23
- <script lang="ts" setup>
24
- import { computed, type PropType, ref, type Ref } from "vue"
25
- import { getComponent } from "./components"
26
- import FormTooltip from "./FormTooltip.vue"
27
- import { useForm } from "./hooks"
28
- import type { Fields, FormItem } from "./types"
29
- const props = defineProps({
30
- // 动态验证表单
31
- formItem: {
32
- required: true,
33
- type: Object as PropType<FormItem>,
34
- },
35
- formModel: {
36
- type: Object as PropType<Fields>,
37
- default: () => ({}),
38
- },
39
- })
40
- const emit = defineEmits(["change"])
41
- const { formContext } = useForm()
42
- const modelRef: Ref<Fields> = ref(props.formModel || {})
43
- // 重新组装props
44
- const formItemProps = computed(() => {
45
- if (!props.formItem.props) {
46
- return {}
47
- }
48
- if (props.formItem.props instanceof Function) {
49
- return props.formItem.props(props.formModel, props.formItem)
50
- }
51
- return props.formItem.props
52
- })
53
- const comp = computed(() => (formContext.components && formContext.components[props.formItem.type || "input"]) || getComponent(props.formItem.type))
54
- // 重新组装eventObject
55
- const eventObject = ref(
56
- (() => {
57
- const result = { ...props.formItem.eventObject }
58
- // 如果没有传eventObject,就初始一个change事件
59
- if (!props.formItem.eventObject || Object.keys(props.formItem.eventObject).length <= 0) {
60
- return {
61
- change: () => {
62
- emit("change", props.formModel, props.formItem, formContext)
63
- },
64
- }
65
- }
66
- const changeFun = props.formItem.eventObject.change
67
- result.change = (...args: unknown[]) => {
68
- if (changeFun) {
69
- const flag = changeFun && changeFun.apply(null, [props.formModel, props.formItem, formContext, ...args])
70
- if (flag) {
71
- emit("change", props.formModel, props.formItem, formContext, ...args)
72
- }
73
- } else {
74
- emit("change", props.formModel, props.formItem, formContext, ...args)
75
- }
76
- }
77
- for (let i in result) {
78
- if (i !== "change") {
79
- const fun = result[i]
80
- result[i] = (...args: unknown[]) => {
81
- if (fun) fun(props.formModel, props.formItem, formContext, ...args)
82
- }
83
- }
84
- }
85
- return result
86
- })(),
87
- )
88
- const isString = (val: unknown) => {
89
- return typeof val === "string"
90
- }
91
- const prefixList = computed(() => {
92
- if (!props.formItem.prefix || isString(props.formItem.prefix)) return []
93
- if (Array.isArray(props.formItem.prefix)) {
94
- return props.formItem.prefix
95
- }
96
- return [props.formItem.prefix]
97
- })
98
- const suffixList = computed(() => {
99
- if (!props.formItem.suffix || isString(props.formItem.suffix)) return []
100
- if (Array.isArray(props.formItem.suffix)) {
101
- return props.formItem.suffix
102
- }
103
- return [props.formItem.suffix]
104
- })
105
- </script>