@silver-formily/element-plus 4.0.1 → 4.0.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.
- package/esm/__builtins__/shared/utils.mjs +4 -1
- package/esm/__builtins__/shared/utils.mjs.map +1 -1
- package/esm/checkbox/index.d.ts +90 -90
- package/esm/color-picker/index.d.ts +14 -14
- package/esm/color-picker-panel/index.d.ts +12 -12
- package/esm/form-dialog/dialog-content.mjs +10 -12
- package/esm/form-dialog/dialog-content.mjs.map +1 -1
- package/esm/form-dialog/index.mjs +22 -26
- package/esm/form-dialog/index.mjs.map +1 -1
- package/esm/form-dialog/types.d.ts +0 -1
- package/esm/form-drawer/drawer-content.mjs +10 -12
- package/esm/form-drawer/drawer-content.mjs.map +1 -1
- package/esm/form-drawer/index.mjs +22 -26
- package/esm/form-drawer/index.mjs.map +1 -1
- package/esm/form-drawer/types.d.ts +0 -1
- package/esm/form-grid/form-grid-column.mjs +6 -4
- package/esm/form-grid/form-grid-column.mjs.map +1 -1
- package/esm/form-layout/form-layout.vue.d.ts +1 -1
- package/esm/input-number/index.d.ts +24 -24
- package/esm/preview-text/select.mjs +8 -3
- package/esm/preview-text/select.mjs.map +1 -1
- package/esm/query-form/query-form-light.mjs +13 -6
- package/esm/query-form/query-form-light.mjs.map +1 -1
- package/esm/query-form/query-form.mjs +13 -6
- package/esm/query-form/query-form.mjs.map +1 -1
- package/esm/query-form/types.d.ts +8 -1
- package/esm/radio/index.d.ts +45 -45
- package/esm/radio/radio-group.mjs +4 -2
- package/esm/radio/radio-group.mjs.map +1 -1
- package/esm/select/index.d.ts +7 -7
- package/esm/select-table/index.d.ts +1 -1
- package/esm/select-table/select-table.mjs +63 -29
- package/esm/select-table/select-table.mjs.map +1 -1
- package/esm/select-table/types.d.ts +1 -1
- package/esm/time-select/index.d.ts +16 -16
- package/esm/transfer/index.d.ts +12 -12
- package/package.json +4 -4
- package/esm/shared/url-change-listener.mjs +0 -50
- package/esm/shared/url-change-listener.mjs.map +0 -1
|
@@ -20,6 +20,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
20
20
|
inheritAttrs: false,
|
|
21
21
|
__name: "query-form",
|
|
22
22
|
props: {
|
|
23
|
+
form: {},
|
|
23
24
|
schema: {},
|
|
24
25
|
schemaField: {},
|
|
25
26
|
components: { default: () => ({}) },
|
|
@@ -51,7 +52,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
51
52
|
default: true
|
|
52
53
|
},
|
|
53
54
|
submitProps: {},
|
|
54
|
-
resetProps: {}
|
|
55
|
+
resetProps: {},
|
|
56
|
+
onAutoSubmit: {},
|
|
57
|
+
onAutoSubmitFailed: {}
|
|
55
58
|
},
|
|
56
59
|
setup(__props) {
|
|
57
60
|
const props = __props;
|
|
@@ -60,14 +63,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
60
63
|
const prefixCls = `${stylePrefix}-query-form`;
|
|
61
64
|
const FormGridColumn = FormGrid.GridColumn;
|
|
62
65
|
const fieldSchemaRef = useFieldSchema();
|
|
66
|
+
const formRef = useForm();
|
|
63
67
|
const { externalForm, activeForm } = useQueryFormForm({
|
|
64
|
-
formProps,
|
|
65
|
-
fallbackForm:
|
|
68
|
+
formProps: computed(() => ({ form: props.form })),
|
|
69
|
+
fallbackForm: formRef
|
|
66
70
|
});
|
|
67
71
|
const innerFormProps = computed(() => ({
|
|
68
72
|
fullness: true,
|
|
69
73
|
...formProps.value,
|
|
70
|
-
form: externalForm.value
|
|
74
|
+
form: externalForm.value,
|
|
75
|
+
onAutoSubmit: props.onAutoSubmit,
|
|
76
|
+
onAutoSubmitFailed: props.onAutoSubmitFailed
|
|
71
77
|
}));
|
|
72
78
|
const schemaList = computed(() => {
|
|
73
79
|
const rawSchema = props.schema ?? fieldSchemaRef.value;
|
|
@@ -108,8 +114,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
108
114
|
return (props.visibleWhen ? props.visibleWhen(context) : defaultVisibleWhen(context)) !== false;
|
|
109
115
|
}
|
|
110
116
|
function isActionsNode(node, grid) {
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
const isLastNode = node.index === grid.childSize - 1;
|
|
118
|
+
if ("element" in node && node.element) return node.element.dataset.queryFormActions !== void 0 || isLastNode;
|
|
119
|
+
return isLastNode;
|
|
113
120
|
}
|
|
114
121
|
function getFieldRowCount(grid) {
|
|
115
122
|
const rows = (grid.children ?? []).filter((node) => !isActionsNode(node, grid)).map((node) => node.shadowRow ?? 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-form.mjs","names":[],"sources":["../../src/query-form/query-form.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ISchema } from '@formily/json-schema'\nimport type { Grid, GridNode, IGridOptions } from '@silver-formily/grid'\nimport type { IQueryFormProps, SchemaEntry } from './types'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { Schema } from '@formily/json-schema'\nimport { createGrid } from '@silver-formily/grid'\nimport { autorunEffect } from '@silver-formily/reactive-vue'\nimport { useFieldSchema, useForm } from '@silver-formily/vue'\nimport { ElIcon, ElLink } from 'element-plus'\nimport { computed, ref, useSlots } from 'vue'\nimport { compatibleUnderlineProp, stylePrefix, useCleanAttrs } from '../__builtins__'\nimport { Form } from '../form'\nimport { FormButtonGroup } from '../form-button-group'\nimport { FormGrid } from '../form-grid'\nimport { Reset } from '../reset'\nimport { Submit } from '../submit'\nimport { useQueryFormForm, useQueryFormSchemaField } from './hooks'\n\ndefineOptions({\n name: 'FQueryForm',\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<IQueryFormProps>(), {\n components: () => ({}),\n gridProps: () => ({}),\n defaultExpanded: false,\n showToggle: true,\n actionsAtRowEnd: false,\n submitText: '查询',\n resetText: '重置',\n expandText: '展开',\n collapseText: '收起',\n showSubmit: true,\n showReset: true,\n})\n\nconst { props: formProps } = useCleanAttrs(['modelValue', 'onUpdate:modelValue'])\nconst slots = useSlots()\nconst prefixCls = `${stylePrefix}-query-form`\nconst FormGridColumn = FormGrid.GridColumn\n\nconst COLLAPSED_ROWS = 1\nconst fieldSchemaRef = useFieldSchema()\nconst formRef = useForm()\nconst { externalForm, activeForm } = useQueryFormForm({\n formProps,\n fallbackForm: formRef,\n})\nconst innerFormProps = computed(() => ({\n fullness: true,\n ...formProps.value,\n form: externalForm.value,\n}))\n\nconst schemaList = computed<SchemaEntry[]>(() => {\n const rawSchema = props.schema ?? fieldSchemaRef.value\n /* istanbul ignore next -- @preserve defensive: schema can be temporarily absent in external field-schema lifecycle */\n if (!rawSchema)\n return []\n const schema = rawSchema instanceof Schema ? rawSchema : new Schema(rawSchema)\n return schema.mapProperties((childSchema: ISchema, name: string | number) => ({\n name,\n schema: childSchema,\n }))\n})\n\nfunction resolveField(name?: string | number) {\n return activeForm.value?.query(name).take()\n}\n\nfunction createVisibleContext(\n node: GridNode,\n grid: Grid<HTMLElement>,\n collapsedOverride?: boolean,\n) {\n const index = node.index ?? 0\n const entry = schemaList.value[index]\n const schema = entry?.schema\n const name = entry?.name ?? schema?.name\n return {\n field: resolveField(name),\n schema,\n index,\n node,\n grid,\n collapsed: collapsedOverride ?? grid.maxRows !== Infinity,\n breakpoint: grid.breakpoint,\n }\n}\n\nfunction defaultVisibleWhen(context: ReturnType<typeof createVisibleContext>) {\n if (!context.collapsed)\n return true\n\n const shadowRow = context.node.shadowRow ?? 0\n const withinRows = shadowRow < COLLAPSED_ROWS + 1\n if (!withinRows)\n return false\n\n const isCollapsible = getFieldRowCount(context.grid) > COLLAPSED_ROWS\n if (!isCollapsible)\n return true\n const shadowColumn = context.node.shadowColumn ?? 1\n const span = context.node.span ?? 1\n const endColumn = shadowColumn + span - 1\n if (shadowRow === COLLAPSED_ROWS && endColumn === context.grid.columns)\n return false\n\n return true\n}\n\nfunction resolveVisibleWhen(context: ReturnType<typeof createVisibleContext>) {\n const visible = props.visibleWhen\n ? props.visibleWhen(context)\n : defaultVisibleWhen(context)\n return visible !== false\n}\n\nfunction isActionsNode(node: GridNode, grid: Grid<HTMLElement>) {\n if ('element' in node && node.element) {\n return node.element.dataset.queryFormActions !== undefined\n }\n return node.index === grid.childSize - 1\n}\n\nfunction getFieldRowCount(grid: Grid<HTMLElement>) {\n const rows = (grid.children ?? [])\n .filter(node => !isActionsNode(node, grid))\n .map(node => node.shadowRow ?? 0)\n return new Set(rows).size\n}\n\nconst defaultShouldVisible: IGridOptions['shouldVisible'] = (node, grid) => {\n if (isActionsNode(node, grid))\n return true\n return resolveVisibleWhen(createVisibleContext(node, grid))\n}\n\nconst restGridProps = props.gridProps ?? {}\nconst defaultGridProps: Partial<IGridOptions> = restGridProps.minColumns === undefined && restGridProps.maxColumns === undefined\n ? { maxColumns: 4 }\n : {}\n\nconst gridOptions: IGridOptions = {\n ...defaultGridProps,\n ...restGridProps,\n maxRows: (props.defaultExpanded || !props.showToggle) ? Infinity : COLLAPSED_ROWS,\n shouldVisible: defaultShouldVisible,\n}\n\nconst grid = createGrid(gridOptions)\n\nconst expanded = ref(grid.maxRows === Infinity)\nconst gridType = ref<'incomplete-wrap' | 'collapsible' | 'complete-wrap'>('complete-wrap')\n\nfunction updateType() {\n if (!props.showToggle) {\n gridType.value = 'incomplete-wrap'\n return\n }\n\n if (!props.visibleWhen) {\n gridType.value = getFieldRowCount(grid) > COLLAPSED_ROWS\n ? 'collapsible'\n : 'incomplete-wrap'\n return\n }\n\n const nodes = grid.children ?? []\n const hasHiddenInCollapsed = nodes.some((node) => {\n if (isActionsNode(node, grid))\n return false\n return !resolveVisibleWhen(createVisibleContext(node, grid, true))\n })\n /* istanbul ignore next -- @preserve layout branch depends on runtime grid measurement in browser */\n if (hasHiddenInCollapsed) {\n gridType.value = 'collapsible'\n return\n }\n const realRows = grid.shadowRows\n gridType.value = realRows < COLLAPSED_ROWS + 1 ? 'incomplete-wrap' : 'complete-wrap'\n}\n\nautorunEffect(() => {\n expanded.value = grid.maxRows === Infinity\n updateType()\n})\n\nfunction toggle() {\n if (!props.showToggle)\n return\n grid.maxRows = grid.maxRows === Infinity ? COLLAPSED_ROWS : Infinity\n}\n\nconst { hasDefaultSlot, schemaField } = useQueryFormSchemaField({\n slots,\n schema: computed(() => props.schema),\n schemaField: computed(() => props.schemaField),\n components: computed(() => props.components),\n scope: computed(() => props.scope),\n})\n</script>\n\n<template>\n <Form v-bind=\"innerFormProps\" :class=\"prefixCls\">\n <FormGrid :grid=\"grid\">\n <slot v-if=\"hasDefaultSlot\" />\n <component\n :is=\"schemaField\"\n v-else-if=\"schemaField\"\n :schema=\"props.schema\"\n />\n <FormGridColumn\n :grid-span=\"-1\"\n data-query-form-actions\n :class=\"[\n `${prefixCls}__actions`,\n props.actionsAtRowEnd && `${prefixCls}__actions--row-end`,\n ]\"\n >\n <template v-if=\"gridType === 'incomplete-wrap'\">\n <FormButtonGroup\n :align=\"props.actionsAtRowEnd ? 'right' : 'left'\"\n align-form-item\n inline\n :style=\"props.actionsAtRowEnd && { width: '100%' }\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n </FormButtonGroup>\n </template>\n <template v-else-if=\"gridType === 'collapsible' && props.showToggle\">\n <FormButtonGroup\n :align=\"props.actionsAtRowEnd ? 'right' : 'left'\"\n align-form-item\n inline\n :style=\"props.actionsAtRowEnd && { width: '100%' }\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n <slot\n name=\"collapse\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <ElLink\n type=\"primary\"\n :underline=\"compatibleUnderlineProp()\"\n :class=\"`${prefixCls}__collapse-link`\"\n @click=\"toggle\"\n >\n {{ expanded ? props.collapseText : props.expandText }}\n <ElIcon :class=\"`${prefixCls}__collapse-icon`\">\n <ArrowUp v-if=\"expanded\" />\n <ArrowDown v-else />\n </ElIcon>\n </ElLink>\n </slot>\n </FormButtonGroup>\n </template>\n <template v-else>\n <FormButtonGroup\n align=\"right\"\n inline\n style=\"display: flex; width: 100%;\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n </FormButtonGroup>\n </template>\n </FormGridColumn>\n </FormGrid>\n </Form>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-form.mjs","names":[],"sources":["../../src/query-form/query-form.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ISchema } from '@formily/json-schema'\nimport type { Grid, GridNode, IGridOptions } from '@silver-formily/grid'\nimport type { IQueryFormProps, SchemaEntry } from './types'\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue'\nimport { Schema } from '@formily/json-schema'\nimport { createGrid } from '@silver-formily/grid'\nimport { autorunEffect } from '@silver-formily/reactive-vue'\nimport { useFieldSchema, useForm } from '@silver-formily/vue'\nimport { ElIcon, ElLink } from 'element-plus'\nimport { computed, ref, useSlots } from 'vue'\nimport { compatibleUnderlineProp, stylePrefix, useCleanAttrs } from '../__builtins__'\nimport { Form } from '../form'\nimport { FormButtonGroup } from '../form-button-group'\nimport { FormGrid } from '../form-grid'\nimport { Reset } from '../reset'\nimport { Submit } from '../submit'\nimport { useQueryFormForm, useQueryFormSchemaField } from './hooks'\n\ndefineOptions({\n name: 'FQueryForm',\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<IQueryFormProps>(), {\n components: () => ({}),\n gridProps: () => ({}),\n defaultExpanded: false,\n showToggle: true,\n actionsAtRowEnd: false,\n submitText: '查询',\n resetText: '重置',\n expandText: '展开',\n collapseText: '收起',\n showSubmit: true,\n showReset: true,\n})\n\nconst { props: formProps } = useCleanAttrs(['modelValue', 'onUpdate:modelValue'])\nconst slots = useSlots()\nconst prefixCls = `${stylePrefix}-query-form`\nconst FormGridColumn = FormGrid.GridColumn\n\nconst COLLAPSED_ROWS = 1\nconst fieldSchemaRef = useFieldSchema()\nconst formRef = useForm()\nconst { externalForm, activeForm } = useQueryFormForm({\n formProps: computed(() => ({ form: props.form })),\n fallbackForm: formRef,\n})\nconst innerFormProps = computed(() => ({\n fullness: true,\n ...formProps.value,\n form: externalForm.value,\n onAutoSubmit: props.onAutoSubmit,\n onAutoSubmitFailed: props.onAutoSubmitFailed,\n}))\n\nconst schemaList = computed<SchemaEntry[]>(() => {\n const rawSchema = props.schema ?? fieldSchemaRef.value\n /* istanbul ignore next -- @preserve defensive: schema can be temporarily absent in external field-schema lifecycle */\n if (!rawSchema)\n return []\n const schema = rawSchema instanceof Schema ? rawSchema : new Schema(rawSchema)\n return schema.mapProperties((childSchema: ISchema, name: string | number) => ({\n name,\n schema: childSchema,\n }))\n})\n\nfunction resolveField(name?: string | number) {\n return activeForm.value?.query(name).take()\n}\n\nfunction createVisibleContext(\n node: GridNode,\n grid: Grid<HTMLElement>,\n collapsedOverride?: boolean,\n) {\n const index = node.index ?? 0\n const entry = schemaList.value[index]\n const schema = entry?.schema\n const name = entry?.name ?? schema?.name\n return {\n field: resolveField(name),\n schema,\n index,\n node,\n grid,\n collapsed: collapsedOverride ?? grid.maxRows !== Infinity,\n breakpoint: grid.breakpoint,\n }\n}\n\nfunction defaultVisibleWhen(context: ReturnType<typeof createVisibleContext>) {\n if (!context.collapsed)\n return true\n\n const shadowRow = context.node.shadowRow ?? 0\n const withinRows = shadowRow < COLLAPSED_ROWS + 1\n if (!withinRows)\n return false\n\n const isCollapsible = getFieldRowCount(context.grid) > COLLAPSED_ROWS\n if (!isCollapsible)\n return true\n const shadowColumn = context.node.shadowColumn ?? 1\n const span = context.node.span ?? 1\n const endColumn = shadowColumn + span - 1\n if (shadowRow === COLLAPSED_ROWS && endColumn === context.grid.columns)\n return false\n\n return true\n}\n\nfunction resolveVisibleWhen(context: ReturnType<typeof createVisibleContext>) {\n const visible = props.visibleWhen\n ? props.visibleWhen(context)\n : defaultVisibleWhen(context)\n return visible !== false\n}\n\nfunction isActionsNode(node: GridNode, grid: Grid<HTMLElement>) {\n const isLastNode = node.index === grid.childSize - 1\n if ('element' in node && node.element) {\n return node.element.dataset.queryFormActions !== undefined || isLastNode\n }\n return isLastNode\n}\n\nfunction getFieldRowCount(grid: Grid<HTMLElement>) {\n const rows = (grid.children ?? [])\n .filter(node => !isActionsNode(node, grid))\n .map(node => node.shadowRow ?? 0)\n return new Set(rows).size\n}\n\nconst defaultShouldVisible: IGridOptions['shouldVisible'] = (node, grid) => {\n if (isActionsNode(node, grid))\n return true\n return resolveVisibleWhen(createVisibleContext(node, grid))\n}\n\nconst restGridProps = props.gridProps ?? {}\nconst defaultGridProps: Partial<IGridOptions> = restGridProps.minColumns === undefined && restGridProps.maxColumns === undefined\n ? { maxColumns: 4 }\n : {}\n\nconst gridOptions: IGridOptions = {\n ...defaultGridProps,\n ...restGridProps,\n maxRows: (props.defaultExpanded || !props.showToggle) ? Infinity : COLLAPSED_ROWS,\n shouldVisible: defaultShouldVisible,\n}\n\nconst grid = createGrid(gridOptions)\n\nconst expanded = ref(grid.maxRows === Infinity)\nconst gridType = ref<'incomplete-wrap' | 'collapsible' | 'complete-wrap'>('complete-wrap')\n\nfunction updateType() {\n if (!props.showToggle) {\n gridType.value = 'incomplete-wrap'\n return\n }\n\n if (!props.visibleWhen) {\n gridType.value = getFieldRowCount(grid) > COLLAPSED_ROWS\n ? 'collapsible'\n : 'incomplete-wrap'\n return\n }\n\n const nodes = grid.children ?? []\n const hasHiddenInCollapsed = nodes.some((node) => {\n if (isActionsNode(node, grid))\n return false\n return !resolveVisibleWhen(createVisibleContext(node, grid, true))\n })\n /* istanbul ignore next -- @preserve layout branch depends on runtime grid measurement in browser */\n if (hasHiddenInCollapsed) {\n gridType.value = 'collapsible'\n return\n }\n const realRows = grid.shadowRows\n gridType.value = realRows < COLLAPSED_ROWS + 1 ? 'incomplete-wrap' : 'complete-wrap'\n}\n\nautorunEffect(() => {\n expanded.value = grid.maxRows === Infinity\n updateType()\n})\n\nfunction toggle() {\n if (!props.showToggle)\n return\n grid.maxRows = grid.maxRows === Infinity ? COLLAPSED_ROWS : Infinity\n}\n\nconst { hasDefaultSlot, schemaField } = useQueryFormSchemaField({\n slots,\n schema: computed(() => props.schema),\n schemaField: computed(() => props.schemaField),\n components: computed(() => props.components),\n scope: computed(() => props.scope),\n})\n</script>\n\n<template>\n <Form v-bind=\"innerFormProps\" :class=\"prefixCls\">\n <FormGrid :grid=\"grid\">\n <slot v-if=\"hasDefaultSlot\" />\n <component\n :is=\"schemaField\"\n v-else-if=\"schemaField\"\n :schema=\"props.schema\"\n />\n <FormGridColumn\n :grid-span=\"-1\"\n data-query-form-actions\n :class=\"[\n `${prefixCls}__actions`,\n props.actionsAtRowEnd && `${prefixCls}__actions--row-end`,\n ]\"\n >\n <template v-if=\"gridType === 'incomplete-wrap'\">\n <FormButtonGroup\n :align=\"props.actionsAtRowEnd ? 'right' : 'left'\"\n align-form-item\n inline\n :style=\"props.actionsAtRowEnd && { width: '100%' }\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n </FormButtonGroup>\n </template>\n <template v-else-if=\"gridType === 'collapsible' && props.showToggle\">\n <FormButtonGroup\n :align=\"props.actionsAtRowEnd ? 'right' : 'left'\"\n align-form-item\n inline\n :style=\"props.actionsAtRowEnd && { width: '100%' }\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n <slot\n name=\"collapse\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <ElLink\n type=\"primary\"\n :underline=\"compatibleUnderlineProp()\"\n :class=\"`${prefixCls}__collapse-link`\"\n @click=\"toggle\"\n >\n {{ expanded ? props.collapseText : props.expandText }}\n <ElIcon :class=\"`${prefixCls}__collapse-icon`\">\n <ArrowUp v-if=\"expanded\" />\n <ArrowDown v-else />\n </ElIcon>\n </ElLink>\n </slot>\n </FormButtonGroup>\n </template>\n <template v-else>\n <FormButtonGroup\n align=\"right\"\n inline\n style=\"display: flex; width: 100%;\"\n >\n <slot\n name=\"actions\"\n :expanded=\"expanded\"\n :toggle=\"toggle\"\n :type=\"gridType\"\n >\n <Submit v-if=\"props.showSubmit\" v-bind=\"props.submitProps\">\n {{ props.submitText }}\n </Submit>\n <Reset v-if=\"props.showReset\" v-bind=\"props.resetProps\">\n {{ props.resetText }}\n </Reset>\n </slot>\n </FormButtonGroup>\n </template>\n </FormGridColumn>\n </FormGrid>\n </Form>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Component } from "vue";
|
|
2
|
-
import { GeneralField } from "@formily/core";
|
|
2
|
+
import { Form, GeneralField, IFormFeedback } from "@formily/core";
|
|
3
3
|
import { Grid, GridNode, IGridOptions } from "@silver-formily/grid";
|
|
4
4
|
import { ISchema } from "@formily/json-schema";
|
|
5
5
|
|
|
6
6
|
//#region src/query-form/types.d.ts
|
|
7
|
+
type QueryFormFormProvider = Form | (() => Form | undefined);
|
|
7
8
|
interface QueryFormVisibleContext {
|
|
8
9
|
field?: GeneralField;
|
|
9
10
|
schema?: ISchema;
|
|
@@ -15,6 +16,7 @@ interface QueryFormVisibleContext {
|
|
|
15
16
|
}
|
|
16
17
|
type QueryFormVisible = (context: QueryFormVisibleContext) => boolean;
|
|
17
18
|
interface IQueryFormProps {
|
|
19
|
+
form?: QueryFormFormProvider;
|
|
18
20
|
schema?: ISchema;
|
|
19
21
|
schemaField?: Component;
|
|
20
22
|
components?: Record<string, Component>;
|
|
@@ -32,13 +34,18 @@ interface IQueryFormProps {
|
|
|
32
34
|
showReset?: boolean;
|
|
33
35
|
submitProps?: Record<string, any>;
|
|
34
36
|
resetProps?: Record<string, any>;
|
|
37
|
+
onAutoSubmit?: (values: Form['values']) => Promise<any>;
|
|
38
|
+
onAutoSubmitFailed?: (error: IFormFeedback[]) => void;
|
|
35
39
|
}
|
|
36
40
|
interface IQueryFormLightProps {
|
|
41
|
+
form?: QueryFormFormProvider;
|
|
37
42
|
schema?: ISchema;
|
|
38
43
|
schemaField?: Component;
|
|
39
44
|
components?: Record<string, Component>;
|
|
40
45
|
scope?: Record<string, any>;
|
|
41
46
|
throttleWait?: number;
|
|
47
|
+
onAutoSubmit?: (values: Form['values']) => Promise<any>;
|
|
48
|
+
onAutoSubmitFailed?: (error: any) => void;
|
|
42
49
|
}
|
|
43
50
|
//#endregion
|
|
44
51
|
export { IQueryFormLightProps, IQueryFormProps, QueryFormVisible, QueryFormVisibleContext };
|
package/esm/radio/index.d.ts
CHANGED
|
@@ -23,14 +23,14 @@ declare const Radio: {
|
|
|
23
23
|
size: {
|
|
24
24
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
25
25
|
};
|
|
26
|
-
label: {
|
|
27
|
-
type: _$vue.PropType<string | number | boolean>;
|
|
28
|
-
default: undefined;
|
|
29
|
-
};
|
|
30
26
|
border: {
|
|
31
27
|
type: _$vue.PropType<boolean>;
|
|
32
28
|
default: false;
|
|
33
29
|
};
|
|
30
|
+
label: {
|
|
31
|
+
type: _$vue.PropType<string | number | boolean>;
|
|
32
|
+
default: undefined;
|
|
33
|
+
};
|
|
34
34
|
}>> & {
|
|
35
35
|
"onUpdate:modelValue"?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
36
36
|
onChange?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
@@ -71,14 +71,14 @@ declare const Radio: {
|
|
|
71
71
|
size: {
|
|
72
72
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
73
73
|
};
|
|
74
|
-
label: {
|
|
75
|
-
type: _$vue.PropType<string | number | boolean>;
|
|
76
|
-
default: undefined;
|
|
77
|
-
};
|
|
78
74
|
border: {
|
|
79
75
|
type: _$vue.PropType<boolean>;
|
|
80
76
|
default: false;
|
|
81
77
|
};
|
|
78
|
+
label: {
|
|
79
|
+
type: _$vue.PropType<string | number | boolean>;
|
|
80
|
+
default: undefined;
|
|
81
|
+
};
|
|
82
82
|
}>> & {
|
|
83
83
|
"onUpdate:modelValue"?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
84
84
|
onChange?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
@@ -113,14 +113,14 @@ declare const Radio: {
|
|
|
113
113
|
size: {
|
|
114
114
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
115
115
|
};
|
|
116
|
-
label: {
|
|
117
|
-
type: _$vue.PropType<string | number | boolean>;
|
|
118
|
-
default: undefined;
|
|
119
|
-
};
|
|
120
116
|
border: {
|
|
121
117
|
type: _$vue.PropType<boolean>;
|
|
122
118
|
default: false;
|
|
123
119
|
};
|
|
120
|
+
label: {
|
|
121
|
+
type: _$vue.PropType<string | number | boolean>;
|
|
122
|
+
default: undefined;
|
|
123
|
+
};
|
|
124
124
|
}>> & {
|
|
125
125
|
"onUpdate:modelValue"?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
126
126
|
onChange?: ((val: string | number | boolean | undefined) => any) | undefined;
|
|
@@ -248,18 +248,14 @@ declare const Radio: {
|
|
|
248
248
|
});
|
|
249
249
|
RadioGroup: {
|
|
250
250
|
new (...args: any[]): _$vue.CreateComponentPublicInstanceWithMixins<Readonly<_$vue.ExtractPropTypes<{
|
|
251
|
-
props: {
|
|
252
|
-
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
253
|
-
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
254
|
-
};
|
|
255
|
-
fill: {
|
|
256
|
-
type: _$vue.PropType<string>;
|
|
257
|
-
default: "";
|
|
258
|
-
};
|
|
259
251
|
modelValue: {
|
|
260
252
|
type: _$vue.PropType<string | number | boolean>;
|
|
261
253
|
default: undefined;
|
|
262
254
|
};
|
|
255
|
+
props: {
|
|
256
|
+
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
257
|
+
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
258
|
+
};
|
|
263
259
|
type: {
|
|
264
260
|
type: _$vue.PropType<"button" | "radio">;
|
|
265
261
|
default: "radio";
|
|
@@ -268,16 +264,20 @@ declare const Radio: {
|
|
|
268
264
|
type: _$vue.PropType<string>;
|
|
269
265
|
default: undefined;
|
|
270
266
|
};
|
|
267
|
+
fill: {
|
|
268
|
+
type: _$vue.PropType<string>;
|
|
269
|
+
default: "";
|
|
270
|
+
};
|
|
271
271
|
disabled: {
|
|
272
272
|
type: _$vue.PropType<boolean>;
|
|
273
273
|
default: undefined;
|
|
274
274
|
};
|
|
275
|
-
options: {
|
|
276
|
-
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
277
|
-
};
|
|
278
275
|
size: {
|
|
279
276
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
280
277
|
};
|
|
278
|
+
options: {
|
|
279
|
+
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
280
|
+
};
|
|
281
281
|
validateEvent: {
|
|
282
282
|
type: _$vue.PropType<boolean>;
|
|
283
283
|
default: true;
|
|
@@ -317,18 +317,14 @@ declare const Radio: {
|
|
|
317
317
|
M: {};
|
|
318
318
|
Defaults: {};
|
|
319
319
|
}, Readonly<_$vue.ExtractPropTypes<{
|
|
320
|
-
props: {
|
|
321
|
-
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
322
|
-
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
323
|
-
};
|
|
324
|
-
fill: {
|
|
325
|
-
type: _$vue.PropType<string>;
|
|
326
|
-
default: "";
|
|
327
|
-
};
|
|
328
320
|
modelValue: {
|
|
329
321
|
type: _$vue.PropType<string | number | boolean>;
|
|
330
322
|
default: undefined;
|
|
331
323
|
};
|
|
324
|
+
props: {
|
|
325
|
+
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
326
|
+
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
327
|
+
};
|
|
332
328
|
type: {
|
|
333
329
|
type: _$vue.PropType<"button" | "radio">;
|
|
334
330
|
default: "radio";
|
|
@@ -337,16 +333,20 @@ declare const Radio: {
|
|
|
337
333
|
type: _$vue.PropType<string>;
|
|
338
334
|
default: undefined;
|
|
339
335
|
};
|
|
336
|
+
fill: {
|
|
337
|
+
type: _$vue.PropType<string>;
|
|
338
|
+
default: "";
|
|
339
|
+
};
|
|
340
340
|
disabled: {
|
|
341
341
|
type: _$vue.PropType<boolean>;
|
|
342
342
|
default: undefined;
|
|
343
343
|
};
|
|
344
|
-
options: {
|
|
345
|
-
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
346
|
-
};
|
|
347
344
|
size: {
|
|
348
345
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
349
346
|
};
|
|
347
|
+
options: {
|
|
348
|
+
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
349
|
+
};
|
|
350
350
|
validateEvent: {
|
|
351
351
|
type: _$vue.PropType<boolean>;
|
|
352
352
|
default: true;
|
|
@@ -380,18 +380,14 @@ declare const Radio: {
|
|
|
380
380
|
__isTeleport?: never;
|
|
381
381
|
__isSuspense?: never;
|
|
382
382
|
} & _$vue.ComponentOptionsBase<Readonly<_$vue.ExtractPropTypes<{
|
|
383
|
-
props: {
|
|
384
|
-
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
385
|
-
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
386
|
-
};
|
|
387
|
-
fill: {
|
|
388
|
-
type: _$vue.PropType<string>;
|
|
389
|
-
default: "";
|
|
390
|
-
};
|
|
391
383
|
modelValue: {
|
|
392
384
|
type: _$vue.PropType<string | number | boolean>;
|
|
393
385
|
default: undefined;
|
|
394
386
|
};
|
|
387
|
+
props: {
|
|
388
|
+
type: _$vue.PropType<_$element_plus0.radioOptionProp>;
|
|
389
|
+
default: () => Required<_$element_plus0.radioOptionProp>;
|
|
390
|
+
};
|
|
395
391
|
type: {
|
|
396
392
|
type: _$vue.PropType<"button" | "radio">;
|
|
397
393
|
default: "radio";
|
|
@@ -400,16 +396,20 @@ declare const Radio: {
|
|
|
400
396
|
type: _$vue.PropType<string>;
|
|
401
397
|
default: undefined;
|
|
402
398
|
};
|
|
399
|
+
fill: {
|
|
400
|
+
type: _$vue.PropType<string>;
|
|
401
|
+
default: "";
|
|
402
|
+
};
|
|
403
403
|
disabled: {
|
|
404
404
|
type: _$vue.PropType<boolean>;
|
|
405
405
|
default: undefined;
|
|
406
406
|
};
|
|
407
|
-
options: {
|
|
408
|
-
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
409
|
-
};
|
|
410
407
|
size: {
|
|
411
408
|
type: _$vue.PropType<"" | "default" | "small" | "large">;
|
|
412
409
|
};
|
|
410
|
+
options: {
|
|
411
|
+
type: _$vue.PropType<_$element_plus0.radioOption[]>;
|
|
412
|
+
};
|
|
413
413
|
validateEvent: {
|
|
414
414
|
type: _$vue.PropType<boolean>;
|
|
415
415
|
default: true;
|
|
@@ -6,6 +6,7 @@ import { isPlainObj } from "@formily/shared";
|
|
|
6
6
|
//#region src/radio/radio-group.vue
|
|
7
7
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
8
|
name: "FRadioGroup",
|
|
9
|
+
inheritAttrs: false,
|
|
9
10
|
__name: "radio-group",
|
|
10
11
|
props: {
|
|
11
12
|
options: {
|
|
@@ -20,6 +21,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
20
21
|
setup(__props) {
|
|
21
22
|
const props = __props;
|
|
22
23
|
const { props: radioProps } = useCleanAttrs();
|
|
24
|
+
const normalizedOptions = computed(() => Array.isArray(props.options) ? props.options : []);
|
|
23
25
|
const OptionType = computed(() => {
|
|
24
26
|
return props.optionType === "button" ? ElRadioButton : ElRadio;
|
|
25
27
|
});
|
|
@@ -28,11 +30,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
28
30
|
return isPlainObj(option);
|
|
29
31
|
}
|
|
30
32
|
function getOptionLabel(option, index) {
|
|
31
|
-
if (isRadioPropsObject(
|
|
33
|
+
if (isRadioPropsObject(normalizedOptions.value[index])) return normalizedOptions.value[index].label;
|
|
32
34
|
return option.label;
|
|
33
35
|
}
|
|
34
36
|
const compatiableProps = computed(() => {
|
|
35
|
-
return
|
|
37
|
+
return normalizedOptions.value.map((option) => {
|
|
36
38
|
if (!isRadioPropsObject(option)) return {
|
|
37
39
|
label: option,
|
|
38
40
|
value: option
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio-group.mjs","names":[],"sources":["../../src/radio/radio-group.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { RadioProps } from 'element-plus'\nimport type { PropType } from 'vue'\nimport { isPlainObj } from '@formily/shared'\nimport { ElRadio, ElRadioButton, ElRadioGroup, version } from 'element-plus'\nimport { computed, useSlots } from 'vue'\nimport { lt, useCleanAttrs } from '../__builtins__'\n\ndefineOptions({\n name: 'FRadioGroup',\n})\n\nconst props = defineProps({\n options: {\n type: Array as PropType<Array<RadioProps | string | number>>,\n default: () => [],\n },\n optionType: {\n type: String as PropType<'default' | 'button'>,\n default: 'default',\n },\n})\n\nconst { props: radioProps } = useCleanAttrs()\n\nconst OptionType = computed(() => {\n return props.optionType === 'button' ? ElRadioButton : ElRadio\n})\nconst IS_LESS_THAN_2_6_0 = lt(version, '2.6.0')\n\nfunction isRadioPropsObject(option: any): option is RadioProps {\n return isPlainObj(option)\n}\n\nfunction getOptionLabel(option: any, index: number) {\n if (isRadioPropsObject(
|
|
1
|
+
{"version":3,"file":"radio-group.mjs","names":[],"sources":["../../src/radio/radio-group.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { RadioProps } from 'element-plus'\nimport type { PropType } from 'vue'\nimport { isPlainObj } from '@formily/shared'\nimport { ElRadio, ElRadioButton, ElRadioGroup, version } from 'element-plus'\nimport { computed, useSlots } from 'vue'\nimport { lt, useCleanAttrs } from '../__builtins__'\n\ndefineOptions({\n name: 'FRadioGroup',\n inheritAttrs: false,\n})\n\nconst props = defineProps({\n options: {\n type: Array as PropType<Array<RadioProps | string | number>>,\n default: () => [],\n },\n optionType: {\n type: String as PropType<'default' | 'button'>,\n default: 'default',\n },\n})\n\nconst { props: radioProps } = useCleanAttrs()\nconst normalizedOptions = computed(() => Array.isArray(props.options) ? props.options : [])\n\nconst OptionType = computed(() => {\n return props.optionType === 'button' ? ElRadioButton : ElRadio\n})\nconst IS_LESS_THAN_2_6_0 = lt(version, '2.6.0')\n\nfunction isRadioPropsObject(option: any): option is RadioProps {\n return isPlainObj(option)\n}\n\nfunction getOptionLabel(option: any, index: number) {\n if (isRadioPropsObject(normalizedOptions.value[index])) {\n return normalizedOptions.value[index].label\n }\n return option.label\n}\n\nconst compatiableProps = computed(() => {\n return normalizedOptions.value.map((option) => {\n if (!isRadioPropsObject(option)) {\n return {\n label: option,\n value: option,\n }\n }\n /* istanbul ignore if -- @preserve */\n if (IS_LESS_THAN_2_6_0) {\n return {\n ...option,\n label: option.value,\n }\n }\n return option\n })\n})\n\nconst slots = useSlots()\n</script>\n\n<template>\n <ElRadioGroup v-bind=\"radioProps\">\n <template v-if=\"!slots.option\">\n <component :is=\"OptionType\" v-for=\"(option, index) of compatiableProps\" :key=\"index\" v-bind=\"option\">\n {{ getOptionLabel(option, index) }}\n </component>\n </template>\n <template v-else>\n <component :is=\"OptionType\" v-for=\"(option, index) of compatiableProps\" :key=\"index\" v-bind=\"option\">\n <slot name=\"option\" :option=\"option\" />\n </component>\n </template>\n </ElRadioGroup>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAWd,MAAM,EAAE,OAAO,eAAe,eAAc;EAC5C,MAAM,oBAAoB,eAAe,MAAM,QAAQ,MAAM,QAAQ,GAAG,MAAM,UAAU,EAAE,CAAA;EAE1F,MAAM,aAAa,eAAe;AAChC,UAAO,MAAM,eAAe,WAAW,gBAAgB;IACxD;EACD,MAAM,qBAAqB,GAAG,SAAS,QAAO;EAE9C,SAAS,mBAAmB,QAAmC;AAC7D,UAAO,WAAW,OAAM;;EAG1B,SAAS,eAAe,QAAa,OAAe;AAClD,OAAI,mBAAmB,kBAAkB,MAAM,OAAO,CACpD,QAAO,kBAAkB,MAAM,OAAO;AAExC,UAAO,OAAO;;EAGhB,MAAM,mBAAmB,eAAe;AACtC,UAAO,kBAAkB,MAAM,KAAK,WAAW;AAC7C,QAAI,CAAC,mBAAmB,OAAO,CAC7B,QAAO;KACL,OAAO;KACP,OAAO;KACT;;AAGF,QAAI,mBACF,QAAO;KACL,GAAG;KACH,OAAO,OAAO;KAChB;AAEF,WAAO;KACR;IACF;EAED,MAAM,QAAQ,UAAS;;uBAIrB,YAWe,MAAA,aAAA,EAAA,eAAA,mBAXO,MAAA,WAAU,CAAA,CAAA,EAAA;2BAKnB,CAAA,CAJM,MAAA,MAAK,CAAC,UAAA,UAAA,KAAA,EACrB,mBAEY,UAAA,EAAA,KAAA,GAAA,EAAA,WAF0C,iBAAA,QAAlB,QAAQ,UAAK;yBAAjD,YAEY,wBAFI,WAAA,MAAU,EAA1B,WAEY,EAF6D,KAAK,OAAK,EAAA,EAAA,SAAA,MAAA,EAAU,OAAM,EAAA;6BAC9D,CAAA,gBAAA,gBAAhC,eAAe,QAAQ,MAAK,CAAA,EAAA,EAAA,CAAA,CAAA;;;kCAIjC,mBAEY,UAAA,EAAA,KAAA,GAAA,EAAA,WAF0C,iBAAA,QAAlB,QAAQ,UAAK;yBAAjD,YAEY,wBAFI,WAAA,MAAU,EAA1B,WAEY,EAF6D,KAAK,OAAK,EAAA,EAAA,SAAA,MAAA,EAAU,OAAM,EAAA;6BAC1D,CAAvC,WAAuC,KAAA,QAAA,UAAA,EAAV,QAAM,CAAA,CAAA,CAAA"}
|
package/esm/select/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ declare const Select: {
|
|
|
8
8
|
disabled: boolean;
|
|
9
9
|
created: boolean;
|
|
10
10
|
}> & Omit<{
|
|
11
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
11
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
12
12
|
readonly disabled: boolean;
|
|
13
13
|
readonly created: boolean;
|
|
14
14
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -22,7 +22,7 @@ declare const Select: {
|
|
|
22
22
|
disabled: boolean;
|
|
23
23
|
created: boolean;
|
|
24
24
|
}> & Omit<{
|
|
25
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
25
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
26
26
|
readonly disabled: boolean;
|
|
27
27
|
readonly created: boolean;
|
|
28
28
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -40,7 +40,7 @@ declare const Select: {
|
|
|
40
40
|
disabled: boolean;
|
|
41
41
|
created: boolean;
|
|
42
42
|
}> & Omit<{
|
|
43
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
43
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
44
44
|
readonly disabled: boolean;
|
|
45
45
|
readonly created: boolean;
|
|
46
46
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -54,7 +54,7 @@ declare const Select: {
|
|
|
54
54
|
disabled: boolean;
|
|
55
55
|
created: boolean;
|
|
56
56
|
}> & Omit<{
|
|
57
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
57
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
58
58
|
readonly disabled: boolean;
|
|
59
59
|
readonly created: boolean;
|
|
60
60
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -69,7 +69,7 @@ declare const Select: {
|
|
|
69
69
|
disabled: boolean;
|
|
70
70
|
created: boolean;
|
|
71
71
|
}> & Omit<{
|
|
72
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
72
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
73
73
|
readonly disabled: boolean;
|
|
74
74
|
readonly created: boolean;
|
|
75
75
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -83,7 +83,7 @@ declare const Select: {
|
|
|
83
83
|
disabled: boolean;
|
|
84
84
|
created: boolean;
|
|
85
85
|
}> & Omit<{
|
|
86
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
86
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
87
87
|
readonly disabled: boolean;
|
|
88
88
|
readonly created: boolean;
|
|
89
89
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -96,7 +96,7 @@ declare const Select: {
|
|
|
96
96
|
disabled: boolean;
|
|
97
97
|
created: boolean;
|
|
98
98
|
}> & Omit<{
|
|
99
|
-
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(
|
|
99
|
+
readonly value: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(BooleanConstructor | ObjectConstructor | NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
100
100
|
readonly disabled: boolean;
|
|
101
101
|
readonly created: boolean;
|
|
102
102
|
readonly label?: _$element_plus_es_utils_index_mjs0.EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>;
|
|
@@ -18,7 +18,7 @@ declare const SelectTable: {
|
|
|
18
18
|
clickRowToSelect: boolean;
|
|
19
19
|
showAlertToolbar: boolean;
|
|
20
20
|
ignoreSelectable: boolean;
|
|
21
|
-
},
|
|
21
|
+
}, false, {}, {}, _$vue.GlobalComponents, _$vue.GlobalDirectives, string, {}, any, _$vue.ComponentProvideOptions, {
|
|
22
22
|
P: {};
|
|
23
23
|
B: {};
|
|
24
24
|
D: {};
|
|
@@ -46,57 +46,90 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
46
46
|
const emit = __emit;
|
|
47
47
|
const elTableProps = useAttrs();
|
|
48
48
|
const field = useField();
|
|
49
|
+
const elTableRef = ref();
|
|
50
|
+
const radioSelectedKey = ref();
|
|
51
|
+
function requireRowKey() {
|
|
52
|
+
if (!props.rowKey) throw new Error("rowKey is required");
|
|
53
|
+
return props.rowKey;
|
|
54
|
+
}
|
|
55
|
+
function getRowValue(item) {
|
|
56
|
+
if (!props.rowKey || !item) return;
|
|
57
|
+
return item[props.rowKey];
|
|
58
|
+
}
|
|
59
|
+
function getSingleSelectedKey(value) {
|
|
60
|
+
if (!isValid(value)) return null;
|
|
61
|
+
return props.optionAsValue ? getRowValue(value) ?? null : value;
|
|
62
|
+
}
|
|
63
|
+
function getMultipleSelectedKeys(value) {
|
|
64
|
+
if (!Array.isArray(value)) return [];
|
|
65
|
+
return value.map((item) => props.optionAsValue ? getRowValue(item) : item).filter(isValid);
|
|
66
|
+
}
|
|
67
|
+
function syncRadioSelection(item) {
|
|
68
|
+
radioSelectedKey.value = getRowValue(item) ?? null;
|
|
69
|
+
elTableRef.value?.setCurrentRow(item);
|
|
70
|
+
}
|
|
49
71
|
function compatibleRadioValue(key) {
|
|
50
72
|
return lt(version, "2.6.0") ? { label: key } : { value: key };
|
|
51
73
|
}
|
|
52
|
-
const elTableRef = ref();
|
|
53
|
-
const rowKey = props.rowKey;
|
|
54
74
|
function getInitialSelectedList() {
|
|
55
|
-
if (props.
|
|
56
|
-
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
75
|
+
if (!isValid(props.modelValue)) return [];
|
|
76
|
+
if (props.mode === "multiple") {
|
|
77
|
+
if (!Array.isArray(props.modelValue)) return [];
|
|
78
|
+
return props.modelValue.map((item) => {
|
|
79
|
+
if (!props.optionAsValue) {
|
|
80
|
+
if (!props.rowKey) return null;
|
|
81
|
+
return { [props.rowKey]: item };
|
|
82
|
+
}
|
|
83
|
+
return item;
|
|
84
|
+
}).filter(isValid);
|
|
85
|
+
} else {
|
|
86
|
+
if (props.optionAsValue) return [props.modelValue];
|
|
87
|
+
if (!props.rowKey) return [];
|
|
88
|
+
return [{ [props.rowKey]: props.modelValue }];
|
|
89
|
+
}
|
|
60
90
|
}
|
|
61
91
|
const selectedFlatDataSource = ref(getInitialSelectedList());
|
|
62
92
|
let prevSelection = [];
|
|
63
|
-
const radioSelectedKey = ref();
|
|
64
93
|
const currentSelectLength = computed(() => {
|
|
65
94
|
if (props.mode === "multiple") return Array.isArray(props.modelValue) ? props.modelValue.length : 0;
|
|
66
95
|
else return isValid(radioSelectedKey.value) ? 1 : 0;
|
|
67
96
|
});
|
|
68
97
|
watch(() => props.dataSource, async () => {
|
|
69
|
-
const selectedKeys = uniq(selectedFlatDataSource.value.map((item) => item
|
|
98
|
+
const selectedKeys = uniq(selectedFlatDataSource.value.map((item) => getRowValue(item)).filter(isValid));
|
|
70
99
|
await nextTick();
|
|
71
100
|
for (const item of props.dataSource) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
onRadioClick(item);
|
|
76
|
-
}
|
|
101
|
+
const itemKey = getRowValue(item);
|
|
102
|
+
if (isValid(itemKey) && selectedKeys.includes(itemKey)) if (props.mode === "multiple") elTableRef.value?.toggleRowSelection(item, true, props.ignoreSelectable);
|
|
103
|
+
else syncRadioSelection(item);
|
|
77
104
|
await nextTick();
|
|
78
|
-
prevSelection = elTableRef.value?.getSelectionRows();
|
|
105
|
+
prevSelection = elTableRef.value?.getSelectionRows() ?? [];
|
|
79
106
|
}
|
|
80
107
|
}, { immediate: true });
|
|
81
108
|
watch(() => [props.modelValue, props.loading], async ([value, loading]) => {
|
|
82
109
|
if (loading) return;
|
|
83
|
-
if (props.mode === "single")
|
|
84
|
-
|
|
110
|
+
if (props.mode === "single") {
|
|
111
|
+
const selectedKey = getSingleSelectedKey(value);
|
|
112
|
+
radioSelectedKey.value = selectedKey;
|
|
113
|
+
const selectedItem = props.dataSource.find((item) => getRowValue(item) === selectedKey);
|
|
114
|
+
elTableRef.value?.setCurrentRow(selectedItem);
|
|
115
|
+
} else {
|
|
85
116
|
await nextTick();
|
|
86
|
-
const currentDisplayDataKeys = elTableRef.value?.getSelectionRows().map((item) => item[
|
|
87
|
-
const valueKeys =
|
|
88
|
-
selectedFlatDataSource.value = selectedFlatDataSource.value.filter((item) => valueKeys.includes(item
|
|
117
|
+
const currentDisplayDataKeys = elTableRef.value?.getSelectionRows().map((item) => getRowValue(item)).filter(isValid) ?? [];
|
|
118
|
+
const valueKeys = getMultipleSelectedKeys(value);
|
|
119
|
+
selectedFlatDataSource.value = selectedFlatDataSource.value.filter((item) => valueKeys.includes(getRowValue(item)));
|
|
89
120
|
if (isEqual(valueKeys, currentDisplayDataKeys)) return;
|
|
90
121
|
const diffItems = xor(valueKeys, currentDisplayDataKeys);
|
|
91
|
-
for (const tableItem of props.dataSource)
|
|
92
|
-
const
|
|
93
|
-
|
|
122
|
+
for (const tableItem of props.dataSource) {
|
|
123
|
+
const itemKey = getRowValue(tableItem);
|
|
124
|
+
if (isValid(itemKey) && diffItems.includes(itemKey)) {
|
|
125
|
+
const shouldSelect = valueKeys.includes(itemKey);
|
|
126
|
+
elTableRef.value?.toggleRowSelection(tableItem, shouldSelect, props.ignoreSelectable);
|
|
127
|
+
}
|
|
94
128
|
}
|
|
95
129
|
}
|
|
96
130
|
}, { immediate: true });
|
|
97
131
|
function onSelect(newSelection) {
|
|
98
|
-
|
|
99
|
-
if (!rowKey) throw new Error("rowKey is required");
|
|
132
|
+
const rowKey = requireRowKey();
|
|
100
133
|
const removedItemList = prevSelection.length > newSelection.length ? differenceWith(prevSelection, newSelection, (itemPrev, itemNext) => {
|
|
101
134
|
return itemPrev[rowKey] === itemNext[rowKey];
|
|
102
135
|
}) : [];
|
|
@@ -112,7 +145,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
112
145
|
else emit("update:modelValue", selectedFlatDataSource.value.map((item) => item[rowKey]));
|
|
113
146
|
}
|
|
114
147
|
function onRadioClick(item) {
|
|
115
|
-
|
|
148
|
+
const rowKey = requireRowKey();
|
|
149
|
+
syncRadioSelection(item);
|
|
116
150
|
if (props.optionAsValue) emit("update:modelValue", item);
|
|
117
151
|
else emit("update:modelValue", item[rowKey]);
|
|
118
152
|
}
|
|
@@ -131,7 +165,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
131
165
|
emit("update:modelValue", []);
|
|
132
166
|
selectedFlatDataSource.value = [];
|
|
133
167
|
} else {
|
|
134
|
-
|
|
168
|
+
syncRadioSelection(null);
|
|
135
169
|
emit("update:modelValue", null);
|
|
136
170
|
}
|
|
137
171
|
}
|
|
@@ -155,7 +189,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
155
189
|
ref_key: "elTableRef",
|
|
156
190
|
ref: elTableRef
|
|
157
191
|
}, unref(elTableProps), {
|
|
158
|
-
"row-key":
|
|
192
|
+
"row-key": __props.rowKey,
|
|
159
193
|
"row-class-name": props.clickRowToSelect ? `--click-row-select` : "",
|
|
160
194
|
data: props.dataSource,
|
|
161
195
|
"highlight-current-row": props.mode === "single",
|
|
@@ -176,7 +210,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
176
210
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => radioSelectedKey.value = $event),
|
|
177
211
|
style: { "width": "100%" }
|
|
178
212
|
}, {
|
|
179
|
-
default: withCtx(() => [createVNode(unref(ElRadio), mergeProps(compatibleRadioValue(row[
|
|
213
|
+
default: withCtx(() => [createVNode(unref(ElRadio), mergeProps(compatibleRadioValue(row[__props.rowKey]), { onChange: () => onRadioClick(row) }), {
|
|
180
214
|
default: withCtx(() => [..._cache[2] || (_cache[2] = [createTextVNode(" \xA0 ", -1)])]),
|
|
181
215
|
_: 1
|
|
182
216
|
}, 16, ["onChange"])]),
|