Forráskód Böngészése

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

yz 3 napja
szülő
commit
8cebe3090d

+ 15 - 0
src/api/order/sales-order.js

@@ -6,6 +6,8 @@ import request from '@/router/axios'
  * @typedef {import('@/api/types/order').SalesOrderCreateForm} SalesOrderCreateForm
  * @typedef {import('@/api/types/order').OrderOperationResponse} OrderOperationResponse
  * @typedef {import('@/api/types/order').SalesOrderCreateResponse} SalesOrderCreateResponse
+ * @typedef {import('@/api/types/order').SubmitOrderToU9Request} SubmitOrderToU9Request
+ * @typedef {import('@/api/types/order').SubmitOrderToU9Response} SubmitOrderToU9Response
  */
 
 /**
@@ -236,4 +238,17 @@ export const getPcBladeOrderInvoiceByCodeFind = async (orderCode) => {
       orderCode
     }
   });
+};
+
+/**
+ * 提交订单到U9系统
+ * @param {SubmitOrderToU9Request} data - 提交参数,包含订单ID
+ * @returns {Promise<SubmitOrderToU9Response>} 提交结果
+ */
+export const submitOrderToU9 = async (data) => {
+  return request({
+    url: '/api/blade-factory/api/factory/salesOrder/submitU9',
+    method: 'post',
+    data
+  })
 };

+ 13 - 1
src/api/types/order.d.ts

@@ -197,6 +197,18 @@ export type OrderOperationResponse = AxiosResponse<ApiResponseData<boolean>>;
 export type CustomerAddressListResponse = AxiosResponse<ApiResponseData<CustomerAddressOption[]>>;
 
 /**
- * 销售订单创建响应接口
+ * 销售订单创建响应类型
  */
 export type SalesOrderCreateResponse = AxiosResponse<ApiResponseData<boolean>>;
+
+/**
+ * 提交订单到U9系统请求参数接口
+ */
+export interface SubmitOrderToU9Request {
+  id: number;
+}
+
+/**
+ * 提交订单到U9系统响应类型
+ */
+export type SubmitOrderToU9Response = AxiosResponse<ApiResponseData<null>>;

+ 55 - 0
src/mixins/order/orderOperationsMixin.js

@@ -4,6 +4,8 @@
  */
 
 import { getList, add, update, getDetail } from '@/api/order/order'
+import { submitOrderToU9 } from '@/api/order/sales-order'
+import { ORDER_STATUS } from '@/constants/order'
 
 export default {
   data() {
@@ -184,6 +186,59 @@ export default {
       } finally {
         this.setSubmitLoading(false)
       }
+    },
+
+    /**
+     * 判断订单是否可以提交到U9
+     * @param {OrderItem} row - 订单数据
+     * @returns {boolean}
+     */
+    canSubmitToU9(row) {
+      // 只有草稿(0)和未提交(1)状态的订单可以提交
+      return row.status === ORDER_STATUS.DRAFT || row.status === ORDER_STATUS.SUBMITTED
+    },
+
+    /**
+     * 提交订单到U9系统
+     * @param {OrderItem} row - 订单数据
+     * @returns {Promise<void>}
+     */
+    async handleSubmitToU9(row) {
+      let loading = null
+      try {
+        await this.$confirm('确认要提交该订单到U9系统吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+
+        loading = this.$loading({
+          lock: true,
+          text: '正在提交到U9系统...',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        })
+
+        const response = await submitOrderToU9({ id: row.id })
+        
+        if (response.data && response.data.success) {
+          this.$message.success('订单提交成功')
+          // 刷新列表数据
+          this.loadTableData()
+        } else {
+          this.$message.error(response.data?.msg || '提交失败')
+        }
+      } catch (error) {
+        if (error !== 'cancel') {
+          console.error('提交订单到U9失败:', error)
+          this.$message.error('提交失败,请稍后重试')
+        }
+      } finally {
+        // 关闭loading
+        if (loading) {
+          loading.close()
+        }
+      }
     }
   }
 }

+ 68 - 6
src/views/order/order/index-avue.vue

@@ -9,7 +9,7 @@
       @back="handleFormBack"
       @save-success="handleFormSaveSuccess"
     />
-    
+
     <!-- 订单列表 -->
     <avue-crud
       v-else
@@ -72,7 +72,16 @@
 
       <!-- 自定义操作菜单 -->
       <template slot-scope="{row}" slot="menu">
-        <!-- 明细管理按钮已移除 -->
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-upload2"
+          @click="handleSubmitToU9(row)"
+          v-if="canSubmitToU9(row)"
+          style="color: #409eff"
+        >
+          提交
+        </el-button>
       </template>
 
       <!-- 行展开插槽 - 显示订单明细 -->
@@ -96,6 +105,7 @@
 <script>
 import { option } from './option'
 import { getList, add, update, getDetail } from '@/api/order/order'
+import { submitOrderToU9 } from '@/api/order/sales-order'
 import {
   ORDER_TYPES,
   ORDER_STATUS,
@@ -132,7 +142,7 @@ export default {
       orderFormVisible: false,
       isEditMode: false,
       editOrderId: null,
-      
+
       // 事件常量
       ORDER_FORM_EVENTS
     }
@@ -239,7 +249,7 @@ export default {
         // 不调用done(),阻止默认弹窗打开
         return
       }
-      
+
       if (type === 'add') {
         // 新增模式也使用新的表单组件
         this.isEditMode = false
@@ -248,7 +258,7 @@ export default {
         // 不调用done(),阻止默认弹窗打开
         return
       }
-      
+
       // 其他模式(如查看)使用默认弹窗
       done()
     },
@@ -325,6 +335,58 @@ export default {
       this.onLoad(this.page)
     },
 
+    /**
+     * 判断订单是否可以提交到U9
+     * @param {OrderItem} row - 订单数据
+     * @returns {boolean}
+     */
+    canSubmitToU9(row) {
+      // 只有草稿(0)和未提交(1)状态的订单可以提交
+      return row.status === ORDER_STATUS.DRAFT || row.status === ORDER_STATUS.SUBMITTED
+    },
+
+    /**
+     * 提交订单到U9系统
+     * @param {OrderItem} row - 订单数据
+     * @returns {Promise<void>}
+     */
+    async handleSubmitToU9(row) {
+       let loading = null
+       try {
+         await this.$confirm('确认要提交该订单到U9系统吗?', '提示', {
+           confirmButtonText: '确定',
+           cancelButtonText: '取消',
+           type: 'warning'
+         })
+
+         loading = this.$loading({
+           lock: true,
+           text: '正在提交到U9系统...',
+           spinner: 'el-icon-loading',
+           background: 'rgba(0, 0, 0, 0.7)'
+         })
+
+         const response = await submitOrderToU9({ id: row.id })
+
+         if (response.data && response.data.success) {
+           this.$message.success('订单提交成功')
+           // 刷新列表数据
+           this.onLoad(this.page)
+         } else {
+           this.$message.error(response.data?.msg || '提交失败')
+         }
+       } catch (error) {
+         if (error !== 'cancel') {
+           console.error('提交订单到U9失败:', error)
+         }
+       } finally {
+         // 关闭loading
+         if (loading) {
+           loading.close()
+         }
+       }
+     },
+
     // 工具方法
     getOrderTypeLabel,
     getOrderTypeTagType,
@@ -383,4 +445,4 @@ export default {
   color: #303133;
   font-weight: 600;
 }
-</style>
+</style>