From 5aa54528a38cba56aa74b323140c341bb7fb41ec Mon Sep 17 00:00:00 2001 From: shizhongming Date: Thu, 25 Apr 2024 21:07:45 +0800 Subject: [PATCH] =?UTF-8?q?perf(table-select):=20=E4=BC=98=E5=8C=96table-s?= =?UTF-8?q?elect=E7=BB=84=E4=BB=B6=E5=8D=95=E9=80=89=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=B8=8B=E5=8F=AF=E8=83=BD=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/base/SmartTableSelect.tsx | 36 ++++++++++++------- .../components/base/SmartTableSelectModal.tsx | 1 - .../components/user/SmartUserTableSelect.vue | 35 ++++++++++-------- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/src/components/Form/src/smart-boot/components/base/SmartTableSelect.tsx b/src/components/Form/src/smart-boot/components/base/SmartTableSelect.tsx index dfe3ff816..f700bb39a 100644 --- a/src/components/Form/src/smart-boot/components/base/SmartTableSelect.tsx +++ b/src/components/Form/src/smart-boot/components/base/SmartTableSelect.tsx @@ -1,6 +1,6 @@ import type { SmartTableProps } from '@/components/SmartTable'; -import { defineComponent, ref } from 'vue'; +import { computed, defineComponent, ref, toRefs, unref } from 'vue'; import { Row, Col } from 'ant-design-vue'; import { propTypes } from '@/utils/propTypes'; @@ -19,7 +19,7 @@ export default defineComponent({ props: { // 是否支持多选 multiple: propTypes.bool.def(true), - value: propTypes.oneOfType([propTypes.string, propTypes.array]), + value: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.number]), // label字段 labelField: propTypes.string.isRequired, // value字段 @@ -33,6 +33,7 @@ export default defineComponent({ }, emits: ['update:value', 'change'], setup(props, { emit }) { + const { value: valueRef, multiple: multipleRef } = toRefs(props); const [registerModal, { openModal }] = useModal(); const optionsRef = ref>([]); @@ -40,20 +41,27 @@ export default defineComponent({ optionsRef.value = options; }; const handleSelectData = (options: any[]) => { - emit( - 'update:value', - options.map((item) => item.value), - ); - emit( - 'change', - options.map((item) => item.value), - ); + handleEmit(options.map((item) => item.value)); }; const handleDeselect = (value) => { const data = (props.value as any[]).filter((item) => item !== value); - emit('update:value', data); - emit('change', data); + handleEmit(data); }; + const handleEmit = (data: any[]) => { + let value: any | undefined = undefined; + if (data && data.length > 0) { + value = data; + } + if (value && !props.multiple) { + value = value[0]; + } + emit('update:value', value); + emit('change', value); + }; + const computedSelectValue = computed(() => { + const value = unref(valueRef); + return value ? (unref(multipleRef) ? value : [value]) : value; + }); return { registerModal, openModal, @@ -61,6 +69,7 @@ export default defineComponent({ optionsRef, handleDeselect, handleOptionChange, + computedSelectValue, }; }, render() { @@ -81,6 +90,7 @@ export default defineComponent({ handleDeselect, handleOptionChange, size, + computedSelectValue, } = this; const modalSlots: any = { table: $slots.table, @@ -120,7 +130,7 @@ export default defineComponent({ onSelectData={handleSelectData} valueField={valueField} // @ts-ignore - selectValues={value} + selectValues={computedSelectValue} multiple={multiple} tableProps={tableProps} > diff --git a/src/components/Form/src/smart-boot/components/base/SmartTableSelectModal.tsx b/src/components/Form/src/smart-boot/components/base/SmartTableSelectModal.tsx index e677a32aa..4e4d97190 100644 --- a/src/components/Form/src/smart-boot/components/base/SmartTableSelectModal.tsx +++ b/src/components/Form/src/smart-boot/components/base/SmartTableSelectModal.tsx @@ -187,7 +187,6 @@ const renderTable = (instance) => { Recordable>, + }); + const { t } = useI18n(); const listUserById = (ids) => { @@ -27,13 +31,19 @@ useSearchForm: true, proxyConfig: { ajax: { - query: ({ ajaxParameter }) => listUserApi(ajaxParameter), + query: ({ ajaxParameter }) => { + let parameter = ajaxParameter; + if (props.parameterHandler) { + parameter = props.parameterHandler(ajaxParameter); + } + return listUserApi(parameter); + }, }, }, - checkboxConfig: { - rowTrigger: 'multiple', - highlight: true, - }, + // checkboxConfig: { + // rowTrigger: 'multiple', + // highlight: true, + // }, rowConfig: { isHover: true, }, @@ -43,9 +53,6 @@ layout: 'inline', searchWithSymbol: true, actionColOptions: { span: undefined }, - baseColProps: { - span: 12, - }, schemas: [ { label: t('system.views.user.table.fullName'), @@ -56,12 +63,12 @@ ], }, columns: [ - { - type: 'checkbox', - width: 60, - align: 'center', - fixed: 'left', - }, + // { + // type: 'checkbox', + // width: 60, + // align: 'center', + // fixed: 'left', + // }, { title: '{system.views.user.table.username}', field: 'username',