sohelp-eleplus 1.1.13

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 (191) hide show
  1. package/README.md +7 -0
  2. package/cache/DictCache.js +58 -0
  3. package/cache/ModuleCache.js +352 -0
  4. package/components.js +45 -0
  5. package/core-export.js +4 -0
  6. package/http/CrudHttp.js +115 -0
  7. package/http/DictHttp.js +12 -0
  8. package/http/ModuleHttp.js +68 -0
  9. package/http/SohelpHttp.js +125 -0
  10. package/index.js +6 -0
  11. package/installer.js +8 -0
  12. package/lang/en_US.js +4 -0
  13. package/lang/zh_CN.js +4 -0
  14. package/lang/zh_TW.js +4 -0
  15. package/package.json +9 -0
  16. package/sohelp-ace-editor/index.vue +198 -0
  17. package/sohelp-application-select/index.vue +15 -0
  18. package/sohelp-autocode/index.vue +53 -0
  19. package/sohelp-calendar-view/index.vue +11 -0
  20. package/sohelp-card-view/index.vue +11 -0
  21. package/sohelp-condition/index.vue +210 -0
  22. package/sohelp-cry-input/index.vue +64 -0
  23. package/sohelp-date/index.vue +27 -0
  24. package/sohelp-datetime/index.vue +44 -0
  25. package/sohelp-datetime-picker/index.vue +86 -0
  26. package/sohelp-datetime-range/index.vue +59 -0
  27. package/sohelp-dict/index.vue +207 -0
  28. package/sohelp-dict/props.js +68 -0
  29. package/sohelp-drawer/index.vue +31 -0
  30. package/sohelp-drop-card/index.vue +94 -0
  31. package/sohelp-drop-card/props.js +68 -0
  32. package/sohelp-dyn-select/index.vue +99 -0
  33. package/sohelp-dyn-select/props.js +67 -0
  34. package/sohelp-dyn-tree/index.vue +82 -0
  35. package/sohelp-dyn-tree-select/index.vue +114 -0
  36. package/sohelp-entity-form/index.vue +524 -0
  37. package/sohelp-entity-grid/index.vue +30 -0
  38. package/sohelp-file-upload/index.vue +218 -0
  39. package/sohelp-filter-scheme/components/condition.vue +102 -0
  40. package/sohelp-filter-scheme/components/filter.vue +45 -0
  41. package/sohelp-filter-scheme/components/keywords.vue +15 -0
  42. package/sohelp-filter-scheme/components/scheme.vue +49 -0
  43. package/sohelp-filter-scheme/index.vue +113 -0
  44. package/sohelp-grid/SohelpGridConfig.js~ +408 -0
  45. package/sohelp-grid/components/filter-condition-item.vue +298 -0
  46. package/sohelp-grid/index.vue +1886 -0
  47. package/sohelp-grid/js/ConditionType.js +101 -0
  48. package/sohelp-grid/js/DefaultGridOptions.js +141 -0
  49. package/sohelp-grid/js/DefaultProps.js +27 -0
  50. package/sohelp-grid/js/SohelpConfigFunction.js +0 -0
  51. package/sohelp-grid/js/SohelpGridConfig.js +101 -0
  52. package/sohelp-grid/js/useSohelpGridConfig.js +519 -0
  53. package/sohelp-grid-select/index.vue +245 -0
  54. package/sohelp-grid-view/filter/config/grid-filter-condition.vue +221 -0
  55. package/sohelp-grid-view/filter/config/grid-filter-config.vue +27 -0
  56. package/sohelp-grid-view/filter/config/grid-filter-field.vue +378 -0
  57. package/sohelp-grid-view/filter/config/grid-filter-keywords.vue +310 -0
  58. package/sohelp-grid-view/filter/config/grid-filter-list.vue +313 -0
  59. package/sohelp-grid-view/filter/config/grid-filter-scheme.vue +264 -0
  60. package/sohelp-grid-view/filter/config/grid-filter-sort.vue +310 -0
  61. package/sohelp-grid-view/filter/config/index.vue +206 -0
  62. package/sohelp-grid-view/filter/filter-form.vue +427 -0
  63. package/sohelp-grid-view/filter/filter-toolbar.vue +110 -0
  64. package/sohelp-grid-view/filter/index.vue +160 -0
  65. package/sohelp-grid-view/index.vue +379 -0
  66. package/sohelp-grid-view-select/index.vue +141 -0
  67. package/sohelp-group-view/index.vue +11 -0
  68. package/sohelp-icon-select/index.vue +96 -0
  69. package/sohelp-icon-select/vxeui-icon.js +90 -0
  70. package/sohelp-image-upload/index.vue +286 -0
  71. package/sohelp-input/index.vue +39 -0
  72. package/sohelp-modal/index.vue +49 -0
  73. package/sohelp-module/index.vue +54 -0
  74. package/sohelp-module/useModalManager.js +89 -0
  75. package/sohelp-module/useSohelpModule.js +66 -0
  76. package/sohelp-number-input/index.vue +32 -0
  77. package/sohelp-number-range/index.vue +135 -0
  78. package/sohelp-org-select/index.vue +30 -0
  79. package/sohelp-org-tree/index.vue +18 -0
  80. package/sohelp-org-tree-select/index.vue +93 -0
  81. package/sohelp-org-user-tree/index.vue +26 -0
  82. package/sohelp-org-user-tree-select/index.vue +11 -0
  83. package/sohelp-pagination/index.vue +11 -0
  84. package/sohelp-power/index.vue +105 -0
  85. package/sohelp-pro-form/components/pro-form-footer.vue +44 -0
  86. package/sohelp-pro-form/components/pro-form-item.vue +1133 -0
  87. package/sohelp-pro-form/index.vue +257 -0
  88. package/sohelp-pro-form/util.js +140 -0
  89. package/sohelp-pro-layout/index.vue +11 -0
  90. package/sohelp-pro-table/index.vue +14 -0
  91. package/sohelp-process/index.vue +216 -0
  92. package/sohelp-rate/index.vue +56 -0
  93. package/sohelp-rate/props.js +71 -0
  94. package/sohelp-relation/index.vue +11 -0
  95. package/sohelp-rich-text/index.vue +242 -0
  96. package/sohelp-rich-text/util.js +231 -0
  97. package/sohelp-richtext/index.vue +10 -0
  98. package/sohelp-role-select/index.vue +33 -0
  99. package/sohelp-search/components/search-config.vue +0 -0
  100. package/sohelp-search/index.vue +49 -0
  101. package/sohelp-search-pro-form/index.vue +11 -0
  102. package/sohelp-select/index.vue +120 -0
  103. package/sohelp-split-panel/index.vue +15 -0
  104. package/sohelp-switch/index.vue +56 -0
  105. package/sohelp-table/index.vue +151 -0
  106. package/sohelp-tenant-select/index.vue +128 -0
  107. package/sohelp-text/index.vue +14 -0
  108. package/sohelp-textarea-input/index.vue +36 -0
  109. package/sohelp-time/index.vue +10 -0
  110. package/sohelp-tree/index.vue +37 -0
  111. package/sohelp-tree-select/index.vue +18 -0
  112. package/sohelp-user-select/index.vue +44 -0
  113. package/sohelp-user-select/index.vue~ +53 -0
  114. package/sohelp-user-select/props.js +71 -0
  115. package/sohelp-user-tag/index.vue +12 -0
  116. package/sohelp-user-tree/index.vue +11 -0
  117. package/sohelp-vform-drawer/index.vue +40 -0
  118. package/sohelp-vform-eleplus/favicon.ico +0 -0
  119. package/sohelp-vform-eleplus/index.vue +297 -0
  120. package/sohelp-vform-eleplus/preview.html +91 -0
  121. package/sohelp-vform-eleplus/render.es.js +72433 -0
  122. package/sohelp-vform-eleplus/render.style.css +16 -0
  123. package/sohelp-vform-eleplus/render.umd.js +57 -0
  124. package/sohelp-vform-eleplus/tinymce/langs/zh_CN.js +462 -0
  125. package/sohelp-vform-eleplus/tinymce/langs/zh_TW.js +419 -0
  126. package/sohelp-vform-eleplus/tinymce/skins/content/dark/content.css +72 -0
  127. package/sohelp-vform-eleplus/tinymce/skins/content/dark/content.min.css +7 -0
  128. package/sohelp-vform-eleplus/tinymce/skins/content/default/content.css +67 -0
  129. package/sohelp-vform-eleplus/tinymce/skins/content/default/content.min.css +7 -0
  130. package/sohelp-vform-eleplus/tinymce/skins/content/document/content.css +72 -0
  131. package/sohelp-vform-eleplus/tinymce/skins/content/document/content.min.css +7 -0
  132. package/sohelp-vform-eleplus/tinymce/skins/content/writer/content.css +68 -0
  133. package/sohelp-vform-eleplus/tinymce/skins/content/writer/content.min.css +7 -0
  134. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.css +732 -0
  135. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.inline.css +726 -0
  136. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.inline.min.css +7 -0
  137. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.min.css +7 -0
  138. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.mobile.css +29 -0
  139. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/content.mobile.min.css +7 -0
  140. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  141. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.css +3047 -0
  142. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.min.css +7 -0
  143. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.mobile.css +673 -0
  144. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.mobile.min.css +7 -0
  145. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.shadowdom.css +37 -0
  146. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide/skin.shadowdom.min.css +7 -0
  147. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.css +714 -0
  148. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.inline.css +726 -0
  149. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.inline.min.css +7 -0
  150. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.min.css +7 -0
  151. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.mobile.css +29 -0
  152. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/content.mobile.min.css +7 -0
  153. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff +0 -0
  154. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.css +3047 -0
  155. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.min.css +7 -0
  156. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.mobile.css +673 -0
  157. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +7 -0
  158. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.shadowdom.css +37 -0
  159. package/sohelp-vform-eleplus/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +7 -0
  160. package/sohelp-vform-modal/index.vue +41 -0
  161. package/sohelp-vform-select/index.vue +11 -0
  162. package/sohelp-vform-vant/favicon.ico +0 -0
  163. package/sohelp-vform-vant/render.es.js +14608 -0
  164. package/sohelp-vform-vant/render.style.css +1 -0
  165. package/sohelp-vform-vant/render.umd.js +22 -0
  166. package/sohelp-vxe-grid/DefaultGridOptions.js +102 -0
  167. package/sohelp-vxe-grid/DefaultProps.js +37 -0
  168. package/sohelp-vxe-grid/SohelpGridConfig.js +142 -0
  169. package/sohelp-vxe-grid/index.vue +518 -0
  170. package/sohelp-vxe-grid-select/index.vue +148 -0
  171. package/sohelp-vxe-table/index.vue +184 -0
  172. package/sohelp-workflow/index.vue +495 -0
  173. package/sohelp-workflow/nodeWrap.vue +53 -0
  174. package/sohelp-workflow/nodes/addNode.vue +27 -0
  175. package/sohelp-workflow/nodes/approver.vue +125 -0
  176. package/sohelp-workflow/nodes/branch.vue +434 -0
  177. package/sohelp-workflow/nodes/promoter.vue +80 -0
  178. package/sohelp-workflow/nodes/send.vue +95 -0
  179. package/sohelp-workflow-drawer/components/approval-modal.vue +182 -0
  180. package/sohelp-workflow-drawer/components/draw-box.vue +141 -0
  181. package/sohelp-workflow-drawer/components/form.vue +79 -0
  182. package/sohelp-workflow-drawer/components/table.vue +153 -0
  183. package/sohelp-workflow-drawer/components/timeline.vue +189 -0
  184. package/sohelp-workflow-drawer/components/workflow.vue +68 -0
  185. package/sohelp-workflow-drawer/index.vue +311 -0
  186. package/sohelp-workflow-drawer/js/index.js +119 -0
  187. package/style/index.scss +0 -0
  188. package/utils/ProFormConvertUtil.js +76 -0
  189. package/utils/core.js +310 -0
  190. package/utils/use-form-data.js +48 -0
  191. package/utils/use-mobile.js +43 -0
@@ -0,0 +1,1133 @@
1
+ <!-- 表单项 -->
2
+ <template>
3
+ <ElFormItem :label="item.label" v-bind="item.itemProps || {}" :prop="item.prop" :rules="itemRules">
4
+ <template
5
+ v-for="name in Object.keys(item.itemSlots || {}).filter(
6
+ (k) => !!(item.itemSlots && item.itemSlots[k] && $slots[item.itemSlots[k]])
7
+ )"
8
+ #[name]="slotProps"
9
+ >
10
+ <slot :name="item.itemSlots?.[name]" v-bind="slotProps || {}"></slot>
11
+ </template>
12
+
13
+ <!--币别-->
14
+ <SohelpCryInput
15
+ v-if="item.type === 'SohelpCryInput'"
16
+ v-bind="item.props || {}"
17
+ @="item.props || {}"
18
+ v-model="model[item.prop]"
19
+ >
20
+ <template
21
+ v-for="name in Object.keys(item.slots || {}).filter(
22
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
23
+ )"
24
+ #[name]="slotProps"
25
+ >
26
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
27
+ </template>
28
+ </SohelpCryInput>
29
+
30
+ <!-- 数字输入 -->
31
+ <SohelpNumberInput
32
+ v-if="item.type === 'SohelpNumberInput'"
33
+ v-bind="item.props || {}"
34
+ @="item.props || {}"
35
+ v-model="model[item.prop]"
36
+ style="width: 100%"
37
+ >
38
+ <template
39
+ v-for="name in Object.keys(item.slots || {}).filter(
40
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
41
+ )"
42
+ #[name]="slotProps"
43
+ >
44
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
45
+ </template>
46
+ </SohelpNumberInput>
47
+
48
+ <!-- 文本框 -->
49
+ <SohelpInput
50
+ v-if="item.type === 'SohelpInput'"
51
+ v-bind="item.props || {}"
52
+ @="item.props || {}"
53
+ v-model="model[item.prop]"
54
+ style="width: 100%"
55
+ :autoFocus="false"
56
+ >
57
+ <template
58
+ v-for="name in Object.keys(item.slots || {}).filter(
59
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
60
+ )"
61
+ #[name]="slotProps"
62
+ >
63
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
64
+ </template>
65
+ </SohelpInput>
66
+
67
+ <!-- 文本域 -->
68
+ <SohelpTextareaInput
69
+ v-if="item.type === 'SohelpTextarea'"
70
+ v-bind="item.props || {}"
71
+ v-model="model[item.prop]"
72
+ @="item.props || {}"
73
+ style="width: 100%"
74
+ :maxlength="item.length"
75
+ :autoFocus="false"
76
+ >
77
+ <template
78
+ v-for="name in Object.keys(item.slots || {}).filter(
79
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
80
+ )"
81
+ #[name]="slotProps"
82
+ >
83
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
84
+ </template>
85
+ </SohelpTextareaInput>
86
+
87
+ <!-- 时间 -->
88
+ <SohelpTime
89
+ v-if="item.type === 'SohelpTime'"
90
+ v-bind="item.props || {}"
91
+ @="item.props || {}"
92
+ v-model="model[item.prop]"
93
+ style="width: 100%"
94
+ >
95
+ <template
96
+ v-for="name in Object.keys(item.slots || {}).filter(
97
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
98
+ )"
99
+ #[name]="slotProps"
100
+ >
101
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
102
+ </template>
103
+ </SohelpTime>
104
+
105
+ <!-- 日期 -->
106
+ <SohelpDate
107
+ v-if="item.type === 'SohelpDate'"
108
+ v-bind="item.props || {}"
109
+ @="item.props || {}"
110
+ v-model="model[item.prop]"
111
+ style="width: 100%"
112
+ >
113
+ <template
114
+ v-for="name in Object.keys(item.slots || {}).filter(
115
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
116
+ )"
117
+ #[name]="slotProps"
118
+ >
119
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
120
+ </template>
121
+ </SohelpDate>
122
+
123
+ <!-- 日期时间 -->
124
+ <SohelpDatetime
125
+ v-if="item.type === 'SohelpDatetime'"
126
+ v-bind="item.props || {}"
127
+ v-model="model[item.prop]"
128
+ style="width: 100%"
129
+ @="item.props || {}"
130
+ >
131
+ <template
132
+ v-for="name in Object.keys(item.slots || {}).filter(
133
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
134
+ )"
135
+ #[name]="slotProps"
136
+ >
137
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
138
+ </template>
139
+ </SohelpDatetime>
140
+
141
+ <!-- 字典 -->
142
+ <SohelpDict
143
+ v-if="item.type === 'SohelpDict'"
144
+ v-bind="item.props || {}"
145
+ v-model="model[item.prop]"
146
+ @="item.props || {}"
147
+ style="width: 100%"
148
+ :autoFocus="false"
149
+ >
150
+ <template
151
+ v-for="name in Object.keys(item.slots || {}).filter(
152
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
153
+ )"
154
+ #[name]="slotProps"
155
+ >
156
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
157
+ </template>
158
+ </SohelpDict>
159
+
160
+ <!-- 动态下拉选择 -->
161
+ <SohelpDynSelect
162
+ v-if="item.type === 'SohelpDynSelect'"
163
+ v-bind="item.props || {}"
164
+ @="item.props || {}"
165
+ v-model="model[item.prop]"
166
+ :data="data"
167
+ style="width: 100%"
168
+ >
169
+ <template
170
+ v-for="name in Object.keys(item.slots || {}).filter(
171
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
172
+ )"
173
+ #[name]="slotProps"
174
+ >
175
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
176
+ </template>
177
+ </SohelpDynSelect>
178
+
179
+ <!-- 用户下拉选择 -->
180
+ <SohelpUserSelect
181
+ v-if="item.type === 'SohelpUserSelect'"
182
+ v-bind="item.props || {}"
183
+ @="item.props || {}"
184
+ :data="data"
185
+ v-model="model[item.prop]"
186
+ style="width: 100%"
187
+ >
188
+ <template
189
+ v-for="name in Object.keys(item.slots || {}).filter(
190
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
191
+ )"
192
+ #[name]="slotProps"
193
+ >
194
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
195
+ </template>
196
+ </SohelpUserSelect>
197
+
198
+ <!-- role下拉选择 -->
199
+ <SohelpRoleSelect
200
+ v-if="item.type === 'SohelpRoleSelect'"
201
+ v-bind="item.props || {}"
202
+ v-model="model[item.prop]"
203
+ @="item.props || {}"
204
+ :data="data"
205
+ style="width: 100%"
206
+ >
207
+ <template
208
+ v-for="name in Object.keys(item.slots || {}).filter(
209
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
210
+ )"
211
+ #[name]="slotProps"
212
+ >
213
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
214
+ </template>
215
+ </SohelpRoleSelect>
216
+
217
+ <!-- 树型下拉选择 -->
218
+ <SohelpTreeSelect
219
+ v-if="item.type === 'SohelpTreeSelect'"
220
+ v-bind="item.props || {}"
221
+ @="item.props || {}"
222
+ v-model="model[item.prop]"
223
+ :data="data"
224
+ style="width: 100%"
225
+ >
226
+ <template
227
+ v-for="name in Object.keys(item.slots || {}).filter(
228
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
229
+ )"
230
+ #[name]="slotProps"
231
+ >
232
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
233
+ </template>
234
+ </SohelpTreeSelect>
235
+
236
+ <!-- 组织机构树下拉选择 -->
237
+ <SohelpOrgTreeSelect
238
+ v-if="item.type === 'SohelpOrgTreeSelect'"
239
+ v-bind="item.props || {}"
240
+ @="item.props || {}"
241
+ v-model="model[item.prop]"
242
+ :data="data"
243
+ style="width: 100%"
244
+ >
245
+ <template
246
+ v-for="name in Object.keys(item.slots || {}).filter(
247
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
248
+ )"
249
+ #[name]="slotProps"
250
+ >
251
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
252
+ </template>
253
+ </SohelpOrgTreeSelect>
254
+
255
+ <!-- 自动编号 -->
256
+ <SohelpAutocode
257
+ v-if="item.type === 'SohelpAutocode'"
258
+ v-bind="item.props || {}"
259
+ @="item.props || {}"
260
+ v-model="model[item.prop]"
261
+ :field="item.prop"
262
+ style="width: 100%"
263
+ >
264
+ <template
265
+ v-for="name in Object.keys(item.slots || {}).filter(
266
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
267
+ )"
268
+ #[name]="slotProps"
269
+ >
270
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
271
+ </template>
272
+ </SohelpAutocode>
273
+
274
+ <!-- 数据表格 -->
275
+ <SohelpTableSelect
276
+ v-if="item.type === 'SohelpTableSelect'"
277
+ v-bind="item.props || {}"
278
+ @="item.props || {}"
279
+ v-model="model[item.prop]"
280
+ :data="data"
281
+ style="width: 100%"
282
+ >
283
+ <template
284
+ v-for="name in Object.keys(item.slots || {}).filter(
285
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
286
+ )"
287
+ #[name]="slotProps"
288
+ >
289
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
290
+ </template>
291
+ </SohelpTableSelect>
292
+
293
+ <!-- 开关 -->
294
+ <sohelp-switch
295
+ v-if="item.type === 'SohelpSwitch' || item.type === 'SohelpCheckbox'"
296
+ v-model="model[item.prop]"
297
+ @="item.props || {}"
298
+ v-bind="item.props || {}"
299
+ style="width: 100%"
300
+ :activeValue="1"
301
+ :inactiveValue="0"
302
+ />
303
+
304
+ <!-- 评分 -->
305
+ <sohelp-rate
306
+ v-if="item.type === 'SohelpRate'"
307
+ v-model="model[item.prop]"
308
+ @="item.props || {}"
309
+ v-bind="item.props || {}"
310
+ style="width: 100%"
311
+ />
312
+
313
+ <!-- 进度 -->
314
+ <sohelp-process
315
+ v-if="item.type === 'SohelpProcess'"
316
+ v-model="model[item.prop]"
317
+ @="item.props || {}"
318
+ v-bind="item.props || {}"
319
+ style="width: 100%"
320
+ :readonly="readonly"
321
+ ></sohelp-process>
322
+
323
+ <!-- SohelpRichText 富文本编辑器 -->
324
+ <SohelpRichText
325
+ v-if="item.type === 'SohelpRichText'"
326
+ v-bind="item.props || {}"
327
+ @="item.props || {}"
328
+ v-model="model[item.prop]"
329
+ >
330
+ </SohelpRichText>
331
+
332
+ <!-- 上传附件 -->
333
+ <SohelpFileUpload
334
+ v-if="item.type === 'SohelpFileUpload'"
335
+ v-bind="item.props || {}"
336
+ v-model="model[item.prop]"
337
+ :readonly="readonly"
338
+ @="item.props || {}"
339
+ :data="data"
340
+ >
341
+ </SohelpFileUpload>
342
+
343
+ <!-- 上传图片 -->
344
+ <SohelpImageUpload
345
+ v-if="item.type === 'SohelpImageUpload'"
346
+ v-bind="item.props || {}"
347
+ @="item.props || {}"
348
+ v-model="model[item.prop]"
349
+ :readonly="readonly"
350
+ :data="data"
351
+ >
352
+ </SohelpImageUpload>
353
+
354
+ <ElInput
355
+ v-if="item.type === 'input'"
356
+ :clearable="true"
357
+ :placeholder="'请输入' + item.label"
358
+ v-bind="item.props || {}"
359
+ :modelValue="model[item.prop]"
360
+ @update:modelValue="updateValue"
361
+ >
362
+ <template
363
+ v-for="name in Object.keys(item.slots || {}).filter(
364
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
365
+ )"
366
+ #[name]="slotProps"
367
+ >
368
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
369
+ </template>
370
+ </ElInput>
371
+ <ElInput
372
+ v-else-if="item.type === 'textarea'"
373
+ :rows="4"
374
+ :placeholder="'请输入' + item.label"
375
+ v-bind="item.props || {}"
376
+ type="textarea"
377
+ :modelValue="model[item.prop]"
378
+ @update:modelValue="updateValue"
379
+ >
380
+ <template
381
+ v-for="name in Object.keys(item.slots || {}).filter(
382
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
383
+ )"
384
+ #[name]="slotProps"
385
+ >
386
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
387
+ </template>
388
+ </ElInput>
389
+ <ElSelect
390
+ v-else-if="item.type === 'select'"
391
+ class="ele-fluid"
392
+ :clearable="true"
393
+ :placeholder="'请选择' + item.label"
394
+ v-bind="item.props || {}"
395
+ :modelValue="model[item.prop]"
396
+ @update:modelValue="updateValue"
397
+ >
398
+ <template
399
+ v-for="name in Object.keys(item.slots || {}).filter(
400
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
401
+ )"
402
+ #[name]="slotProps"
403
+ >
404
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
405
+ </template>
406
+ <ElOption
407
+ v-for="opt in item.options || []"
408
+ :key="opt.key ?? opt.value"
409
+ :label="opt.label"
410
+ :value="opt.value"
411
+ :disabled="opt.disabled"
412
+ />
413
+ </ElSelect>
414
+ <ElSelect
415
+ v-else-if="item.type === 'multipleSelect'"
416
+ class="ele-fluid"
417
+ :clearable="true"
418
+ :placeholder="'请选择' + item.label"
419
+ v-bind="item.props || {}"
420
+ :multiple="true"
421
+ :modelValue="model[item.prop]"
422
+ @update:modelValue="updateValue"
423
+ >
424
+ <template
425
+ v-for="name in Object.keys(item.slots || {}).filter(
426
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
427
+ )"
428
+ #[name]="slotProps"
429
+ >
430
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
431
+ </template>
432
+ <ElOption
433
+ v-for="opt in item.options || []"
434
+ :key="opt.key ?? opt.value"
435
+ :label="opt.label"
436
+ :value="opt.value"
437
+ :disabled="opt.disabled"
438
+ />
439
+ </ElSelect>
440
+ <ElRadioGroup
441
+ v-else-if="item.type === 'radio'"
442
+ v-bind="item.props || {}"
443
+ :modelValue="model[item.prop]"
444
+ @update:modelValue="updateValue"
445
+ >
446
+ <ElRadio
447
+ v-for="opt in item.options || []"
448
+ :key="opt.key ?? opt.value"
449
+ :label="opt.value"
450
+ :disabled="opt.disabled"
451
+ >
452
+ {{ opt.label }}
453
+ </ElRadio>
454
+ </ElRadioGroup>
455
+ <ElRadioGroup
456
+ v-else-if="item.type === 'radioButton'"
457
+ v-bind="item.props || {}"
458
+ :modelValue="model[item.prop]"
459
+ @update:modelValue="updateValue"
460
+ >
461
+ <ElRadioButton
462
+ v-for="opt in item.options || []"
463
+ :key="opt.key ?? opt.value"
464
+ :label="opt.value"
465
+ :disabled="opt.disabled"
466
+ >
467
+ {{ opt.label }}
468
+ </ElRadioButton>
469
+ </ElRadioGroup>
470
+ <ElCheckboxGroup
471
+ v-else-if="item.type === 'checkbox'"
472
+ v-bind="item.props || {}"
473
+ :modelValue="model[item.prop]"
474
+ @update:modelValue="updateValue"
475
+ >
476
+ <ElCheckbox
477
+ v-for="opt in item.options || []"
478
+ :key="opt.key ?? opt.value"
479
+ :label="opt.value"
480
+ :disabled="opt.disabled"
481
+ >
482
+ {{ opt.label }}
483
+ </ElCheckbox>
484
+ </ElCheckboxGroup>
485
+ <ElCheckboxGroup
486
+ v-else-if="item.type === 'checkboxButton'"
487
+ v-bind="item.props || {}"
488
+ :modelValue="model[item.prop]"
489
+ @update:modelValue="updateValue"
490
+ >
491
+ <ElCheckboxButton
492
+ v-for="opt in item.options || []"
493
+ :key="opt.key ?? opt.value"
494
+ :label="opt.value"
495
+ :disabled="opt.disabled"
496
+ >
497
+ {{ opt.label }}
498
+ </ElCheckboxButton>
499
+ </ElCheckboxGroup>
500
+ <ElDatePicker
501
+ v-else-if="item.type === 'date'"
502
+ valueFormat="YYYY-MM-DD"
503
+ class="ele-fluid"
504
+ :placeholder="'请选择' + item.label"
505
+ v-bind="item.props || {}"
506
+ :modelValue="model[item.prop]"
507
+ @update:modelValue="updateValue"
508
+ >
509
+ <template
510
+ v-for="name in Object.keys(item.slots || {}).filter(
511
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
512
+ )"
513
+ #[name]="slotProps"
514
+ >
515
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
516
+ </template>
517
+ </ElDatePicker>
518
+ <ElDatePicker
519
+ v-else-if="item.type === 'datetime'"
520
+ valueFormat="YYYY-MM-DD HH:mm:ss"
521
+ class="ele-fluid"
522
+ :placeholder="'请选择' + item.label"
523
+ v-bind="item.props || {}"
524
+ type="datetime"
525
+ :modelValue="model[item.prop]"
526
+ @update:modelValue="updateValue"
527
+ >
528
+ <template
529
+ v-for="name in Object.keys(item.slots || {}).filter(
530
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
531
+ )"
532
+ #[name]="slotProps"
533
+ >
534
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
535
+ </template>
536
+ </ElDatePicker>
537
+ <ElDatePicker
538
+ v-else-if="item.type === 'daterange'"
539
+ valueFormat="YYYY-MM-DD"
540
+ rangeSeparator="-"
541
+ startPlaceholder="开始日期"
542
+ endPlaceholder="结束日期"
543
+ :unlinkPanels="true"
544
+ class="ele-fluid"
545
+ type="daterange"
546
+ v-bind="item.props || {}"
547
+ :modelValue="model[item.prop]"
548
+ @update:modelValue="updateValue"
549
+ >
550
+ <template
551
+ v-for="name in Object.keys(item.slots || {}).filter(
552
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
553
+ )"
554
+ #[name]="slotProps"
555
+ >
556
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
557
+ </template>
558
+ </ElDatePicker>
559
+ <ElDatePicker
560
+ v-else-if="item.type === 'datetimerange'"
561
+ valueFormat="YYYY-MM-DD HH:mm:ss"
562
+ rangeSeparator="-"
563
+ startPlaceholder="开始时间"
564
+ endPlaceholder="结束时间"
565
+ :unlinkPanels="true"
566
+ class="ele-fluid"
567
+ v-bind="item.props || {}"
568
+ type="datetimerange"
569
+ :modelValue="model[item.prop]"
570
+ @update:modelValue="updateValue"
571
+ >
572
+ <template
573
+ v-for="name in Object.keys(item.slots || {}).filter(
574
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
575
+ )"
576
+ #[name]="slotProps"
577
+ >
578
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
579
+ </template>
580
+ </ElDatePicker>
581
+ <ElTimePicker
582
+ v-else-if="item.type === 'time'"
583
+ valueFormat="HH:mm:ss"
584
+ class="ele-fluid"
585
+ :placeholder="'请选择' + item.label"
586
+ v-bind="item.props || {}"
587
+ :modelValue="model[item.prop]"
588
+ @update:modelValue="updateValue"
589
+ >
590
+ <template
591
+ v-for="name in Object.keys(item.slots || {}).filter(
592
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
593
+ )"
594
+ #[name]="slotProps"
595
+ >
596
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
597
+ </template>
598
+ </ElTimePicker>
599
+ <ElTimePicker
600
+ v-else-if="item.type === 'timerange'"
601
+ valueFormat="HH:mm:ss"
602
+ rangeSeparator="-"
603
+ startPlaceholder="开始时间"
604
+ end-placeholder="结束时间"
605
+ class="ele-fluid"
606
+ v-bind="item.props || {}"
607
+ :isRange="true"
608
+ :modelValue="model[item.prop]"
609
+ @update:modelValue="updateValue"
610
+ >
611
+ <template
612
+ v-for="name in Object.keys(item.slots || {}).filter(
613
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
614
+ )"
615
+ #[name]="slotProps"
616
+ >
617
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
618
+ </template>
619
+ </ElTimePicker>
620
+ <ElTimeSelect
621
+ v-else-if="item.type === 'timeSelect'"
622
+ class="ele-fluid"
623
+ :placeholder="'请选择' + item.label"
624
+ v-bind="item.props || {}"
625
+ :modelValue="model[item.prop]"
626
+ @update:modelValue="updateValue"
627
+ />
628
+ <ElSwitch
629
+ v-else-if="item.type === 'switch'"
630
+ :active-value="1"
631
+ :inactive-value="0"
632
+ v-bind="item.props || {}"
633
+ :modelValue="model[item.prop]"
634
+ @update:modelValue="updateValue"
635
+ >
636
+ <template
637
+ v-for="name in Object.keys(item.slots || {}).filter(
638
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
639
+ )"
640
+ #[name]="slotProps"
641
+ >
642
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
643
+ </template>
644
+ </ElSwitch>
645
+ <ElInputNumber
646
+ v-else-if="item.type === 'inputNumber'"
647
+ class="ele-fluid"
648
+ controls-position="right"
649
+ :placeholder="'请输入' + item.label"
650
+ v-bind="item.props || {}"
651
+ :modelValue="model[item.prop]"
652
+ @update:modelValue="updateValue"
653
+ >
654
+ <template
655
+ v-for="name in Object.keys(item.slots || {}).filter(
656
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
657
+ )"
658
+ #[name]="slotProps"
659
+ >
660
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
661
+ </template>
662
+ </ElInputNumber>
663
+ <ElAutocomplete
664
+ v-else-if="item.type === 'autocomplete'"
665
+ class="ele-fluid"
666
+ :fetchSuggestions="(_keyword, callback) => callback(item.options || [])"
667
+ :placeholder="'请输入' + item.label"
668
+ v-bind="item.props || {}"
669
+ :modelValue="model[item.prop]"
670
+ @update:modelValue="updateValue"
671
+ >
672
+ <template
673
+ v-for="name in Object.keys(item.slots || {}).filter(
674
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
675
+ )"
676
+ #[name]="slotProps"
677
+ >
678
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
679
+ </template>
680
+ </ElAutocomplete>
681
+ <ElCascader
682
+ v-else-if="item.type === 'cascader'"
683
+ class="ele-fluid"
684
+ :clearable="true"
685
+ :options="item.options || []"
686
+ :placeholder="'请选择' + item.label"
687
+ v-bind="item.props || {}"
688
+ :modelValue="model[item.prop]"
689
+ @update:modelValue="updateValue"
690
+ >
691
+ <template
692
+ v-for="name in Object.keys(item.slots || {}).filter(
693
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
694
+ )"
695
+ #[name]="slotProps"
696
+ >
697
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
698
+ </template>
699
+ </ElCascader>
700
+ <ElRate
701
+ v-else-if="item.type === 'rate'"
702
+ v-bind="item.props || {}"
703
+ :modelValue="model[item.prop]"
704
+ @update:modelValue="updateValue"
705
+ >
706
+ <template
707
+ v-for="name in Object.keys(item.slots || {}).filter(
708
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
709
+ )"
710
+ #[name]="slotProps"
711
+ >
712
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
713
+ </template>
714
+ </ElRate>
715
+ <ElSlider
716
+ v-else-if="item.type === 'slider'"
717
+ v-bind="item.props || {}"
718
+ :modelValue="model[item.prop]"
719
+ @update:modelValue="updateValue"
720
+ >
721
+ <template
722
+ v-for="name in Object.keys(item.slots || {}).filter(
723
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
724
+ )"
725
+ #[name]="slotProps"
726
+ >
727
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
728
+ </template>
729
+ </ElSlider>
730
+ <ElSlider
731
+ v-else-if="item.type === 'sliderRange'"
732
+ v-bind="item.props || {}"
733
+ :range="true"
734
+ :modelValue="model[item.prop]"
735
+ @update:modelValue="updateValue"
736
+ >
737
+ <template
738
+ v-for="name in Object.keys(item.slots || {}).filter(
739
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
740
+ )"
741
+ #[name]="slotProps"
742
+ >
743
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
744
+ </template>
745
+ </ElSlider>
746
+ <ElTreeSelect
747
+ v-else-if="item.type === 'treeSelect'"
748
+ class="ele-fluid"
749
+ :clearable="true"
750
+ :data="item.options"
751
+ :placeholder="'请选择' + item.label"
752
+ v-bind="item.props || {}"
753
+ :modelValue="model[item.prop]"
754
+ @update:modelValue="updateValue"
755
+ >
756
+ <template
757
+ v-for="name in Object.keys(item.slots || {}).filter(
758
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
759
+ )"
760
+ #[name]="slotProps"
761
+ >
762
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
763
+ </template>
764
+ </ElTreeSelect>
765
+ <ElTreeSelect
766
+ v-else-if="item.type === 'treeMultipleSelect'"
767
+ class="ele-fluid"
768
+ :clearable="true"
769
+ :data="item.options"
770
+ :placeholder="'请选择' + item.label"
771
+ :show-checkbox="true"
772
+ v-bind="item.props || {}"
773
+ :multiple="true"
774
+ :modelValue="model[item.prop]"
775
+ @update:modelValue="updateValue"
776
+ >
777
+ <template
778
+ v-for="name in Object.keys(item.slots || {}).filter(
779
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
780
+ )"
781
+ #[name]="slotProps"
782
+ >
783
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
784
+ </template>
785
+ </ElTreeSelect>
786
+ <EleTreeSelect
787
+ v-else-if="item.type === 'virtualTreeSelect'"
788
+ :clearable="true"
789
+ :placeholder="'请选择' + item.label"
790
+ v-bind="item.props || {}"
791
+ :modelValue="model[item.prop]"
792
+ @update:modelValue="updateValue"
793
+ >
794
+ <template
795
+ v-for="name in Object.keys(item.slots || {}).filter(
796
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
797
+ )"
798
+ #[name]="slotProps"
799
+ >
800
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
801
+ </template>
802
+ </EleTreeSelect>
803
+ <EleTreeSelect
804
+ v-else-if="item.type === 'virtualTreeMultipleSelect'"
805
+ :clearable="true"
806
+ :placeholder="'请选择' + item.label"
807
+ :maxTagCount="1"
808
+ v-bind="item.props || {}"
809
+ :multiple="true"
810
+ :modelValue="model[item.prop]"
811
+ @update:modelValue="updateValue"
812
+ >
813
+ <template
814
+ v-for="name in Object.keys(item.slots || {}).filter(
815
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
816
+ )"
817
+ #[name]="slotProps"
818
+ >
819
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
820
+ </template>
821
+ </EleTreeSelect>
822
+ <EleTableSelect
823
+ v-else-if="item.type === 'tableSelect'"
824
+ :clearable="true"
825
+ :placeholder="'请选择' + item.label"
826
+ v-bind="item.props || {}"
827
+ :modelValue="model[item.prop]"
828
+ @update:modelValue="updateValue"
829
+ >
830
+ <template
831
+ v-for="name in Object.keys(item.slots || {}).filter(
832
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
833
+ )"
834
+ #[name]="slotProps"
835
+ >
836
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
837
+ </template>
838
+ </EleTableSelect>
839
+ <EleTableSelect
840
+ v-else-if="item.type === 'tableMultipleSelect'"
841
+ :clearable="true"
842
+ :placeholder="'请选择' + item.label"
843
+ v-bind="item.props || {}"
844
+ :multiple="true"
845
+ :modelValue="model[item.prop]"
846
+ @update:modelValue="updateValue"
847
+ >
848
+ <template
849
+ v-for="name in Object.keys(item.slots || {}).filter(
850
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
851
+ )"
852
+ #[name]="slotProps"
853
+ >
854
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
855
+ </template>
856
+ </EleTableSelect>
857
+ <EleCheckCard
858
+ v-else-if="item.type === 'checkCard'"
859
+ :items="item.options"
860
+ v-bind="item.props || {}"
861
+ :modelValue="model[item.prop]"
862
+ @update:modelValue="updateValue"
863
+ >
864
+ <template
865
+ v-for="name in Object.keys(item.slots || {}).filter(
866
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
867
+ )"
868
+ #[name]="slotProps"
869
+ >
870
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
871
+ </template>
872
+ </EleCheckCard>
873
+ <EleCheckCard
874
+ v-else-if="item.type === 'multipleCheckCard'"
875
+ :items="item.options"
876
+ v-bind="item.props || {}"
877
+ :multiple="true"
878
+ :modelValue="model[item.prop]"
879
+ @update:modelValue="updateValue"
880
+ >
881
+ <template
882
+ v-for="name in Object.keys(item.slots || {}).filter(
883
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
884
+ )"
885
+ #[name]="slotProps"
886
+ >
887
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
888
+ </template>
889
+ </EleCheckCard>
890
+ <EleEditTag
891
+ v-else-if="item.type === 'editTag'"
892
+ type="info"
893
+ :style="{ marginTop: '4px' }"
894
+ :itemStyle="{ margin: '0 4px 4px 0' }"
895
+ :buttonStyle="{ marginBottom: '4px' }"
896
+ :inputTagStyle="{ marginBottom: '4px' }"
897
+ v-bind="item.props || {}"
898
+ :modelValue="model[item.prop]"
899
+ @update:modelValue="updateValue"
900
+ >
901
+ <template
902
+ v-for="name in Object.keys(item.slots || {}).filter(
903
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
904
+ )"
905
+ #[name]="slotProps"
906
+ >
907
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
908
+ </template>
909
+ </EleEditTag>
910
+ <DictData
911
+ v-else-if="item.type === 'dictRadio'"
912
+ code=""
913
+ v-bind="item.props || {}"
914
+ type="radio"
915
+ :modelValue="model[item.prop]"
916
+ @update:modelValue="updateValue"
917
+ >
918
+ <template
919
+ v-for="name in Object.keys(item.slots || {}).filter(
920
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
921
+ )"
922
+ #[name]="slotProps"
923
+ >
924
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
925
+ </template>
926
+ </DictData>
927
+ <DictData
928
+ v-else-if="item.type === 'dictSelect'"
929
+ code=""
930
+ :placeholder="'请选择' + item.label"
931
+ v-bind="item.props || {}"
932
+ type="select"
933
+ :modelValue="model[item.prop]"
934
+ @update:modelValue="updateValue"
935
+ >
936
+ <template
937
+ v-for="name in Object.keys(item.slots || {}).filter(
938
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
939
+ )"
940
+ #[name]="slotProps"
941
+ >
942
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
943
+ </template>
944
+ </DictData>
945
+ <DictData
946
+ v-else-if="item.type === 'dictCheckbox'"
947
+ code=""
948
+ v-bind="item.props || {}"
949
+ type="checkbox"
950
+ :modelValue="model[item.prop]"
951
+ @update:modelValue="updateValue"
952
+ >
953
+ <template
954
+ v-for="name in Object.keys(item.slots || {}).filter(
955
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
956
+ )"
957
+ #[name]="slotProps"
958
+ >
959
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
960
+ </template>
961
+ </DictData>
962
+ <DictData
963
+ v-else-if="item.type === 'dictMultipleSelect'"
964
+ code=""
965
+ :placeholder="'请选择' + item.label"
966
+ v-bind="item.props || {}"
967
+ type="multipleSelect"
968
+ :modelValue="model[item.prop]"
969
+ @update:modelValue="updateValue"
970
+ >
971
+ <template
972
+ v-for="name in Object.keys(item.slots || {}).filter(
973
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
974
+ )"
975
+ #[name]="slotProps"
976
+ >
977
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
978
+ </template>
979
+ </DictData>
980
+ <ImageUpload
981
+ v-else-if="item.type === 'imageUpload'"
982
+ v-bind="item.props || {}"
983
+ ref="imageUploadRef"
984
+ :modelValue="model[item.prop]"
985
+ @update:modelValue="updateValue"
986
+ >
987
+ <template
988
+ v-for="name in Object.keys(item.slots || {}).filter(
989
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
990
+ )"
991
+ #[name]="slotProps"
992
+ >
993
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
994
+ </template>
995
+ </ImageUpload>
996
+ <FileUpload
997
+ v-else-if="item.type === 'fileUpload'"
998
+ v-bind="item.props || {}"
999
+ ref="fileUploadRef"
1000
+ :modelValue="model[item.prop]"
1001
+ @update:modelValue="updateValue"
1002
+ >
1003
+ <template
1004
+ v-for="name in Object.keys(item.slots || {}).filter(
1005
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
1006
+ )"
1007
+ #[name]="slotProps"
1008
+ >
1009
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
1010
+ </template>
1011
+ </FileUpload>
1012
+ <RegionsSelect
1013
+ v-else-if="item.type === 'regions'"
1014
+ :placeholder="'请选择' + item.label"
1015
+ v-bind="item.props || {}"
1016
+ :modelValue="model[item.prop]"
1017
+ @update:modelValue="updateValue"
1018
+ >
1019
+ <template
1020
+ v-for="name in Object.keys(item.slots || {}).filter(
1021
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
1022
+ )"
1023
+ #[name]="slotProps"
1024
+ >
1025
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
1026
+ </template>
1027
+ </RegionsSelect>
1028
+ <TinymceEditor
1029
+ v-else-if="item.type === 'editor'"
1030
+ v-bind="item.props || {}"
1031
+ :modelValue="model[item.prop]"
1032
+ @update:modelValue="updateValue"
1033
+ >
1034
+ <template
1035
+ v-for="name in Object.keys(item.slots || {}).filter(
1036
+ (k) => !!(item.slots && item.slots[k] && $slots[item.slots[k]])
1037
+ )"
1038
+ #[name]="slotProps"
1039
+ >
1040
+ <slot :name="item.slots?.[name]" v-bind="slotProps || {}"></slot>
1041
+ </template>
1042
+ </TinymceEditor>
1043
+ <template v-else-if="item.type && !['label', 'error'].includes(item.type)">
1044
+ <slot :name="item.type" :item="item" :model="model" :updateValue="updateValue"></slot>
1045
+ </template>
1046
+ </ElFormItem>
1047
+ </template>
1048
+
1049
+ <script setup>
1050
+ import { computed, ref } from 'vue';
1051
+ import TinymceEditor from '@/components/TinymceEditor/index.vue';
1052
+ import RegionsSelect from '@/components/RegionsSelect/index.vue';
1053
+ import ImageUpload from '@/components/ImageUpload/index.vue';
1054
+ import FileUpload from '@/components/FileUpload/index.vue';
1055
+ import { uploadTypes, getRuleType, getRuleTrigger, getRuleMessage } from '../util';
1056
+
1057
+ const props = defineProps({
1058
+ /** 表单项配置 */
1059
+ item: {
1060
+ type: Object,
1061
+ required: true
1062
+ },
1063
+ /** 表单数据 */
1064
+ model: {
1065
+ type: Object,
1066
+ required: true
1067
+ },
1068
+ data: Object,
1069
+ /** 验证规则 */
1070
+ rules: Object,
1071
+ readonly: {
1072
+ type: Boolean,
1073
+ default: false
1074
+ }
1075
+ });
1076
+
1077
+ const emit = defineEmits(['updateValue']);
1078
+
1079
+ /** 更新值 */
1080
+ const updateValue = (value) => {
1081
+ emit('updateValue', value);
1082
+ };
1083
+
1084
+ /** 图片上传组件实例 */
1085
+ const imageUploadRef = ref(null);
1086
+
1087
+ /** 文件上传组件实例 */
1088
+ const fileUploadRef = ref(null);
1089
+
1090
+ /** 判断上传组件是否上传完毕 */
1091
+ const uploadIsDone = () => {
1092
+ if (props.item.type === 'imageUpload') {
1093
+ return imageUploadRef.value ? imageUploadRef.value.isDone() : true;
1094
+ }
1095
+ if (props.item.type === 'fileUpload') {
1096
+ return fileUploadRef.value ? fileUploadRef.value.isDone() : true;
1097
+ }
1098
+ return true;
1099
+ };
1100
+
1101
+ /** 表单验证规则 */
1102
+ const itemRules = computed(() => {
1103
+ const itemProps = props.item.itemProps;
1104
+ const iRule = itemProps ? itemProps.rules : void 0;
1105
+ const iRules = iRule ? (Array.isArray(iRule) ? iRule : [iRule]) : void 0;
1106
+ const fRule = props.rules ? props.rules[props.item.prop] : void 0;
1107
+ const fRules = fRule ? (Array.isArray(fRule) ? fRule : [fRule]) : void 0;
1108
+ const rules = iRules || fRules || [];
1109
+ if (props.item.required) {
1110
+ const rRule = {
1111
+ required: true,
1112
+ message: getRuleMessage(props.item.type, props.item.label),
1113
+ type: getRuleType(props.item.type),
1114
+ trigger: getRuleTrigger(props.item.type)
1115
+ };
1116
+ rules.unshift(rRule);
1117
+ }
1118
+ if (props.item.type && uploadTypes.includes(props.item.type)) {
1119
+ const uRule = {
1120
+ type: getRuleType(props.item.type),
1121
+ trigger: getRuleTrigger(props.item.type),
1122
+ validator: (_rule, value, callback) => {
1123
+ if (value && !uploadIsDone()) {
1124
+ return callback(new Error(`${props.item.label ?? ''}还未上传完毕`));
1125
+ }
1126
+ callback();
1127
+ }
1128
+ };
1129
+ rules.push(uRule);
1130
+ }
1131
+ return rules;
1132
+ });
1133
+ </script>