From 548da70f9fc157e33a2cba00a5c57a207ffa3742 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 28 Jan 2026 17:45:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(mall):=20=E3=80=90antd/ele=E3=80=91?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=95=86=E5=93=81=20SKU=20=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端创建/编辑商品时,SKU 对象缺少 name 字段初始化,导致提交时后端校验 "商品 SKU 名字不能为空" 失败。 修改内容: - form/index.vue: 初始化 SKU 添加 name 字段,提交前校验商品名称并赋值给 SKU - sku-list.vue: createEmptySku 函数添加 name 字段 影响范围:web-antd、web-ele 两个版本 --- .../views/mall/product/spu/components/sku-list.vue | 1 + .../src/views/mall/product/spu/form/index.vue | 9 +++++++++ .../views/mall/product/spu/components/sku-list.vue | 1 + .../src/views/mall/product/spu/form/index.vue | 14 +++++++++++--- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/web-antd/src/views/mall/product/spu/components/sku-list.vue b/apps/web-antd/src/views/mall/product/spu/components/sku-list.vue index a5f6f383a..383cda1cd 100644 --- a/apps/web-antd/src/views/mall/product/spu/components/sku-list.vue +++ b/apps/web-antd/src/views/mall/product/spu/components/sku-list.vue @@ -56,6 +56,7 @@ const tableHeaders = ref<{ label: string; prop: string }[]>([]); /** 创建空 SKU 数据 */ function createEmptySku(): MallSpuApi.Sku { return { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, diff --git a/apps/web-antd/src/views/mall/product/spu/form/index.vue b/apps/web-antd/src/views/mall/product/spu/form/index.vue index 0d654b318..e8aa3ea3a 100644 --- a/apps/web-antd/src/views/mall/product/spu/form/index.vue +++ b/apps/web-antd/src/views/mall/product/spu/form/index.vue @@ -50,6 +50,7 @@ const formData = ref({ subCommissionType: false, skus: [ { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, @@ -181,6 +182,11 @@ async function handleSubmit() { .merge(otherFormApi) .submitAllForm(true); values.skus = formData.value.skus; + // 校验商品名称不能为空(用于 SKU name) + if (!values.name || values.name.trim() === '') { + message.error('商品名称不能为空'); + return; + } if (values.skus) { try { // 校验 sku @@ -190,6 +196,8 @@ async function handleSubmit() { return; } values.skus.forEach((item) => { + // 给 sku name 赋值(使用商品名称作为 SKU 名称) + item.name = values.name; // 金额转换:元转分 item.price = convertToInteger(item.price); item.marketPrice = convertToInteger(item.marketPrice); @@ -277,6 +285,7 @@ function handleChangeSpec() { // 重置 sku 列表 formData.value.skus = [ { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, diff --git a/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue b/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue index 06dc595b9..bcf6eb617 100644 --- a/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue +++ b/apps/web-ele/src/views/mall/product/spu/components/sku-list.vue @@ -62,6 +62,7 @@ const tableHeaders = ref<{ label: string; prop: string }[]>([]); /** 创建空 SKU 数据 */ function createEmptySku(): MallSpuApi.Sku { return { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, diff --git a/apps/web-ele/src/views/mall/product/spu/form/index.vue b/apps/web-ele/src/views/mall/product/spu/form/index.vue index 5f8a53d66..b2d65e30e 100644 --- a/apps/web-ele/src/views/mall/product/spu/form/index.vue +++ b/apps/web-ele/src/views/mall/product/spu/form/index.vue @@ -50,6 +50,7 @@ const formData = ref({ subCommissionType: false, skus: [ { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, @@ -168,8 +169,8 @@ const [OtherForm, otherFormApi] = useVbenForm({ }); /** tab 切换 */ -function handleTabChange(key: string) { - activeTabName.value = key; +function handleTabChange(key: number | string) { + activeTabName.value = key as string; } /** 提交表单 */ @@ -181,6 +182,11 @@ async function handleSubmit() { .merge(otherFormApi) .submitAllForm(true); values.skus = formData.value.skus; + // 校验商品名称不能为空(用于 SKU name) + if (!values.name || values.name.trim() === '') { + ElMessage.error('商品名称不能为空'); + return; + } if (values.skus) { try { // 校验 sku @@ -190,6 +196,8 @@ async function handleSubmit() { return; } values.skus.forEach((item) => { + // 给 sku name 赋值(使用商品名称作为 SKU 名称) + item.name = values.name; // 金额转换:元转分 item.price = convertToInteger(item.price); item.marketPrice = convertToInteger(item.marketPrice); @@ -277,6 +285,7 @@ function handleChangeSpec() { // 重置 sku 列表 formData.value.skus = [ { + name: '', // SKU 名称,提交时会自动使用 SPU 名称 price: 0, marketPrice: 0, costPrice: 0, @@ -320,7 +329,6 @@ onMounted(async () => {