bm-admin-ui 1.0.22-alpha → 1.0.24-alpha

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 (184) hide show
  1. package/es/components/button/index.d.ts +307 -0
  2. package/es/components/button/src/button.d.ts +12 -0
  3. package/es/components/button/src/button.vue.d.ts +308 -0
  4. package/es/components/feedback/index.d.ts +1037 -0
  5. package/es/components/feedback/index.js +1306 -25
  6. package/es/components/feedback/src/bmAlert.vue.d.ts +193 -0
  7. package/es/components/feedback/src/bmModal.vue.d.ts +839 -0
  8. package/es/components/float-table/index.d.ts +70 -0
  9. package/es/components/float-table/index.js +28 -37
  10. package/es/components/float-table/src/float-table.vue.d.ts +69 -0
  11. package/es/components/flow-designer/index.d.ts +7 -0
  12. package/es/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  13. package/es/components/form-designer/index.d.ts +9 -0
  14. package/es/components/form-designer/index.js +9 -4178
  15. package/es/components/form-designer/src/form-designer.vue.d.ts +8 -0
  16. package/es/components/index.d.ts +13 -0
  17. package/es/components/index.js +0 -1
  18. package/es/components/input-tags-display/index.d.ts +113 -0
  19. package/es/components/input-tags-display/index.js +1187 -27
  20. package/es/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  21. package/es/components/multi-cascader-compose/index.d.ts +164 -0
  22. package/es/components/multi-cascader-compose/index.js +1199 -31
  23. package/es/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  24. package/es/components/multi-cascader-compose/src/props.d.ts +40 -0
  25. package/es/components/multi-cascader-compose/types.d.ts +10 -0
  26. package/es/components/over-tooltips/index.d.ts +35 -0
  27. package/es/components/over-tooltips/index.js +20 -27
  28. package/es/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  29. package/es/components/search-filter/index.d.ts +222 -0
  30. package/es/components/search-filter/index.js +1269 -57
  31. package/es/components/search-filter/src/search-filter.d.ts +77 -0
  32. package/es/components/search-filter/src/search-filter.vue.d.ts +221 -0
  33. package/es/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  34. package/es/components/shops-filter/index.d.ts +99 -0
  35. package/es/components/shops-filter/index.js +1182 -24
  36. package/es/components/shops-filter/src/shops-filter.d.ts +25 -0
  37. package/es/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  38. package/es/components/staffs-selector/index.d.ts +109 -0
  39. package/es/components/staffs-selector/index.js +1241 -131
  40. package/es/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  41. package/es/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  42. package/es/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  43. package/es/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  44. package/es/components/timeline/index.d.ts +107 -0
  45. package/es/components/timeline/index.js +6 -6
  46. package/es/components/timeline/src/props.d.ts +24 -0
  47. package/es/components/timeline/src/timeline-item.vue.d.ts +65 -0
  48. package/es/components/timeline/src/timeline.vue.d.ts +42 -0
  49. package/es/components/upload/index.d.ts +136 -0
  50. package/es/components/upload/index.js +1336 -101
  51. package/es/components/upload/src/icons.d.ts +13 -0
  52. package/es/components/upload/src/upload.vue.d.ts +135 -0
  53. package/es/components/upload/utils/index.d.ts +7 -0
  54. package/es/index.d.ts +6 -0
  55. package/es/utils/bm-admin-ui-resolver.d.ts +9 -0
  56. package/es/utils/vxe-table.d.ts +6 -0
  57. package/es/utils/vxe-table.js +3 -4
  58. package/es/utils/with-install.d.ts +3 -0
  59. package/index.esm.js +47062 -0
  60. package/index.js +47092 -0
  61. package/lib/components/button/index.d.ts +307 -0
  62. package/lib/components/button/src/button.d.ts +12 -0
  63. package/lib/components/button/src/button.vue.d.ts +308 -0
  64. package/lib/components/feedback/index.d.ts +1037 -0
  65. package/lib/components/feedback/index.js +1304 -23
  66. package/lib/components/feedback/src/bmAlert.vue.d.ts +193 -0
  67. package/lib/components/feedback/src/bmModal.vue.d.ts +839 -0
  68. package/lib/components/float-table/index.d.ts +70 -0
  69. package/lib/components/float-table/index.js +28 -37
  70. package/lib/components/float-table/src/float-table.vue.d.ts +69 -0
  71. package/lib/components/flow-designer/index.d.ts +7 -0
  72. package/lib/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  73. package/lib/components/form-designer/index.d.ts +9 -0
  74. package/lib/components/form-designer/index.js +8 -4183
  75. package/lib/components/form-designer/src/form-designer.vue.d.ts +8 -0
  76. package/lib/components/index.d.ts +13 -0
  77. package/lib/components/index.js +0 -7
  78. package/lib/components/input-tags-display/index.d.ts +113 -0
  79. package/lib/components/input-tags-display/index.js +1187 -27
  80. package/lib/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  81. package/lib/components/multi-cascader-compose/index.d.ts +164 -0
  82. package/lib/components/multi-cascader-compose/index.js +1198 -30
  83. package/lib/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  84. package/lib/components/multi-cascader-compose/src/props.d.ts +40 -0
  85. package/lib/components/multi-cascader-compose/types.d.ts +10 -0
  86. package/lib/components/over-tooltips/index.d.ts +35 -0
  87. package/lib/components/over-tooltips/index.js +20 -27
  88. package/lib/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  89. package/lib/components/search-filter/index.d.ts +222 -0
  90. package/lib/components/search-filter/index.js +1268 -56
  91. package/lib/components/search-filter/src/search-filter.d.ts +77 -0
  92. package/lib/components/search-filter/src/search-filter.vue.d.ts +221 -0
  93. package/lib/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  94. package/lib/components/shops-filter/index.d.ts +99 -0
  95. package/lib/components/shops-filter/index.js +1181 -23
  96. package/lib/components/shops-filter/src/shops-filter.d.ts +25 -0
  97. package/lib/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  98. package/lib/components/staffs-selector/index.d.ts +109 -0
  99. package/lib/components/staffs-selector/index.js +1240 -130
  100. package/lib/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  101. package/lib/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  102. package/lib/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  103. package/lib/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  104. package/lib/components/timeline/index.d.ts +107 -0
  105. package/lib/components/timeline/index.js +6 -6
  106. package/lib/components/timeline/src/props.d.ts +24 -0
  107. package/lib/components/timeline/src/timeline-item.vue.d.ts +65 -0
  108. package/lib/components/timeline/src/timeline.vue.d.ts +42 -0
  109. package/lib/components/upload/index.d.ts +136 -0
  110. package/lib/components/upload/index.js +1335 -100
  111. package/lib/components/upload/src/icons.d.ts +13 -0
  112. package/lib/components/upload/src/upload.vue.d.ts +135 -0
  113. package/lib/components/upload/utils/index.d.ts +7 -0
  114. package/lib/index.d.ts +6 -0
  115. package/lib/utils/bm-admin-ui-resolver.d.ts +9 -0
  116. package/lib/utils/vxe-table.d.ts +6 -0
  117. package/lib/utils/vxe-table.js +2 -3
  118. package/lib/utils/with-install.d.ts +3 -0
  119. package/package.json +4 -9
  120. package/theme-chalk/button.css +1 -1
  121. package/theme-chalk/feedback.css +1 -1
  122. package/theme-chalk/float-table.css +1 -1
  123. package/theme-chalk/floating-vue.css +1 -1
  124. package/theme-chalk/flow-designer.css +1 -1
  125. package/theme-chalk/index.css +1 -1
  126. package/theme-chalk/input-tags-display.css +1 -1
  127. package/theme-chalk/modal.css +1 -1
  128. package/theme-chalk/multi-cascader-compose.css +1 -1
  129. package/theme-chalk/over-tooltips.css +1 -1
  130. package/theme-chalk/search-filter.css +1 -1
  131. package/theme-chalk/staffs-selector.css +1 -1
  132. package/theme-chalk/timeline.css +1 -1
  133. package/theme-chalk/upload.css +1 -1
  134. package/types/components/button/index.d.ts +307 -0
  135. package/types/components/button/src/button.d.ts +12 -0
  136. package/types/components/button/src/button.vue.d.ts +308 -0
  137. package/types/components/feedback/index.d.ts +1037 -0
  138. package/types/components/feedback/src/bmAlert.vue.d.ts +193 -0
  139. package/types/components/feedback/src/bmModal.vue.d.ts +839 -0
  140. package/types/components/float-table/index.d.ts +70 -0
  141. package/types/components/float-table/src/float-table.vue.d.ts +69 -0
  142. package/types/components/flow-designer/index.d.ts +7 -0
  143. package/types/components/flow-designer/src/flow-designer.vue.d.ts +6 -0
  144. package/types/components/form-designer/index.d.ts +9 -0
  145. package/types/components/form-designer/src/form-designer.vue.d.ts +8 -0
  146. package/types/components/index.d.ts +13 -0
  147. package/types/components/input-tags-display/index.d.ts +113 -0
  148. package/types/components/input-tags-display/src/input-tags-display.vue.d.ts +110 -0
  149. package/types/components/multi-cascader-compose/index.d.ts +164 -0
  150. package/types/components/multi-cascader-compose/src/multi-cascader-compose.vue.d.ts +164 -0
  151. package/types/components/multi-cascader-compose/src/props.d.ts +40 -0
  152. package/types/components/multi-cascader-compose/types.d.ts +10 -0
  153. package/types/components/over-tooltips/index.d.ts +35 -0
  154. package/types/components/over-tooltips/src/over-tooltips.vue.d.ts +34 -0
  155. package/types/components/search-filter/index.d.ts +222 -0
  156. package/types/components/search-filter/src/search-filter.d.ts +77 -0
  157. package/types/components/search-filter/src/search-filter.vue.d.ts +221 -0
  158. package/types/components/search-filter/src/search-reset-btn.vue.d.ts +89 -0
  159. package/types/components/shops-filter/index.d.ts +99 -0
  160. package/types/components/shops-filter/src/shops-filter.d.ts +25 -0
  161. package/types/components/shops-filter/src/shops-filter.vue.d.ts +98 -0
  162. package/types/components/staffs-selector/index.d.ts +109 -0
  163. package/types/components/staffs-selector/src/multipleCmp.vue.d.ts +97 -0
  164. package/types/components/staffs-selector/src/radioCmp.vue.d.ts +31 -0
  165. package/types/components/staffs-selector/src/staffs-selector.vue.d.ts +108 -0
  166. package/types/components/staffs-selector/src/variedCmp.vue.d.ts +62 -0
  167. package/types/components/timeline/index.d.ts +107 -0
  168. package/types/components/timeline/src/props.d.ts +24 -0
  169. package/types/components/timeline/src/timeline-item.vue.d.ts +65 -0
  170. package/types/components/timeline/src/timeline.vue.d.ts +42 -0
  171. package/types/components/upload/index.d.ts +136 -0
  172. package/types/components/upload/src/icons.d.ts +13 -0
  173. package/types/components/upload/src/upload.vue.d.ts +135 -0
  174. package/types/components/upload/utils/index.d.ts +7 -0
  175. package/types/index.d.ts +6 -0
  176. package/types/utils/bm-admin-ui-resolver.d.ts +9 -0
  177. package/types/utils/vxe-table.d.ts +6 -0
  178. package/types/utils/with-install.d.ts +3 -0
  179. package/es/components/form-create/index.js +0 -2769
  180. package/es/utils/uniqueId.js +0 -5
  181. package/lib/components/form-create/index.js +0 -2781
  182. package/lib/utils/uniqueId.js +0 -8
  183. package/theme-chalk/form-create.css +0 -1
  184. package/theme-chalk/form-designer.css +0 -1
@@ -1,2769 +0,0 @@
1
- import { withInstall } from 'bm-admin-ui/es/utils/with-install';
2
- import { h, nextTick, defineComponent, ref, watch, openBlock, createElementBlock, createVNode, unref, mergeProps, computed, normalizeStyle, Fragment, renderList, normalizeClass, reactive, createBlock, withCtx, createElementVNode, toDisplayString, createTextVNode, createCommentVNode, resolveComponent } from 'vue';
3
- import { Input, InputNumber, Select, DatePicker, RangePicker, message, Modal, Layout, LayoutSider, Tree, LayoutContent, Button, Row, Col, Pagination, FormItemRest, Divider, Tabs, TabPane, Cascader } from 'ant-design-vue';
4
- import dayjs from 'dayjs';
5
- import Picture from 'bm-admin-ui/es/components/upload';
6
- import BmStaffsSelector from 'bm-admin-ui/es/components/staffs-selector';
7
- import { BmTagsDisplay, BmFloatTable } from 'bm-admin-ui/es/components';
8
- import { SearchOutlined, CheckCircleFilled, PlusOutlined } from '@ant-design/icons-vue';
9
- import { cloneDeep, debounce } from 'lodash-es';
10
- import FC from '@form-create/ant-design-vue';
11
-
12
- const fieldRatioMap = {
13
- '25%': 6,
14
- '50%': 12,
15
- '75%': 18,
16
- '100': 24,
17
- 6: 6,
18
- 12: 12,
19
- 18: 18,
20
- 24: 24,
21
- };
22
-
23
- var input = {
24
- name: 'input',
25
- rule(data) {
26
- return {
27
- type: 'input',
28
- field: data.field,
29
- title: data.title.title,
30
- props: {
31
- maxlength: 200,
32
- placeholder: data.props.placeholder,
33
- },
34
- value: data.value,
35
- effect: {
36
- required: data.effect.required && '请输入',
37
- },
38
- wrap: {
39
- wrapperCol: {
40
- span: fieldRatioMap[data.config.fieldRatio],
41
- },
42
- },
43
- };
44
- },
45
- rowRule(data) {
46
- return {
47
- type: 'input',
48
- field: data.field,
49
- title: data.title.title,
50
- props: {
51
- maxlength: 200,
52
- placeholder: data.props.placeholder,
53
- },
54
- value: data.value,
55
- effect: {
56
- required: data.effect.required && '请输入',
57
- },
58
- col: {
59
- span: fieldRatioMap[data.config.fieldRatio],
60
- },
61
- };
62
- },
63
- tableRule(data) {
64
- const field = data.field;
65
- return {
66
- field,
67
- title: data.title.title,
68
- headerClassName: data.effect.required ? 'is-required' : '',
69
- width: data.config.fieldRatio,
70
- slots: {
71
- default({ row }) {
72
- return h(Input, {
73
- value: row[field],
74
- placeholder: data.props.placeholder,
75
- maxlength: 200,
76
- 'onUpdate:value': (value) => {
77
- row[field] = value;
78
- },
79
- });
80
- },
81
- },
82
- };
83
- },
84
- };
85
-
86
- var textarea = {
87
- name: 'textarea',
88
- rule(data) {
89
- return {
90
- type: 'input',
91
- field: data.field,
92
- title: data.title.title,
93
- props: {
94
- type: 'textarea',
95
- maxlength: 5000,
96
- placeholder: data.props.placeholder,
97
- },
98
- value: data.value,
99
- effect: {
100
- required: data.effect.required && '请输入',
101
- },
102
- wrap: {
103
- wrapperCol: {
104
- span: fieldRatioMap[data.config.fieldRatio],
105
- },
106
- },
107
- };
108
- },
109
- rowRule(data) {
110
- return {
111
- type: 'input',
112
- field: data.field,
113
- title: data.title.title,
114
- props: {
115
- type: 'textarea',
116
- maxlength: 5000,
117
- placeholder: data.props.placeholder,
118
- },
119
- value: data.value,
120
- effect: {
121
- required: data.effect.required && '请输入',
122
- },
123
- col: {
124
- span: fieldRatioMap[data.config.fieldRatio],
125
- },
126
- };
127
- },
128
- tableRule(data) {
129
- const field = data.field;
130
- return {
131
- field,
132
- title: data.title.title,
133
- headerClassName: data.effect.required ? 'is-required' : '',
134
- width: data.config.fieldRatio,
135
- slots: {
136
- default({ row }) {
137
- return h(Input, {
138
- type: 'textarea',
139
- value: row[field],
140
- maxlength: 5000,
141
- placeholder: data.props.placeholder,
142
- 'onUpdate:value': (value) => {
143
- row[field] = value;
144
- },
145
- });
146
- },
147
- },
148
- };
149
- },
150
- };
151
-
152
- var numInput = {
153
- name: 'numInput',
154
- rule(data) {
155
- return {
156
- type: 'inputNumber',
157
- field: data.field,
158
- title: data.title.title,
159
- props: {
160
- placeholder: data.props.placeholder,
161
- },
162
- value: data.value,
163
- effect: {
164
- required: data.effect.required && '请输入',
165
- },
166
- wrap: {
167
- wrapperCol: {
168
- span: fieldRatioMap[data.config.fieldRatio],
169
- },
170
- },
171
- style: {
172
- width: '100%',
173
- },
174
- };
175
- },
176
- rowRule(data) {
177
- return {
178
- type: 'inputNumber',
179
- field: data.field,
180
- title: data.title.title,
181
- props: {
182
- placeholder: data.props.placeholder,
183
- },
184
- value: data.value,
185
- effect: {
186
- required: data.effect.required && '请输入',
187
- },
188
- col: {
189
- span: fieldRatioMap[data.config.fieldRatio],
190
- },
191
- style: {
192
- width: '100%',
193
- },
194
- };
195
- },
196
- tableRule(data) {
197
- const field = data.field;
198
- return {
199
- field,
200
- title: data.title.title,
201
- headerClassName: data.effect.required ? 'is-required' : '',
202
- width: data.config.fieldRatio,
203
- slots: {
204
- default({ row }) {
205
- return h(InputNumber, {
206
- value: row[field],
207
- placeholder: data.props.placeholder,
208
- 'onUpdate:value': (value) => {
209
- row[field] = value;
210
- },
211
- style: {
212
- width: '100%',
213
- },
214
- });
215
- },
216
- },
217
- };
218
- },
219
- };
220
-
221
- var radio = {
222
- name: 'radio',
223
- rule(data) {
224
- return {
225
- type: data.type,
226
- field: data.field,
227
- title: data.title.title,
228
- props: {
229
- placeholder: data.props.placeholder,
230
- },
231
- options: data.options,
232
- effect: {
233
- required: data.effect.required && '请选择',
234
- },
235
- wrap: {
236
- wrapperCol: {
237
- span: fieldRatioMap[data.config.fieldRatio],
238
- },
239
- },
240
- value: data.value,
241
- };
242
- },
243
- rowRule(data) {
244
- return {
245
- type: data.type,
246
- field: data.field,
247
- title: data.title.title,
248
- props: {
249
- placeholder: data.props.placeholder,
250
- },
251
- options: data.options,
252
- effect: {
253
- required: data.effect.required && '请选择',
254
- },
255
- col: {
256
- span: fieldRatioMap[data.config.fieldRatio],
257
- },
258
- value: data.value,
259
- };
260
- },
261
- tableRule(data) {
262
- const field = data.field;
263
- return {
264
- field,
265
- title: data.title.title,
266
- headerClassName: data.effect.required ? 'is-required' : '',
267
- width: data.config.fieldRatio,
268
- slots: {
269
- default({ row }) {
270
- return h(Select, {
271
- value: row[field],
272
- placeholder: data.props.placeholder,
273
- options: data.options,
274
- 'onUpdate:value': (value) => {
275
- row[field] = value;
276
- },
277
- });
278
- },
279
- },
280
- };
281
- },
282
- };
283
-
284
- var checkbox = {
285
- name: 'checkbox',
286
- rule(data) {
287
- const extraProps = data.type === 'select' ? { mode: 'multiple' } : {};
288
- return {
289
- type: data.type,
290
- field: data.field,
291
- title: data.title.title,
292
- props: Object.assign({ placeholder: data.props.placeholder }, extraProps),
293
- options: data.options,
294
- effect: {
295
- required: data.effect.required && '请选择',
296
- },
297
- wrap: {
298
- wrapperCol: {
299
- span: fieldRatioMap[data.config.fieldRatio],
300
- },
301
- },
302
- value: data.value,
303
- };
304
- },
305
- rowRule(data) {
306
- const extraProps = data.type === 'select' ? { mode: 'multiple' } : {};
307
- return {
308
- type: data.type,
309
- field: data.field,
310
- title: data.title.title,
311
- props: Object.assign({ placeholder: data.props.placeholder }, extraProps),
312
- options: data.options,
313
- effect: {
314
- required: data.effect.required && '请选择',
315
- },
316
- col: {
317
- span: fieldRatioMap[data.config.fieldRatio],
318
- },
319
- value: data.value,
320
- };
321
- },
322
- tableRule(data) {
323
- const field = data.field;
324
- return {
325
- field,
326
- title: data.title.title,
327
- headerClassName: data.effect.required ? 'is-required' : '',
328
- width: data.config.fieldRatio,
329
- slots: {
330
- default({ row }) {
331
- return h(Select, {
332
- value: row[field],
333
- placeholder: data.props.placeholder,
334
- options: data.options,
335
- mode: 'multiple',
336
- 'onUpdate:value': (value) => {
337
- row[field] = value;
338
- },
339
- });
340
- },
341
- },
342
- };
343
- },
344
- };
345
-
346
- var date = {
347
- name: 'date',
348
- rule(data) {
349
- const format = data.props.format;
350
- const value = data.config.defaultValue || data.value
351
- ? data.value
352
- : dayjs().format(format);
353
- const extraProps = {
354
- picker: format === 'YYYY-MM' ? 'month' : '',
355
- showTime: format === 'YYYY-MM-DD HH:mm',
356
- };
357
- return {
358
- type: 'datePicker',
359
- field: data.field,
360
- title: data.title.title,
361
- props: Object.assign({ format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
362
- value,
363
- effect: {
364
- required: data.effect.required && '请选择',
365
- },
366
- wrap: {
367
- wrapperCol: {
368
- span: fieldRatioMap[data.config.fieldRatio],
369
- },
370
- },
371
- style: {
372
- width: '100%',
373
- },
374
- };
375
- },
376
- rowRule(data) {
377
- const format = data.props.format;
378
- const value = data.config.defaultValue || data.value
379
- ? data.value
380
- : dayjs().format(format);
381
- const extraProps = {
382
- picker: format === 'YYYY-MM' ? 'month' : '',
383
- showTime: format === 'YYYY-MM-DD HH:mm',
384
- };
385
- return {
386
- type: 'datePicker',
387
- field: data.field,
388
- title: data.title.title,
389
- props: Object.assign({ format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
390
- value,
391
- effect: {
392
- required: data.effect.required && '请选择',
393
- },
394
- col: {
395
- span: fieldRatioMap[data.config.fieldRatio],
396
- },
397
- style: {
398
- width: '100%',
399
- },
400
- };
401
- },
402
- tableRule(data) {
403
- const field = data.field;
404
- const format = data.props.format;
405
- return {
406
- field,
407
- title: data.title.title,
408
- headerClassName: data.effect.required ? 'is-required' : '',
409
- width: data.config.fieldRatio,
410
- slots: {
411
- default({ row }) {
412
- return h(DatePicker, {
413
- value: row[field],
414
- placeholder: data.props.placeholder,
415
- format,
416
- valueFormat: format,
417
- picker: format === 'YYYY-MM' ? 'month' : 'date',
418
- showTime: format === 'YYYY-MM-DD HH:mm',
419
- 'onUpdate:value': (value) => {
420
- row[field] = value;
421
- },
422
- style: {
423
- width: '100%',
424
- },
425
- });
426
- },
427
- },
428
- };
429
- },
430
- };
431
-
432
- var dateRange = {
433
- name: 'dateRange',
434
- rule(data) {
435
- const format = data.props.format;
436
- const extraProps = {
437
- picker: format === 'YYYY-MM' ? 'month' : '',
438
- showTime: format === 'YYYY-MM-DD HH:mm',
439
- };
440
- return {
441
- type: 'datePicker',
442
- field: data.field,
443
- title: data.title.title,
444
- props: Object.assign({ range: true, separator: '~', format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
445
- effect: {
446
- required: data.effect.required && '请选择',
447
- },
448
- wrap: {
449
- wrapperCol: {
450
- span: fieldRatioMap[data.config.fieldRatio],
451
- },
452
- },
453
- style: {
454
- width: '100%',
455
- },
456
- value: data.value,
457
- };
458
- },
459
- rowRule(data) {
460
- const format = data.props.format;
461
- const extraProps = {
462
- picker: format === 'YYYY-MM' ? 'month' : '',
463
- showTime: format === 'YYYY-MM-DD HH:mm',
464
- };
465
- return {
466
- type: 'datePicker',
467
- field: data.field,
468
- title: data.title.title,
469
- props: Object.assign({ range: true, separator: '~', format, valueFormat: format, placeholder: data.props.placeholder }, extraProps),
470
- effect: {
471
- required: data.effect.required && '请选择',
472
- },
473
- col: {
474
- span: fieldRatioMap[data.config.fieldRatio],
475
- },
476
- style: {
477
- width: '100%',
478
- },
479
- value: data.value,
480
- };
481
- },
482
- tableRule(data) {
483
- const field = data.field;
484
- const format = data.props.format;
485
- return {
486
- field,
487
- title: data.title.title,
488
- headerClassName: data.effect.required ? 'is-required' : '',
489
- width: data.config.fieldRatio,
490
- slots: {
491
- default({ row }) {
492
- return h(RangePicker, {
493
- value: row[field],
494
- placeholder: data.props.placeholder,
495
- format,
496
- valueFormat: format,
497
- picker: format === 'YYYY-MM' ? 'month' : 'date',
498
- showTime: format === 'YYYY-MM-DD HH:mm',
499
- 'onUpdate:value': (value) => {
500
- row[field] = value;
501
- },
502
- style: {
503
- width: '100%',
504
- },
505
- });
506
- },
507
- },
508
- };
509
- },
510
- };
511
-
512
- var instruction = {
513
- name: 'instruction',
514
- rule(data) {
515
- return {
516
- type: 'div',
517
- field: data.field,
518
- children: [data.value],
519
- style: {
520
- padding: '16px 12px',
521
- color: data.style.color,
522
- fontSize: '14px',
523
- lineHeight: '22px',
524
- borderRadius: '4px',
525
- backgroundColor: '#EAF2FF',
526
- },
527
- };
528
- },
529
- };
530
-
531
- /******************************************************************************
532
- Copyright (c) Microsoft Corporation.
533
-
534
- Permission to use, copy, modify, and/or distribute this software for any
535
- purpose with or without fee is hereby granted.
536
-
537
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
538
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
539
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
540
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
541
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
542
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
543
- PERFORMANCE OF THIS SOFTWARE.
544
- ***************************************************************************** */
545
-
546
- function __awaiter(thisArg, _arguments, P, generator) {
547
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
548
- return new (P || (P = Promise))(function (resolve, reject) {
549
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
550
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
551
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
552
- step((generator = generator.apply(thisArg, _arguments || [])).next());
553
- });
554
- }
555
-
556
- var picture = {
557
- name: 'picture',
558
- rule(data, extraConfig) {
559
- const maxCount = data.props.extraProps.maxCount;
560
- return {
561
- type: 'Picture',
562
- component: Picture,
563
- field: data.field,
564
- title: data.title.title,
565
- props: {
566
- uploadProps: {
567
- listType: 'picture-card',
568
- text: '请选择',
569
- multiple: maxCount > 1,
570
- },
571
- extraProps: {
572
- maxSize: 10,
573
- maxCount,
574
- },
575
- defaultList: data.value,
576
- uploadRequest(inject, file) {
577
- return __awaiter(this, void 0, void 0, function* () {
578
- return yield extraConfig.picture.fetch(file);
579
- });
580
- },
581
- },
582
- validate: [
583
- {
584
- required: data.effect.required,
585
- type: 'array',
586
- min: 1,
587
- message: '请上传图片',
588
- },
589
- ],
590
- inject: true,
591
- on: {
592
- update(inject, list) {
593
- const rule = inject.self;
594
- rule.value = list;
595
- nextTick(() => {
596
- inject.api.validateField(rule.field);
597
- });
598
- },
599
- error(inject, error) {
600
- message.error(error.message);
601
- },
602
- },
603
- };
604
- },
605
- rowRule(data, extraConfig) {
606
- const maxCount = data.props.extraProps.maxCount;
607
- return {
608
- type: 'Picture',
609
- component: Picture,
610
- field: data.field,
611
- title: data.title.title,
612
- props: {
613
- uploadProps: {
614
- listType: 'picture-card',
615
- text: '请选择',
616
- multiple: maxCount > 1,
617
- },
618
- extraProps: {
619
- maxSize: 10,
620
- maxCount,
621
- },
622
- defaultList: data.value,
623
- uploadRequest(inject, file) {
624
- return __awaiter(this, void 0, void 0, function* () {
625
- return yield extraConfig.picture.fetch(file);
626
- });
627
- },
628
- },
629
- validate: [
630
- {
631
- required: data.effect.required,
632
- type: 'array',
633
- min: 1,
634
- message: '请上传图片',
635
- },
636
- ],
637
- inject: true,
638
- on: {
639
- update(inject, list) {
640
- const rule = inject.self;
641
- rule.value = list;
642
- nextTick(() => {
643
- inject.api.validateField(rule.field);
644
- });
645
- },
646
- error(inject, error) {
647
- message.error(error.message);
648
- },
649
- },
650
- col: {
651
- span: 12,
652
- },
653
- };
654
- },
655
- };
656
-
657
- var file = {
658
- name: 'file',
659
- rule(data, extraConfig) {
660
- return {
661
- type: 'Picture',
662
- component: Picture,
663
- field: data.field,
664
- title: data.title.title,
665
- props: {
666
- extraProps: {
667
- maxSize: 20,
668
- tips: '单个附件大小需≤20M',
669
- },
670
- defaultList: data.value,
671
- uploadRequest(inject, file) {
672
- return __awaiter(this, void 0, void 0, function* () {
673
- return yield extraConfig.picture.fetch(file);
674
- });
675
- },
676
- },
677
- validate: [
678
- {
679
- required: data.effect.required,
680
- type: 'array',
681
- len: 1,
682
- message: '请上传附件',
683
- },
684
- ],
685
- inject: true,
686
- on: {
687
- update(inject, list) {
688
- const rule = inject.self;
689
- rule.value = list;
690
- nextTick(() => {
691
- inject.api.validateField(rule.field);
692
- });
693
- },
694
- error(inject, error) {
695
- message.error(error.message);
696
- },
697
- },
698
- };
699
- },
700
- rowRule(data, extraConfig) {
701
- return {
702
- type: 'Picture',
703
- component: Picture,
704
- field: data.field,
705
- title: data.title.title,
706
- props: {
707
- extraProps: {
708
- maxSize: 20,
709
- tips: '单个附件大小需≤20M',
710
- },
711
- defaultList: data.value,
712
- uploadRequest(inject, file) {
713
- return __awaiter(this, void 0, void 0, function* () {
714
- return yield extraConfig.picture.fetch(file);
715
- });
716
- },
717
- },
718
- validate: [
719
- {
720
- required: data.effect.required,
721
- type: 'array',
722
- len: 1,
723
- message: '请上传附件',
724
- },
725
- ],
726
- inject: true,
727
- on: {
728
- update(inject, list) {
729
- const rule = inject.self;
730
- rule.value = list;
731
- nextTick(() => {
732
- inject.api.validateField(rule.field);
733
- });
734
- },
735
- error(inject, error) {
736
- message.error(error.message);
737
- },
738
- },
739
- col: {
740
- span: 12,
741
- },
742
- };
743
- },
744
- };
745
-
746
- var _export_sfc = (sfc, props) => {
747
- const target = sfc.__vccOpts || sfc;
748
- for (const [key, val] of props) {
749
- target[key] = val;
750
- }
751
- return target;
752
- };
753
-
754
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
755
- __name: "staff-selector",
756
- props: ["placeholder", "defaultSelected"],
757
- emits: ["change"],
758
- setup(__props, { emit: emits }) {
759
- const props = __props;
760
- const selected = ref([]);
761
- const visible = ref(false);
762
- function selectedChange(val) {
763
- emits("change", val);
764
- }
765
- function handleAdd() {
766
- visible.value = true;
767
- }
768
- watch(
769
- () => props.defaultSelected,
770
- (val) => {
771
- selected.value = val;
772
- },
773
- {
774
- immediate: true
775
- }
776
- );
777
- watch(selected, (val) => {
778
- selectedChange(val);
779
- });
780
- return (_ctx, _cache) => {
781
- return openBlock(), createElementBlock("div", null, [
782
- createVNode(unref(BmTagsDisplay), {
783
- list: selected.value,
784
- "onUpdate:list": _cache[0] || (_cache[0] = ($event) => selected.value = $event),
785
- "show-empty-btn": false,
786
- "show-empty": "",
787
- onAddClick: handleAdd
788
- }, null, 8, ["list"]),
789
- createVNode(unref(BmStaffsSelector), mergeProps({
790
- select: selected.value,
791
- "onUpdate:select": _cache[1] || (_cache[1] = ($event) => selected.value = $event),
792
- visible: visible.value,
793
- "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => visible.value = $event)
794
- }, _ctx.$attrs), null, 16, ["select", "visible"])
795
- ]);
796
- };
797
- }
798
- });
799
- var StaffSelector = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__file", "staff-selector.vue"]]);
800
-
801
- var people = {
802
- name: 'people',
803
- rule(data, extraConfig) {
804
- return {
805
- type: 'StaffSelector',
806
- component: StaffSelector,
807
- field: data.field,
808
- title: data.title.title,
809
- props: {
810
- title: '添加员工',
811
- mode: data.props.limit ? 'radio' : 'multiple',
812
- placeholder: data.props.placeholder,
813
- defaultSelected: data.value,
814
- load(inject, params) {
815
- return __awaiter(this, void 0, void 0, function* () {
816
- return yield extraConfig.people.fetch(params);
817
- });
818
- },
819
- },
820
- effect: {
821
- required: data.effect.required && '请选择',
822
- },
823
- wrap: {
824
- wrapperCol: {
825
- span: fieldRatioMap[data.config.fieldRatio],
826
- },
827
- },
828
- inject: true,
829
- on: {
830
- change(inject, list) {
831
- const rule = inject.self;
832
- rule.value = list;
833
- inject.api.validateField(rule.field, () => {
834
- if (list.length) {
835
- inject.api.clearValidateState(rule.field);
836
- }
837
- });
838
- },
839
- },
840
- };
841
- },
842
- rowRule(data, extraConfig) {
843
- return {
844
- type: 'StaffSelector',
845
- component: StaffSelector,
846
- field: data.field,
847
- title: data.title.title,
848
- props: {
849
- title: '添加员工',
850
- mode: data.props.limit ? 'radio' : 'multiple',
851
- placeholder: data.props.placeholder,
852
- defaultSelected: data.value,
853
- load(inject, params) {
854
- return __awaiter(this, void 0, void 0, function* () {
855
- return yield extraConfig.people.fetch(params);
856
- });
857
- },
858
- },
859
- effect: {
860
- required: data.effect.required && '请选择',
861
- },
862
- col: {
863
- span: fieldRatioMap[data.config.fieldRatio],
864
- },
865
- inject: true,
866
- on: {
867
- change(inject, list) {
868
- const rule = inject.self;
869
- rule.value = list;
870
- inject.api.validateField(rule.field, () => {
871
- if (list.length) {
872
- inject.api.clearValidateState(rule.field);
873
- }
874
- });
875
- },
876
- },
877
- };
878
- },
879
- tableRule(data, extraConfig) {
880
- const field = data.field;
881
- return {
882
- field,
883
- title: data.title.title,
884
- headerClassName: data.effect.required ? 'is-required' : '',
885
- width: data.config.fieldRatio,
886
- slots: {
887
- default({ row }) {
888
- return h(StaffSelector, Object.assign({ title: '添加员工', mode: data.props.limit ? 'radio' : 'multiple', placeholder: data.props.placeholder, onChange: (value) => {
889
- row[field] = value;
890
- }, defaultSelected: row[field] }, extraConfig.people));
891
- },
892
- },
893
- };
894
- },
895
- };
896
-
897
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
898
- __name: "temp-content",
899
- props: ["content"],
900
- setup(__props) {
901
- const props = __props;
902
- const layers = computed(() => {
903
- if (props.content) {
904
- try {
905
- return JSON.parse(props.content).filter((layer) => !layer.src);
906
- } catch {
907
- return [];
908
- }
909
- }
910
- return [];
911
- });
912
- const layerBackGround = computed(() => {
913
- if (!props.content) {
914
- try {
915
- return JSON.parse(props.content).find((layer) => layer.src).src;
916
- } catch {
917
- return "";
918
- }
919
- }
920
- return "";
921
- });
922
- return (_ctx, _cache) => {
923
- return openBlock(), createElementBlock("div", {
924
- class: "bm-fc-rect-outer",
925
- style: normalizeStyle(
926
- unref(layerBackGround) ? { backgroundImage: `url('${unref(layerBackGround)}')` } : {}
927
- )
928
- }, [
929
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(layers), (layer) => {
930
- return openBlock(), createElementBlock("div", {
931
- key: layer.uuid,
932
- class: normalizeClass(["bm-fc-rect", { "is-ele": layer.backgroundImage }]),
933
- style: normalizeStyle(layer)
934
- }, null, 6);
935
- }), 128))
936
- ], 4);
937
- };
938
- }
939
- });
940
- var TempContent = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__file", "temp-content.vue"]]);
941
-
942
- const _hoisted_1$3 = /* @__PURE__ */ createTextVNode("\u91CD\u7F6E");
943
- const _hoisted_2$3 = /* @__PURE__ */ createTextVNode(" \u67E5\u8BE2 ");
944
- const _hoisted_3$3 = { class: "bm-fc-select-material-temp__content__item-info" };
945
- const _hoisted_4$2 = { class: "bm-fc-select-material-temp__content__item-info__cover" };
946
- const _hoisted_5$2 = ["src"];
947
- const _hoisted_6$2 = ["onClick"];
948
- const _hoisted_7$2 = {
949
- key: 1,
950
- class: "bm-fc-select-material-temp__content__circle"
951
- };
952
- const _hoisted_8$2 = ["title"];
953
- const _hoisted_9$2 = { class: "bm-fc-select-material-temp__content__item-time" };
954
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
955
- __name: "select-material-temp",
956
- props: ["visible", "fetchMaterialType", "fetchMaterialTemp"],
957
- emits: ["update:visible", "select"],
958
- setup(__props, { emit: emits }) {
959
- const props = __props;
960
- const treeData = ref([]);
961
- const templateName = ref("");
962
- const list = ref([]);
963
- const selectTypeKeys = ref([]);
964
- const params = computed(() => ({
965
- timestamp: timestamp.value,
966
- pageType: 1,
967
- templateName: templateName.value,
968
- categoryCode: selectTypeKeys.value?.[0],
969
- secondCategoryCode: selectTypeKeys.value?.[1],
970
- thirdCategoryCode: selectTypeKeys.value?.[2],
971
- pageSize: pagination.pageSize,
972
- pageNum: pagination.current
973
- }));
974
- const selectItem = ref({});
975
- const pagination = reactive({
976
- current: 1,
977
- pageSize: 8,
978
- total: 0
979
- });
980
- const timestamp = ref("");
981
- function initType() {
982
- props.fetchMaterialType({
983
- level: 1,
984
- relationCode: ""
985
- }).then((result) => {
986
- result.forEach((item) => {
987
- item.isLeaf = false;
988
- });
989
- treeData.value = result;
990
- });
991
- }
992
- function onLoadData(treeNode) {
993
- return new Promise((resolve) => {
994
- if (treeNode.dataRef.children) {
995
- resolve();
996
- return;
997
- }
998
- const level = treeNode.parent ? 3 : 2;
999
- const isLeaf = level === 3;
1000
- props.fetchMaterialType({
1001
- level,
1002
- relationCode: treeNode.dataRef.key
1003
- }).then((data) => {
1004
- data.forEach((item) => {
1005
- item.isLeaf = isLeaf;
1006
- });
1007
- if (!data.length) {
1008
- treeNode.dataRef.isLeaf = true;
1009
- }
1010
- treeNode.dataRef.children = data;
1011
- treeData.value = [...treeData.value];
1012
- }).finally(() => {
1013
- resolve();
1014
- });
1015
- });
1016
- }
1017
- function getSelectTypeKeys(node) {
1018
- const result = [];
1019
- result.unshift(node.key);
1020
- while (node.parent) {
1021
- node = node.parent;
1022
- result.unshift(node.key);
1023
- }
1024
- return result;
1025
- }
1026
- function handleTreeSelect(selectedKeys, e) {
1027
- selectTypeKeys.value = getSelectTypeKeys(e.node);
1028
- pagination.current = 1;
1029
- getTem();
1030
- }
1031
- function getTem() {
1032
- props.fetchMaterialTemp(params.value).then((data) => {
1033
- list.value = data.list;
1034
- pagination.total = data.total;
1035
- timestamp.value = data.timestamp;
1036
- });
1037
- }
1038
- function select(item) {
1039
- selectItem.value = item;
1040
- }
1041
- function reset() {
1042
- pagination.current = 1;
1043
- templateName.value = "";
1044
- getTem();
1045
- }
1046
- function search() {
1047
- pagination.current = 1;
1048
- getTem();
1049
- }
1050
- function pageChange(page) {
1051
- pagination.current = page;
1052
- getTem();
1053
- }
1054
- function handleOk() {
1055
- emits("select", selectItem.value.templateCode);
1056
- emits("update:visible", false);
1057
- }
1058
- initType();
1059
- getTem();
1060
- return (_ctx, _cache) => {
1061
- return openBlock(), createBlock(unref(Modal), {
1062
- title: "\u9009\u62E9\u7D20\u6750\u6A21\u677F",
1063
- centered: "",
1064
- width: 1e3,
1065
- visible: __props.visible,
1066
- "body-style": { padding: 0 },
1067
- "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:visible", false)),
1068
- onOk: handleOk
1069
- }, {
1070
- default: withCtx(() => [
1071
- createVNode(unref(Layout), { class: "bm-fc-select-material-temp" }, {
1072
- default: withCtx(() => [
1073
- createVNode(unref(LayoutSider), { class: "bm-fc-select-material-temp__sider" }, {
1074
- default: withCtx(() => [
1075
- createVNode(unref(Tree), {
1076
- "tree-data": treeData.value,
1077
- "load-data": onLoadData,
1078
- onSelect: handleTreeSelect
1079
- }, null, 8, ["tree-data"])
1080
- ]),
1081
- _: 1
1082
- }),
1083
- createVNode(unref(LayoutContent), { class: "bm-fc-select-material-temp__content" }, {
1084
- default: withCtx(() => [
1085
- createVNode(unref(Input), {
1086
- value: templateName.value,
1087
- "onUpdate:value": _cache[0] || (_cache[0] = ($event) => templateName.value = $event),
1088
- class: "bm-fc-select-material-temp__content__input",
1089
- placeholder: "\u8BF7\u8F93\u5165\u6A21\u677F\u540D\u79F0\u641C\u7D22"
1090
- }, null, 8, ["value"]),
1091
- createVNode(unref(Button), {
1092
- class: "bm-fc-select-material-temp__content__btn",
1093
- onClick: reset
1094
- }, {
1095
- default: withCtx(() => [
1096
- _hoisted_1$3
1097
- ]),
1098
- _: 1
1099
- }),
1100
- createVNode(unref(Button), {
1101
- class: "bm-fc-select-material-temp__content__btn",
1102
- type: "primary",
1103
- onClick: search
1104
- }, {
1105
- default: withCtx(() => [
1106
- createVNode(unref(SearchOutlined)),
1107
- _hoisted_2$3
1108
- ]),
1109
- _: 1
1110
- }),
1111
- createVNode(unref(Row), { gutter: [16, 16] }, {
1112
- default: withCtx(() => [
1113
- (openBlock(true), createElementBlock(Fragment, null, renderList(list.value, (item) => {
1114
- return openBlock(), createBlock(unref(Col), {
1115
- key: item.id,
1116
- span: 6
1117
- }, {
1118
- default: withCtx(() => [
1119
- createElementVNode("div", _hoisted_3$3, [
1120
- createElementVNode("div", _hoisted_4$2, [
1121
- item.coverPlanUrl ? (openBlock(), createElementBlock("img", {
1122
- key: 0,
1123
- class: "bm-fc-select-material-temp__content__item-info__cover__img",
1124
- src: item.coverPlanUrl,
1125
- alt: ""
1126
- }, null, 8, _hoisted_5$2)) : (openBlock(), createBlock(TempContent, {
1127
- key: 1,
1128
- content: item.htmlContent
1129
- }, null, 8, ["content"]))
1130
- ]),
1131
- createElementVNode("div", {
1132
- class: "bm-fc-select-material-temp__content__item-name",
1133
- onClick: ($event) => select(item)
1134
- }, [
1135
- selectItem.value.id === item.id ? (openBlock(), createBlock(unref(CheckCircleFilled), {
1136
- key: 0,
1137
- class: "bm-fc-select-material-temp__content__check-icon"
1138
- })) : (openBlock(), createElementBlock("span", _hoisted_7$2)),
1139
- createElementVNode("span", {
1140
- class: "bm-fc-select-material-temp__content__name",
1141
- title: item.templateName
1142
- }, toDisplayString(item.templateName), 9, _hoisted_8$2)
1143
- ], 8, _hoisted_6$2),
1144
- createElementVNode("div", _hoisted_9$2, toDisplayString(unref(dayjs)(item.lastUpdateTime).format("YYYY/MM/DD")), 1)
1145
- ])
1146
- ]),
1147
- _: 2
1148
- }, 1024);
1149
- }), 128))
1150
- ]),
1151
- _: 1
1152
- }),
1153
- createVNode(unref(Pagination), {
1154
- style: { "text-align": "right", "margin-top": "20px" },
1155
- current: pagination.current,
1156
- "page-size": pagination.pageSize,
1157
- total: pagination.total,
1158
- size: "small",
1159
- "show-quick-jumper": "",
1160
- onChange: pageChange
1161
- }, null, 8, ["current", "page-size", "total"])
1162
- ]),
1163
- _: 1
1164
- })
1165
- ]),
1166
- _: 1
1167
- })
1168
- ]),
1169
- _: 1
1170
- }, 8, ["visible"]);
1171
- };
1172
- }
1173
- });
1174
- var SelectMaterialTemp = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__file", "select-material-temp.vue"]]);
1175
-
1176
- const _hoisted_1$2 = { class: "bm-dc-table-widget" };
1177
- const _hoisted_2$2 = { class: "bm-dc-table-widget__title" };
1178
- const _hoisted_3$2 = { class: "bm-dc-table-widget__title-samll" };
1179
- const _hoisted_4$1 = { class: "bm-dc-table-widget__top-bar" };
1180
- const _hoisted_5$1 = /* @__PURE__ */ createTextVNode("\u4E0B\u8F7D\u6A21\u677F");
1181
- const _hoisted_6$1 = /* @__PURE__ */ createTextVNode("\u6279\u91CF\u5BFC\u5165");
1182
- const _hoisted_7$1 = /* @__PURE__ */ createTextVNode("\u6279\u91CF\u5220\u9664");
1183
- const _hoisted_8$1 = /* @__PURE__ */ createTextVNode(" \u65B0\u589E ");
1184
- const _hoisted_9$1 = { class: "bm-dc-table-widget__table" };
1185
- const _hoisted_10$1 = ["onClick"];
1186
- const _hoisted_11$1 = ["onClick"];
1187
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1188
- __name: "table-widget",
1189
- props: ["rule", "extraConfig"],
1190
- emits: ["change"],
1191
- setup(__props, { emit: emits }) {
1192
- const props = __props;
1193
- const productInfoKeyMap = {
1194
- \u5546\u54C1\u540D\u79F0: "productName",
1195
- \u5546\u54C1\u7B80\u79F0: "productShortName",
1196
- \u5546\u54C1\u56FE\u7247: "picUrl",
1197
- \u5EFA\u8BAE\u96F6\u552E\u4EF7: "retailPrice",
1198
- \u5546\u54C1\u7BB1\u89C4: "carton",
1199
- \u5546\u54C1\u5355\u4F4D: "unit"
1200
- };
1201
- const oper = "oper";
1202
- const bmFloatTableRef = ref();
1203
- const importFeature = computed(() => isShow("import"));
1204
- const deleteFeature = computed(() => isShow("delete"));
1205
- const copyFeature = computed(() => isShow("copy"));
1206
- const columns = reactive([]);
1207
- const data = reactive([]);
1208
- const config = computed(() => ({
1209
- columns: [...columns],
1210
- data: [...data],
1211
- checkboxConfig: {
1212
- trigger: "cell"
1213
- }
1214
- }));
1215
- const countText = computed(() => {
1216
- const cache = {};
1217
- props.rule.config.childRules?.forEach((rule) => {
1218
- if (rule.name === "numInput" && rule.config.count) {
1219
- cache[rule.field] = { title: rule.title.title, count: 0 };
1220
- }
1221
- });
1222
- data.forEach((row) => {
1223
- Object.keys(cache).forEach((key) => {
1224
- if (!isNaN(row[key]))
1225
- cache[key].count += row[key];
1226
- });
1227
- });
1228
- if (Object.keys(cache).length)
1229
- return `\uFF08\u5B57\u6BB5\u540D\u603B\u8BA1\uFF1A${Object.values(cache).reduce((pre, cur, index) => {
1230
- if (index !== 0)
1231
- pre += "\u3001";
1232
- pre += `${cur.title}\uFF1A${cur.count}`;
1233
- return pre;
1234
- }, "")}\uFF09`;
1235
- else
1236
- return "";
1237
- });
1238
- const xGrid = computed(() => bmFloatTableRef.value.xGrid || {});
1239
- const inputRef = ref();
1240
- function isShow(key) {
1241
- return props.rule.config.tableAdvancedFeatures.includes(key);
1242
- }
1243
- function initConfig() {
1244
- columns.splice(0, columns.length);
1245
- data.splice(0, data.length);
1246
- const childRules = props.rule.config.childRules;
1247
- const value = props.rule.value;
1248
- if (deleteFeature.value) {
1249
- columns.push({
1250
- type: "checkbox",
1251
- width: "54px"
1252
- });
1253
- }
1254
- childRules?.length && columns.push(
1255
- ...childRules.reduce((pre, cur) => {
1256
- const name = cur.name;
1257
- if (name === "product") {
1258
- pre.push(...getProductColumn(cur));
1259
- } else {
1260
- pre.push(ruleList[name].tableRule(cur, props.extraConfig));
1261
- }
1262
- return pre;
1263
- }, [])
1264
- );
1265
- columns.push({
1266
- field: oper,
1267
- title: "\u64CD\u4F5C",
1268
- width: "100px",
1269
- fixed: "right",
1270
- slots: {
1271
- default: "floatHandle"
1272
- }
1273
- });
1274
- handleAdd(value);
1275
- }
1276
- function getRowData() {
1277
- return props.rule.config.childRules?.reduce((pre, cur) => {
1278
- if (cur.name === "date" && !cur.config.defaultValue) {
1279
- pre[cur.field] = dayjs().format(cur.props.format);
1280
- } else {
1281
- pre[cur.field] = cur.value;
1282
- }
1283
- return pre;
1284
- }, {});
1285
- }
1286
- function getProductColumn(rule) {
1287
- const field = rule.field;
1288
- const associatedFields = rule.config.associatedFields;
1289
- const columns2 = [
1290
- {
1291
- field,
1292
- title: "\u5546\u54C1\u7F16\u7801",
1293
- headerClassName: rule.effect.required ? "is-required" : "",
1294
- width: "138px",
1295
- slots: {
1296
- default({ row }) {
1297
- return h(Input, {
1298
- value: row[field],
1299
- placeholder: "\u8BF7\u8F93\u5165",
1300
- "onUpdate:value": (value) => {
1301
- row[field] = value;
1302
- },
1303
- onChange() {
1304
- queryProductInfo(rule, row);
1305
- }
1306
- });
1307
- }
1308
- }
1309
- }
1310
- ];
1311
- if (associatedFields.length) {
1312
- associatedFields.forEach((item) => {
1313
- const childField = field + item.value;
1314
- columns2.push({
1315
- field: childField,
1316
- title: item.label,
1317
- width: "138px",
1318
- slots: {
1319
- default({ row }) {
1320
- if (item.value === "\u5546\u54C1\u56FE\u7247" && row[childField]) {
1321
- return h("img", {
1322
- src: "/cloudStorage/read/read?p=" + row[childField],
1323
- style: {
1324
- width: "86px",
1325
- height: "86px",
1326
- padding: "8px"
1327
- }
1328
- });
1329
- }
1330
- return h(
1331
- "div",
1332
- {
1333
- style: {
1334
- color: "#9393A3"
1335
- }
1336
- },
1337
- [row[childField] || "\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA"]
1338
- );
1339
- }
1340
- }
1341
- });
1342
- });
1343
- }
1344
- return columns2;
1345
- }
1346
- function handleAdd(rowData) {
1347
- Array.isArray(rowData) ? data.push(...rowData) : data.push(getRowData());
1348
- }
1349
- function handleCopy(row) {
1350
- data.push(cloneDeep(row));
1351
- }
1352
- function handleDelete(index) {
1353
- data.splice(index, 1);
1354
- }
1355
- function handleBatchDelete() {
1356
- const selected = xGrid.value.getCheckboxRecords();
1357
- selected.forEach((item) => {
1358
- const index = data.indexOf(item);
1359
- handleDelete(index);
1360
- });
1361
- }
1362
- function handleDownload() {
1363
- xGrid.value.exportData({
1364
- type: "csv",
1365
- data: [],
1366
- columnFilterMethod({ column }) {
1367
- return isValidColumn(column);
1368
- }
1369
- });
1370
- }
1371
- function handleImport() {
1372
- inputRef.value.click();
1373
- }
1374
- function emitChange() {
1375
- emits("change", data);
1376
- }
1377
- function queryProductInfo(rule, row) {
1378
- const field = rule.field;
1379
- const associatedFields = rule?.config?.associatedFields;
1380
- associatedFields.length && props.extraConfig.product.fetch({ productCode: row[field] }).then((data2) => {
1381
- associatedFields.forEach((item) => {
1382
- row[field + item.value] = data2[productInfoKeyMap[item.value]];
1383
- });
1384
- });
1385
- }
1386
- function handleChange(e) {
1387
- const file = e.target.files[0];
1388
- const reader = new FileReader();
1389
- reader.onload = (fr) => {
1390
- const rows = parseCsv(fr?.target?.result);
1391
- const validColumns = columns.filter((c) => isValidColumn(c));
1392
- rows.forEach((row) => {
1393
- const rowData = {};
1394
- row.forEach((item, index) => {
1395
- rowData[validColumns[index].field] = item;
1396
- });
1397
- data.push(rowData);
1398
- });
1399
- e.target.value = "";
1400
- };
1401
- file && reader.readAsText(file, "GB2312");
1402
- }
1403
- function isValidColumn(c) {
1404
- return c.type !== "checkbox" && c.field !== oper;
1405
- }
1406
- function parseCsv(result) {
1407
- let data2 = [];
1408
- if (result) {
1409
- data2 = result.split("\r\n").slice(1).filter((item) => item).map((item) => item.split(","));
1410
- }
1411
- return data2;
1412
- }
1413
- watch(
1414
- () => props.rule,
1415
- () => {
1416
- initConfig();
1417
- },
1418
- {
1419
- immediate: true
1420
- }
1421
- );
1422
- watch(
1423
- () => data,
1424
- () => {
1425
- emitChange();
1426
- },
1427
- { deep: true, immediate: true }
1428
- );
1429
- return (_ctx, _cache) => {
1430
- return openBlock(), createElementBlock("div", _hoisted_1$2, [
1431
- createElementVNode("div", _hoisted_2$2, [
1432
- createTextVNode(toDisplayString(__props.rule.title.title) + " ", 1),
1433
- createElementVNode("span", _hoisted_3$2, toDisplayString(unref(countText)), 1),
1434
- createElementVNode("div", _hoisted_4$1, [
1435
- unref(importFeature) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1436
- createVNode(unref(Button), { onClick: handleDownload }, {
1437
- default: withCtx(() => [
1438
- _hoisted_5$1
1439
- ]),
1440
- _: 1
1441
- }),
1442
- createVNode(unref(Button), { onClick: handleImport }, {
1443
- default: withCtx(() => [
1444
- _hoisted_6$1
1445
- ]),
1446
- _: 1
1447
- }),
1448
- createElementVNode("input", {
1449
- ref_key: "inputRef",
1450
- ref: inputRef,
1451
- style: { "display": "none" },
1452
- name: "file",
1453
- type: "file",
1454
- accept: "text/csv",
1455
- onChange: handleChange
1456
- }, null, 544)
1457
- ], 64)) : createCommentVNode("v-if", true),
1458
- unref(deleteFeature) ? (openBlock(), createBlock(unref(Button), {
1459
- key: 1,
1460
- onClick: handleBatchDelete
1461
- }, {
1462
- default: withCtx(() => [
1463
- _hoisted_7$1
1464
- ]),
1465
- _: 1
1466
- })) : createCommentVNode("v-if", true),
1467
- createVNode(unref(Button), {
1468
- type: "primary",
1469
- onClick: handleAdd
1470
- }, {
1471
- default: withCtx(() => [
1472
- createVNode(unref(PlusOutlined)),
1473
- _hoisted_8$1
1474
- ]),
1475
- _: 1
1476
- })
1477
- ])
1478
- ]),
1479
- createElementVNode("div", _hoisted_9$1, [
1480
- createVNode(unref(FormItemRest), null, {
1481
- default: withCtx(() => [
1482
- createVNode(unref(BmFloatTable), {
1483
- ref_key: "bmFloatTableRef",
1484
- ref: bmFloatTableRef,
1485
- config: unref(config)
1486
- }, {
1487
- floatHandle: withCtx(({ row, rowIndex }) => [
1488
- unref(copyFeature) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
1489
- createElementVNode("a", {
1490
- onClick: ($event) => handleCopy(row)
1491
- }, "\u590D\u5236", 8, _hoisted_10$1),
1492
- createVNode(unref(Divider), { type: "vertical" })
1493
- ], 64)) : createCommentVNode("v-if", true),
1494
- createElementVNode("a", {
1495
- onClick: ($event) => handleDelete(rowIndex)
1496
- }, "\u5220\u9664", 8, _hoisted_11$1)
1497
- ]),
1498
- _: 1
1499
- }, 8, ["config"])
1500
- ]),
1501
- _: 1
1502
- })
1503
- ])
1504
- ]);
1505
- };
1506
- }
1507
- });
1508
- var TableWidget = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__file", "table-widget.vue"]]);
1509
-
1510
- const _hoisted_1$1 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label is-required" }, "\u7D20\u6750\u6A21\u677F\uFF1A", -1);
1511
- const _hoisted_2$1 = { key: 0 };
1512
- const _hoisted_3$1 = /* @__PURE__ */ createTextVNode("\u66F4\u6362\u6A21\u677F");
1513
- const _hoisted_4 = /* @__PURE__ */ createTextVNode(" \u9009\u62E9\u6A21\u677F ");
1514
- const _hoisted_5 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u7D20\u6750\u7C7B\u578B\uFF1A", -1);
1515
- const _hoisted_6 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u5C3A\u5BF8\uFF1A", -1);
1516
- const _hoisted_7 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u5C01\u9762\u56FE\uFF1A", -1);
1517
- const _hoisted_8 = ["src"];
1518
- const _hoisted_9 = { key: 1 };
1519
- const _hoisted_10 = /* @__PURE__ */ createElementVNode("span", { class: "bm-fc-form-item-label" }, "\u6A21\u677F\u7ED3\u6784\u56FE\uFF1A", -1);
1520
- const _hoisted_11 = { key: 1 };
1521
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1522
- __name: "material-temp",
1523
- props: [
1524
- "uploadPictureRule",
1525
- "extraConfig",
1526
- "formCreateInject",
1527
- "value"
1528
- ],
1529
- emits: ["change"],
1530
- setup(__props, { emit: emits }) {
1531
- const props = __props;
1532
- const activeKey = ref("\u7D20\u67501");
1533
- const visible = ref(false);
1534
- computed(() => props.formCreateInject.rule.value || {});
1535
- const panes = reactive([
1536
- {
1537
- key: "\u7D20\u67501",
1538
- title: "\u7D20\u67501",
1539
- tempSelected: {}
1540
- }
1541
- ]);
1542
- computed(
1543
- () => panes.find((pane) => pane.key === activeKey.value)
1544
- );
1545
- let index = 2;
1546
- const measrueDicts = ref([]);
1547
- function selectTemp() {
1548
- visible.value = true;
1549
- }
1550
- function handleSelect(tempId) {
1551
- return getTempDetail(tempId).then((result) => {
1552
- const activePane2 = getAcitvePane();
1553
- activePane2.tempSelected = result;
1554
- activePane2.tableRule = getTableRule(result.coverageArr);
1555
- });
1556
- }
1557
- function getAcitvePane() {
1558
- return panes.find((pane) => pane.key === activeKey.value);
1559
- }
1560
- function getTempDetail(templateCode) {
1561
- return props.extraConfig.fetchMaterialTempDetail({ templateCode });
1562
- }
1563
- function handleUpload(list) {
1564
- getAcitvePane().uploadList = list;
1565
- }
1566
- function handleAdd() {
1567
- const key = `\u7D20\u6750${index}`;
1568
- panes.push({
1569
- key,
1570
- title: `\u7D20\u6750${index}`,
1571
- tempSelected: {}
1572
- });
1573
- activeKey.value = key;
1574
- index++;
1575
- }
1576
- function handleDelete(targetKey) {
1577
- panes.splice(
1578
- panes.findIndex((pane) => pane.key === targetKey),
1579
- 1
1580
- );
1581
- }
1582
- function getTableRule(coverageArr) {
1583
- const fieldTypeMap = {
1584
- 1: "input",
1585
- 2: "numInput",
1586
- 3: "date",
1587
- 4: "input"
1588
- };
1589
- const formatMap = {
1590
- 0: "YYYY-MM",
1591
- 1: "YYYY-MM-DD",
1592
- 2: "YYYY-MM-DD HH:mm"
1593
- };
1594
- const activePane2 = getAcitvePane();
1595
- const childRules = coverageArr.filter((coverage) => coverage.fieldType === 4 || coverage.isEdit).map((coverage) => {
1596
- const extraValues = JSON.parse(coverage.extraValues);
1597
- const value = {
1598
- name: fieldTypeMap[coverage.fieldType],
1599
- title: {
1600
- title: coverage.name
1601
- },
1602
- field: coverage.name,
1603
- effect: {
1604
- required: coverage.fieldType === 4 || coverage.isCheck
1605
- },
1606
- config: {
1607
- fieldRatio: "140px"
1608
- }
1609
- };
1610
- if (coverage.fieldType === 3) {
1611
- value.props = {};
1612
- value.props.format = formatMap[extraValues.format];
1613
- }
1614
- if (coverage.fieldType === 1 || coverage.fieldType === 2 || coverage.fieldType === 4) {
1615
- value.props = {};
1616
- value.props.placeholder = "\u8BF7\u8F93\u5165";
1617
- }
1618
- return value;
1619
- });
1620
- if (childRules.length)
1621
- return {
1622
- title: {
1623
- title: "\u660E\u7EC6\u5217\u8868"
1624
- },
1625
- config: {
1626
- tableAdvancedFeatures: ["import", "delete", "copy"],
1627
- childRules
1628
- },
1629
- value: activePane2.tableData
1630
- };
1631
- else
1632
- return void 0;
1633
- }
1634
- function handleTableDataChange(value) {
1635
- getAcitvePane().tableData = value;
1636
- }
1637
- function emitChange() {
1638
- emits("change", {
1639
- index,
1640
- panes: panes.map((pane) => ({
1641
- key: pane.key,
1642
- title: pane.title,
1643
- tempIdSelected: pane.tempSelected.templateCode || pane.tempIdSelected,
1644
- tableData: pane.tableData,
1645
- uploadList: pane.uploadList
1646
- }))
1647
- });
1648
- }
1649
- function initValue(value) {
1650
- index = props.value.index;
1651
- panes.splice(0, panes.length);
1652
- value.panes.forEach((pane, index2) => {
1653
- pane.tempSelected = {};
1654
- if (index2 === 0) {
1655
- activeKey.value = pane.key;
1656
- }
1657
- panes.push(pane);
1658
- });
1659
- handTabChange();
1660
- }
1661
- function handTabChange() {
1662
- const activePane2 = getAcitvePane();
1663
- if (activePane2.tempIdSelected) {
1664
- handleSelect(activePane2.tempIdSelected).then(() => {
1665
- delete activePane2.tempIdSelected;
1666
- });
1667
- }
1668
- }
1669
- props.value && initValue(props.value);
1670
- props.extraConfig.getDict().then((data) => {
1671
- measrueDicts.value = data;
1672
- });
1673
- watch(
1674
- () => panes,
1675
- () => {
1676
- emitChange();
1677
- },
1678
- {
1679
- immediate: true,
1680
- deep: true
1681
- }
1682
- );
1683
- return (_ctx, _cache) => {
1684
- return openBlock(), createElementBlock(Fragment, null, [
1685
- createVNode(unref(Tabs), {
1686
- activeKey: activeKey.value,
1687
- "onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => activeKey.value = $event),
1688
- class: "bm-fc-material-temp",
1689
- type: "editable-card",
1690
- "hide-add": "",
1691
- size: "small",
1692
- onEdit: handleDelete,
1693
- onChange: handTabChange
1694
- }, {
1695
- rightExtra: withCtx(() => [
1696
- createElementVNode("span", {
1697
- class: "bm-fc-material-temp__add",
1698
- onClick: handleAdd
1699
- }, [
1700
- createVNode(unref(PlusOutlined))
1701
- ])
1702
- ]),
1703
- default: withCtx(() => [
1704
- (openBlock(true), createElementBlock(Fragment, null, renderList(panes, (pane) => {
1705
- return openBlock(), createBlock(unref(TabPane), {
1706
- key: pane.key,
1707
- tab: pane.title
1708
- }, {
1709
- default: withCtx(() => [
1710
- createVNode(unref(FormItemRest), null, {
1711
- default: withCtx(() => [
1712
- createVNode(unref(Row), { gutter: [0, 24] }, {
1713
- default: withCtx(() => [
1714
- createVNode(unref(Col), { span: 8 }, {
1715
- default: withCtx(() => [
1716
- createVNode(unref(Row), null, {
1717
- default: withCtx(() => [
1718
- createVNode(unref(Col), null, {
1719
- default: withCtx(() => [
1720
- _hoisted_1$1
1721
- ]),
1722
- _: 1
1723
- }),
1724
- createVNode(unref(Col), { flex: 1 }, {
1725
- default: withCtx(() => [
1726
- pane.tempSelected.templateName ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
1727
- createTextVNode(toDisplayString(pane.tempSelected.templateName) + " ", 1),
1728
- createVNode(unref(Button), {
1729
- type: "link",
1730
- onClick: selectTemp
1731
- }, {
1732
- default: withCtx(() => [
1733
- _hoisted_3$1
1734
- ]),
1735
- _: 1
1736
- })
1737
- ])) : (openBlock(), createBlock(unref(Button), {
1738
- key: 1,
1739
- onClick: selectTemp
1740
- }, {
1741
- default: withCtx(() => [
1742
- createVNode(unref(PlusOutlined)),
1743
- _hoisted_4
1744
- ]),
1745
- _: 1
1746
- }))
1747
- ]),
1748
- _: 2
1749
- }, 1024)
1750
- ]),
1751
- _: 2
1752
- }, 1024)
1753
- ]),
1754
- _: 2
1755
- }, 1024),
1756
- createVNode(unref(Col), { span: 8 }, {
1757
- default: withCtx(() => [
1758
- createVNode(unref(Row), null, {
1759
- default: withCtx(() => [
1760
- createVNode(unref(Col), null, {
1761
- default: withCtx(() => [
1762
- _hoisted_5
1763
- ]),
1764
- _: 1
1765
- }),
1766
- createVNode(unref(Col), {
1767
- class: "bm-fc-form-item",
1768
- flex: 1
1769
- }, {
1770
- default: withCtx(() => [
1771
- createTextVNode(toDisplayString(pane.tempSelected.materialCategoryNameShow || "\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA"), 1)
1772
- ]),
1773
- _: 2
1774
- }, 1024)
1775
- ]),
1776
- _: 2
1777
- }, 1024)
1778
- ]),
1779
- _: 2
1780
- }, 1024),
1781
- createVNode(unref(Col), { span: 8 }, {
1782
- default: withCtx(() => [
1783
- createVNode(unref(Row), null, {
1784
- default: withCtx(() => [
1785
- createVNode(unref(Col), null, {
1786
- default: withCtx(() => [
1787
- _hoisted_6
1788
- ]),
1789
- _: 1
1790
- }),
1791
- createVNode(unref(Col), {
1792
- class: "bm-fc-form-item",
1793
- flex: 1
1794
- }, {
1795
- default: withCtx(() => [
1796
- createTextVNode(toDisplayString(measrueDicts.value.find(
1797
- (dict) => dict.dictId + "" === pane.tempSelected.measure + ""
1798
- )?.dictName || "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"), 1)
1799
- ]),
1800
- _: 2
1801
- }, 1024)
1802
- ]),
1803
- _: 2
1804
- }, 1024)
1805
- ]),
1806
- _: 2
1807
- }, 1024),
1808
- createVNode(unref(Col), { span: 8 }, {
1809
- default: withCtx(() => [
1810
- createVNode(unref(Row), null, {
1811
- default: withCtx(() => [
1812
- createVNode(unref(Col), null, {
1813
- default: withCtx(() => [
1814
- _hoisted_7
1815
- ]),
1816
- _: 1
1817
- }),
1818
- createVNode(unref(Col), {
1819
- class: "bm-fc-form-item",
1820
- flex: 1
1821
- }, {
1822
- default: withCtx(() => [
1823
- pane.tempSelected.coverPlanPath ? (openBlock(), createElementBlock("img", {
1824
- key: 0,
1825
- class: "bm-fc-form-item__cover",
1826
- src: pane.tempSelected.coverPlanPath
1827
- }, null, 8, _hoisted_8)) : (openBlock(), createElementBlock("span", _hoisted_9, "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"))
1828
- ]),
1829
- _: 2
1830
- }, 1024)
1831
- ]),
1832
- _: 2
1833
- }, 1024)
1834
- ]),
1835
- _: 2
1836
- }, 1024),
1837
- createVNode(unref(Col), { span: 8 }, {
1838
- default: withCtx(() => [
1839
- createVNode(unref(Row), null, {
1840
- default: withCtx(() => [
1841
- createVNode(unref(Col), null, {
1842
- default: withCtx(() => [
1843
- _hoisted_10
1844
- ]),
1845
- _: 1
1846
- }),
1847
- createVNode(unref(Col), {
1848
- class: "bm-fc-form-item",
1849
- flex: 1
1850
- }, {
1851
- default: withCtx(() => [
1852
- pane.tempSelected.content ? (openBlock(), createBlock(TempContent, {
1853
- key: 0,
1854
- class: "bm-fc-form-item__temp-content",
1855
- content: pane.tempSelected.content
1856
- }, null, 8, ["content"])) : (openBlock(), createElementBlock("span", _hoisted_11, "\u7CFB\u7EDF\u81EA\u52A8\u83B7\u53D6"))
1857
- ]),
1858
- _: 2
1859
- }, 1024)
1860
- ]),
1861
- _: 2
1862
- }, 1024)
1863
- ]),
1864
- _: 2
1865
- }, 1024),
1866
- !__props.uploadPictureRule.hidden ? (openBlock(), createBlock(unref(Col), {
1867
- key: 0,
1868
- span: 24
1869
- }, {
1870
- default: withCtx(() => [
1871
- createVNode(unref(Row), null, {
1872
- default: withCtx(() => [
1873
- createVNode(unref(Col), null, {
1874
- default: withCtx(() => [
1875
- createElementVNode("span", {
1876
- class: normalizeClass(["bm-fc-form-item-label", { "is-required": __props.uploadPictureRule.required }])
1877
- }, "\u4E0A\u4F20\u53C2\u8003\u56FE\uFF1A", 2)
1878
- ]),
1879
- _: 1
1880
- }),
1881
- createVNode(unref(Col), {
1882
- class: "bm-fc-form-item",
1883
- flex: 1
1884
- }, {
1885
- default: withCtx(() => [
1886
- createVNode(unref(Picture), {
1887
- "upload-props": {
1888
- listType: "picture-card",
1889
- text: "\u4E0A\u4F20\u56FE\u7247",
1890
- multiple: true
1891
- },
1892
- "extra-props": {
1893
- maxCount: 9
1894
- },
1895
- "upload-request": __props.extraConfig.uploadRequest,
1896
- "default-list": pane.uploadList,
1897
- onUpdate: handleUpload
1898
- }, null, 8, ["upload-request", "default-list"])
1899
- ]),
1900
- _: 2
1901
- }, 1024)
1902
- ]),
1903
- _: 2
1904
- }, 1024)
1905
- ]),
1906
- _: 2
1907
- }, 1024)) : createCommentVNode("v-if", true)
1908
- ]),
1909
- _: 2
1910
- }, 1024),
1911
- pane.tableRule ? (openBlock(), createBlock(TableWidget, {
1912
- key: 0,
1913
- rule: pane.tableRule,
1914
- onChange: handleTableDataChange
1915
- }, null, 8, ["rule"])) : createCommentVNode("v-if", true)
1916
- ]),
1917
- _: 2
1918
- }, 1024)
1919
- ]),
1920
- _: 2
1921
- }, 1032, ["tab"]);
1922
- }), 128))
1923
- ]),
1924
- _: 1
1925
- }, 8, ["activeKey"]),
1926
- createVNode(SelectMaterialTemp, {
1927
- visible: visible.value,
1928
- "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => visible.value = $event),
1929
- "fetch-material-type": __props.extraConfig.fetchMaterialType,
1930
- "fetch-material-temp": __props.extraConfig.fetchMaterialTemp,
1931
- onSelect: handleSelect
1932
- }, null, 8, ["visible", "fetch-material-type", "fetch-material-temp"])
1933
- ], 64);
1934
- };
1935
- }
1936
- });
1937
- var MaterialTemp = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__file", "material-temp.vue"]]);
1938
-
1939
- var materialTemp = {
1940
- name: 'materialTemp',
1941
- rule(data, extraConfig) {
1942
- return {
1943
- native: true,
1944
- type: 'div',
1945
- children: [
1946
- {
1947
- native: true,
1948
- type: 'div',
1949
- children: ['素材信息'],
1950
- class: 'bm-fc-head-line',
1951
- },
1952
- {
1953
- type: 'MaterialTemp',
1954
- component: MaterialTemp,
1955
- field: data.field,
1956
- props: {
1957
- uploadPictureRule: data.config.uploadPictureRule,
1958
- extraConfig: extraConfig.materialTemp,
1959
- value: data.value,
1960
- },
1961
- inject: true,
1962
- on: {
1963
- change(inject, value) {
1964
- inject.self.value = value;
1965
- },
1966
- },
1967
- },
1968
- ],
1969
- class: 'bm-fc-module-widget',
1970
- };
1971
- },
1972
- };
1973
-
1974
- const _hoisted_1 = { class: "bm-fc-form-item-label" };
1975
- const _hoisted_2 = ["src"];
1976
- const _hoisted_3 = /* @__PURE__ */ createTextVNode("\u7CFB\u7EDF\u81EA\u52A8\u5E26\u51FA");
1977
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1978
- __name: "product-info",
1979
- props: [
1980
- "associatedFields",
1981
- "dataFiltering",
1982
- "required",
1983
- "extraConfig",
1984
- "defalutValue"
1985
- ],
1986
- emits: ["change"],
1987
- setup(__props, { emit: emits }) {
1988
- const props = __props;
1989
- const productInfo = ref({});
1990
- const productInfoKeyMap = {
1991
- \u5546\u54C1\u540D\u79F0: "productName",
1992
- \u5546\u54C1\u7B80\u79F0: "productShortName",
1993
- \u5546\u54C1\u56FE\u7247: "picUrl",
1994
- \u5EFA\u8BAE\u96F6\u552E\u4EF7: "retailPrice",
1995
- \u5546\u54C1\u7BB1\u89C4: "carton",
1996
- \u5546\u54C1\u5355\u4F4D: "unit"
1997
- };
1998
- const unitMap = ["\u652F", "\u74F6", "\u5957", "\u7EC4", "\u7BB1", "\u4E2A", "\u5F20"];
1999
- async function fetch(value) {
2000
- productInfo.value = await props.extraConfig.fetch({
2001
- productCode: value,
2002
- filterByShopcode: props.dataFiltering
2003
- }) || {};
2004
- }
2005
- function handleBlur(evt) {
2006
- const value = evt.target.value;
2007
- emitChange(value);
2008
- fetch(value);
2009
- }
2010
- function getValue(value) {
2011
- return productInfo.value[productInfoKeyMap[value]];
2012
- }
2013
- function emitChange(value) {
2014
- emits("change", value);
2015
- }
2016
- watch(
2017
- () => props.defalutValue,
2018
- (val) => {
2019
- val && fetch(val);
2020
- },
2021
- {
2022
- immediate: true
2023
- }
2024
- );
2025
- return (_ctx, _cache) => {
2026
- return openBlock(), createBlock(unref(Row), { gutter: [0, 24] }, {
2027
- default: withCtx(() => [
2028
- createVNode(unref(Col), { span: 8 }, {
2029
- default: withCtx(() => [
2030
- createVNode(unref(Row), null, {
2031
- default: withCtx(() => [
2032
- createVNode(unref(Col), null, {
2033
- default: withCtx(() => [
2034
- createElementVNode("span", {
2035
- class: normalizeClass([
2036
- "bm-fc-form-item-label",
2037
- props.required ? "is-required" : ""
2038
- ])
2039
- }, "\u5546\u54C1\u7F16\u53F7\uFF1A", 2)
2040
- ]),
2041
- _: 1
2042
- }),
2043
- createVNode(unref(Col), { flex: 1 }, {
2044
- default: withCtx(() => [
2045
- createVNode(unref(Input), {
2046
- placeholder: "\u8BF7\u8F93\u5165",
2047
- value: __props.defalutValue,
2048
- onBlur: handleBlur
2049
- }, null, 8, ["value"])
2050
- ]),
2051
- _: 1
2052
- })
2053
- ]),
2054
- _: 1
2055
- })
2056
- ]),
2057
- _: 1
2058
- }),
2059
- (openBlock(true), createElementBlock(Fragment, null, renderList(__props.associatedFields, (field) => {
2060
- return openBlock(), createBlock(unref(Col), {
2061
- key: field.key,
2062
- span: 8
2063
- }, {
2064
- default: withCtx(() => [
2065
- createVNode(unref(Row), null, {
2066
- default: withCtx(() => [
2067
- createVNode(unref(Col), null, {
2068
- default: withCtx(() => [
2069
- createElementVNode("span", _hoisted_1, toDisplayString(field.label) + "\uFF1A", 1)
2070
- ]),
2071
- _: 2
2072
- }, 1024),
2073
- createVNode(unref(Col), {
2074
- class: "bm-fc-form-item",
2075
- flex: 1
2076
- }, {
2077
- default: withCtx(() => [
2078
- getValue(field.value) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2079
- field.value === "\u5546\u54C1\u56FE\u7247" ? (openBlock(), createElementBlock("img", {
2080
- key: 0,
2081
- src: getValue(field.value)
2082
- }, null, 8, _hoisted_2)) : field.value === "\u5546\u54C1\u5355\u4F4D" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
2083
- createTextVNode(toDisplayString(unitMap[getValue(field.value)]), 1)
2084
- ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
2085
- createTextVNode(toDisplayString(getValue(field.value)), 1)
2086
- ], 64))
2087
- ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
2088
- _hoisted_3
2089
- ], 64))
2090
- ]),
2091
- _: 2
2092
- }, 1024)
2093
- ]),
2094
- _: 2
2095
- }, 1024)
2096
- ]),
2097
- _: 2
2098
- }, 1024);
2099
- }), 128))
2100
- ]),
2101
- _: 1
2102
- });
2103
- };
2104
- }
2105
- });
2106
- var ProductInfo = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__file", "product-info.vue"]]);
2107
-
2108
- var product = {
2109
- name: 'product',
2110
- rule(data, extraConfig) {
2111
- return {
2112
- type: 'ProductInfo',
2113
- component: ProductInfo,
2114
- field: data.field,
2115
- effect: {
2116
- required: data.effect.required && '请输入商品编号',
2117
- },
2118
- props: {
2119
- required: data.effect.required,
2120
- associatedFields: data.config.associatedFields,
2121
- dataFiltering: data.config.dataFiltering,
2122
- extraConfig: extraConfig.product,
2123
- defalutValue: data.value,
2124
- },
2125
- inject: true,
2126
- on: {
2127
- change(inject, value) {
2128
- inject.self.value = value;
2129
- nextTick(() => {
2130
- inject.api.validateField(inject.self.field);
2131
- });
2132
- },
2133
- },
2134
- };
2135
- },
2136
- rowRule(data) {
2137
- return {
2138
- type: 'ProductInfo',
2139
- component: ProductInfo,
2140
- field: data.field,
2141
- effect: {
2142
- required: data.effect.required && '请输入商品编号',
2143
- },
2144
- props: {
2145
- required: data.effect.required,
2146
- associatedFields: data.config.associatedFields,
2147
- dataFiltering: data.config.dataFiltering,
2148
- defalutValue: data.value,
2149
- },
2150
- inject: true,
2151
- on: {
2152
- change(inject, value) {
2153
- inject.self.value = value;
2154
- },
2155
- },
2156
- };
2157
- },
2158
- };
2159
-
2160
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2161
- __name: "shop-widget",
2162
- props: ["value", "extraConfig", "rule"],
2163
- emits: ["change"],
2164
- setup(__props, { emit: emits }) {
2165
- const props = __props;
2166
- const options = ref([]);
2167
- const keyword = ref("");
2168
- const debounceFetch = debounce((value) => {
2169
- props.extraConfig.fetch(postData.value).then((data) => {
2170
- if (value === keyword.value)
2171
- options.value = data;
2172
- });
2173
- }, 300);
2174
- const postData = computed(() => ({
2175
- keyword: keyword.value,
2176
- filterByUser: props.rule.config.dataFiltering
2177
- }));
2178
- function initOptions() {
2179
- props.extraConfig.fetch(postData.value).then((data) => {
2180
- options.value = data;
2181
- });
2182
- }
2183
- function handleChange(value, option) {
2184
- emits("change", option);
2185
- }
2186
- function handleSearch(value) {
2187
- keyword.value = value;
2188
- debounceFetch(value);
2189
- }
2190
- initOptions();
2191
- return (_ctx, _cache) => {
2192
- return openBlock(), createBlock(unref(Select), {
2193
- value: __props.value,
2194
- placeholder: "\u8BF7\u9009\u62E9",
2195
- "show-search": "",
2196
- "show-arrow": false,
2197
- "default-active-first-option": false,
2198
- "filter-option": false,
2199
- "not-found-content": null,
2200
- options: options.value,
2201
- onChange: handleChange,
2202
- onSearch: handleSearch
2203
- }, null, 8, ["value", "options"]);
2204
- };
2205
- }
2206
- });
2207
- var ShopWidget = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__file", "shop-widget.vue"]]);
2208
-
2209
- var shop = {
2210
- name: 'shop',
2211
- rule(data, extraConfig) {
2212
- const shopExtraConfig = extraConfig.shop;
2213
- return {
2214
- type: 'ShopWidget',
2215
- component: ShopWidget,
2216
- title: data.title.title,
2217
- field: data.field,
2218
- effect: {
2219
- required: data.effect.required && '请选择店铺',
2220
- },
2221
- props: {
2222
- rule: data,
2223
- extraConfig: shopExtraConfig,
2224
- value: data.value,
2225
- },
2226
- inject: true,
2227
- on: {
2228
- change(inject, value) {
2229
- const rule = inject.self;
2230
- rule.value = value;
2231
- nextTick(() => {
2232
- setTimeout(() => {
2233
- inject.api.validateField(rule.field);
2234
- });
2235
- });
2236
- },
2237
- },
2238
- value: data.value,
2239
- };
2240
- },
2241
- rowRule(data, extraConfig) {
2242
- const shopExtraConfig = extraConfig.shop;
2243
- return {
2244
- type: 'ShopWidget',
2245
- component: ShopWidget,
2246
- title: data.title.title,
2247
- field: data.field,
2248
- effect: {
2249
- required: data.effect.required && '请选择店铺',
2250
- },
2251
- props: {
2252
- rule: data,
2253
- extraConfig: shopExtraConfig,
2254
- value: data.value,
2255
- },
2256
- inject: true,
2257
- on: {
2258
- change(inject, value) {
2259
- const rule = inject.self;
2260
- rule.value = value;
2261
- nextTick(() => {
2262
- setTimeout(() => {
2263
- inject.api.validateField(rule.field);
2264
- });
2265
- });
2266
- },
2267
- },
2268
- col: {
2269
- span: 12,
2270
- },
2271
- value: data.value,
2272
- };
2273
- },
2274
- tableRule(data, extraConfig) {
2275
- const field = data.field;
2276
- return {
2277
- field,
2278
- title: data.title.title,
2279
- headerClassName: data.effect.required ? 'is-required' : '',
2280
- width: '138px',
2281
- slots: {
2282
- default({ row }) {
2283
- return h(ShopWidget, {
2284
- rule: data,
2285
- extraConfig: extraConfig.shop,
2286
- value: row[field],
2287
- onChange: (value) => {
2288
- row[field] = value;
2289
- },
2290
- });
2291
- },
2292
- },
2293
- };
2294
- },
2295
- };
2296
-
2297
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2298
- __name: "material-type-in-table",
2299
- props: ["config", "multiple", "format", "value"],
2300
- emits: ["change"],
2301
- setup(__props, { emit: emits }) {
2302
- const props = __props;
2303
- const options = ref([]);
2304
- function initOptions() {
2305
- props.config.fetch({ level: 1, relationCode: "" }).then((result) => {
2306
- result.forEach((item) => {
2307
- item.isLeaf = props.format === 1;
2308
- });
2309
- options.value = result;
2310
- });
2311
- }
2312
- function loadData(selectedOptions) {
2313
- const optionLength = selectedOptions.length;
2314
- const targetOption = selectedOptions[optionLength - 1];
2315
- targetOption.loading = true;
2316
- props.config.fetch({
2317
- level: optionLength + 1,
2318
- relationCode: targetOption.value
2319
- }).then((result) => {
2320
- result.forEach((item) => {
2321
- item.isLeaf = props.format === optionLength + 1;
2322
- });
2323
- targetOption.children = result;
2324
- }).finally(() => {
2325
- targetOption.loading = false;
2326
- });
2327
- }
2328
- function handleChange(v) {
2329
- emits("change", v);
2330
- }
2331
- initOptions();
2332
- return (_ctx, _cache) => {
2333
- return openBlock(), createBlock(unref(Cascader), {
2334
- value: __props.value,
2335
- placeholder: "\u8BF7\u8F93\u5165",
2336
- multiple: __props.multiple,
2337
- options: options.value,
2338
- "load-data": loadData,
2339
- "onUpdate:value": handleChange
2340
- }, null, 8, ["value", "multiple", "options"]);
2341
- };
2342
- }
2343
- });
2344
- var materialTypeInTable = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "material-type-in-table.vue"]]);
2345
-
2346
- FC.register({
2347
- name: 'materialTypesOption',
2348
- init({ value }, rule) {
2349
- getOption(value, { level: 1, relationCode: '' }).then((data) => {
2350
- data = isLeaf(data, rule.config.format === 1);
2351
- if (rule.props) {
2352
- rule.props.options = data;
2353
- }
2354
- else {
2355
- (rule.props = {}).options = data;
2356
- }
2357
- });
2358
- },
2359
- });
2360
- function getOption(config, data) {
2361
- return config.fetch(data);
2362
- }
2363
- function isLeaf(data, value) {
2364
- data.forEach((item) => {
2365
- item.isLeaf = value;
2366
- });
2367
- return data;
2368
- }
2369
- var materialType = {
2370
- name: 'materialType',
2371
- rule(data, extraConfig) {
2372
- return {
2373
- type: 'cascader',
2374
- field: data.field,
2375
- title: '素材类型',
2376
- validate: [
2377
- {
2378
- required: data.effect.required,
2379
- type: 'array',
2380
- min: 1,
2381
- message: '请选择素材类型',
2382
- },
2383
- ],
2384
- props: {
2385
- placeholder: '请选择',
2386
- multiple: data.props.multiple,
2387
- loadData(inject, selectedOptions) {
2388
- const optionLength = selectedOptions.length;
2389
- const targetOption = selectedOptions[optionLength - 1];
2390
- targetOption.loading = true;
2391
- getOption(extraConfig.materialType, {
2392
- level: optionLength + 1,
2393
- relationCode: targetOption.value,
2394
- })
2395
- .then((result) => {
2396
- result = isLeaf(result, inject.self.config.format === optionLength + 1);
2397
- targetOption.children = result;
2398
- })
2399
- .finally(() => {
2400
- targetOption.loading = false;
2401
- });
2402
- },
2403
- },
2404
- config: {
2405
- format: data.config.format,
2406
- },
2407
- effect: {
2408
- materialTypesOption: extraConfig.materialType,
2409
- },
2410
- inject: true,
2411
- on: {
2412
- change(inject, list) {
2413
- const rule = inject.self;
2414
- rule.value = list;
2415
- nextTick(() => {
2416
- inject.api.validateField(rule.field);
2417
- });
2418
- },
2419
- },
2420
- value: data.value,
2421
- };
2422
- },
2423
- rowRule(data, extraConfig) {
2424
- return {
2425
- type: 'cascader',
2426
- field: data.field,
2427
- title: '素材类型',
2428
- validate: [
2429
- {
2430
- required: data.effect.required,
2431
- type: 'array',
2432
- min: 1,
2433
- message: '请选择素材类型',
2434
- },
2435
- ],
2436
- props: {
2437
- placeholder: '请选择',
2438
- multiple: data.props.multiple,
2439
- loadData(inject, selectedOptions) {
2440
- const optionLength = selectedOptions.length;
2441
- const targetOption = selectedOptions[optionLength - 1];
2442
- targetOption.loading = true;
2443
- getOption(extraConfig.materialType, optionLength + 1)
2444
- .then((result) => {
2445
- result = isLeaf(result, inject.self.config.format === optionLength + 1);
2446
- targetOption.children = result;
2447
- })
2448
- .finally(() => {
2449
- targetOption.loading = false;
2450
- });
2451
- },
2452
- },
2453
- config: {
2454
- format: data.config.format,
2455
- },
2456
- effect: {
2457
- materialTypesOption: extraConfig.materialType,
2458
- },
2459
- inject: true,
2460
- on: {
2461
- change(inject, list) {
2462
- const rule = inject.self;
2463
- rule.value = list;
2464
- nextTick(() => {
2465
- inject.api.validateField(rule.field);
2466
- });
2467
- },
2468
- },
2469
- col: {
2470
- span: 12,
2471
- },
2472
- value: data.value,
2473
- };
2474
- },
2475
- tableRule(data, extraConfig) {
2476
- const field = data.field;
2477
- return {
2478
- field,
2479
- title: '素材类型',
2480
- headerClassName: data.effect.required ? 'is-required' : '',
2481
- width: '138px',
2482
- slots: {
2483
- default({ row }) {
2484
- return h(materialTypeInTable, {
2485
- multiple: data.props.multiple,
2486
- format: data.config.format,
2487
- config: extraConfig.materialType,
2488
- onChange: (value) => {
2489
- row[field] = value;
2490
- },
2491
- value: row[field],
2492
- });
2493
- },
2494
- },
2495
- };
2496
- },
2497
- };
2498
-
2499
- var row = {
2500
- name: 'row',
2501
- rule(data) {
2502
- const children = [
2503
- {
2504
- type: 'row',
2505
- props: {
2506
- gutter: [0, 24],
2507
- },
2508
- children: [],
2509
- class: 'bm-fc-row-widget',
2510
- },
2511
- ];
2512
- if (data.config.showTitle) {
2513
- children.unshift({
2514
- native: true,
2515
- type: 'div',
2516
- children: [data.config.title],
2517
- class: 'bm-fc-head-line',
2518
- });
2519
- }
2520
- return {
2521
- native: true,
2522
- type: 'div',
2523
- field: data.field,
2524
- children,
2525
- class: 'bm-fc-module-widget',
2526
- };
2527
- },
2528
- };
2529
-
2530
- var department = {
2531
- name: 'department',
2532
- rule(data, extraConfig) {
2533
- return {
2534
- type: 'StaffSelector',
2535
- component: StaffSelector,
2536
- field: data.field,
2537
- title: data.title.title,
2538
- props: {
2539
- title: '添加部门',
2540
- mode: data.props.limit ? 'radio' : 'multiple',
2541
- placeholder: data.props.placeholder,
2542
- immediateFetch: true,
2543
- unitStr: '个',
2544
- defaultSelected: data.value,
2545
- load() {
2546
- return __awaiter(this, void 0, void 0, function* () {
2547
- return yield extraConfig.department.fetch();
2548
- });
2549
- },
2550
- },
2551
- effect: {
2552
- required: data.effect.required && '请选择',
2553
- },
2554
- wrap: {
2555
- wrapperCol: {
2556
- span: fieldRatioMap[data.config.fieldRatio],
2557
- },
2558
- },
2559
- inject: true,
2560
- on: {
2561
- change(inject, list) {
2562
- const rule = inject.self;
2563
- rule.value = list;
2564
- inject.api.validateField(rule.field, () => {
2565
- if (list.length) {
2566
- inject.api.clearValidateState(rule.field);
2567
- }
2568
- });
2569
- },
2570
- },
2571
- };
2572
- },
2573
- rowRule(data, extraConfig) {
2574
- return {
2575
- type: 'StaffSelector',
2576
- component: StaffSelector,
2577
- field: data.field,
2578
- title: data.title.title,
2579
- props: {
2580
- title: '添加部门',
2581
- mode: data.props.limit ? 'radio' : 'multiple',
2582
- placeholder: data.props.placeholder,
2583
- immediateFetch: true,
2584
- unitStr: '个',
2585
- defaultSelected: data.value,
2586
- load() {
2587
- return __awaiter(this, void 0, void 0, function* () {
2588
- return yield extraConfig.department.fetch();
2589
- });
2590
- },
2591
- },
2592
- effect: {
2593
- required: data.effect.required && '请选择',
2594
- },
2595
- col: {
2596
- span: fieldRatioMap[data.config.fieldRatio],
2597
- },
2598
- inject: true,
2599
- on: {
2600
- change(inject, list) {
2601
- const rule = inject.self;
2602
- rule.value = list;
2603
- inject.api.validateField(rule.field, () => {
2604
- if (list.length) {
2605
- inject.api.clearValidateState(rule.field);
2606
- }
2607
- });
2608
- },
2609
- },
2610
- };
2611
- },
2612
- tableRule(data, extraConfig) {
2613
- const field = data.field;
2614
- return {
2615
- field,
2616
- title: data.title.title,
2617
- headerClassName: data.effect.required ? 'is-required' : '',
2618
- width: data.config.fieldRatio,
2619
- slots: {
2620
- default({ row }) {
2621
- return h(StaffSelector, Object.assign({ title: '添加部门', mode: data.props.limit ? 'radio' : 'multiple', placeholder: data.props.placeholder, immediateFetch: true, unitStr: '个', onChange: (value) => {
2622
- row[field] = value;
2623
- }, defaultSelected: row[field] }, extraConfig.department));
2624
- },
2625
- },
2626
- };
2627
- },
2628
- };
2629
-
2630
- var table = {
2631
- name: 'table',
2632
- rule(data, extraConfig) {
2633
- return {
2634
- type: 'TableWidget',
2635
- component: TableWidget,
2636
- field: data.field,
2637
- props: {
2638
- rule: data,
2639
- extraConfig,
2640
- },
2641
- inject: true,
2642
- on: {
2643
- change(inject, value) {
2644
- inject.self.value = value;
2645
- },
2646
- },
2647
- };
2648
- },
2649
- rowRule(data, extraConfig) {
2650
- return {
2651
- type: 'TableWidget',
2652
- component: TableWidget,
2653
- field: data.field,
2654
- props: {
2655
- rule: data,
2656
- extraConfig,
2657
- },
2658
- inject: true,
2659
- on: {
2660
- change(inject, value) {
2661
- inject.self.value = value;
2662
- },
2663
- },
2664
- col: {
2665
- span: 24,
2666
- },
2667
- };
2668
- },
2669
- };
2670
-
2671
- var ruleList = {
2672
- [input.name]: input,
2673
- [textarea.name]: textarea,
2674
- [numInput.name]: numInput,
2675
- [radio.name]: radio,
2676
- [checkbox.name]: checkbox,
2677
- [date.name]: date,
2678
- [dateRange.name]: dateRange,
2679
- [instruction.name]: instruction,
2680
- [picture.name]: picture,
2681
- [file.name]: file,
2682
- [people.name]: people,
2683
- [department.name]: department,
2684
- [materialTemp.name]: materialTemp,
2685
- [product.name]: product,
2686
- [shop.name]: shop,
2687
- [materialType.name]: materialType,
2688
- [row.name]: row,
2689
- [table.name]: table,
2690
- };
2691
-
2692
- const _sfc_main = /* @__PURE__ */ defineComponent({
2693
- __name: "form-create",
2694
- props: ["fdRule", "extraConfig", "value"],
2695
- emits: ["update:value"],
2696
- setup(__props, { expose, emit: emits }) {
2697
- const props = __props;
2698
- const option = {
2699
- wrap: {
2700
- labelCol: {
2701
- flex: "0 0 127px"
2702
- },
2703
- wrapperCol: {
2704
- span: 24
2705
- }
2706
- },
2707
- submitBtn: false
2708
- };
2709
- const fApi = ref();
2710
- const rule = ref([]);
2711
- function setRule(fdRule) {
2712
- fdRule = getRuleData(fdRule);
2713
- rule.value = fdRule.map((data) => {
2714
- const childRules = data?.config?.childRules;
2715
- const rule2 = ruleList[data.name].rule(data, props.extraConfig);
2716
- if (data.name === "row" && childRules?.length) {
2717
- const rowRule = rule2.children.find((item) => item.type === "row");
2718
- childRules.forEach((ruleItem) => {
2719
- rowRule.children.push(
2720
- ruleList[ruleItem.name].rowRule(ruleItem, props.extraConfig)
2721
- );
2722
- });
2723
- }
2724
- return rule2;
2725
- });
2726
- }
2727
- function handleValue(value) {
2728
- emits("update:value", value);
2729
- }
2730
- function getRuleData(fdRule) {
2731
- const ruleData = cloneDeep(fdRule);
2732
- ruleData.forEach((rule2) => {
2733
- if (rule2.name === "row") {
2734
- rule2.config.childRules?.forEach((item) => {
2735
- item.value = props.value[item.field];
2736
- });
2737
- }
2738
- rule2.value = props.value[rule2.field];
2739
- });
2740
- return ruleData;
2741
- }
2742
- watch(
2743
- () => props.fdRule,
2744
- (fdRule) => {
2745
- setRule(fdRule);
2746
- },
2747
- {
2748
- immediate: true
2749
- }
2750
- );
2751
- expose({ fApi });
2752
- return (_ctx, _cache) => {
2753
- const _component_formCreate = resolveComponent("formCreate", true);
2754
- return openBlock(), createBlock(_component_formCreate, {
2755
- api: fApi.value,
2756
- "onUpdate:api": _cache[0] || (_cache[0] = ($event) => fApi.value = $event),
2757
- "model-value": __props.value,
2758
- option,
2759
- rule: rule.value,
2760
- "onUpdate:modelValue": handleValue
2761
- }, null, 8, ["api", "model-value", "rule"]);
2762
- };
2763
- }
2764
- });
2765
- var FormCreate = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "form-create.vue"]]);
2766
-
2767
- const BmFormCreate = withInstall(FormCreate);
2768
-
2769
- export { BmFormCreate, BmFormCreate as default };