From 388ef8351d43797e4e81efe175fbb180efb8ffbf Mon Sep 17 00:00:00 2001 From: zhaojinfeng <121016171@qq.com> Date: Mon, 14 Aug 2023 19:49:27 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8F=82=E6=95=B0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/select-transfer-modal/index.vue | 36 +++++++++++++++--------- stories/SelectTransferModal.stories.ts | 4 +-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/select-transfer-modal/index.vue b/packages/select-transfer-modal/index.vue index 51a760c..d8e08d9 100644 --- a/packages/select-transfer-modal/index.vue +++ b/packages/select-transfer-modal/index.vue @@ -2,7 +2,7 @@ * @Author: zhaojinfeng 121016171@qq.com * @Date: 2023-08-14 11:07:15 * @LastEditors: zhaojinfeng 121016171@qq.com - * @LastEditTime: 2023-08-14 19:03:32 + * @LastEditTime: 2023-08-14 19:30:19 * @FilePath: \vue3\packages\select-transfer-modal\index.vue * @Description: * @@ -77,9 +77,8 @@ import locale from 'element-plus/lib/locale/lang/zh-cn' const properties = withDefaults( defineProps<{ - value?: TransferKey[] + value?: any[] show?: boolean - defaultData?: Record[] defaultParams?: Record formItems?: FormItem[] request: (args: any) => Promise @@ -91,6 +90,7 @@ const properties = withDefaults( width?: string | number zIndex?: number props?: TransferPropsAlias + formattter?: (row: Record) => any }>(), { props: () => ({ key: 'id', label: 'name', disabled: 'disabled' }), @@ -102,17 +102,20 @@ const properties = withDefaults( title: '选择', width: '70%', zIndex: 2023, + formattter(row: Record) { + return { ...row } + }, }, ) const emit = defineEmits<{ (event: 'update:show', show: boolean): void - (event: 'update:value', show: any): void - (event: 'confirm', row: any): void + (event: 'update:value', value: any[]): void + (event: 'confirm', rows: Record[], keys: TransferKey[]): void }>() const showDialog = ref(false) -const transferValue = $ref([]) +let transferValue = $ref([]) const temp = reactive({}) @@ -167,8 +170,9 @@ function open() { } function confirm() { - emit('confirm', [...transferValue]) - emit('update:value', [...transferValue]) + const selections = transferValue.map(key => properties.formattter(temp[key])) + emit('update:value', selections) + emit('confirm', selections, [...transferValue]) if (properties.hideButton) emit('update:show', false) else @@ -193,14 +197,20 @@ function handleSizeChange(val: number) { queryParams.pageNum = 1 } -properties.defaultData?.forEach((e) => { - temp[e[properties.props.key]] = e -}) +function transferValueInit() { + const { value = [] } = properties -watch(() => properties.defaultData, (data) => { - data?.forEach((e) => { + transferValue = value.map((e) => { temp[e[properties.props.key]] = e + return e[properties.props.key] }) +} + +watch(() => properties.value, () => { + if (!showDialog.value) { + // 关闭时触发 + transferValueInit() + } }) watch(() => properties.show, (show) => { showDialog.value = show diff --git a/stories/SelectTransferModal.stories.ts b/stories/SelectTransferModal.stories.ts index d118ecb..309b784 100644 --- a/stories/SelectTransferModal.stories.ts +++ b/stories/SelectTransferModal.stories.ts @@ -2,7 +2,7 @@ * @Author: zhaojinfeng 121016171@qq.com * @Date: 2023-08-14 11:07:15 * @LastEditors: zhaojinfeng 121016171@qq.com - * @LastEditTime: 2023-08-14 18:52:56 + * @LastEditTime: 2023-08-14 19:35:09 * @FilePath: \vue3\stories\SelectTransferModal.stories.ts * @Description: * @@ -37,7 +37,7 @@ const meta = { title: '表单组件/SelectTransferModal', tags: ['表单组件', 'autodocs'], args: { - value: [2], + value: [], show: false, defaultParams: {}, formItems: [{ label: 'label1', prop: 'prop1' }, { label: 'label2', prop: 'prop2', selectOptions: [{ label: '1', value: '1' }, { label: '2', value: '2' }] }],