hy-dispatch-ui-v3 0.1.0

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 (232) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/tailwind.css +1083 -0
  4. package/es/bussiness/index.mjs +2 -0
  5. package/es/bussiness/index.mjs.map +1 -0
  6. package/es/components/appConfirmDialog/appConfirmDialog.vue.mjs +204 -0
  7. package/es/components/appConfirmDialog/appConfirmDialog.vue.mjs.map +1 -0
  8. package/es/components/appConfirmDialog/appConfirmMethod.mjs +73 -0
  9. package/es/components/appConfirmDialog/appConfirmMethod.mjs.map +1 -0
  10. package/es/components/appConfirmDialog/index.mjs +8 -0
  11. package/es/components/appConfirmDialog/index.mjs.map +1 -0
  12. package/es/components/appConfirmDialog/style/appConfirmDialog.scss +5 -0
  13. package/es/components/appDatePicker/appDatePicker.vue.mjs +99 -0
  14. package/es/components/appDatePicker/appDatePicker.vue.mjs.map +1 -0
  15. package/es/components/appDatePicker/index.mjs +7 -0
  16. package/es/components/appDatePicker/index.mjs.map +1 -0
  17. package/es/components/appDatePicker/style/appDatePicker.scss +0 -0
  18. package/es/components/appForm/appForm.vue.mjs +331 -0
  19. package/es/components/appForm/appForm.vue.mjs.map +1 -0
  20. package/es/components/appForm/index.mjs +8 -0
  21. package/es/components/appForm/index.mjs.map +1 -0
  22. package/es/components/appForm/js/index.mjs +87 -0
  23. package/es/components/appForm/js/index.mjs.map +1 -0
  24. package/es/components/appForm/js/useAppForm.mjs +149 -0
  25. package/es/components/appForm/js/useAppForm.mjs.map +1 -0
  26. package/es/components/appForm/style/appForm.scss +16 -0
  27. package/es/components/appOrgCascader/appOrgCascader.vue.mjs +229 -0
  28. package/es/components/appOrgCascader/appOrgCascader.vue.mjs.map +1 -0
  29. package/es/components/appOrgCascader/index.mjs +7 -0
  30. package/es/components/appOrgCascader/index.mjs.map +1 -0
  31. package/es/components/appOrgCascader/style/appOrgCascader.scss +0 -0
  32. package/es/components/appSearch/appSearch.vue.mjs +408 -0
  33. package/es/components/appSearch/appSearch.vue.mjs.map +1 -0
  34. package/es/components/appSearch/index.mjs +8 -0
  35. package/es/components/appSearch/index.mjs.map +1 -0
  36. package/es/components/appSearch/js/index.mjs +114 -0
  37. package/es/components/appSearch/js/index.mjs.map +1 -0
  38. package/es/components/appSearch/js/useAppSearch.mjs +178 -0
  39. package/es/components/appSearch/js/useAppSearch.mjs.map +1 -0
  40. package/es/components/appSearch/style/appSearch.scss +53 -0
  41. package/es/components/appTable/appTable.vue.mjs +578 -0
  42. package/es/components/appTable/appTable.vue.mjs.map +1 -0
  43. package/es/components/appTable/cpns/columnSelect.vue.mjs +414 -0
  44. package/es/components/appTable/cpns/columnSelect.vue.mjs.map +1 -0
  45. package/es/components/appTable/index.mjs +8 -0
  46. package/es/components/appTable/index.mjs.map +1 -0
  47. package/es/components/appTable/js/index.mjs +304 -0
  48. package/es/components/appTable/js/index.mjs.map +1 -0
  49. package/es/components/appTable/js/search.mjs +129 -0
  50. package/es/components/appTable/js/search.mjs.map +1 -0
  51. package/es/components/appTable/js/useAppTable.mjs +63 -0
  52. package/es/components/appTable/js/useAppTable.mjs.map +1 -0
  53. package/es/components/appTable/style/appTable.scss +15 -0
  54. package/es/components/appTooltip/appTooltip.vue.mjs +94 -0
  55. package/es/components/appTooltip/appTooltip.vue.mjs.map +1 -0
  56. package/es/components/appTooltip/index.mjs +7 -0
  57. package/es/components/appTooltip/index.mjs.map +1 -0
  58. package/es/components/appTooltip/style/appTooltip.scss +0 -0
  59. package/es/components/index.mjs +12 -0
  60. package/es/components/index.mjs.map +1 -0
  61. package/es/components/svgIcon/iconBox.vue.mjs +99 -0
  62. package/es/components/svgIcon/iconBox.vue.mjs.map +1 -0
  63. package/es/components/svgIcon/index.mjs +9 -0
  64. package/es/components/svgIcon/index.mjs.map +1 -0
  65. package/es/components/svgIcon/style/iconBox.scss +13 -0
  66. package/es/components/svgIcon/style/svgIcon.scss +12 -0
  67. package/es/components/svgIcon/svgIcon.vue.mjs +47 -0
  68. package/es/components/svgIcon/svgIcon.vue.mjs.map +1 -0
  69. package/es/config/index.mjs +2 -0
  70. package/es/config/index.mjs.map +1 -0
  71. package/es/constants/index.mjs +4 -0
  72. package/es/constants/index.mjs.map +1 -0
  73. package/es/constants/keys.mjs +2 -0
  74. package/es/constants/keys.mjs.map +1 -0
  75. package/es/hooks/index.mjs +5 -0
  76. package/es/hooks/index.mjs.map +1 -0
  77. package/es/hooks/useApi.mjs +10 -0
  78. package/es/hooks/useApi.mjs.map +1 -0
  79. package/es/hooks/useGlobalConfig.mjs +56 -0
  80. package/es/hooks/useGlobalConfig.mjs.map +1 -0
  81. package/es/hooks/useLocale.mjs +34 -0
  82. package/es/hooks/useLocale.mjs.map +1 -0
  83. package/es/hooks/useMixins.mjs +19 -0
  84. package/es/hooks/useMixins.mjs.map +1 -0
  85. package/es/index.mjs +30 -0
  86. package/es/index.mjs.map +1 -0
  87. package/es/locale/en_US.mjs +67 -0
  88. package/es/locale/en_US.mjs.map +1 -0
  89. package/es/locale/index.mjs +3 -0
  90. package/es/locale/index.mjs.map +1 -0
  91. package/es/locale/zh_CN.mjs +67 -0
  92. package/es/locale/zh_CN.mjs.map +1 -0
  93. package/es/make-installer.mjs +29 -0
  94. package/es/make-installer.mjs.map +1 -0
  95. package/es/store/index.mjs +7 -0
  96. package/es/store/index.mjs.map +1 -0
  97. package/es/store/maintain.mjs +90 -0
  98. package/es/store/maintain.mjs.map +1 -0
  99. package/es/style/index.scss +46 -0
  100. package/es/style/tailwind.scss +3 -0
  101. package/es/style/theme.scss +123 -0
  102. package/es/utils/adaptive.mjs +30 -0
  103. package/es/utils/adaptive.mjs.map +1 -0
  104. package/es/utils/bus.mjs +6 -0
  105. package/es/utils/bus.mjs.map +1 -0
  106. package/es/utils/crypto.mjs +21 -0
  107. package/es/utils/crypto.mjs.map +1 -0
  108. package/es/utils/date.mjs +25 -0
  109. package/es/utils/date.mjs.map +1 -0
  110. package/es/utils/handler.mjs +83 -0
  111. package/es/utils/handler.mjs.map +1 -0
  112. package/es/utils/index.mjs +7 -0
  113. package/es/utils/index.mjs.map +1 -0
  114. package/es/utils/is.mjs +19 -0
  115. package/es/utils/is.mjs.map +1 -0
  116. package/es/version.mjs +4 -0
  117. package/es/version.mjs.map +1 -0
  118. package/lib/bussiness/index.js +3 -0
  119. package/lib/bussiness/index.js.map +1 -0
  120. package/lib/components/appConfirmDialog/appConfirmDialog.vue.js +208 -0
  121. package/lib/components/appConfirmDialog/appConfirmDialog.vue.js.map +1 -0
  122. package/lib/components/appConfirmDialog/appConfirmMethod.js +77 -0
  123. package/lib/components/appConfirmDialog/appConfirmMethod.js.map +1 -0
  124. package/lib/components/appConfirmDialog/index.js +13 -0
  125. package/lib/components/appConfirmDialog/index.js.map +1 -0
  126. package/lib/components/appConfirmDialog/style/appConfirmDialog.scss +5 -0
  127. package/lib/components/appDatePicker/appDatePicker.vue.js +103 -0
  128. package/lib/components/appDatePicker/appDatePicker.vue.js.map +1 -0
  129. package/lib/components/appDatePicker/index.js +12 -0
  130. package/lib/components/appDatePicker/index.js.map +1 -0
  131. package/lib/components/appDatePicker/style/appDatePicker.scss +0 -0
  132. package/lib/components/appForm/appForm.vue.js +335 -0
  133. package/lib/components/appForm/appForm.vue.js.map +1 -0
  134. package/lib/components/appForm/index.js +14 -0
  135. package/lib/components/appForm/index.js.map +1 -0
  136. package/lib/components/appForm/js/index.js +93 -0
  137. package/lib/components/appForm/js/index.js.map +1 -0
  138. package/lib/components/appForm/js/useAppForm.js +152 -0
  139. package/lib/components/appForm/js/useAppForm.js.map +1 -0
  140. package/lib/components/appForm/style/appForm.scss +16 -0
  141. package/lib/components/appOrgCascader/appOrgCascader.vue.js +233 -0
  142. package/lib/components/appOrgCascader/appOrgCascader.vue.js.map +1 -0
  143. package/lib/components/appOrgCascader/index.js +12 -0
  144. package/lib/components/appOrgCascader/index.js.map +1 -0
  145. package/lib/components/appOrgCascader/style/appOrgCascader.scss +0 -0
  146. package/lib/components/appSearch/appSearch.vue.js +412 -0
  147. package/lib/components/appSearch/appSearch.vue.js.map +1 -0
  148. package/lib/components/appSearch/index.js +14 -0
  149. package/lib/components/appSearch/index.js.map +1 -0
  150. package/lib/components/appSearch/js/index.js +122 -0
  151. package/lib/components/appSearch/js/index.js.map +1 -0
  152. package/lib/components/appSearch/js/useAppSearch.js +181 -0
  153. package/lib/components/appSearch/js/useAppSearch.js.map +1 -0
  154. package/lib/components/appSearch/style/appSearch.scss +53 -0
  155. package/lib/components/appTable/appTable.vue.js +582 -0
  156. package/lib/components/appTable/appTable.vue.js.map +1 -0
  157. package/lib/components/appTable/cpns/columnSelect.vue.js +418 -0
  158. package/lib/components/appTable/cpns/columnSelect.vue.js.map +1 -0
  159. package/lib/components/appTable/index.js +14 -0
  160. package/lib/components/appTable/index.js.map +1 -0
  161. package/lib/components/appTable/js/index.js +311 -0
  162. package/lib/components/appTable/js/index.js.map +1 -0
  163. package/lib/components/appTable/js/search.js +131 -0
  164. package/lib/components/appTable/js/search.js.map +1 -0
  165. package/lib/components/appTable/js/useAppTable.js +65 -0
  166. package/lib/components/appTable/js/useAppTable.js.map +1 -0
  167. package/lib/components/appTable/style/appTable.scss +15 -0
  168. package/lib/components/appTooltip/appTooltip.vue.js +98 -0
  169. package/lib/components/appTooltip/appTooltip.vue.js.map +1 -0
  170. package/lib/components/appTooltip/index.js +12 -0
  171. package/lib/components/appTooltip/index.js.map +1 -0
  172. package/lib/components/appTooltip/style/appTooltip.scss +0 -0
  173. package/lib/components/index.js +29 -0
  174. package/lib/components/index.js.map +1 -0
  175. package/lib/components/svgIcon/iconBox.vue.js +103 -0
  176. package/lib/components/svgIcon/iconBox.vue.js.map +1 -0
  177. package/lib/components/svgIcon/index.js +15 -0
  178. package/lib/components/svgIcon/index.js.map +1 -0
  179. package/lib/components/svgIcon/style/iconBox.scss +13 -0
  180. package/lib/components/svgIcon/style/svgIcon.scss +12 -0
  181. package/lib/components/svgIcon/svgIcon.vue.js +51 -0
  182. package/lib/components/svgIcon/svgIcon.vue.js.map +1 -0
  183. package/lib/config/index.js +3 -0
  184. package/lib/config/index.js.map +1 -0
  185. package/lib/constants/index.js +6 -0
  186. package/lib/constants/index.js.map +1 -0
  187. package/lib/constants/keys.js +3 -0
  188. package/lib/constants/keys.js.map +1 -0
  189. package/lib/hooks/index.js +21 -0
  190. package/lib/hooks/index.js.map +1 -0
  191. package/lib/hooks/useApi.js +13 -0
  192. package/lib/hooks/useApi.js.map +1 -0
  193. package/lib/hooks/useGlobalConfig.js +59 -0
  194. package/lib/hooks/useGlobalConfig.js.map +1 -0
  195. package/lib/hooks/useLocale.js +41 -0
  196. package/lib/hooks/useLocale.js.map +1 -0
  197. package/lib/hooks/useMixins.js +21 -0
  198. package/lib/hooks/useMixins.js.map +1 -0
  199. package/lib/index.js +85 -0
  200. package/lib/index.js.map +1 -0
  201. package/lib/locale/en_US.js +71 -0
  202. package/lib/locale/en_US.js.map +1 -0
  203. package/lib/locale/index.js +10 -0
  204. package/lib/locale/index.js.map +1 -0
  205. package/lib/locale/zh_CN.js +71 -0
  206. package/lib/locale/zh_CN.js.map +1 -0
  207. package/lib/make-installer.js +33 -0
  208. package/lib/make-installer.js.map +1 -0
  209. package/lib/store/index.js +10 -0
  210. package/lib/store/index.js.map +1 -0
  211. package/lib/store/maintain.js +92 -0
  212. package/lib/store/maintain.js.map +1 -0
  213. package/lib/style/index.scss +46 -0
  214. package/lib/style/tailwind.scss +3 -0
  215. package/lib/style/theme.scss +123 -0
  216. package/lib/utils/adaptive.js +35 -0
  217. package/lib/utils/adaptive.js.map +1 -0
  218. package/lib/utils/bus.js +8 -0
  219. package/lib/utils/bus.js.map +1 -0
  220. package/lib/utils/crypto.js +25 -0
  221. package/lib/utils/crypto.js.map +1 -0
  222. package/lib/utils/date.js +27 -0
  223. package/lib/utils/date.js.map +1 -0
  224. package/lib/utils/handler.js +89 -0
  225. package/lib/utils/handler.js.map +1 -0
  226. package/lib/utils/index.js +38 -0
  227. package/lib/utils/index.js.map +1 -0
  228. package/lib/utils/is.js +32 -0
  229. package/lib/utils/is.js.map +1 -0
  230. package/lib/version.js +6 -0
  231. package/lib/version.js.map +1 -0
  232. package/package.json +102 -0
@@ -0,0 +1,331 @@
1
+ import { defineComponent, useTemplateRef, computed, nextTick, unref, openBlock, createBlock, mergeProps, withCtx, createElementVNode, normalizeStyle, createCommentVNode, createElementBlock, Fragment, renderList, toDisplayString, renderSlot, createVNode, createTextVNode } from 'vue';
2
+ import { ElForm, ElFormItem, ElInput, ElSelect, ElRadioGroup, ElCheckboxGroup, ElPopover } from 'element-plus';
3
+ import { SvgIcon } from '../svgIcon/index.mjs';
4
+ import _sfc_main$1 from '../appDatePicker/appDatePicker.vue.mjs';
5
+ import { columnShowHandler, columnItemStyle, renderText, isDisabled, isRequired } from './js/index.mjs';
6
+ import { resetAppFormValue } from './js/useAppForm.mjs';
7
+ import { useLocale } from '../../hooks/useLocale.mjs';
8
+ import { isArray, isNumber } from '../../utils/is.mjs';
9
+ import { funRunHandler } from '../../utils/handler.mjs';
10
+
11
+ import "./style/appForm.scss";
12
+
13
+ const __default__ = defineComponent({
14
+ name: "AppForm"
15
+ });
16
+ const _sfc_main = /* @__PURE__ */ Object.assign(__default__, {
17
+ props: {
18
+ model: {
19
+ type: Object,
20
+ default: () => ({})
21
+ },
22
+ columns: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ rules: {
27
+ type: Object,
28
+ default: () => ({})
29
+ },
30
+ columnNum: {
31
+ type: Number,
32
+ default: 1
33
+ },
34
+ readonly: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ loading: {
39
+ type: Boolean,
40
+ default: false
41
+ }
42
+ },
43
+ setup(__props, { expose: __expose }) {
44
+ const props = __props;
45
+ const { t } = useLocale();
46
+ const formTemplateRef = useTemplateRef("formTemplateRef");
47
+ const formColumnMap = computed(() => {
48
+ return (props.columns || []).reduce((map, column) => {
49
+ if (isArray(column.field)) {
50
+ column.field.forEach((key) => map.set(key, column));
51
+ } else {
52
+ map.set(column.field, column);
53
+ }
54
+ return map;
55
+ }, /* @__PURE__ */ new Map());
56
+ });
57
+ const containerStyle = computed(() => {
58
+ const columnNum = isNumber(props.columnNum) ? props.columnNum || 1 : 1;
59
+ return {
60
+ gridTemplateColumns: `repeat(${columnNum}, minmax(0, 1fr))`
61
+ };
62
+ });
63
+ __expose({
64
+ validate: async (callback) => {
65
+ await nextTick();
66
+ return unref(formTemplateRef).validate(callback);
67
+ },
68
+ validateField: async (fields) => {
69
+ await nextTick();
70
+ return unref(formTemplateRef).validateField(fields);
71
+ },
72
+ resetFields: (fields) => {
73
+ let columns = props.columns || [];
74
+ if (fields && (fields == null ? void 0 : fields.length)) {
75
+ columns = fields.map((key) => formColumnMap.get(key)).filter(Boolean);
76
+ }
77
+ resetAppFormValue(columns, props.model);
78
+ },
79
+ scrollToField: async (fields) => {
80
+ await nextTick();
81
+ unref(formTemplateRef).scrollToField(fields);
82
+ },
83
+ clearValidate: async (fields) => {
84
+ await nextTick();
85
+ unref(formTemplateRef).clearValidate(fields);
86
+ },
87
+ fields: computed(() => {
88
+ var _a;
89
+ return ((_a = unref(formTemplateRef)) == null ? void 0 : _a.fields) || [];
90
+ }),
91
+ getField: async (fields) => {
92
+ await nextTick();
93
+ return unref(formTemplateRef).getField(fields);
94
+ }
95
+ // setInitialValue: async (value) => {
96
+ // await nextTick()
97
+ // unref(formTemplateRef).setInitialValue(value)
98
+ // }
99
+ });
100
+ return (_ctx, _cache) => {
101
+ return openBlock(), createBlock(unref(ElForm), mergeProps({
102
+ ref_key: "formTemplateRef",
103
+ ref: formTemplateRef,
104
+ model: __props.model,
105
+ rules: __props.rules,
106
+ "label-position": "top"
107
+ }, _ctx.$attrs), {
108
+ default: withCtx(() => [
109
+ createElementVNode(
110
+ "div",
111
+ {
112
+ class: "app-form-container",
113
+ style: normalizeStyle(containerStyle.value)
114
+ },
115
+ [
116
+ createCommentVNode(" \u8868\u5355\u9879 "),
117
+ (openBlock(true), createElementBlock(
118
+ Fragment,
119
+ null,
120
+ renderList(__props.columns, (column, columnIndex) => {
121
+ return openBlock(), createElementBlock(
122
+ Fragment,
123
+ {
124
+ key: column.key
125
+ },
126
+ [
127
+ unref(columnShowHandler)(props, column) ? (openBlock(), createBlock(unref(ElFormItem), {
128
+ key: 0,
129
+ rules: column.rules,
130
+ prop: unref(isArray)(column.field) ? column.field[0] : column.field,
131
+ style: normalizeStyle(unref(columnItemStyle)(props, column))
132
+ }, {
133
+ label: withCtx(() => [
134
+ createElementVNode("div", { class: "flex" }, [
135
+ column.labelSlot && _ctx.$slots[column.labelSlot] ? renderSlot(_ctx.$slots, column.labelSlot, {
136
+ key: 0,
137
+ column
138
+ }) : (openBlock(), createElementBlock(
139
+ "span",
140
+ {
141
+ key: 1,
142
+ class: "text-main"
143
+ },
144
+ toDisplayString(column.label),
145
+ 1
146
+ /* TEXT */
147
+ )),
148
+ unref(isRequired)(props, column) ? (openBlock(), createElementBlock("span", {
149
+ key: 2,
150
+ class: "label-required"
151
+ })) : createCommentVNode("v-if", true),
152
+ column.help ? (openBlock(), createBlock(
153
+ unref(ElPopover),
154
+ {
155
+ key: 3,
156
+ placement: "bottom-start",
157
+ "popper-class": "popover_echarts w-[200px]",
158
+ trigger: "hover"
159
+ },
160
+ {
161
+ reference: withCtx(() => [
162
+ createElementVNode("div", { class: "flex items-center" }, [
163
+ createVNode(unref(SvgIcon), {
164
+ "svg-name": "help",
165
+ "class-name": "!w-3 !h-3 ml-1 svgBox"
166
+ }),
167
+ createTextVNode(
168
+ " " + toDisplayString(unref(t)("hy.help")),
169
+ 1
170
+ /* TEXT */
171
+ )
172
+ ])
173
+ ]),
174
+ default: withCtx(() => [
175
+ createElementVNode(
176
+ "div",
177
+ null,
178
+ toDisplayString(unref(funRunHandler)(column.help)),
179
+ 1
180
+ /* TEXT */
181
+ )
182
+ ]),
183
+ _: 2
184
+ /* DYNAMIC */
185
+ },
186
+ 1024
187
+ /* DYNAMIC_SLOTS */
188
+ )) : createCommentVNode("v-if", true),
189
+ column.rightSlot && _ctx.$slots[column.rightSlot] ? (openBlock(), createElementBlock("div", {
190
+ key: 4,
191
+ class: "ml-auto"
192
+ }, [
193
+ renderSlot(_ctx.$slots, column.rightSlot)
194
+ ])) : createCommentVNode("v-if", true)
195
+ ])
196
+ ]),
197
+ default: withCtx(() => {
198
+ var _a;
199
+ return [
200
+ column.readonly || __props.readonly || !column.type && !column.slot ? (openBlock(), createElementBlock(
201
+ "span",
202
+ { key: 0 },
203
+ toDisplayString(unref(renderText)(props, column, columnIndex)),
204
+ 1
205
+ /* TEXT */
206
+ )) : (openBlock(), createElementBlock(
207
+ Fragment,
208
+ { key: 1 },
209
+ [
210
+ createCommentVNode(" \u81EA\u5B9A\u4E49\u5177\u540D\u63D2\u69FD "),
211
+ column.slot && _ctx.$slots[column.slot] ? renderSlot(_ctx.$slots, column.slot, {
212
+ key: 0,
213
+ column
214
+ }) : column.type === "input" ? (openBlock(), createElementBlock(
215
+ Fragment,
216
+ { key: 1 },
217
+ [
218
+ createCommentVNode(" \u8F93\u5165\u6846 "),
219
+ createVNode(unref(ElInput), mergeProps({
220
+ modelValue: __props.model[column.field],
221
+ "onUpdate:modelValue": ($event) => __props.model[column.field] = $event
222
+ }, { ref_for: true }, column.attrs, {
223
+ disabled: unref(isDisabled)(props, column)
224
+ }), null, 16, ["modelValue", "onUpdate:modelValue", "disabled"])
225
+ ],
226
+ 2112
227
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
228
+ )) : column.type === "select" ? (openBlock(), createElementBlock(
229
+ Fragment,
230
+ { key: 2 },
231
+ [
232
+ createCommentVNode(" \u9009\u62E9\u6846 "),
233
+ createVNode(unref(ElSelect), mergeProps({
234
+ modelValue: __props.model[column.field],
235
+ "onUpdate:modelValue": ($event) => __props.model[column.field] = $event
236
+ }, { ref_for: true }, column.attrs, {
237
+ disabled: unref(isDisabled)(props, column)
238
+ }), null, 16, ["modelValue", "onUpdate:modelValue", "disabled"])
239
+ ],
240
+ 2112
241
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
242
+ )) : column.type === "date-picker" ? (openBlock(), createElementBlock(
243
+ Fragment,
244
+ { key: 3 },
245
+ [
246
+ createCommentVNode(" \u65E5\u671F\u9009\u62E9\u6846 "),
247
+ [
248
+ "datetimerange",
249
+ "daterange",
250
+ "monthrange",
251
+ "yearrange"
252
+ ].includes((_a = column.attrs) == null ? void 0 : _a.type) && unref(isArray)(column.field) ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
253
+ key: 0,
254
+ start: __props.model[column.field[0]],
255
+ "onUpdate:start": ($event) => __props.model[column.field[0]] = $event,
256
+ end: __props.model[column.field[1]],
257
+ "onUpdate:end": ($event) => __props.model[column.field[1]] = $event,
258
+ "is-range": true,
259
+ style: { "width": "100%" }
260
+ }, { ref_for: true }, column.attrs, {
261
+ disabled: unref(isDisabled)(props, column)
262
+ }), null, 16, ["start", "onUpdate:start", "end", "onUpdate:end", "disabled"])) : (openBlock(), createBlock(_sfc_main$1, mergeProps({
263
+ key: 1,
264
+ modelValue: __props.model[column.field],
265
+ "onUpdate:modelValue": ($event) => __props.model[column.field] = $event,
266
+ "is-range": false,
267
+ style: { "width": "100%" }
268
+ }, { ref_for: true }, column.attrs, {
269
+ disabled: unref(isDisabled)(props, column)
270
+ }), null, 16, ["modelValue", "onUpdate:modelValue", "disabled"]))
271
+ ],
272
+ 64
273
+ /* STABLE_FRAGMENT */
274
+ )) : column.type === "radio" ? (openBlock(), createElementBlock(
275
+ Fragment,
276
+ { key: 4 },
277
+ [
278
+ createCommentVNode(" \u5355\u9009 "),
279
+ createVNode(unref(ElRadioGroup), mergeProps({
280
+ modelValue: __props.model[column.field],
281
+ "onUpdate:modelValue": ($event) => __props.model[column.field] = $event,
282
+ disabled: unref(isDisabled)(props, column)
283
+ }, { ref_for: true }, column.attrs), null, 16, ["modelValue", "onUpdate:modelValue", "disabled"])
284
+ ],
285
+ 2112
286
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
287
+ )) : column.type === "checkbox" ? (openBlock(), createElementBlock(
288
+ Fragment,
289
+ { key: 5 },
290
+ [
291
+ createCommentVNode(" \u591A\u9009 "),
292
+ createVNode(unref(ElCheckboxGroup), mergeProps({
293
+ modelValue: __props.model[column.field],
294
+ "onUpdate:modelValue": ($event) => __props.model[column.field] = $event,
295
+ disabled: unref(isDisabled)(props, column)
296
+ }, { ref_for: true }, column.attrs), null, 16, ["modelValue", "onUpdate:modelValue", "disabled"])
297
+ ],
298
+ 2112
299
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
300
+ )) : createCommentVNode("v-if", true)
301
+ ],
302
+ 64
303
+ /* STABLE_FRAGMENT */
304
+ ))
305
+ ];
306
+ }),
307
+ _: 2
308
+ /* DYNAMIC */
309
+ }, 1032, ["rules", "prop", "style"])) : createCommentVNode("v-if", true)
310
+ ],
311
+ 64
312
+ /* STABLE_FRAGMENT */
313
+ );
314
+ }),
315
+ 128
316
+ /* KEYED_FRAGMENT */
317
+ ))
318
+ ],
319
+ 4
320
+ /* STYLE */
321
+ )
322
+ ]),
323
+ _: 3
324
+ /* FORWARDED */
325
+ }, 16, ["model", "rules"]);
326
+ };
327
+ }
328
+ });
329
+
330
+ export { _sfc_main as default };
331
+ //# sourceMappingURL=appForm.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appForm.vue.mjs","sources":["../../../packages/components/appForm/appForm.vue"],"sourcesContent":["<script setup>\nimport { computed, unref, useTemplateRef, nextTick } from 'vue'\nimport {\n ElForm,\n ElFormItem,\n ElInput,\n ElSelect,\n ElRadioGroup,\n ElCheckboxGroup,\n ElPopover,\n} from 'element-plus'\nimport SvgIcon from '../svgIcon'\nimport { useLocale } from '@hy-dispatch-ui-v3/hooks'\nimport { isNumber, isArray, funRunHandler } from '@hy-dispatch-ui-v3/utils'\nimport appDatePicker from '../appDatePicker/appDatePicker.vue'\nimport {\n columnItemStyle,\n columnShowHandler,\n isDisabled,\n isRequired,\n renderText,\n} from './js/index.js'\nimport { resetAppFormValue } from './js/useAppForm.js'\nimport './style/appForm.scss'\n\ndefineOptions({\n name: 'AppForm',\n})\n\nconst props = defineProps({\n model: {\n type: Object,\n default: () => ({}),\n },\n columns: {\n type: Array,\n default: () => [],\n },\n rules: {\n type: Object,\n default: () => ({}),\n },\n columnNum: {\n type: Number,\n default: 1,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n})\n\nconst { t } = useLocale()\nconst formTemplateRef = useTemplateRef('formTemplateRef')\nconst formColumnMap = computed(() => {\n return (props.columns || []).reduce((map, column) => {\n if (isArray(column.field)) {\n column.field.forEach((key) => map.set(key, column))\n } else {\n map.set(column.field, column)\n }\n return map\n }, new Map())\n})\nconst containerStyle = computed(() => {\n const columnNum = isNumber(props.columnNum) ? props.columnNum || 1 : 1\n return {\n gridTemplateColumns: `repeat(${columnNum}, minmax(0, 1fr))`,\n }\n})\n\ndefineExpose({\n validate: async (callback) => {\n await nextTick()\n return unref(formTemplateRef).validate(callback)\n },\n validateField: async (fields) => {\n await nextTick()\n return unref(formTemplateRef).validateField(fields)\n },\n resetFields: (fields) => {\n let columns = props.columns || []\n if (fields && fields?.length) {\n columns = fields.map((key) => formColumnMap.get(key)).filter(Boolean)\n }\n resetAppFormValue(columns, props.model)\n },\n scrollToField: async (fields) => {\n await nextTick()\n unref(formTemplateRef).scrollToField(fields)\n },\n clearValidate: async (fields) => {\n await nextTick()\n unref(formTemplateRef).clearValidate(fields)\n },\n fields: computed(() => {\n return unref(formTemplateRef)?.fields || []\n }),\n getField: async (fields) => {\n await nextTick()\n return unref(formTemplateRef).getField(fields)\n },\n // setInitialValue: async (value) => {\n // await nextTick()\n // unref(formTemplateRef).setInitialValue(value)\n // }\n})\n</script>\n\n<template>\n <el-form\n ref=\"formTemplateRef\"\n :model=\"model\"\n :rules=\"rules\"\n label-position=\"top\"\n v-bind=\"$attrs\"\n >\n <div class=\"app-form-container\" :style=\"containerStyle\">\n <!-- 表单项 -->\n <template v-for=\"(column, columnIndex) in columns\" :key=\"column.key\">\n <el-form-item\n v-if=\"columnShowHandler(props, column)\"\n :rules=\"column.rules\"\n :prop=\"isArray(column.field) ? column.field[0] : column.field\"\n :style=\"columnItemStyle(props, column)\"\n >\n <!-- 表单项label -->\n <template #label>\n <div class=\"flex\">\n <slot\n v-if=\"column.labelSlot && $slots[column.labelSlot]\"\n :name=\"column.labelSlot\"\n :column=\"column\"\n ></slot>\n <span v-else class=\"text-main\">{{ column.label }}</span>\n <span\n v-if=\"isRequired(props, column)\"\n class=\"label-required\"\n ></span>\n <el-popover\n v-if=\"column.help\"\n placement=\"bottom-start\"\n popper-class=\"popover_echarts w-[200px]\"\n trigger=\"hover\"\n >\n <div>\n {{ funRunHandler(column.help) }}\n </div>\n <template #reference>\n <div class=\"flex items-center\">\n <svg-icon\n svg-name=\"help\"\n class-name=\"!w-3 !h-3 ml-1 svgBox\"\n />\n {{ t('hy.help') }}\n </div>\n </template>\n </el-popover>\n <div\n v-if=\"column.rightSlot && $slots[column.rightSlot]\"\n class=\"ml-auto\"\n >\n <slot :name=\"column.rightSlot\"></slot>\n </div>\n </div>\n </template>\n <!-- 表单组件 -->\n <template\n v-if=\"column.readonly || readonly || (!column.type && !column.slot)\"\n >\n <span>{{ renderText(props, column, columnIndex) }}</span>\n </template>\n <template v-else>\n <!-- 自定义具名插槽 -->\n <slot v-if=\"column.slot && $slots[column.slot]\" :name=\"column.slot\" :column=\"column\" />\n <!-- 输入框 -->\n <el-input\n v-else-if=\"column.type === 'input'\"\n v-model=\"model[column.field]\"\n v-bind=\"column.attrs\"\n :disabled=\"isDisabled(props, column)\"\n ></el-input>\n <!-- 选择框 -->\n <el-select\n v-else-if=\"column.type === 'select'\"\n v-model=\"model[column.field]\"\n v-bind=\"column.attrs\"\n :disabled=\"isDisabled(props, column)\"\n ></el-select>\n <!-- 日期选择框 -->\n <template v-else-if=\"column.type === 'date-picker'\">\n <app-date-picker\n v-if=\"\n [\n 'datetimerange',\n 'daterange',\n 'monthrange',\n 'yearrange',\n ].includes(column.attrs?.type) && isArray(column.field)\n \"\n v-model:start=\"model[column.field[0]]\"\n v-model:end=\"model[column.field[1]]\"\n :is-range=\"true\"\n style=\"width: 100%\"\n v-bind=\"column.attrs\"\n :disabled=\"isDisabled(props, column)\"\n ></app-date-picker>\n <app-date-picker\n v-else\n v-model=\"model[column.field]\"\n :is-range=\"false\"\n style=\"width: 100%\"\n v-bind=\"column.attrs\"\n :disabled=\"isDisabled(props, column)\"\n ></app-date-picker>\n </template>\n <!-- 单选 -->\n <el-radio-group\n v-else-if=\"column.type === 'radio'\"\n v-model=\"model[column.field]\"\n :disabled=\"isDisabled(props, column)\"\n v-bind=\"column.attrs\"\n ></el-radio-group>\n <!-- 多选 -->\n <el-checkbox-group\n v-else-if=\"column.type === 'checkbox'\"\n v-model=\"model[column.field]\"\n :disabled=\"isDisabled(props, column)\"\n v-bind=\"column.attrs\"\n ></el-checkbox-group>\n </template>\n </el-form-item>\n </template>\n </div>\n </el-form>\n</template>\n"],"names":["_openBlock","_createBlock","_unref","_mergeProps"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import _sfc_main from './appForm.vue.mjs';
2
+ export { useAppForm } from './js/useAppForm.mjs';
3
+ import { withInstall } from '../../utils/handler.mjs';
4
+
5
+ const AppForm = withInstall(_sfc_main);
6
+
7
+ export { AppForm, AppForm as default };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../packages/components/appForm/index.js"],"sourcesContent":["import componnet from './appForm.vue'\nimport { withInstall } from '@hy-dispatch-ui-v3/utils'\n\nconst AppForm = withInstall(componnet)\n\nexport { AppForm }\n\nexport { useAppForm } from './js/useAppForm.js'\n\nexport default AppForm\n"],"names":["componnet"],"mappings":";;;;AAEK,MAAC,OAAO,GAAG,WAAW,CAACA,SAAS;;;;"}
@@ -0,0 +1,87 @@
1
+ import { unref } from 'vue';
2
+ import { isBoolean, isFunction, isNumber, isArray, isObject } from '../../../utils/is.mjs';
3
+ import { funRunHandler } from '../../../utils/handler.mjs';
4
+
5
+ function columnItemStyle(props, column) {
6
+ const style = {};
7
+ let span = funRunHandler(column.span, column, props.model);
8
+ if (isNumber(span) && span > 1) {
9
+ span = span >= props.columnNum ? props.columnNum : span;
10
+ style["grid-column"] = `span ${span}`;
11
+ }
12
+ return style;
13
+ }
14
+ function columnShowHandler(props, column) {
15
+ const show = unref(column.show);
16
+ if (isBoolean(show)) return show;
17
+ if (isFunction(show)) return show(column, props.model);
18
+ return true;
19
+ }
20
+ function isRequired(props, column) {
21
+ var _a;
22
+ let { readonly, field, rules } = column;
23
+ if (props.readonly || readonly) {
24
+ return false;
25
+ }
26
+ if (Array.isArray(field)) {
27
+ return field.find((key) => isRequired(props, { ...column, field: key }));
28
+ }
29
+ rules = isArray(rules) && (rules == null ? void 0 : rules.length) || isObject(rules) ? rules : (_a = props.rules) == null ? void 0 : _a[field];
30
+ if (isArray(rules)) {
31
+ return rules.some((item) => item.required);
32
+ }
33
+ if (isObject(rules)) {
34
+ return rules == null ? void 0 : rules.required;
35
+ }
36
+ return false;
37
+ }
38
+ function isDisabled(props, column) {
39
+ var _a;
40
+ return !!(props.loading || ((_a = column.attrs) == null ? void 0 : _a.disabled));
41
+ }
42
+ function renderText(props, column = {}, index) {
43
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
44
+ const { type, field, customRender } = column;
45
+ const { fieldNames, options = [] } = column.attrs || {};
46
+ if (customRender && typeof customRender === "function") {
47
+ return customRender({
48
+ column: props.columns[index],
49
+ model: props.model,
50
+ value: props.model[field]
51
+ });
52
+ }
53
+ if (type === "range-picker") {
54
+ const [start, end] = field;
55
+ return ((_a = props.model) == null ? void 0 : _a[start]) ? `${(_b = props.model) == null ? void 0 : _b[start]} ~ ${(_c = props.model) == null ? void 0 : _c[end]}` : "";
56
+ }
57
+ if (type === "location") {
58
+ const [lon, lat] = field;
59
+ return [props.model[lon], props.model[lat]].filter(Boolean).join("\uFF0C");
60
+ }
61
+ if (/^(select|radio|checkbox)$/.test(type)) {
62
+ const target = options.find(
63
+ (item) => {
64
+ var _a2;
65
+ return item[fieldNames.value] === ((_a2 = props.model) == null ? void 0 : _a2[field]);
66
+ }
67
+ );
68
+ return (target == null ? void 0 : target[fieldNames.label]) || ((_d = props.model) == null ? void 0 : _d[field]) || "";
69
+ }
70
+ if (/^dept-select(-all)?$/.test(type)) {
71
+ const dict = /^dept-select$/.test(type) ? deptTreeDict.value : deptTreeAllDict.value;
72
+ return dict[(_e = props.model) == null ? void 0 : _e[field]] || ((_f = props.model) == null ? void 0 : _f[field]) || "";
73
+ }
74
+ if (type === "area-select") {
75
+ return areaTreeDict.value[(_g = props.model) == null ? void 0 : _g[field]] || ((_h = props.model) == null ? void 0 : _h[field]) || "";
76
+ }
77
+ if (Array.isArray(field)) {
78
+ return field.map((key) => {
79
+ var _a2;
80
+ return ((_a2 = props.model) == null ? void 0 : _a2[key]) || "";
81
+ }).filter(Boolean).join(" - ");
82
+ }
83
+ return ((_i = props.model) == null ? void 0 : _i[field]) || ((_j = props.model) == null ? void 0 : _j[field]) || "";
84
+ }
85
+
86
+ export { columnItemStyle, columnShowHandler, isDisabled, isRequired, renderText };
87
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../packages/components/appForm/js/index.js"],"sourcesContent":["import { unref } from 'vue'\nimport {\n isArray,\n isBoolean,\n isFunction,\n isNumber,\n isObject,\n funRunHandler,\n} from '@hy-dispatch-ui-v3/utils'\n\n// 列样式\nexport function columnItemStyle(props, column) {\n const style = {}\n let span = funRunHandler(column.span, column, props.model)\n if (isNumber(span) && span > 1) {\n span = span >= props.columnNum ? props.columnNum : span\n style['grid-column'] = `span ${span}`\n }\n return style\n}\n\nexport function columnShowHandler(props, column) {\n const show = unref(column.show)\n if (isBoolean(show)) return show\n if (isFunction(show)) return show(column, props.model)\n return true\n}\n\n// 是否必填\nexport function isRequired(props, column) {\n let { readonly, field, rules } = column\n if (props.readonly || readonly) {\n return false\n }\n if (Array.isArray(field)) {\n return field.find((key) => isRequired(props, { ...column, field: key }))\n }\n rules =\n (isArray(rules) && rules?.length) || isObject(rules)\n ? rules\n : props.rules?.[field]\n if (isArray(rules)) {\n return rules.some((item) => item.required)\n }\n if (isObject(rules)) {\n return rules?.required\n }\n return false\n}\n\n// 是否禁用\nexport function isDisabled(props, column) {\n return !!(props.loading || column.attrs?.disabled)\n}\n\n// 渲染文本\nexport function renderText(props, column = {}, index) {\n const { type, field, customRender } = column\n const { fieldNames, options = [] } = column.attrs || {}\n if (customRender && typeof customRender === 'function') {\n return customRender({\n column: props.columns[index],\n model: props.model,\n value: props.model[field],\n })\n }\n if (type === 'range-picker') {\n const [start, end] = field\n return props.model?.[start]\n ? `${props.model?.[start]} ~ ${props.model?.[end]}`\n : ''\n }\n if (type === 'location') {\n const [lon, lat] = field\n return [props.model[lon], props.model[lat]].filter(Boolean).join(',')\n }\n if (/^(select|radio|checkbox)$/.test(type)) {\n const target = options.find(\n (item) => item[fieldNames.value] === props.model?.[field]\n )\n return target?.[fieldNames.label] || props.model?.[field] || ''\n }\n if (/^dept-select(-all)?$/.test(type)) {\n const dict = /^dept-select$/.test(type)\n ? deptTreeDict.value\n : deptTreeAllDict.value\n return dict[props.model?.[field]] || props.model?.[field] || ''\n }\n if (type === 'area-select') {\n return (\n areaTreeDict.value[props.model?.[field]] || props.model?.[field] || ''\n )\n }\n if (Array.isArray(field)) {\n return field\n .map((key) => props.model?.[key] || '')\n .filter(Boolean)\n .join(' - ')\n }\n return props.model?.[field] || props.model?.[field] || ''\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import { unref, toRef } from 'vue';
2
+ import { funRunHandler, mergeDeep } from '../../../utils/handler.mjs';
3
+ import { getDefaultValueFormatByType } from '../../../utils/date.mjs';
4
+ import { useLocale } from '../../../hooks/useLocale.mjs';
5
+ import { isArray } from '../../../utils/is.mjs';
6
+
7
+ const genPlaceholderHandler = (config) => {
8
+ const { t } = useLocale();
9
+ const { type, label, attrs = {} } = config || {};
10
+ let placeholder = attrs.placeholder, startPlaceholder = attrs.startPlaceholder, endPlaceholder = attrs.endPlaceholder;
11
+ switch (type) {
12
+ case "input":
13
+ placeholder = placeholder || t("hy.pleaseEnterPlaceholder", [label]);
14
+ case "select":
15
+ placeholder = placeholder || t("hy.pleaseSelectPlaceholder", [label]);
16
+ case "date-picker":
17
+ if (["datetimerange", "daterange", "monthrange", "yearrange"].includes(
18
+ attrs == null ? void 0 : attrs.type
19
+ )) {
20
+ switch (attrs.type) {
21
+ case "yearrange":
22
+ startPlaceholder = startPlaceholder || t("hy.startYear");
23
+ endPlaceholder = endPlaceholder || t("hy.endYear");
24
+ break;
25
+ case "monthrange":
26
+ startPlaceholder = startPlaceholder || t("hy.startMonth");
27
+ endPlaceholder = endPlaceholder || t("hy.endMonth");
28
+ break;
29
+ case "daterange":
30
+ startPlaceholder = startPlaceholder || t("hy.startDate");
31
+ endPlaceholder = endPlaceholder || t("hy.endDate");
32
+ break;
33
+ case "datetimerange":
34
+ startPlaceholder = startPlaceholder || t("hy.startDateTime");
35
+ endPlaceholder = endPlaceholder || t("hy.endDateTime");
36
+ break;
37
+ }
38
+ } else {
39
+ placeholder = placeholder || t("hy.pleaseSelectPlaceholder", [label]);
40
+ }
41
+ default:
42
+ placeholder = placeholder || label;
43
+ }
44
+ return { placeholder, startPlaceholder, endPlaceholder };
45
+ };
46
+ const genRuleRequiredMsgHandler = (config) => {
47
+ const { t } = useLocale();
48
+ const { type, prop, label } = config || {};
49
+ if (!prop || !(prop == null ? void 0 : prop.length)) return "";
50
+ switch (type) {
51
+ case "input":
52
+ return t("hy.pleaseEnterPlaceholder", [label]);
53
+ case "select":
54
+ case "radio":
55
+ case "checkbox":
56
+ case "date-picker":
57
+ return t("hy.pleaseSelectPlaceholder", [label]);
58
+ default:
59
+ return t("hy.cannotBeEmpty", [label]);
60
+ }
61
+ };
62
+ const rulesHandler = (config) => {
63
+ let { rules, required } = config || {};
64
+ rules = isArray(rules) ? [...rules] : [required].filter(Boolean);
65
+ if (!rules.some((item) => item.required) && required) {
66
+ rules.unshift({
67
+ required: true,
68
+ message: genRuleRequiredMsgHandler(config),
69
+ trigger: "blur"
70
+ });
71
+ }
72
+ return rules;
73
+ };
74
+ function appFormItemHandler(column = {}) {
75
+ const { placeholder, startPlaceholder, endPlaceholder } = genPlaceholderHandler(column);
76
+ const attrs = { ...column.attrs || {}, placeholder };
77
+ column = mergeDeep(
78
+ { ...column },
79
+ {
80
+ key: /* @__PURE__ */ Symbol("appFormItemKey"),
81
+ field: column.prop,
82
+ readonly: column.readonly || false,
83
+ rules: rulesHandler(column)
84
+ }
85
+ );
86
+ if (/^(input)$/.test(column.type)) {
87
+ return {
88
+ ...column,
89
+ attrs: {
90
+ maxlength: attrs.type === "textarea" ? 255 : attrs.type === "text" ? 100 : void 0,
91
+ ...attrs
92
+ }
93
+ };
94
+ } else if (/^(radio|checkbox|select)$/.test(column.type)) {
95
+ return {
96
+ ...column,
97
+ attrs: {
98
+ ...attrs,
99
+ props: {
100
+ label: "label",
101
+ value: "value",
102
+ disabled: "disabled",
103
+ options: "options",
104
+ ...attrs.props
105
+ }
106
+ }
107
+ };
108
+ } else if (/^date-picker$/.test(column.type)) {
109
+ return {
110
+ ...column,
111
+ attrs: {
112
+ format: attrs.format || getDefaultValueFormatByType(attrs.type),
113
+ valueFormat: attrs.valueFormat || getDefaultValueFormatByType(attrs.type),
114
+ ...attrs,
115
+ startPlaceholder,
116
+ endPlaceholder
117
+ }
118
+ };
119
+ }
120
+ return column;
121
+ }
122
+ const resetAppFormValue = (columns = [], obj = {}) => {
123
+ for (const item of columns) {
124
+ const value = funRunHandler(item.defaultValue);
125
+ if (Array.isArray(item.prop)) {
126
+ for (let i = 0; i < item.prop.length; i++) {
127
+ obj[item.prop[i]] = value && Array.isArray(value) ? value[i] : void 0;
128
+ }
129
+ } else {
130
+ obj[item.prop] = value;
131
+ }
132
+ }
133
+ return obj;
134
+ };
135
+ const useAppForm = (config = [], model) => {
136
+ const columns = [];
137
+ for (const item of unref(config)) {
138
+ const target = appFormItemHandler(item);
139
+ columns.push(target);
140
+ }
141
+ const formModel = resetAppFormValue(columns, model);
142
+ return {
143
+ formModel: toRef(formModel),
144
+ formColumns: toRef(columns)
145
+ };
146
+ };
147
+
148
+ export { resetAppFormValue, useAppForm };
149
+ //# sourceMappingURL=useAppForm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppForm.mjs","sources":["../../../../packages/components/appForm/js/useAppForm.js"],"sourcesContent":["import { toRef, unref } from 'vue'\nimport { useLocale } from '@hy-dispatch-ui-v3/hooks'\nimport {\n isArray,\n funRunHandler,\n mergeDeep,\n getDefaultValueFormatByType,\n} from '@hy-dispatch-ui-v3/utils'\n\n// 生成表单组件占位字符\nconst genPlaceholderHandler = (config) => {\n const { t } = useLocale()\n const { type, label, attrs = {} } = config || {}\n let placeholder = attrs.placeholder,\n startPlaceholder = attrs.startPlaceholder,\n endPlaceholder = attrs.endPlaceholder\n switch (type) {\n case 'input':\n placeholder = placeholder || t('hy.pleaseEnterPlaceholder', [label])\n case 'select':\n placeholder = placeholder || t('hy.pleaseSelectPlaceholder', [label])\n case 'date-picker':\n if (\n ['datetimerange', 'daterange', 'monthrange', 'yearrange'].includes(\n attrs?.type\n )\n ) {\n switch (attrs.type) {\n case 'yearrange':\n startPlaceholder = startPlaceholder || t('hy.startYear')\n endPlaceholder = endPlaceholder || t('hy.endYear')\n break\n case 'monthrange':\n startPlaceholder = startPlaceholder || t('hy.startMonth')\n endPlaceholder = endPlaceholder || t('hy.endMonth')\n break\n case 'daterange':\n startPlaceholder = startPlaceholder || t('hy.startDate')\n endPlaceholder = endPlaceholder || t('hy.endDate')\n break\n case 'datetimerange':\n startPlaceholder = startPlaceholder || t('hy.startDateTime')\n endPlaceholder = endPlaceholder || t('hy.endDateTime')\n break\n }\n } else {\n placeholder = placeholder || t('hy.pleaseSelectPlaceholder', [label])\n }\n default:\n placeholder = placeholder || label\n }\n return { placeholder, startPlaceholder, endPlaceholder }\n}\n\n// 生成表单必填规则消息\nconst genRuleRequiredMsgHandler = (config) => {\n const { t } = useLocale()\n const { type, prop, label } = config || {}\n if (!prop || !prop?.length) return ''\n // 规则校验提示\n switch (type) {\n case 'input':\n return t('hy.pleaseEnterPlaceholder', [label])\n case 'select':\n case 'radio':\n case 'checkbox':\n case 'date-picker':\n return t('hy.pleaseSelectPlaceholder', [label])\n default:\n return t('hy.cannotBeEmpty', [label])\n }\n}\n\nconst rulesHandler = (config) => {\n let { rules, required } = config || {}\n rules = isArray(rules) ? [...rules] : [required].filter(Boolean)\n if (!rules.some((item) => item.required) && required) {\n rules.unshift({\n required: true,\n message: genRuleRequiredMsgHandler(config),\n trigger: 'blur',\n })\n }\n return rules\n}\n\n/**\n * @function 创建表单项\n * @param {\n * prop: string | Array<string>, // 表单prop,在日期选择范围可填入数据\n * label: string, // 表单项label\n * rules: Array<Object>, // 表单项规则\n * readonly: boolean, // 是否只读\n * defaultValue: function | any // 默认值\n * slot: string // 自定义插槽名称\n * type: 'input' | 'select' | 'date-picker' | 'radio' | 'checkbox' // 表单组件类型\n * attrs: any // 表单组件配置\n * } column\n * @returns column\n */\nfunction appFormItemHandler(column = {}) {\n const { placeholder, startPlaceholder, endPlaceholder } =\n genPlaceholderHandler(column)\n const attrs = { ...(column.attrs || {}), placeholder }\n column = mergeDeep(\n { ...column },\n {\n key: Symbol('appFormItemKey'),\n field: column.prop,\n readonly: column.readonly || false,\n rules: rulesHandler(column),\n }\n )\n\n if (/^(input)$/.test(column.type)) {\n return {\n ...column,\n attrs: {\n maxlength:\n attrs.type === 'textarea'\n ? 255\n : attrs.type === 'text'\n ? 100\n : undefined,\n ...attrs,\n },\n }\n } else if (/^(radio|checkbox|select)$/.test(column.type)) {\n return {\n ...column,\n attrs: {\n ...attrs,\n props: {\n label: 'label',\n value: 'value',\n disabled: 'disabled',\n options: 'options',\n ...attrs.props,\n },\n },\n }\n } else if (/^date-picker$/.test(column.type)) {\n return {\n ...column,\n attrs: {\n format: attrs.format || getDefaultValueFormatByType(attrs.type),\n valueFormat:\n attrs.valueFormat || getDefaultValueFormatByType(attrs.type),\n ...attrs,\n startPlaceholder,\n endPlaceholder,\n },\n }\n }\n\n return column\n}\n\n// 重置表单默认值\nexport const resetAppFormValue = (columns = [], obj = {}) => {\n for (const item of columns) {\n const value = funRunHandler(item.defaultValue)\n if (Array.isArray(item.prop)) {\n for (let i = 0; i < item.prop.length; i++) {\n obj[item.prop[i]] = value && Array.isArray(value) ? value[i] : undefined\n }\n } else {\n obj[item.prop] = value\n }\n }\n return obj\n}\n\n// 生成表单配置\nexport const useAppForm = (config = [], model) => {\n const columns = []\n for (const item of unref(config)) {\n const target = appFormItemHandler(item)\n columns.push(target)\n }\n const formModel = resetAppFormValue(columns, model)\n return {\n formModel: toRef(formModel),\n formColumns: toRef(columns),\n }\n}\n"],"names":[],"mappings":"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"}