diff --git a/apps/web-antd/src/views/mall/product/spu/form/modules/sku-table-select.vue b/apps/web-antd/src/views/mall/product/spu/components/sku-table-select.vue similarity index 71% rename from apps/web-antd/src/views/mall/product/spu/form/modules/sku-table-select.vue rename to apps/web-antd/src/views/mall/product/spu/components/sku-table-select.vue index 0900c360e..3ff82032f 100644 --- a/apps/web-antd/src/views/mall/product/spu/form/modules/sku-table-select.vue +++ b/apps/web-antd/src/views/mall/product/spu/components/sku-table-select.vue @@ -8,7 +8,7 @@ import { computed, ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { fenToYuan } from '@vben/utils'; -import { Input, message } from 'ant-design-vue'; +import { message } from 'ant-design-vue'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { getSpu } from '#/api/mall/product/spu'; @@ -21,18 +21,13 @@ const emit = defineEmits<{ change: [sku: MallSpuApi.Sku]; }>(); -const selectedSkuId = ref(); const spuId = ref(); -/** 配置列 */ -// TODO @puhui999:貌似列太宽了? +/** 表格列配置 */ const gridColumns = computed(() => [ { - field: 'id', - title: '#', - width: 60, - align: 'center', - slots: { default: 'radio-column' }, + type: 'radio', + width: 55, }, { field: 'picUrl', @@ -72,6 +67,9 @@ const [Grid, gridApi] = useVbenVxeGrid({ height: 400, border: true, showOverflow: true, + radioConfig: { + reserve: true, + }, proxyConfig: { ajax: { query: async () => { @@ -93,46 +91,42 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, }, }, + gridEvents: { + radioChange: handleRadioChange, + }, }); /** 处理选中 */ -function handleSelected(row: MallSpuApi.Sku) { - emit('change', row); - modalApi.close(); - selectedSkuId.value = undefined; +function handleRadioChange() { + const selectedRow = gridApi.grid.getRadioRecord() as MallSpuApi.Sku; + if (selectedRow) { + emit('change', selectedRow); + modalApi.close(); + } } const [Modal, modalApi] = useVbenModal({ destroyOnClose: true, onOpenChange: async (isOpen: boolean) => { if (!isOpen) { - selectedSkuId.value = undefined; + gridApi.grid.clearRadioRow(); spuId.value = undefined; return; } + const data = modalApi.getData(); - // TODO @puhui999:这里要不 if return,让括号的层级简单点。 - if (data?.spuId) { - spuId.value = data.spuId; - // 触发数据查询 - await gridApi.query(); + if (!data?.spuId) { + return; } + + spuId.value = data.spuId; + await gridApi.query(); }, }); diff --git a/apps/web-antd/src/views/mall/product/spu/components/spu-table-select.vue b/apps/web-antd/src/views/mall/product/spu/components/spu-table-select.vue new file mode 100644 index 000000000..0098c9813 --- /dev/null +++ b/apps/web-antd/src/views/mall/product/spu/components/spu-table-select.vue @@ -0,0 +1,225 @@ + + + + diff --git a/apps/web-antd/src/views/mall/product/spu/form/modules/spu-table-select.vue b/apps/web-antd/src/views/mall/product/spu/form/modules/spu-table-select.vue deleted file mode 100644 index 19cb654d2..000000000 --- a/apps/web-antd/src/views/mall/product/spu/form/modules/spu-table-select.vue +++ /dev/null @@ -1,346 +0,0 @@ - - - -