jky-component-lib 0.0.46 → 0.0.49

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.
@@ -110,8 +110,207 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
110
110
  resetFields: typeof resetFields;
111
111
  clearValidate: typeof clearValidate;
112
112
  getFormInstance: typeof getFormInstance;
113
+ formRef: globalThis.Ref<({
114
+ $: import('vue').ComponentInternalInstance;
115
+ $data: {};
116
+ $props: {
117
+ readonly model?: Record<string, any> | undefined;
118
+ readonly rules?: import('element-plus').FormRules | undefined;
119
+ readonly labelPosition?: "left" | "right" | "top" | undefined;
120
+ readonly requireAsteriskPosition?: "left" | "right" | undefined;
121
+ readonly labelWidth?: string | number | undefined;
122
+ readonly labelSuffix?: string | undefined;
123
+ readonly inline?: boolean | undefined;
124
+ readonly inlineMessage?: boolean | undefined;
125
+ readonly statusIcon?: boolean | undefined;
126
+ readonly showMessage?: boolean | undefined;
127
+ readonly validateOnRuleChange?: boolean | undefined;
128
+ readonly hideRequiredAsterisk?: boolean | undefined;
129
+ readonly scrollToError?: boolean | undefined;
130
+ readonly scrollIntoViewOptions?: (ScrollIntoViewOptions | boolean) | undefined;
131
+ readonly size?: import('element-plus').ComponentSize | undefined;
132
+ readonly disabled?: boolean | undefined;
133
+ readonly onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined | undefined;
134
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
135
+ $attrs: import('vue').Attrs;
136
+ $refs: {
137
+ [x: string]: unknown;
138
+ };
139
+ $slots: Readonly<{
140
+ [name: string]: globalThis.Slot | undefined;
141
+ }>;
142
+ $root: ComponentPublicInstance | null;
143
+ $parent: ComponentPublicInstance | null;
144
+ $host: Element | null;
145
+ $emit: (event: "validate", prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => void;
146
+ $el: any;
147
+ $options: import('vue').ComponentOptionsBase<Readonly<import('element-plus').FormProps> & Readonly<{
148
+ onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
149
+ }>, {
150
+ validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
151
+ validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
152
+ resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
153
+ clearValidate: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
154
+ scrollToField: (prop: import('element-plus').FormItemProp) => void;
155
+ getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
156
+ fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
157
+ setInitialValues: (initModel: Record<string, any>) => void;
158
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
159
+ validate: (prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => void;
160
+ }, string, {
161
+ scrollIntoViewOptions: ScrollIntoViewOptions | boolean;
162
+ labelWidth: string | number;
163
+ labelPosition: "left" | "right" | "top";
164
+ requireAsteriskPosition: "left" | "right";
165
+ labelSuffix: string;
166
+ showMessage: boolean;
167
+ validateOnRuleChange: boolean;
168
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
169
+ beforeCreate?: (() => void) | (() => void)[];
170
+ created?: (() => void) | (() => void)[];
171
+ beforeMount?: (() => void) | (() => void)[];
172
+ mounted?: (() => void) | (() => void)[];
173
+ beforeUpdate?: (() => void) | (() => void)[];
174
+ updated?: (() => void) | (() => void)[];
175
+ activated?: (() => void) | (() => void)[];
176
+ deactivated?: (() => void) | (() => void)[];
177
+ beforeDestroy?: (() => void) | (() => void)[];
178
+ beforeUnmount?: (() => void) | (() => void)[];
179
+ destroyed?: (() => void) | (() => void)[];
180
+ unmounted?: (() => void) | (() => void)[];
181
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
182
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
183
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
184
+ };
185
+ $forceUpdate: () => void;
186
+ $nextTick: typeof import('vue').nextTick;
187
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
188
+ } & Readonly<{
189
+ scrollIntoViewOptions: ScrollIntoViewOptions | boolean;
190
+ labelWidth: string | number;
191
+ labelPosition: "left" | "right" | "top";
192
+ requireAsteriskPosition: "left" | "right";
193
+ labelSuffix: string;
194
+ showMessage: boolean;
195
+ validateOnRuleChange: boolean;
196
+ }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
197
+ onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
198
+ }>, "labelWidth" | "labelPosition" | "showMessage" | "validate" | "clearValidate" | "requireAsteriskPosition" | "labelSuffix" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validateField" | "resetFields" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
199
+ validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
200
+ validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
201
+ resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
202
+ clearValidate: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
203
+ scrollToField: (prop: import('element-plus').FormItemProp) => void;
204
+ getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
205
+ fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
206
+ setInitialValues: (initModel: Record<string, any>) => void;
207
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
208
+ $slots: {
209
+ default?: (props: {}) => any;
210
+ };
211
+ }) | undefined, ({
212
+ $: import('vue').ComponentInternalInstance;
213
+ $data: {};
214
+ $props: {
215
+ readonly model?: Record<string, any> | undefined;
216
+ readonly rules?: import('element-plus').FormRules | undefined;
217
+ readonly labelPosition?: "left" | "right" | "top" | undefined;
218
+ readonly requireAsteriskPosition?: "left" | "right" | undefined;
219
+ readonly labelWidth?: string | number | undefined;
220
+ readonly labelSuffix?: string | undefined;
221
+ readonly inline?: boolean | undefined;
222
+ readonly inlineMessage?: boolean | undefined;
223
+ readonly statusIcon?: boolean | undefined;
224
+ readonly showMessage?: boolean | undefined;
225
+ readonly validateOnRuleChange?: boolean | undefined;
226
+ readonly hideRequiredAsterisk?: boolean | undefined;
227
+ readonly scrollToError?: boolean | undefined;
228
+ readonly scrollIntoViewOptions?: (ScrollIntoViewOptions | boolean) | undefined;
229
+ readonly size?: import('element-plus').ComponentSize | undefined;
230
+ readonly disabled?: boolean | undefined;
231
+ readonly onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined | undefined;
232
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
233
+ $attrs: import('vue').Attrs;
234
+ $refs: {
235
+ [x: string]: unknown;
236
+ };
237
+ $slots: Readonly<{
238
+ [name: string]: globalThis.Slot | undefined;
239
+ }>;
240
+ $root: ComponentPublicInstance | null;
241
+ $parent: ComponentPublicInstance | null;
242
+ $host: Element | null;
243
+ $emit: (event: "validate", prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => void;
244
+ $el: any;
245
+ $options: import('vue').ComponentOptionsBase<Readonly<import('element-plus').FormProps> & Readonly<{
246
+ onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
247
+ }>, {
248
+ validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
249
+ validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
250
+ resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
251
+ clearValidate: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
252
+ scrollToField: (prop: import('element-plus').FormItemProp) => void;
253
+ getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
254
+ fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
255
+ setInitialValues: (initModel: Record<string, any>) => void;
256
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
257
+ validate: (prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => void;
258
+ }, string, {
259
+ scrollIntoViewOptions: ScrollIntoViewOptions | boolean;
260
+ labelWidth: string | number;
261
+ labelPosition: "left" | "right" | "top";
262
+ requireAsteriskPosition: "left" | "right";
263
+ labelSuffix: string;
264
+ showMessage: boolean;
265
+ validateOnRuleChange: boolean;
266
+ }, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
267
+ beforeCreate?: (() => void) | (() => void)[];
268
+ created?: (() => void) | (() => void)[];
269
+ beforeMount?: (() => void) | (() => void)[];
270
+ mounted?: (() => void) | (() => void)[];
271
+ beforeUpdate?: (() => void) | (() => void)[];
272
+ updated?: (() => void) | (() => void)[];
273
+ activated?: (() => void) | (() => void)[];
274
+ deactivated?: (() => void) | (() => void)[];
275
+ beforeDestroy?: (() => void) | (() => void)[];
276
+ beforeUnmount?: (() => void) | (() => void)[];
277
+ destroyed?: (() => void) | (() => void)[];
278
+ unmounted?: (() => void) | (() => void)[];
279
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
280
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
281
+ errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[];
282
+ };
283
+ $forceUpdate: () => void;
284
+ $nextTick: typeof import('vue').nextTick;
285
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
286
+ } & Readonly<{
287
+ scrollIntoViewOptions: ScrollIntoViewOptions | boolean;
288
+ labelWidth: string | number;
289
+ labelPosition: "left" | "right" | "top";
290
+ requireAsteriskPosition: "left" | "right";
291
+ labelSuffix: string;
292
+ showMessage: boolean;
293
+ validateOnRuleChange: boolean;
294
+ }> & Omit<Readonly<import('element-plus').FormProps> & Readonly<{
295
+ onValidate?: ((prop: import('element-plus').FormItemProp, isValid: boolean, message: string) => any) | undefined;
296
+ }>, "labelWidth" | "labelPosition" | "showMessage" | "validate" | "clearValidate" | "requireAsteriskPosition" | "labelSuffix" | "validateOnRuleChange" | "scrollIntoViewOptions" | "validateField" | "resetFields" | "scrollToField" | "getField" | "fields" | "setInitialValues"> & import('vue').ShallowUnwrapRef<{
297
+ validate: (callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
298
+ validateField: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>, callback?: import('element-plus').FormValidateCallback) => import('element-plus').FormValidationResult;
299
+ resetFields: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
300
+ clearValidate: (props?: import('element-plus/es/utils').Arrayable<import('element-plus').FormItemProp>) => void;
301
+ scrollToField: (prop: import('element-plus').FormItemProp) => void;
302
+ getField: (prop: import('element-plus').FormItemProp) => import('element-plus').FormItemContext | undefined;
303
+ fields: import('vue').Reactive<import('element-plus').FormItemContext[]>;
304
+ setInitialValues: (initModel: Record<string, any>) => void;
305
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
306
+ $slots: {
307
+ default?: (props: {}) => any;
308
+ };
309
+ }) | undefined>;
113
310
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
114
311
  change: (value: Record<string, any>) => any;
312
+ reset: () => any;
313
+ submit: (data: Record<string, any>) => any;
115
314
  "update:modelValue": (value: Record<string, any>) => any;
116
315
  validate: (result: {
117
316
  valid: boolean;
@@ -119,6 +318,8 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
119
318
  }) => any;
120
319
  }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
121
320
  onChange?: ((value: Record<string, any>) => any) | undefined;
321
+ onReset?: (() => any) | undefined;
322
+ onSubmit?: ((data: Record<string, any>) => any) | undefined;
122
323
  "onUpdate:modelValue"?: ((value: Record<string, any>) => any) | undefined;
123
324
  onValidate?: ((result: {
124
325
  valid: boolean;
@@ -128,11 +329,14 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
128
329
  size: import('element-plus').ComponentSize;
129
330
  labelWidth: string | number;
130
331
  labelPosition: "left" | "right" | "top";
332
+ showFooter: boolean;
131
333
  showTitle: boolean;
132
334
  gutter: number;
133
335
  defaultSpan: number;
134
336
  responsive: boolean;
135
337
  watchDeep: boolean;
338
+ submitText: string;
339
+ cancelText: string;
136
340
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
137
341
  formRef: ({
138
342
  $: import('vue').ComponentInternalInstance;
@@ -47,6 +47,10 @@ const _hoisted_1$2 = {
47
47
  key: 0,
48
48
  class: "jky-form__title mb-4 text-xl font-semibold"
49
49
  };
50
+ const _hoisted_2$2 = {
51
+ key: 1,
52
+ class: "jky-form__footer mt-6 flex justify-end gap-2"
53
+ };
50
54
  const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadValues({}, {
51
55
  name: "JkyForm"
52
56
  }), {
@@ -63,7 +67,14 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
63
67
  readonly: { type: Boolean },
64
68
  disabled: { type: Boolean },
65
69
  watchDeep: { type: Boolean, default: true },
70
+ showFooter: { type: Boolean, default: false },
71
+ submitText: { default: "提交" },
72
+ cancelText: { default: "取消" },
73
+ submitDisabled: { type: Boolean },
74
+ cancelDisabled: { type: Boolean },
66
75
  onValidate: {},
76
+ onSubmit: {},
77
+ onReset: {},
67
78
  model: {},
68
79
  rules: {},
69
80
  labelPosition: { default: "right" },
@@ -83,7 +94,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
83
94
  "modelValue": { required: true, default: () => ({}) },
84
95
  "modelModifiers": {}
85
96
  }),
86
- emits: /* @__PURE__ */ vue.mergeModels(["change", "validate"], ["update:modelValue"]),
97
+ emits: /* @__PURE__ */ vue.mergeModels(["change", "validate", "submit", "reset"], ["update:modelValue"]),
87
98
  setup(__props, { expose: __expose, emit: __emit }) {
88
99
  const props = __props;
89
100
  const emit = __emit;
@@ -120,8 +131,10 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
120
131
  });
121
132
  }
122
133
  function resetFields() {
123
- var _a;
134
+ var _a, _b;
124
135
  (_a = formRef.value) == null ? void 0 : _a.resetFields();
136
+ emit("reset");
137
+ (_b = props.onReset) == null ? void 0 : _b.call(props);
125
138
  }
126
139
  function clearValidate(props2) {
127
140
  var _a;
@@ -130,11 +143,27 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
130
143
  function getFormInstance() {
131
144
  return formRef.value;
132
145
  }
146
+ function handleSubmit() {
147
+ return __async(this, null, function* () {
148
+ var _a, _b;
149
+ try {
150
+ yield (_a = formRef.value) == null ? void 0 : _a.validate();
151
+ emit("submit", __spreadValues({}, modelValue.value));
152
+ (_b = props.onSubmit) == null ? void 0 : _b.call(props, __spreadValues({}, modelValue.value));
153
+ } catch (error) {
154
+ emit("validate", { valid: false, fields: error.fields });
155
+ }
156
+ });
157
+ }
158
+ function handleCancel() {
159
+ resetFields();
160
+ }
133
161
  __expose({
134
162
  validate,
135
163
  resetFields,
136
164
  clearValidate,
137
- getFormInstance
165
+ getFormInstance,
166
+ formRef
138
167
  });
139
168
  return (_ctx, _cache) => {
140
169
  return vue.openBlock(), vue.createElementBlock("div", {
@@ -150,27 +179,41 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
150
179
  size: __props.size
151
180
  }, _ctx.$attrs), {
152
181
  default: vue.withCtx(() => [
153
- vue.createElementVNode("div", {
154
- class: "grid",
155
- style: vue.normalizeStyle({
156
- gridTemplateColumns: "repeat(12, minmax(0, 1fr))",
157
- gap: `${__props.gutter}px`
158
- })
159
- }, [
160
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
161
- return vue.openBlock(), vue.createBlock(FormItem_vue_vue_type_script_setup_true_lang.default, {
162
- key: item.field,
163
- field: item.field,
164
- config: item,
165
- model: modelValue.value,
166
- readonly: __props.readonly,
167
- disabled: __props.disabled
168
- }, null, 8, ["field", "config", "model", "readonly", "disabled"]);
169
- }), 128))
170
- ], 4)
182
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
183
+ return vue.openBlock(), vue.createBlock(FormItem_vue_vue_type_script_setup_true_lang.default, {
184
+ key: item.field,
185
+ field: item.field,
186
+ config: item,
187
+ model: modelValue.value,
188
+ readonly: __props.readonly,
189
+ disabled: __props.disabled
190
+ }, null, 8, ["field", "config", "model", "readonly", "disabled"]);
191
+ }), 128))
171
192
  ]),
172
193
  _: 1
173
- }, 16, ["model", "label-width", "label-position", "size"])
194
+ }, 16, ["model", "label-width", "label-position", "size"]),
195
+ props.showFooter ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
196
+ vue.createVNode(vue.unref(ElementPlus.ElButton), {
197
+ disabled: __props.cancelDisabled || __props.disabled,
198
+ onClick: handleCancel
199
+ }, {
200
+ default: vue.withCtx(() => [
201
+ vue.createTextVNode(vue.toDisplayString(__props.cancelText), 1)
202
+ ]),
203
+ _: 1
204
+ }, 8, ["disabled"]),
205
+ vue.createVNode(vue.unref(ElementPlus.ElButton), {
206
+ type: "primary",
207
+ disabled: __props.submitDisabled || __props.disabled,
208
+ loading: false,
209
+ onClick: handleSubmit
210
+ }, {
211
+ default: vue.withCtx(() => [
212
+ vue.createTextVNode(vue.toDisplayString(__props.submitText), 1)
213
+ ]),
214
+ _: 1
215
+ }, 8, ["disabled"])
216
+ ])) : vue.createCommentVNode("", true)
174
217
  ], 2);
175
218
  };
176
219
  }
@@ -18,22 +18,35 @@ var __spreadValues = (a, b) => {
18
18
  return a;
19
19
  };
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
21
33
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
22
34
  const vue = require("vue");
23
35
  const ElementPlus = require("element-plus");
24
36
  const _hoisted_1$3 = {
25
37
  key: 0,
26
- class: "jky-form-item__title mb-2 text-base font-medium"
38
+ style: { "display": "none" }
27
39
  };
28
- const _hoisted_2$2 = {
40
+ const _hoisted_2$3 = { class: "jky-form-item__title text-base font-medium" };
41
+ const _hoisted_3$2 = {
29
42
  key: 0,
30
43
  class: "flex items-center"
31
44
  };
32
- const _hoisted_3$2 = {
45
+ const _hoisted_4$2 = {
33
46
  key: 0,
34
47
  class: "mr-2"
35
48
  };
36
- const _hoisted_4$2 = {
49
+ const _hoisted_5$2 = {
37
50
  key: 1,
38
51
  class: "ml-2"
39
52
  };
@@ -79,7 +92,8 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
79
92
  });
80
93
  const modelValue = vue.computed({
81
94
  get: () => props.model[props.field],
82
- set: (_val) => {
95
+ set: (val) => {
96
+ props.model[props.field] = val;
83
97
  }
84
98
  });
85
99
  const isHidden = vue.computed(() => {
@@ -92,20 +106,71 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
92
106
  }
93
107
  return props.config.hidden || false;
94
108
  });
95
- const spanClass = vue.computed(() => {
96
- const span = props.config.span || 12;
97
- return `col-span-${span}`;
109
+ const formItemProps = vue.computed(() => {
110
+ const config = props.config;
111
+ const _a = config, {
112
+ field,
113
+ type,
114
+ title,
115
+ placeholder,
116
+ componentProps: componentProps2,
117
+ hidden,
118
+ className,
119
+ customStyle,
120
+ children,
121
+ render,
122
+ prepend,
123
+ append,
124
+ prefixIcon,
125
+ suffixIcon,
126
+ clearable,
127
+ filterable,
128
+ multiple,
129
+ options,
130
+ formatValue,
131
+ formatModel,
132
+ noLabelMargin,
133
+ titleRender
134
+ } = _a, rest = __objRest(_a, [
135
+ "field",
136
+ "type",
137
+ "title",
138
+ "placeholder",
139
+ "componentProps",
140
+ "hidden",
141
+ "className",
142
+ "customStyle",
143
+ "children",
144
+ "render",
145
+ "prepend",
146
+ "append",
147
+ "prefixIcon",
148
+ "suffixIcon",
149
+ "clearable",
150
+ "filterable",
151
+ "multiple",
152
+ "options",
153
+ "formatValue",
154
+ "formatModel",
155
+ "noLabelMargin",
156
+ "titleRender"
157
+ ]);
158
+ return rest;
98
159
  });
99
160
  function renderComponent(type) {
100
161
  var _a, _b, _c;
101
162
  const commonProps = __spreadValues({
102
163
  "modelValue": modelValue.value,
103
- "onUpdate:modelValue": (_val) => {
164
+ "onUpdate:modelValue": (val) => {
165
+ props.model[props.field] = val;
104
166
  },
105
167
  "placeholder": props.config.placeholder,
106
- "disabled": props.disabled || props.config.disabled || props.readonly,
168
+ "disabled": props.disabled,
107
169
  "clearable": (_a = props.config.clearable) != null ? _a : true
108
170
  }, componentProps.value);
171
+ const inputNumberProps = type === "input-number" ? __spreadProps(__spreadValues({}, commonProps), {
172
+ modelValue: commonProps.modelValue === "" ? null : commonProps.modelValue
173
+ }) : commonProps;
109
174
  switch (type) {
110
175
  case "input":
111
176
  return vue.h(ElementPlus.ElInput, __spreadProps(__spreadValues({}, commonProps), {
@@ -158,7 +223,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
158
223
  default: () => options.map(
159
224
  (option) => vue.h(ElementPlus.ElRadio, {
160
225
  key: option.value,
161
- label: option.value,
226
+ value: option.value,
162
227
  disabled: option.disabled
163
228
  }, {
164
229
  default: () => option.label
@@ -169,14 +234,17 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
169
234
  }
170
235
  case "checkbox-group": {
171
236
  const options = props.config.options || [];
237
+ const arrayModelValue = Array.isArray(modelValue.value) ? modelValue.value : [];
172
238
  return vue.h(
173
239
  ElementPlus.ElCheckboxGroup,
174
- __spreadValues({}, commonProps),
240
+ __spreadProps(__spreadValues({}, commonProps), {
241
+ modelValue: arrayModelValue
242
+ }),
175
243
  {
176
244
  default: () => options.map(
177
245
  (option) => vue.h(ElementPlus.ElCheckbox, {
178
246
  key: option.value,
179
- label: option.value,
247
+ value: option.value,
180
248
  disabled: option.disabled
181
249
  }, {
182
250
  default: () => option.label
@@ -198,7 +266,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
198
266
  case "rate":
199
267
  return vue.h(ElementPlus.ElRate, __spreadValues({}, commonProps));
200
268
  case "input-number":
201
- return vue.h(ElementPlus.ElInputNumber, __spreadValues({}, commonProps));
269
+ return vue.h(ElementPlus.ElInputNumber, inputNumberProps);
202
270
  case "custom":
203
271
  return (_c = (_b = props.config).render) == null ? void 0 : _c.call(_b, commonProps);
204
272
  default:
@@ -206,37 +274,38 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent(__spreadProps(__spreadVa
206
274
  }
207
275
  }
208
276
  return (_ctx, _cache) => {
209
- var _a, _b, _c, _d, _e;
210
- return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
211
- class: vue.normalizeClass([[
212
- __props.config.className,
213
- spanClass.value,
214
- ((_a = __props.config.responsiveSpan) == null ? void 0 : _a.xs) ? `xs:col-span-${__props.config.responsiveSpan.xs}` : "",
215
- ((_b = __props.config.responsiveSpan) == null ? void 0 : _b.sm) ? `sm:col-span-${__props.config.responsiveSpan.sm}` : "",
216
- ((_c = __props.config.responsiveSpan) == null ? void 0 : _c.md) ? `md:col-span-${__props.config.responsiveSpan.md}` : "",
217
- ((_d = __props.config.responsiveSpan) == null ? void 0 : _d.lg) ? `lg:col-span-${__props.config.responsiveSpan.lg}` : "",
218
- ((_e = __props.config.responsiveSpan) == null ? void 0 : _e.xl) ? `xl:col-span-${__props.config.responsiveSpan.xl}` : ""
219
- ], "jky-form-item"])
220
- }, [
221
- __props.config.title && !__props.config.label ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, vue.toDisplayString(__props.config.title), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElFormItem), vue.mergeProps({
222
- key: 1,
223
- label: __props.config.label,
224
- prop: __props.field,
225
- rules: __props.config.rules,
226
- required: __props.config.required
227
- }, _ctx.$attrs), {
228
- default: vue.withCtx(() => [
229
- __props.config.prepend || __props.config.append ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
230
- __props.config.prepend ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2, vue.toDisplayString(__props.config.prepend), 1)) : vue.createCommentVNode("", true),
231
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderComponent(__props.config.type || "input")))),
232
- __props.config.append ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, vue.toDisplayString(__props.config.append), 1)) : vue.createCommentVNode("", true)
233
- ])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderComponent(__props.config.type || "input")), { key: 1 }))
277
+ return isHidden.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3)) : __props.config.title && !__props.config.label ? (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElFormItem), vue.mergeProps({
278
+ key: 1,
279
+ prop: __props.field
280
+ }, __spreadValues(__spreadValues({}, formItemProps.value), _ctx.$attrs), {
281
+ class: ["jky-form-item jky-form-item--no-label", [__props.config.useDefaultBorderClass ? "border-l-4 border-solid border-l-(--el-color-primary) bg-(--el-color-primary)/50 pl-1.5" : "", __props.config.className]],
282
+ style: [__props.config.customStyle]
283
+ }), {
284
+ default: vue.withCtx(() => [
285
+ vue.createElementVNode("div", _hoisted_2$3, [
286
+ __props.config.titleRender ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(__props.config.titleRender({ model: modelValue.value, field: __props.field })), { key: 0 })) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
287
+ vue.createTextVNode(vue.toDisplayString(__props.config.title), 1)
288
+ ], 64))
234
289
  ]),
235
- _: 1
236
- }, 16, ["label", "prop", "rules", "required"]))
237
- ], 2)), [
238
- [vue.vShow, !isHidden.value]
239
- ]);
290
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderComponent(__props.config.type || "input"))))
291
+ ]),
292
+ _: 1
293
+ }, 16, ["prop", "class", "style"])) : (vue.openBlock(), vue.createBlock(vue.unref(ElementPlus.ElFormItem), vue.mergeProps({
294
+ key: 2,
295
+ label: __props.config.label,
296
+ prop: __props.field
297
+ }, __spreadValues(__spreadValues({}, formItemProps.value), _ctx.$attrs), {
298
+ class: ["jky-form-item", [__props.config.className]]
299
+ }), {
300
+ default: vue.withCtx(() => [
301
+ __props.config.prepend || __props.config.append ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$2, [
302
+ __props.config.prepend ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, vue.toDisplayString(__props.config.prepend), 1)) : vue.createCommentVNode("", true),
303
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderComponent(__props.config.type || "input")))),
304
+ __props.config.append ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$2, vue.toDisplayString(__props.config.append), 1)) : vue.createCommentVNode("", true)
305
+ ])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(renderComponent(__props.config.type || "input")), { key: 1 }))
306
+ ]),
307
+ _: 1
308
+ }, 16, ["label", "prop", "class"]));
240
309
  };
241
310
  }
242
311
  }));
@@ -1,3 +1,12 @@
1
+ :root {
2
+ /* 表单组件间距 */
3
+ /* --jky-form-item-gap: 12px; */
4
+ --jky-form-item-border-width: 4px;
5
+ --jky-form-item-border-color: var(--el-color-primary);
6
+ --jky-form-item-bg-color: rgba(var(--el-color-primary-rgb), 0.5);
7
+ }
8
+
9
+
1
10
  /* Form 组件样式 */
2
11
  .jky-form {
3
12
  /* 表单容器样式 */
@@ -5,10 +14,20 @@
5
14
  .jky-form__title {
6
15
  /* 表单标题样式 */
7
16
  }
17
+
18
+
8
19
  /* FormItem 组件样式 */
9
20
  .jky-form-item {
10
21
  /* 表单项容器样式 */
11
22
  }
23
+ .jky-form-item--no-label {
24
+ /* 表单项标题样式(无 label 时) */
25
+ /* border-left: var(--jky-form-item-border-width) solid var(--jky-form-item-border-color); */
26
+ /* background-color: var(--jky-form-item-bg-color); */
27
+ /* padding-left: var(--jky-form-item-border-width); */
28
+ }
12
29
  .jky-form-item__title {
13
30
  /* 表单项标题样式(无 label 时) */
14
31
  }
32
+ .jky-form-item__title--no-label {
33
+ }