Преглед на файлове

feat(订单表单): 添加提交订单到U9系统的功能

yz преди 3 седмици
родител
ревизия
6447f9ff4a
променени са 2 файла, в които са добавени 76 реда и са изтрити 4 реда
  1. 65 4
      src/components/order-form/order-form-mixin.js
  2. 11 0
      src/components/order-form/order-form.vue

+ 65 - 4
src/components/order-form/order-form-mixin.js

@@ -9,6 +9,7 @@ import { getList as getOrderItemList } from '@/api/order/order-item'
 import { createSalesOrder, updateOrder } from '@/api/order/sales-order'
 import { getCustomerInfo } from '@/api/common/index'
 import { getList as getAddressList } from '@/api/order/address'
+import { submitOrderToU9 } from '@/api/order/sales-order'
 
 // 常量和枚举导入
 import {
@@ -865,8 +866,8 @@ export default {
      * @public
      * @emits save-success 保存成功事件
      * @this {import('./types').OrderFormMixinComponent}
-   */
-  async handleSave() {
+     */
+    async handleSave() {
       if (this.saveLoading) {
         return // 防止重复提交
       }
@@ -911,14 +912,74 @@ export default {
     },
 
     /**
+     * 判断订单是否可以提交到U9
+     * @description 仅草稿(0)和未提交(1)状态允许提交
+     * @param {import('./types').OrderFormModel | any} row - 订单数据对象
+     * @returns {boolean}
+     */
+    canSubmitToU9(row) {
+      if (!row) return false
+      const status = Number(row.status)
+      return status === ORDER_STATUS.DRAFT || status === ORDER_STATUS.SUBMITTED
+    },
+
+    /**
+     * 提交订单到U9系统(表单页)
+     * @description 弹出确认框,提交当前表单的订单ID到U9,成功后刷新订单详情以同步状态
+     * @returns {Promise<void>}
+     * @this {import('./types').OrderFormMixinComponent}
+     */
+    async handleSubmitToU9() {
+      // 仅在编辑模式且存在ID时允许提交
+      const orderId = this.formData && (this.formData.id || this.orderId)
+      if (!this.isEdit || !orderId) return
+
+      /** @type {any} */
+      let loadingInstance = null
+      try {
+        await this.$confirm('确认要提交该订单到U9系统吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+
+        loadingInstance = this.$loading({
+          lock: true,
+          text: '正在提交到U9系统...',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        })
+
+        const response = await submitOrderToU9({ id: orderId })
+        if (response && response.data && response.data.success) {
+          this.$message.success('订单提交成功')
+          // 提交成功后,重新加载详情以更新状态
+          if (orderId) {
+            await this.loadOrderDetail(orderId)
+          }
+        } else {
+          this.$message.error((response && response.data && response.data.msg) || '提交失败')
+        }
+      } catch (error) {
+        if (error !== 'cancel') {
+          // eslint-disable-next-line no-console
+          console.error('提交订单到U9失败:', error)
+          this.$message.error('提交失败,请稍后重试')
+        }
+      } finally {
+        if (loadingInstance) loadingInstance.close()
+      }
+    },
+
+    /**
      * 提交订单数据到服务器
      * @description 根据编辑模式调用相应的API接口,编辑模式下使用updateOrder包含物料明细,新建状态下使用createSalesOrder包含物料明细
      * @param {OrderFormModel} submitData - 要提交的订单数据
      * @returns {Promise<import("@/api/types/order").SalesOrderCreateResponse>} API响应结果
      * @private
      * @this {import('./types').OrderFormMixinComponent}
-   */
-  async submitOrderData(submitData) {
+     */
+    async submitOrderData(submitData) {
       if (this.isEdit) {
         // 编辑状态下使用updateOrder接口,包含物料明细数据
         const salesOrderData = this.prepareSalesOrderUpdateData(submitData)

+ 11 - 0
src/components/order-form/order-form.vue

@@ -17,6 +17,17 @@
       </div>
       <div class="header-right">
         <el-button
+          type="text"
+          icon="el-icon-upload2"
+          size="small"
+          v-if="isEdit && canSubmitToU9(formData) && (orderId || formData.id)"
+          @click="handleSubmitToU9"
+          style="color: #409eff"
+        >
+          提交
+        </el-button>
+        <!-- 顶部保存按钮 -->
+        <el-button
           type="primary"
           icon="el-icon-check"
           size="small"