@fecp/vue 1.1.2 → 1.1.3

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 (24) hide show
  1. package/es/node_modules/.pnpm/@vueuse_shared@10.11.1_vue@3.5.13_typescript@5.7.3_/node_modules/@vueuse/shared/index.mjs +1 -1
  2. package/es/node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/form/src/hooks/use-form-common-props.mjs +1 -1
  3. package/es/node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/input/src/input.vue2.mjs +1 -1
  4. package/es/packages/vue/src/components/forms/form/Form.vue.mjs +117 -80
  5. package/es/packages/vue/src/components/forms/formItem/FormItem.vue.mjs +2 -2
  6. package/es/packages/vue/src/components/forms/text/Text.vue.mjs +2 -2
  7. package/es/packages/vue/src/components/forms/text/index.mjs +2 -2
  8. package/es/packages/vue/src/components/table/Table.vue.mjs +57 -2
  9. package/es/packages/vue/src/components/table/TableColumn.vue.mjs +10 -1
  10. package/es/packages/vue/src/components/table/TableFilter.vue.mjs +267 -0
  11. package/es/packages/vue/src/utils/datasource.mjs +18 -0
  12. package/es/packages/vue/src/utils/eventFlow/actionHandlers.mjs +19 -2
  13. package/es/packages/vue/src/utils/parseRouteParams.mjs +3 -2
  14. package/es/vue.css +125 -27
  15. package/lib/packages/vue/src/components/forms/form/Form.vue.js +116 -79
  16. package/lib/packages/vue/src/components/forms/text/Text.vue.js +2 -2
  17. package/lib/packages/vue/src/components/table/Table.vue.js +57 -2
  18. package/lib/packages/vue/src/components/table/TableColumn.vue.js +10 -1
  19. package/lib/packages/vue/src/components/table/TableFilter.vue.js +267 -0
  20. package/lib/packages/vue/src/utils/datasource.js +18 -0
  21. package/lib/packages/vue/src/utils/eventFlow/actionHandlers.js +19 -2
  22. package/lib/packages/vue/src/utils/parseRouteParams.js +3 -2
  23. package/lib/vue.css +125 -27
  24. package/package.json +1 -1
@@ -29,6 +29,7 @@ const index = require("../../../../../../node_modules/.pnpm/element-plus@2.13.2_
29
29
  const index$3 = require("../../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/form/index.js");
30
30
  const gridLayout_vue = require("../../../../../../node_modules/.pnpm/grid-layout-plus@1.1.1_vue@3.5.13_typescript@5.7.3_/node_modules/grid-layout-plus/es/components/grid-layout.vue.js");
31
31
  const index$5 = require("../../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/message/index.js");
32
+ const _hoisted_1 = ["name", "value"];
32
33
  const _sfc_main = /* @__PURE__ */ Object.assign({
33
34
  inheritAttrs: false
34
35
  }, {
@@ -59,6 +60,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
59
60
  const dataSourceOptions = vue.ref({});
60
61
  const dictionaryOptions = vue.ref({});
61
62
  const fieldsData = vue.ref({});
63
+ const hiddenFields = vue.ref({});
62
64
  const pageEvents = usePageEvents.usePageEvents(() => ({
63
65
  pageEventConfig: localConfig.value.pageEventConfig,
64
66
  ctx,
@@ -84,6 +86,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
84
86
  );
85
87
  localConfig.value = option;
86
88
  fieldsData.value = option.fieldsData.map((item) => item.component);
89
+ hiddenFields.value = option.hiddenFields || [];
87
90
  initFormData();
88
91
  await loadFieldDataSources();
89
92
  loadEventFlow();
@@ -120,6 +123,13 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
120
123
  }
121
124
  });
122
125
  }
126
+ if (hiddenFields.value && hiddenFields.value.length > 0) {
127
+ hiddenFields.value.forEach((field) => {
128
+ if (field.fieldName) {
129
+ data[field.fieldName] = field.value !== void 0 ? field.value : null;
130
+ }
131
+ });
132
+ }
123
133
  formData.value = data;
124
134
  formRules.value = rules;
125
135
  };
@@ -228,7 +238,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
228
238
  getEventHandlers: createEventHandlers,
229
239
  handleEvent: createHandleEvent
230
240
  } = eventFlowHandler.useEventFlow({
231
- fields: fieldsData.value,
241
+ fields: [...fieldsData.value, ...hiddenFields.value],
232
242
  ctx,
233
243
  dataSources: localConfig.value.dataSources,
234
244
  components: {
@@ -278,36 +288,52 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
278
288
  };
279
289
  const getFormData = () => {
280
290
  const result = { ...formData.value };
291
+ const processField = (field) => {
292
+ const fieldName = field.fieldName;
293
+ const fieldType = field.fieldType;
294
+ if (fieldName && (fieldType === "checkbox" || fieldType === "multipleSelection")) {
295
+ const value = result[fieldName];
296
+ if (Array.isArray(value)) {
297
+ result[fieldName] = value.join("|");
298
+ }
299
+ }
300
+ };
281
301
  if (localConfig.value.fieldsData) {
282
302
  localConfig.value.fieldsData.forEach(({ component }) => {
283
- const fieldName = component.fieldName;
284
- const fieldType = component.fieldType;
285
- if (fieldName && (fieldType === "checkbox" || fieldType === "multipleSelection")) {
286
- const value = result[fieldName];
287
- if (Array.isArray(value)) {
288
- result[fieldName] = value.join("|");
289
- }
290
- }
303
+ processField(component);
304
+ });
305
+ }
306
+ if (hiddenFields.value && hiddenFields.value.length > 0) {
307
+ hiddenFields.value.forEach((field) => {
308
+ processField(field);
291
309
  });
292
310
  }
293
311
  return result;
294
312
  };
295
313
  const setFormData = (data) => {
296
314
  const processedData = { ...data };
315
+ const processField = (field) => {
316
+ const fieldName = field.fieldName;
317
+ const fieldType = field.fieldType;
318
+ if (fieldName && (fieldType === "checkbox" || fieldType === "multipleSelection")) {
319
+ const value = processedData[fieldName];
320
+ if (typeof value === "string" && value.includes("|")) {
321
+ processedData[fieldName] = value.split("|");
322
+ } else if (typeof value === "string" && value !== "") {
323
+ processedData[fieldName] = [value];
324
+ } else if (value === "" || value === null || value === void 0) {
325
+ processedData[fieldName] = [];
326
+ }
327
+ }
328
+ };
297
329
  if (localConfig.value.fieldsData) {
298
330
  localConfig.value.fieldsData.forEach(({ component }) => {
299
- const fieldName = component.fieldName;
300
- const fieldType = component.fieldType;
301
- if (fieldName && (fieldType === "checkbox" || fieldType === "multipleSelection")) {
302
- const value = processedData[fieldName];
303
- if (typeof value === "string" && value.includes("|")) {
304
- processedData[fieldName] = value.split("|");
305
- } else if (typeof value === "string" && value !== "") {
306
- processedData[fieldName] = [value];
307
- } else if (value === "" || value === null || value === void 0) {
308
- processedData[fieldName] = [];
309
- }
310
- }
331
+ processField(component);
332
+ });
333
+ }
334
+ if (hiddenFields.value && hiddenFields.value.length > 0) {
335
+ hiddenFields.value.forEach((field) => {
336
+ processField(field);
311
337
  });
312
338
  }
313
339
  Object.assign(formData.value, processedData);
@@ -325,64 +351,75 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
325
351
  return (_ctx, _cache) => {
326
352
  const _component_el_form = index$3.ElForm;
327
353
  const _component_el_container = index.ElContainer;
328
- return vue.openBlock(), vue.createBlock(_component_el_container, {
329
- direction: "vertical",
330
- style: { "height": "100%" }
331
- }, {
332
- default: vue.withCtx(() => [
333
- !configLoading.value ? (vue.openBlock(), vue.createBlock(vue.unref(index$1.header), {
334
- key: 0,
335
- pageHeaderConfig: localConfig.value.pageHeaderConfig
336
- }, null, 8, ["pageHeaderConfig"])) : vue.createCommentVNode("", true),
337
- vue.createVNode(vue.unref(index$2.main), null, {
338
- default: vue.withCtx(() => [
339
- vue.createVNode(_component_el_form, {
340
- ref_key: "formRef",
341
- ref: formRef,
342
- model: formData.value,
343
- rules: formRules.value,
344
- "label-position": localConfig.value.labelPosition,
345
- style: { "padding": "18px" },
346
- "validate-on-rule-change": false
347
- }, {
348
- default: vue.withCtx(() => [
349
- !configLoading.value ? (vue.openBlock(), vue.createBlock(vue.unref(gridLayout_vue.default), {
350
- key: 0,
351
- ref: "gridLayout",
352
- layout: localConfig.value.fieldsData,
353
- "onUpdate:layout": _cache[0] || (_cache[0] = ($event) => localConfig.value.fieldsData = $event),
354
- "row-height": localConfig.value.labelPosition == "top" ? 90 : 60,
355
- margin: [0, 0],
356
- "col-num": localConfig.value.columns,
357
- "is-draggable": false,
358
- "is-resizable": false
359
- }, {
360
- item: vue.withCtx(({ item: { component } }) => [
361
- vue.createVNode(FormItem.default, {
362
- modelValue: formData.value[component.fieldName],
363
- "onUpdate:modelValue": ($event) => formData.value[component.fieldName] = $event,
364
- config: component,
365
- localConfig: localConfig.value,
366
- error: getFieldError(component.fieldName),
367
- formRef: formRef.value,
368
- onChange: handleFieldChange
369
- }, null, 8, ["modelValue", "onUpdate:modelValue", "config", "localConfig", "error", "formRef"])
370
- ]),
371
- _: 1
372
- }, 8, ["layout", "row-height", "col-num"])) : vue.createCommentVNode("", true)
373
- ]),
374
- _: 1
375
- }, 8, ["model", "rules", "label-position"])
376
- ]),
377
- _: 1
378
- }),
379
- vue.createVNode(vue.unref(index$4.footer), {
380
- pageFooterConfig: localConfig.value.pageFooterConfig,
381
- onCustomButtonClick: handleCustomButtonClick
382
- }, null, 8, ["pageFooterConfig"])
383
- ]),
384
- _: 1
385
- });
354
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
355
+ vue.createVNode(_component_el_container, {
356
+ direction: "vertical",
357
+ style: { "height": "100%" }
358
+ }, {
359
+ default: vue.withCtx(() => [
360
+ !configLoading.value ? (vue.openBlock(), vue.createBlock(vue.unref(index$1.header), {
361
+ key: 0,
362
+ pageHeaderConfig: localConfig.value.pageHeaderConfig
363
+ }, null, 8, ["pageHeaderConfig"])) : vue.createCommentVNode("", true),
364
+ vue.createVNode(vue.unref(index$2.main), null, {
365
+ default: vue.withCtx(() => [
366
+ vue.createVNode(_component_el_form, {
367
+ ref_key: "formRef",
368
+ ref: formRef,
369
+ model: formData.value,
370
+ rules: formRules.value,
371
+ "label-position": localConfig.value.labelPosition,
372
+ style: { "padding": "18px" },
373
+ "validate-on-rule-change": false
374
+ }, {
375
+ default: vue.withCtx(() => [
376
+ !configLoading.value ? (vue.openBlock(), vue.createBlock(vue.unref(gridLayout_vue.default), {
377
+ key: 0,
378
+ ref: "gridLayout",
379
+ layout: localConfig.value.fieldsData,
380
+ "onUpdate:layout": _cache[0] || (_cache[0] = ($event) => localConfig.value.fieldsData = $event),
381
+ "row-height": localConfig.value.labelPosition == "top" ? 90 : 60,
382
+ margin: [0, 0],
383
+ "col-num": localConfig.value.columns,
384
+ "is-draggable": false,
385
+ "is-resizable": false
386
+ }, {
387
+ item: vue.withCtx(({ item: { component } }) => [
388
+ vue.createVNode(FormItem.default, {
389
+ modelValue: formData.value[component.fieldName],
390
+ "onUpdate:modelValue": ($event) => formData.value[component.fieldName] = $event,
391
+ config: component,
392
+ localConfig: localConfig.value,
393
+ error: getFieldError(component.fieldName),
394
+ formRef: formRef.value,
395
+ onChange: handleFieldChange
396
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "config", "localConfig", "error", "formRef"])
397
+ ]),
398
+ _: 1
399
+ }, 8, ["layout", "row-height", "col-num"])) : vue.createCommentVNode("", true),
400
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(hiddenFields.value, (field) => {
401
+ return vue.openBlock(), vue.createElementBlock("input", {
402
+ key: field.fieldName,
403
+ type: "hidden",
404
+ name: field.fieldName,
405
+ value: formData.value[field.fieldName]
406
+ }, null, 8, _hoisted_1);
407
+ }), 128))
408
+ ]),
409
+ _: 1
410
+ }, 8, ["model", "rules", "label-position"])
411
+ ]),
412
+ _: 1
413
+ }),
414
+ vue.createVNode(vue.unref(index$4.footer), {
415
+ pageFooterConfig: localConfig.value.pageFooterConfig,
416
+ onCustomButtonClick: handleCustomButtonClick
417
+ }, null, 8, ["pageFooterConfig"])
418
+ ]),
419
+ _: 1
420
+ }),
421
+ vue.createTextVNode(" " + vue.toDisplayString(formData.value), 1)
422
+ ], 64);
386
423
  };
387
424
  }
388
425
  });
@@ -131,5 +131,5 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
131
131
  };
132
132
  }
133
133
  });
134
- const _Text = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-4b100f9c"]]);
135
- exports.default = _Text;
134
+ const TextComponent = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-4b100f9c"]]);
135
+ exports.default = TextComponent;
@@ -9,6 +9,7 @@ const datasource = require("../../utils/datasource.js");
9
9
  const Pagination = require("./Pagination.vue.js");
10
10
  const CustomButtons = require("./CustomButtons.vue.js");
11
11
  const TableColumn = require("./TableColumn.vue.js");
12
+ const TableFilter = require("./TableFilter.vue.js");
12
13
  const getInstance = require("../../utils/getInstance.js");
13
14
  ;/* empty css */
14
15
  ;/* empty css */
@@ -139,7 +140,7 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
139
140
  const fieldDataSources = /* @__PURE__ */ new Set();
140
141
  const dictionaryKeys = /* @__PURE__ */ new Set();
141
142
  for (const field of fields) {
142
- if (field.fieldType === "select" && field.optionConfig) {
143
+ if ((field.fieldType === "select" || field.fieldType === "multipleSelection") && field.optionConfig) {
143
144
  const { optionSource, dataSourceValue, dictionaryValue } = field.optionConfig;
144
145
  if (optionSource === "dataSource" && dataSourceValue) {
145
146
  fieldDataSources.add(dataSourceValue);
@@ -194,6 +195,42 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
194
195
  console.error("Failed to load dictionary data:", error);
195
196
  }
196
197
  }
198
+ mergeOptionsToFields();
199
+ };
200
+ const mergeOptionsToFields = () => {
201
+ if (localConfig.value.fieldsData) {
202
+ localConfig.value.fieldsData.forEach((field) => {
203
+ if (!field.optionConfig) return;
204
+ const {
205
+ optionSource,
206
+ dataSourceValue,
207
+ dictionaryValue,
208
+ displayField,
209
+ valueField
210
+ } = field.optionConfig;
211
+ if (optionSource === "dataSource" && dataSourceOptions.value[dataSourceValue]) {
212
+ const rawOptions = dataSourceOptions.value[dataSourceValue];
213
+ const labelField = displayField || "label";
214
+ const keyField = valueField || "value";
215
+ field.optionConfig.options = rawOptions.map((item) => ({
216
+ label: item[labelField],
217
+ value: item[keyField],
218
+ disabled: item.disabled || false
219
+ }));
220
+ } else if (optionSource === "dictionary" && dictionaryOptions.value[dictionaryValue]) {
221
+ const rawOptions = dictionaryOptions.value[dictionaryValue];
222
+ const labelField = "optName";
223
+ const keyField = "optCode";
224
+ field.optionConfig.options = rawOptions.map((item) => ({
225
+ label: item[labelField],
226
+ value: item[keyField],
227
+ disabled: item.disabled || false
228
+ }));
229
+ } else if (optionSource === "custom") {
230
+ field.optionConfig.options = field.optionConfig.options || [];
231
+ }
232
+ });
233
+ }
197
234
  };
198
235
  const { handleEvent } = eventFlowHandler.useEventFlow({
199
236
  fields: localConfig.value.fieldsData,
@@ -247,6 +284,18 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
247
284
  const handleRadioChange = (checked) => {
248
285
  emit("selection-change", [checked.row]);
249
286
  };
287
+ const handleFilterSearch = (filters) => {
288
+ if (dataSourceManager.value) {
289
+ dataSourceManager.value.updateParams(filters);
290
+ dataSourceManager.value.fetch();
291
+ }
292
+ };
293
+ const handleFilterReset = () => {
294
+ if (dataSourceManager.value) {
295
+ dataSourceManager.value.clearParams();
296
+ dataSourceManager.value.fetch();
297
+ }
298
+ };
250
299
  const refresh = (options = {}) => {
251
300
  var _a;
252
301
  const {
@@ -375,6 +424,12 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
375
424
  ref: tableContainer,
376
425
  class: "fec-table-container"
377
426
  }, [
427
+ vue.createVNode(TableFilter.default, {
428
+ "query-config": localConfig.value.queryConfig,
429
+ "fields-data": localConfig.value.fieldsData,
430
+ onSearch: handleFilterSearch,
431
+ onReset: handleFilterReset
432
+ }, null, 8, ["query-config", "fields-data"]),
378
433
  vue.createVNode(CustomButtons.default, {
379
434
  "custom-btns": localConfig.value.customBtns,
380
435
  onClick: handleCustomBtnClick
@@ -436,5 +491,5 @@ const _sfc_main = /* @__PURE__ */ Object.assign({
436
491
  };
437
492
  }
438
493
  });
439
- const _Table = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-9014257e"]]);
494
+ const _Table = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-d11bb28c"]]);
440
495
  exports.default = _Table;
@@ -110,6 +110,7 @@ const _sfc_main = {
110
110
  }
111
111
  return value;
112
112
  case "select":
113
+ case "multipleSelection":
113
114
  if (field.optionConfig) {
114
115
  let options = [];
115
116
  let displayField = "label";
@@ -127,6 +128,14 @@ const _sfc_main = {
127
128
  displayField = "optName";
128
129
  valueField = "optCode";
129
130
  }
131
+ if (typeof value === "string" && value.includes("|")) {
132
+ const values = value.split("|");
133
+ const displayValues = values.map((val) => {
134
+ const option2 = options.find((opt) => opt[valueField] == val);
135
+ return option2 ? option2[displayField] : val;
136
+ });
137
+ return displayValues.join(", ");
138
+ }
130
139
  const option = options.find((opt) => opt[valueField] == value);
131
140
  return option ? option[displayField] : value;
132
141
  }
@@ -300,5 +309,5 @@ const _sfc_main = {
300
309
  };
301
310
  }
302
311
  };
303
- const TableColumn = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-28498ce1"]]);
312
+ const TableColumn = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-c7ca0774"]]);
304
313
  exports.default = TableColumn;
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ ;/* empty css */
4
+ ;/* empty css */
5
+ ;/* empty css */
6
+ ;/* empty css */
7
+ ;/* empty css */
8
+ require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/theme-chalk/el-date-picker.css.js");
9
+ ;/* empty css */
10
+ ;/* empty css */
11
+ ;/* empty css */
12
+ ;/* empty css */
13
+ const vue = require("vue");
14
+ const index$3 = require("../../../../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.13_typescript@5.7.3_/node_modules/@element-plus/icons-vue/dist/index.js");
15
+ const index$a = require("../forms/text/index.js");
16
+ const index$6 = require("../forms/select/index.js");
17
+ const index$7 = require("../forms/multipleSelection/index.js");
18
+ const index$9 = require("../forms/date/index.js");
19
+ const index$8 = require("../forms/number/index.js");
20
+ ;/* empty css */
21
+ const _pluginVue_exportHelper = require("../../../../../_virtual/_plugin-vue_export-helper.js");
22
+ const index = require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/form/index.js");
23
+ const index$1 = require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/date-picker/index.js");
24
+ const index$2 = require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/button/index.js");
25
+ const index$4 = require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/divider/index.js");
26
+ const index$5 = require("../../../../../node_modules/.pnpm/element-plus@2.13.2_vue@3.5.13_typescript@5.7.3_/node_modules/element-plus/es/components/icon/index.js");
27
+ const _sfc_main = {
28
+ __name: "TableFilter",
29
+ props: {
30
+ queryConfig: {
31
+ type: Object,
32
+ default: () => ({})
33
+ },
34
+ fieldsData: {
35
+ type: Array,
36
+ default: () => []
37
+ }
38
+ },
39
+ emits: ["search", "reset"],
40
+ setup(__props, { expose: __expose, emit: __emit }) {
41
+ vue.useCssVars((_ctx) => ({
42
+ "50ac82f0": `${config.value.collapseRows * 90}px`
43
+ }));
44
+ const props = __props;
45
+ const emit = __emit;
46
+ const config = vue.computed(() => {
47
+ var _a, _b, _c, _d, _e;
48
+ return {
49
+ enabled: ((_a = props.queryConfig) == null ? void 0 : _a.enabled) ?? false,
50
+ mode: ((_b = props.queryConfig) == null ? void 0 : _b.mode) || "fixed",
51
+ columnCount: ((_c = props.queryConfig) == null ? void 0 : _c.columnCount) || 3,
52
+ collapseRows: ((_d = props.queryConfig) == null ? void 0 : _d.collapseRows) || 2,
53
+ filterFields: ((_e = props.queryConfig) == null ? void 0 : _e.filterFields) || []
54
+ };
55
+ });
56
+ const getFieldConfig = (fieldId) => {
57
+ return props.fieldsData.find((field) => field.id === fieldId) || {};
58
+ };
59
+ const completeFilterFields = vue.computed(() => {
60
+ return config.value.filterFields.map((filterField) => {
61
+ const fieldConfig = getFieldConfig(filterField.fieldId);
62
+ return {
63
+ ...filterField,
64
+ ...fieldConfig
65
+ };
66
+ });
67
+ });
68
+ const filterValues = vue.ref({});
69
+ const isCollapsed = vue.ref(true);
70
+ const shouldShowToggle = vue.computed(() => {
71
+ const fieldCount = completeFilterFields.value.length;
72
+ const maxVisibleFields = config.value.columnCount * config.value.collapseRows;
73
+ return fieldCount > maxVisibleFields;
74
+ });
75
+ const isSingleLine = vue.computed(() => {
76
+ if (isCollapsed.value) {
77
+ return config.value.collapseRows === 1;
78
+ } else {
79
+ const totalRows = Math.ceil(
80
+ completeFilterFields.value.length / config.value.columnCount
81
+ );
82
+ return totalRows === 1;
83
+ }
84
+ });
85
+ const getFilterComponent = (fieldType) => {
86
+ const componentMap = {
87
+ text: index$a.Text,
88
+ select: index$6.Select,
89
+ date: index$9.Date,
90
+ number: index$8.Number,
91
+ multipleSelection: index$7.MultipleSelection,
92
+ switch: index$6.Select
93
+ };
94
+ return componentMap[fieldType] || index$a.Text;
95
+ };
96
+ const getComponentConfig = (field) => {
97
+ return { ...field };
98
+ };
99
+ const getPlaceholder = (field, type = "default") => {
100
+ const placeholderMap = {
101
+ text: "请输入",
102
+ select: "请选择",
103
+ date: type === "start" ? "开始日期" : type === "end" ? "结束日期" : "请选择日期",
104
+ number: "请输入",
105
+ radio: "请选择",
106
+ checkbox: "请选择",
107
+ switch: "请选择"
108
+ };
109
+ if (field.fieldType === "date") {
110
+ return placeholderMap.date;
111
+ }
112
+ return `${placeholderMap[field.fieldType] || "请输入"}${field.label || ""}`;
113
+ };
114
+ const toggleCollapse = () => {
115
+ isCollapsed.value = !isCollapsed.value;
116
+ };
117
+ const handleSearch = () => {
118
+ const filters = {};
119
+ Object.keys(filterValues.value).forEach((key) => {
120
+ const value = filterValues.value[key];
121
+ if (value !== "" && value !== null && value !== void 0) {
122
+ const fieldConfig = completeFilterFields.value.find(
123
+ (field) => field.id == key
124
+ );
125
+ const fieldName = (fieldConfig == null ? void 0 : fieldConfig.fieldName) || key;
126
+ if (Array.isArray(value)) {
127
+ filters[fieldName] = value.join("|");
128
+ } else {
129
+ filters[fieldName] = value;
130
+ }
131
+ }
132
+ });
133
+ console.log("🚀 ~ handleSearch ~ filters:", filters);
134
+ emit("search", filters);
135
+ };
136
+ const handleReset = () => {
137
+ filterValues.value = {};
138
+ emit("reset");
139
+ };
140
+ vue.watch(
141
+ () => props.queryConfig,
142
+ () => {
143
+ filterValues.value = {};
144
+ isCollapsed.value = true;
145
+ },
146
+ { deep: true }
147
+ );
148
+ __expose({
149
+ getFilterValues: () => filterValues.value,
150
+ setFilterValues: (values) => {
151
+ filterValues.value = { ...values };
152
+ },
153
+ reset: handleReset
154
+ });
155
+ return (_ctx, _cache) => {
156
+ const _component_el_date_picker = index$1.ElDatePicker;
157
+ const _component_el_form_item = index.ElFormItem;
158
+ const _component_el_button = index$2.ElButton;
159
+ const _component_el_form = index.ElForm;
160
+ const _component_el_icon = index$5.ElIcon;
161
+ const _component_el_divider = index$4.ElDivider;
162
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
163
+ config.value.enabled ? (vue.openBlock(), vue.createBlock(_component_el_form, {
164
+ key: 0,
165
+ model: filterValues.value,
166
+ class: "fec-table-filter",
167
+ "label-width": "100px",
168
+ "label-position": "right",
169
+ style: vue.normalizeStyle({ "--column-count": config.value.columnCount })
170
+ }, {
171
+ default: vue.withCtx(() => [
172
+ vue.createElementVNode("div", {
173
+ class: vue.normalizeClass(["filter-fields", { "is-collapsed": isCollapsed.value }])
174
+ }, [
175
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(completeFilterFields.value, (field, index2) => {
176
+ return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
177
+ key: field.id,
178
+ class: "filter-field"
179
+ }, [
180
+ vue.createVNode(_component_el_form_item, {
181
+ label: field.label || "筛选条件"
182
+ }, {
183
+ default: vue.withCtx(() => [
184
+ field.fieldType !== "date" ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getFilterComponent(field.fieldType)), vue.mergeProps({
185
+ key: 0,
186
+ modelValue: filterValues.value[field.fieldId],
187
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event,
188
+ config: { ...field, eventHandlers: {} },
189
+ ref_for: true
190
+ }, getComponentConfig(field), {
191
+ placeholder: getPlaceholder(field)
192
+ }), null, 16, ["modelValue", "onUpdate:modelValue", "config", "placeholder"])) : (vue.openBlock(), vue.createBlock(_component_el_date_picker, {
193
+ key: 1,
194
+ modelValue: filterValues.value[field.fieldId],
195
+ "onUpdate:modelValue": ($event) => filterValues.value[field.fieldId] = $event,
196
+ type: "daterange",
197
+ "start-placeholder": getPlaceholder(field, "start"),
198
+ "end-placeholder": getPlaceholder(field, "end"),
199
+ format: "YYYY-MM-DD",
200
+ "value-format": "YYYY-MM-DD",
201
+ clearable: "",
202
+ style: { "width": "100%" }
203
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "start-placeholder", "end-placeholder"]))
204
+ ]),
205
+ _: 2
206
+ }, 1032, ["label"])
207
+ ])), [
208
+ [
209
+ vue.vShow,
210
+ !isCollapsed.value || index2 < config.value.columnCount * config.value.collapseRows
211
+ ]
212
+ ]);
213
+ }), 128))
214
+ ], 2),
215
+ vue.createElementVNode("div", {
216
+ class: vue.normalizeClass(["filter-actions", { inline: isSingleLine.value }])
217
+ }, [
218
+ vue.createVNode(_component_el_button, {
219
+ type: "primary",
220
+ onClick: handleSearch,
221
+ icon: vue.unref(index$3.Search)
222
+ }, {
223
+ default: vue.withCtx(() => _cache[0] || (_cache[0] = [
224
+ vue.createTextVNode("搜索")
225
+ ])),
226
+ _: 1
227
+ }, 8, ["icon"]),
228
+ vue.createVNode(_component_el_button, {
229
+ onClick: handleReset,
230
+ icon: vue.unref(index$3.Refresh)
231
+ }, {
232
+ default: vue.withCtx(() => _cache[1] || (_cache[1] = [
233
+ vue.createTextVNode("重置")
234
+ ])),
235
+ _: 1
236
+ }, 8, ["icon"])
237
+ ], 2)
238
+ ]),
239
+ _: 1
240
+ }, 8, ["model", "style"])) : vue.createCommentVNode("", true),
241
+ shouldShowToggle.value ? (vue.openBlock(), vue.createBlock(_component_el_divider, {
242
+ key: 1,
243
+ "border-style": "dashed",
244
+ class: "filter-divider"
245
+ }, {
246
+ default: vue.withCtx(() => [
247
+ vue.createElementVNode("div", {
248
+ onClick: toggleCollapse,
249
+ class: "collapse-toggle"
250
+ }, [
251
+ vue.createElementVNode("span", null, vue.toDisplayString(isCollapsed.value ? "更多筛选项" : "收起"), 1),
252
+ vue.createVNode(_component_el_icon, { style: { "transform": "rotate(90deg)" } }, {
253
+ default: vue.withCtx(() => [
254
+ isCollapsed.value ? (vue.openBlock(), vue.createBlock(vue.unref(index$3.DArrowRight), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(index$3.DArrowLeft), { key: 1 }))
255
+ ]),
256
+ _: 1
257
+ })
258
+ ])
259
+ ]),
260
+ _: 1
261
+ })) : vue.createCommentVNode("", true)
262
+ ], 64);
263
+ };
264
+ }
265
+ };
266
+ const TableFilter = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-e94ef8a9"]]);
267
+ exports.default = TableFilter;