Browse Source

fix(订单表单): 修正ID和地址ID类型为字符串避免精度丢失

yz 4 tuần trước cách đây
mục cha
commit
964edf8218

+ 25 - 7
src/components/order-form/order-form-mixin.js

@@ -22,6 +22,7 @@ import {
   MaterialDetailDataSource
 } from '@/constants/order'
 import { ORDER_FORM_EVENTS, CUSTOMER_SELECT_EVENTS, ADDRESS_SELECT_EVENTS, MATERIAL_DETAIL_EVENTS } from './events'
+import { getFormOption } from './form-option'
 
 // 数字格式化工具导入
 import {
@@ -378,6 +379,16 @@ export default {
     },
 
     /**
+     * 表单配置选项
+     * @description 根据编辑模式动态获取表单配置
+     * @returns {AvueFormOption} 表单配置对象
+     * @this {import('./types').OrderFormMixin}
+     */
+    formOption() {
+      return getFormOption(this.isEdit)
+    },
+
+    /**
      * 物料明细表格配置
      * @description 获取物料明细表格的配置选项
      * @returns {Object} 表格配置对象
@@ -698,7 +709,7 @@ export default {
       const orderQuantityValidation = validateNumber(orderData.orderQuantity)
 
       return {
-        id: orderData.id ? Number(orderData.id) : undefined,
+        id: orderData.id ? String(orderData.id) : undefined,
         orderCode: String(orderData.orderCode || ''),
         orgId: orderData.orgId ? Number(orderData.orgId) : undefined,
         orgCode: String(orderData.orgCode || ''),
@@ -710,7 +721,7 @@ export default {
         orderQuantity: orderQuantityValidation.isValid ? parseInt(orderQuantityValidation.value.toString()) : 0,
         totalAmount: totalAmountValidation.isValid ? preciseRound(totalAmountValidation.value, 2) : null,
         totalQuantity: totalQuantityValidation.isValid ? preciseRound(totalQuantityValidation.value, 4) : null,
-        addressId: orderData.addressId ? Number(orderData.addressId) : null,
+        addressId: orderData.addressId ? String(orderData.addressId) : '',
         receiverName: String(orderData.receiverName || ''),
         receiverPhone: String(orderData.receiverPhone || ''),
         receiverRegion: String(orderData.receiverRegion || ''),
@@ -846,6 +857,7 @@ export default {
       // 创建销售订单数据对象
       const salesOrderData = {
         ...formData,
+        id: formData.id ? Number(formData.id) : 0,
         orgId: formData.orgId ? Number(formData.orgId) : 0,
         customerId: formData.customerId ? Number(formData.customerId) : 0,
         orderType: Number(formData.orderType) || 0,
@@ -856,10 +868,10 @@ export default {
         pcBladeOrderItemList
       }
 
-      // 新增模式下,移除orderCode字段
+      // 新增模式下,移除orderCode和id字段
       if (!this.isEdit) {
-        const { orderCode, ...dataWithoutOrderCode } = salesOrderData
-        return dataWithoutOrderCode
+        const { orderCode, id, ...dataWithoutOrderCodeAndId } = salesOrderData
+        return dataWithoutOrderCodeAndId
       }
 
       return salesOrderData
@@ -936,8 +948,8 @@ export default {
       Object.keys(data).forEach(key => {
         const value = /** @type {Record<string, any>} */(data)[key]
 
-        // 新增模式下,移除orderCode字段
-        if (!this.isEdit && key === 'orderCode') {
+        // 新增模式下,移除orderCode和id字段
+        if (!this.isEdit && (key === 'orderCode' || key === 'id')) {
           return
         }
 
@@ -955,6 +967,12 @@ export default {
           cleanedData[key] = validation.isValid ? Math.round(validation.value) : 0
         } else if (['orderType', 'status'].includes(key)) {
           cleanedData[key] = Number(value) || 0
+        } else if (key === 'id' && this.isEdit) {
+          // 编辑模式下保持id字段为字符串类型,避免大整数精度丢失
+          cleanedData[key] = String(value)
+        } else if (key === 'addressId') {
+          // 地址ID保持为字符串类型,确保与地址选择组件的类型一致
+          cleanedData[key] = String(value)
         } else {
           cleanedData[key] = value
         }

+ 1 - 1
src/components/order-form/types.d.ts

@@ -62,7 +62,7 @@ export interface ValidationRule {
  */
 export interface OrderFormModel {
   /** 订单唯一标识 */
-  id?: number;
+  id?: string;
   /** 订单编码 */
   orderCode: string;
   /** 组织ID */