From 9c95bebc2682ab2bffa640ac6e238d715f67a4ef Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 20 Jun 2026 10:46:50 -0700 Subject: [PATCH] =?UTF-8?q?fix(ts):=20=E7=B2=BE=E7=A1=AE=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=20Mall=20=E8=A1=A8=E5=8D=95=E5=AD=97=E6=AE=B5=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E4=BF=AE=E5=A4=8D=20TS2322?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 表单状态字段按需标注 number/string | undefined(不使用 Partial,不改共享 VO) - UploadImgs 用 computed 兜底 [],避免传入 undefined - spu 路由 categoryId 从 query 读取转 Number - 必填字符串字段用 || '' 收口;skuData 改 ref() 并由模板 v-if 兜底 ts:check 768 → 748,无新增类型错误 --- .../mall/product/comment/CommentForm.vue | 20 ++++++++----------- src/views/mall/product/comment/ReplyForm.vue | 4 ++-- .../mall/product/property/value/ValueForm.vue | 17 ++++++++++------ src/views/mall/product/spu/index.vue | 4 ++-- .../article/category/ArticleCategoryForm.vue | 10 +++++----- .../seckill/config/SeckillConfigForm.vue | 20 ++++++++++++------- .../afterSale/form/AfterSaleDisagreeForm.vue | 7 +++++-- .../withdraw/BrokerageWithdrawRejectForm.vue | 4 ++-- .../components/StoreStaffTableSelect.vue | 2 +- .../trade/order/form/OrderUpdatePriceForm.vue | 7 +++---- .../order/form/OrderUpdateRemarkForm.vue | 7 +++++-- 11 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/views/mall/product/comment/CommentForm.vue b/src/views/mall/product/comment/CommentForm.vue index b8d700cc9..16138acc2 100644 --- a/src/views/mall/product/comment/CommentForm.vue +++ b/src/views/mall/product/comment/CommentForm.vue @@ -60,16 +60,16 @@ const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({ - id: undefined, - userId: undefined, - userNickname: undefined, - userAvatar: undefined, + id: undefined as number | undefined, + userId: undefined as number | undefined, + userNickname: undefined as string | undefined, + userAvatar: undefined as string | undefined, spuId: 0, - skuId: undefined, + skuId: undefined as number | undefined, descriptionScores: 5, benefitScores: 5, - content: undefined, - picUrls: [] + content: undefined as string | undefined, + picUrls: [] as string[] }) const formRules = reactive({ spuId: [{ required: true, message: '商品不能为空', trigger: 'blur' }], @@ -81,11 +81,7 @@ const formRules = reactive({ benefitScores: [{ required: true, message: '服务星级不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref -const skuData = ref({ - id: -1, - name: '', - picUrl: '' -}) +const skuData = ref() /** 打开弹窗 */ const open = async (type: string, id?: number) => { diff --git a/src/views/mall/product/comment/ReplyForm.vue b/src/views/mall/product/comment/ReplyForm.vue index 4c8bd4d54..aea96fd35 100644 --- a/src/views/mall/product/comment/ReplyForm.vue +++ b/src/views/mall/product/comment/ReplyForm.vue @@ -30,8 +30,8 @@ const { t } = useI18n() // 国际化 const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formData = ref({ - id: undefined, - replyContent: undefined + id: undefined as number | undefined, + replyContent: undefined as string | undefined }) const formRules = reactive({ replyContent: [{ required: true, message: '回复内容不能为空', trigger: 'blur' }] diff --git a/src/views/mall/product/property/value/ValueForm.vue b/src/views/mall/product/property/value/ValueForm.vue index 9e72c09a6..bc88ea598 100644 --- a/src/views/mall/product/property/value/ValueForm.vue +++ b/src/views/mall/product/property/value/ValueForm.vue @@ -8,7 +8,7 @@ label-width="80px" > - + @@ -35,11 +35,16 @@ const dialogVisible = ref(false) // 弹窗的是否展示 const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 -const formData = ref({ - id: undefined, - propertyId: undefined, +const formData = ref<{ + id?: number + propertyId?: number + name: string + remark?: string +}>({ + id: undefined as number | undefined, + propertyId: undefined as number | undefined, name: '', - remark: '' + remark: undefined as string | undefined }) const formRules = reactive({ propertyId: [{ required: true, message: '属性不能为空', trigger: 'blur' }], @@ -98,7 +103,7 @@ const resetForm = () => { id: undefined, propertyId: undefined, name: '', - remark: '' + remark: undefined } formRef.value?.resetFields() } diff --git a/src/views/mall/product/spu/index.vue b/src/views/mall/product/spu/index.vue index e12403ce9..49b18e015 100644 --- a/src/views/mall/product/spu/index.vue +++ b/src/views/mall/product/spu/index.vue @@ -286,7 +286,7 @@ const queryParams = ref({ pageSize: 10, tabType: 0, name: '', - categoryId: undefined, + categoryId: undefined as number | undefined, createTime: undefined }) // 查询参数 const queryFormRef = ref() // 搜索的表单Ref @@ -434,7 +434,7 @@ onActivated(() => { onMounted(async () => { // 解析路由的 categoryId if (route.query.categoryId) { - queryParams.value.categoryId = route.query.categoryId + queryParams.value.categoryId = Number(route.query.categoryId) } // 获得商品信息 await getTabsCount() diff --git a/src/views/mall/promotion/article/category/ArticleCategoryForm.vue b/src/views/mall/promotion/article/category/ArticleCategoryForm.vue index 2e6e9e29f..a23dbabef 100644 --- a/src/views/mall/promotion/article/category/ArticleCategoryForm.vue +++ b/src/views/mall/promotion/article/category/ArticleCategoryForm.vue @@ -51,11 +51,11 @@ const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({ - id: undefined, - name: undefined, - picUrl: undefined, - status: undefined, - sort: undefined + id: undefined as number | undefined, + name: undefined as string | undefined, + picUrl: undefined as string | undefined, + status: undefined as number | undefined, + sort: undefined as number | undefined }) const formRules = reactive({ name: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }], diff --git a/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue b/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue index dcb21a20e..e782494c8 100644 --- a/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue +++ b/src/views/mall/promotion/seckill/config/SeckillConfigForm.vue @@ -25,7 +25,7 @@ /> - + @@ -61,12 +61,12 @@ const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({ - id: undefined, - name: undefined, - startTime: undefined, - endTime: undefined, - sliderPicUrls: undefined, - status: undefined + id: undefined as number | undefined, + name: undefined as string | undefined, + startTime: undefined as string | undefined, + endTime: undefined as string | undefined, + sliderPicUrls: undefined as string[] | undefined, + status: undefined as number | undefined }) const formRules = reactive({ name: [{ required: true, message: '秒杀时段名称不能为空', trigger: 'blur' }], @@ -75,6 +75,12 @@ const formRules = reactive({ status: [{ required: true, message: '活动状态不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref +const sliderPicUrls = computed({ + get: () => formData.value.sliderPicUrls || [], + set: (val: string[]) => { + formData.value.sliderPicUrls = val + } +}) /** 打开弹窗 */ const open = async (type: string, id?: number) => { diff --git a/src/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue b/src/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue index af3ab3544..8d3d7eebd 100644 --- a/src/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue +++ b/src/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue @@ -26,7 +26,10 @@ const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 -const formData = ref({ +const formData = ref<{ + id: number | null | undefined + auditReason: string +}>({ id: undefined, // 售后订单编号 auditReason: '' // 审批备注 }) @@ -37,7 +40,7 @@ const open = async (row: AfterSaleApi.TradeAfterSaleVO) => { resetForm() // 设置数据 formData.value.id = row.id - formData.value.auditReason = row.auditReason + formData.value.auditReason = row.auditReason || '' dialogVisible.value = true } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 diff --git a/src/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue b/src/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue index 2a69b5b05..2dba9f389 100644 --- a/src/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue +++ b/src/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue @@ -25,8 +25,8 @@ const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formData = ref({ - id: undefined, - auditReason: undefined + id: undefined as number | undefined, + auditReason: undefined as string | undefined }) const formRules = reactive({ auditReason: [{ required: true, message: '驳回原因不能为空', trigger: 'blur' }] diff --git a/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue index 5b09d0696..3dfb20c00 100644 --- a/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue +++ b/src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue @@ -159,7 +159,7 @@ const queryParams = reactive({ username: undefined, mobile: undefined, status: undefined, - deptId: undefined, + deptId: undefined as number | undefined, createTime: [] }) const queryFormRef = ref() // 搜索的表单 diff --git a/src/views/mall/trade/order/form/OrderUpdatePriceForm.vue b/src/views/mall/trade/order/form/OrderUpdatePriceForm.vue index 791ee7a48..2135358e5 100644 --- a/src/views/mall/trade/order/form/OrderUpdatePriceForm.vue +++ b/src/views/mall/trade/order/form/OrderUpdatePriceForm.vue @@ -31,18 +31,17 @@ const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formData = ref({ - id: undefined, // 订单编号 + id: undefined as number | undefined, // 订单编号 adjustPrice: 0, // 订单调价 payPrice: '', // 应付金额(总) newPayPrice: '' // 调价后应付金额(总) }) watch( () => formData.value.adjustPrice, - (adjustPrice: number | string) => { + (adjustPrice) => { const numMatch = formData.value.payPrice.match(/\d+(\.\d+)?/) if (numMatch) { const payPriceNum = parseFloat(numMatch[0]) - adjustPrice = typeof adjustPrice === 'string' ? parseFloat(adjustPrice) : adjustPrice formData.value.newPayPrice = (payPriceNum + adjustPrice).toFixed(2) + '元' } } @@ -55,7 +54,7 @@ const open = async (row: TradeOrderApi.OrderVO) => { resetForm() formData.value.id = row.id! // 设置数据 - formData.value.adjustPrice = formatToFraction(row.adjustPrice!) + formData.value.adjustPrice = Number(formatToFraction(row.adjustPrice!)) formData.value.payPrice = floatToFixed2(row.payPrice!) + '元' formData.value.newPayPrice = formData.value.payPrice dialogVisible.value = true diff --git a/src/views/mall/trade/order/form/OrderUpdateRemarkForm.vue b/src/views/mall/trade/order/form/OrderUpdateRemarkForm.vue index e97950156..621cc0a75 100644 --- a/src/views/mall/trade/order/form/OrderUpdateRemarkForm.vue +++ b/src/views/mall/trade/order/form/OrderUpdateRemarkForm.vue @@ -26,7 +26,10 @@ const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 -const formData = ref({ +const formData = ref<{ + id: number | null | undefined + remark: string +}>({ id: undefined, // 订单编号 remark: '' // 订单备注 }) @@ -37,7 +40,7 @@ const open = async (row: TradeOrderApi.OrderVO) => { resetForm() // 设置数据 formData.value.id = row.id - formData.value.remark = row.remark + formData.value.remark = row.remark || '' dialogVisible.value = true } defineExpose({ open }) // 提供 open 方法,用于打开弹窗