|
@@ -1,12 +1,19 @@
|
|
|
import { add, update, getDetail } from '@/api/order/order'
|
|
|
import { getList as getOrderItemList } from '@/api/order/order-item'
|
|
|
+import { createSalesOrder } from '@/api/order/sales-order'
|
|
|
import {
|
|
|
ORDER_TYPES,
|
|
|
ORDER_STATUS,
|
|
|
ORDER_TYPE_OPTIONS,
|
|
|
ORDER_STATUS_OPTIONS
|
|
|
} from '@/constants/order'
|
|
|
-import { MaterialDetailDataSource } from './constants'
|
|
|
+
|
|
|
+// 导入本地常量定义
|
|
|
+import {
|
|
|
+ MaterialDetailDataSource
|
|
|
+} from './constants'
|
|
|
+
|
|
|
+// 导入数字格式化工具
|
|
|
import {
|
|
|
formatAmount,
|
|
|
formatFloatNumber,
|
|
@@ -27,10 +34,11 @@ import {
|
|
|
* @typedef {import('./constants').ApiResponse} ApiResponse
|
|
|
* @typedef {import('./constants').PaginatedResponse} PaginatedResponse
|
|
|
* @typedef {import('./constants').ValidationRule} ValidationRule
|
|
|
- * @typedef {import('./constants').OrderFormRules} OrderFormRules
|
|
|
- * @typedef {import('./constants').OrderFormData} OrderFormMixinData
|
|
|
- * @typedef {import('./constants').OrderTypeOption} OrderTypeOption
|
|
|
- * @typedef {import('./constants').OrderStatusOption} OrderStatusOption
|
|
|
+ * @typedef {import('./constants').OrderFormMixinData} OrderFormMixinData
|
|
|
+ * @typedef {import('@/api/types/order').SalesOrderCreateForm} SalesOrderCreateForm
|
|
|
+ * @typedef {import('@/api/types/order').SalesOrderItemCreateForm} SalesOrderItemCreateForm
|
|
|
+ * @typedef {import('@/constants/order').ORDER_TYPES} OrderTypeValue
|
|
|
+ * @typedef {import('@/constants/order').ORDER_STATUS} OrderStatusValue
|
|
|
*/
|
|
|
|
|
|
/**
|
|
@@ -65,14 +73,14 @@ export default {
|
|
|
* @description 订单类型下拉选择器的选项数据
|
|
|
* @type {OrderTypeOption[]}
|
|
|
*/
|
|
|
- orderTypeOptions: Object.freeze([...ORDER_TYPE_OPTIONS]),
|
|
|
+ orderTypeOptions: ORDER_TYPE_OPTIONS,
|
|
|
|
|
|
/**
|
|
|
* 订单状态选项列表
|
|
|
* @description 订单状态下拉选择器的选项数据
|
|
|
* @type {OrderStatusOption[]}
|
|
|
*/
|
|
|
- orderStatusOptions: Object.freeze([...ORDER_STATUS_OPTIONS])
|
|
|
+ orderStatusOptions: ORDER_STATUS_OPTIONS
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -206,8 +214,18 @@ export default {
|
|
|
trigger: 'blur'
|
|
|
},
|
|
|
{
|
|
|
- pattern: /^1[3-9]\d{9}$/,
|
|
|
- message: '请输入正确的手机号码',
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (!value) {
|
|
|
+ callback()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const phoneRegex = /^1[3-9]\d{9}$/
|
|
|
+ if (!phoneRegex.test(value)) {
|
|
|
+ callback(new Error('请输入正确的手机号码'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ },
|
|
|
trigger: 'blur'
|
|
|
}
|
|
|
],
|
|
@@ -405,7 +423,7 @@ export default {
|
|
|
/**
|
|
|
* 映射订单数据到表单格式
|
|
|
* @description 将API返回的订单数据安全地映射为表单数据格式,并格式化数字字段
|
|
|
- * @param {OrderItem} orderData - 从API获取的原始订单数据
|
|
|
+ * @param {import('@/api/types/order').OrderRecord} orderData - 从API获取的原始订单数据
|
|
|
* @returns {OrderFormModel} 格式化后的表单数据
|
|
|
* @private
|
|
|
*/
|
|
@@ -504,16 +522,60 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 提交订单数据到服务器
|
|
|
- * @description 根据编辑模式调用相应的API接口
|
|
|
- * @param {OrderForm} submitData - 要提交的订单数据
|
|
|
- * @returns {Promise<AxiosResponse<ApiResponse<boolean>>>} API响应结果
|
|
|
+ * @description 根据编辑模式调用相应的API接口,新建状态下使用createSalesOrder包含物料明细
|
|
|
+ * @param {OrderFormModel} submitData - 要提交的订单数据
|
|
|
+ * @returns {Promise<import('axios').AxiosResponse<ApiResponse<import('@/api/types/order').OrderRecord>>>} API响应结果
|
|
|
* @private
|
|
|
*/
|
|
|
async submitOrderData(submitData) {
|
|
|
if (this.isEdit) {
|
|
|
return await update(submitData)
|
|
|
} else {
|
|
|
- return await add(submitData)
|
|
|
+ // 新建状态下使用createSalesOrder接口,包含物料明细数据
|
|
|
+ const salesOrderData = this.prepareSalesOrderData(submitData)
|
|
|
+ return await createSalesOrder(salesOrderData)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 准备销售订单创建数据
|
|
|
+ * @description 将表单数据和物料明细数据组合为createSalesOrder接口所需的格式
|
|
|
+ * @param {OrderFormModel} formData - 表单数据
|
|
|
+ * @returns {SalesOrderCreateForm} 销售订单创建数据
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ prepareSalesOrderData(formData) {
|
|
|
+ // 转换物料明细数据为API所需格式
|
|
|
+ const pcBladeOrderItemList = this.materialDetails.map(material => ({
|
|
|
+ itemId: Number(material.itemId) || 0,
|
|
|
+ itemCode: material.itemCode || '',
|
|
|
+ itemName: material.itemName || '',
|
|
|
+ specs: material.specs || material.specification || '',
|
|
|
+ mainItemCategoryId: Number(material.mainItemCategoryId) || Number(material.mainCategoryId) || 0,
|
|
|
+ mainItemCategoryName: material.mainItemCategoryName || material.mainCategoryName || '',
|
|
|
+ warehouseId: Number(material.warehouseId) || 0,
|
|
|
+ warehouseName: material.warehouseName || '',
|
|
|
+ availableQuantity: Number(material.availableQuantity) || 0,
|
|
|
+ orderQuantity: Number(material.orderQuantity) || 0,
|
|
|
+ confirmQuantity: Number(material.confirmQuantity) || Number(material.orderQuantity) || 0,
|
|
|
+ unitPrice: Number(material.unitPrice) || 0,
|
|
|
+ taxRate: Number(material.taxRate) || 0,
|
|
|
+ taxAmount: Number(material.taxAmount) || 0,
|
|
|
+ totalAmount: Number(material.totalAmount) || 0,
|
|
|
+ itemStatus: Number(material.itemStatus) || Number(material.status) || 0
|
|
|
+ }))
|
|
|
+
|
|
|
+ // 组装销售订单数据
|
|
|
+ return {
|
|
|
+ ...formData,
|
|
|
+ orgId: Number(formData.orgId) || 0,
|
|
|
+ customerId: Number(formData.customerId) || 0,
|
|
|
+ orderType: Number(formData.orderType) || 0,
|
|
|
+ totalAmount: Number(formData.totalAmount) || 0,
|
|
|
+ totalQuantity: Number(formData.totalQuantity) || 0,
|
|
|
+ addressId: Number(formData.addressId) || 0,
|
|
|
+ status: Number(formData.status) || 0,
|
|
|
+ pcBladeOrderItemList
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -560,7 +622,7 @@ export default {
|
|
|
/**
|
|
|
* 准备提交数据
|
|
|
* @description 复制表单数据并进行清理和格式化处理
|
|
|
- * @returns {OrderForm} 准备好的提交数据
|
|
|
+ * @returns {OrderFormModel} 准备好的提交数据
|
|
|
* @private
|
|
|
*/
|
|
|
prepareSubmitData() {
|
|
@@ -574,7 +636,7 @@ export default {
|
|
|
* 清理和格式化提交数据
|
|
|
* @description 移除空值字段并确保数据类型正确,使用精确的数字验证和格式化
|
|
|
* @param {OrderFormModel} data - 原始表单数据
|
|
|
- * @returns {OrderForm} 清理后的数据对象
|
|
|
+ * @returns {OrderFormModel} 清理后的数据对象
|
|
|
* @private
|
|
|
*/
|
|
|
cleanAndFormatSubmitData(data) {
|