From 46e6a2b43b042963953b4d1d6a36e0cee69962b0 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 27 四月 2026 20:03:16 +0800
Subject: [PATCH] 小程序端和PC端bug修复

---
 admin/src/components/business/OperaDispatch.vue |  138 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 96 insertions(+), 42 deletions(-)

diff --git a/admin/src/components/business/OperaDispatch.vue b/admin/src/components/business/OperaDispatch.vue
index 24f5aae..a81122a 100644
--- a/admin/src/components/business/OperaDispatch.vue
+++ b/admin/src/components/business/OperaDispatch.vue
@@ -2,7 +2,7 @@
   <GlobalWindow
     title="鎵嬪姩娲惧崟"
     :visible.sync="visible"
-    width="700px"
+    width="60%"
     @confirm="handleConfirm"
     @close="handleClose"
   >
@@ -10,60 +10,72 @@
       <div class="info-row">
         <div class="info-item">
           <span class="label">璁㈠崟缂栧彿锛�</span>
-          <span class="value">{{ orderInfo.orderNo }}</span>
+          <span class="value" v-if="orderInfo.order">{{ orderInfo.order.code || '' }}</span>
         </div>
         <div class="info-item">
           <span class="label">瀹炰粯閲戦锛�</span>
-          <span class="value">楼{{ (orderInfo.payAmount / 100).toFixed(2) }}</span>
+          <span class="value" v-if="orderInfo.order">楼{{ ((orderInfo.order.payAmount ||0) / 100).toFixed(2) }}</span>
         </div>
         <div class="info-item">
           <span class="label">閰嶉�佹柟寮忥細</span>
-          <span class="value">
-            <span v-if="orderInfo.deliveryType === 1">鏅�氶厤閫�</span>
-            <span v-else-if="orderInfo.deliveryType === 2">鎬ラ�熻揪</span>
-            <span v-else-if="orderInfo.deliveryType === 3">寮傚湴瀵勯��</span>
-            <span v-else>-</span>
+          <span class="value" v-if="orderInfo.order">
+            <span v-if="orderInfo.order.type === 0">灏卞湴瀵勫瓨</span>
+            <span v-if="orderInfo.order.type === 1">鍚屽煄閰嶉��</span>
+            <span style="margin-left: 20px;border: 1px solid #0c6ce3;border-radius: 5px;font-size: 12px;padding:2px 10px;color: #0c6ce3 " v-if="orderInfo.order.type === 1 && orderInfo.order.isUrgent === 0">鏅�氶厤閫�</span>
+            <span style="margin-left: 20px;border: 1px solid orange;border-radius: 5px;font-size: 12px;padding:2px 10px;color: orange " v-if="orderInfo.order.type === 1 && orderInfo.order.isUrgent === 1">鎬ラ�熻揪</span>
           </span>
+        </div>
+        <div class="info-item">
+          <el-button type="primary" @click="showLogList" >鍔犳�ユ棩蹇�</el-button>
         </div>
       </div>
     </div>
-
-    <el-table :data="orderInfo.goodsList" stripe class="goods-table">
-      <el-table-column prop="goodsName" label="鐗╁搧鍚嶇О" min-width="100px"></el-table-column>
-      <el-table-column prop="goodsSize" label="鐗╁搧灏哄" min-width="80px"></el-table-column>
+    <el-table style="border: 1px solid #f2f2f2;" :data="orderInfo.detailList" stripe class="goods-table">
+      <el-table-column prop="luggageName" label="鐗╁搧鍚嶇О" min-width="100px"></el-table-column>
+      <el-table-column prop="luggageDetail" label="鐗╁搧灏哄" min-width="80px"></el-table-column>
       <el-table-column label="閰嶉�佷环锛堝厓锛�" min-width="100px">
-        <template slot-scope="{row}">楼{{ (row.deliveryPrice / 100).toFixed(2) }}</template>
+        <template slot-scope="{row}"><span  >楼{{ ((row.unitPrice||0) / 100).toFixed(2) }}</span></template>
       </el-table-column>
-      <el-table-column prop="quantity" label="鏁伴噺" min-width="60px"></el-table-column>
+      <el-table-column prop="num" label="鏁伴噺" min-width="60px"></el-table-column>
       <el-table-column label="灏忚锛堝厓锛�" min-width="100px">
-        <template slot-scope="{row}">楼{{ ((row.deliveryPrice * row.quantity) / 100).toFixed(2) }}</template>
+        <template slot-scope="{row}"><span class="yellowstate">楼{{ (((row.subtotal || 0)) / 100).toFixed(2) }}</span></template>
       </el-table-column>
     </el-table>
-
-    <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form">
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px" class="dispatch-form" inline>
       <el-form-item label="閰嶉�佸徃鏈�" prop="driverId">
-        <el-select v-model="form.driverId" placeholder="璇烽�夋嫨閰嶉�佸徃鏈�" style="width: 100%">
-          <el-option label="鍙告満A" :value="1"></el-option>
-          <el-option label="鍙告満B" :value="2"></el-option>
+        <el-select v-model="form.driverId" placeholder="璇烽�夋嫨閰嶉�佸徃鏈�" filterable style="width: 400px;">
+          <el-option v-for="item in driverList" :label="item.name" :value="item.id"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鍔犳�ヨ垂" prop="urgentFee">
-        <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 100%"></el-input-number>
+        <el-input-number v-model="form.urgentFee" :min="0" :precision="2" controls-position="right" style="width: 400px;"></el-input-number>
       </el-form-item>
       <el-form-item label="澶囨敞璇存槑" prop="remark">
-        <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉ㄨ鏄�" :rows="3"></el-input>
+        <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉ㄨ鏄�" style="width: 400px;"  :rows="3"></el-input>
       </el-form-item>
     </el-form>
+    <orderProgress ref ='orderProgress'></orderProgress>
   </GlobalWindow>
 </template>
-
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById, dispatch as dispatchOrder, logListPage } from '@/api/business/orderManagement'
+import { paidDepositList } from '@/api/business/driver'
+import orderProgress from '@/components/business/orderProgress'
 
 export default {
   name: 'OperaDispatch',
-  components: { GlobalWindow },
+  components: { GlobalWindow, orderProgress },
   data () {
+    const numRule = (rule, value, callBack) => {
+      if (value ==='') {
+        callBack(new Error('鍔犳�ヨ垂涓嶈兘涓虹┖'))
+      } else if (value < 0.1) {
+        callBack(new Error('璇疯緭鍏ユ纭殑鍔犳�ヨ垂'))
+      } else {
+        callBack()
+      }
+    }
     return {
       visible: false,
       orderInfo: {
@@ -72,30 +84,70 @@
         deliveryType: '',
         goodsList: []
       },
+      driverList: [],
       form: {
-        driverId: '',
-        urgentFee: 0,
-        remark: ''
+        driverId: 0,
+        orderId: 0,
+        remark: '',
+        urgentFee: 10
       },
       rules: {
-        driverId: [{ required: true, message: '璇烽�夋嫨閰嶉�佸徃鏈�', trigger: 'change' }]
+        urgentFee: [{ required: true,validator:numRule, trigger: 'change' }]
       }
     }
   },
   methods: {
     open (row) {
-      this.orderInfo = {
-        orderNo: row.orderNo,
-        payAmount: row.payAmount || 0,
-        deliveryType: row.deliveryType || '',
-        goodsList: row.goodsList || []
-      }
+      var that = this
       this.form = {
-        driverId: '',
-        urgentFee: 0,
-        remark: ''
+        driverId: null,
+        orderId: row.id,
+        remark: '',
+        urgentFee: 0
       }
+      this.orderInfo = { order: row }
+      that.orderInfo.detailList = that.orderInfo.detailList || []
+      getById(row.id).then(res => {
+        res = res || {}
+        res.detailList = res.detailList || []
+        res.order = res.order || {}
+        that.orderInfo = res
+        that.orderInfo.order = that.orderInfo.order || {}
+        that.loadDriverList()
+      }).catch(e => {
+        this.$tip.apiFailed(e)
+        this.visible = false
+      })
       this.visible = true
+    },
+    showLogList () {
+      var that = this
+      if (!this.orderInfo.order || !this.orderInfo.order.id) {
+        return
+      }
+      logListPage({
+        capacity: 10000,
+        model: {
+          objTypeList: [2, 3],
+          orderId: this.orderInfo.order.id
+        },
+        page: 1
+      }).then(res => {
+        var orderLogList = res.records || []
+        if (orderLogList.length) {
+          this.$refs.orderProgress.open('璁㈠崟娲惧崟鏃ュ織', orderLogList || [])
+        } else {
+          this.$message.warning('鏈煡璇㈠埌浠讳綍娲惧崟璁板綍锛�')
+        }
+      }).catch(e => {
+      })
+    },
+    loadDriverList () {
+      var that = this
+      paidDepositList().then(res => {
+        that.driverList = res || []
+      }).catch(e => {
+      })
     },
     handleClose () {
       this.visible = false
@@ -103,11 +155,13 @@
     handleConfirm () {
       this.$refs.form.validate(valid => {
         if (!valid) return
-        this.$emit('confirm', {
-          orderId: this.orderInfo.id,
-          ...this.form
+        dispatchOrder(this.form).then(res => {
+          this.$tip.apiSuccess(res || '娲惧崟鎴愬姛')
+          this.$emit('success')
+          this.visible = false
+        }).catch(e => {
+          this.$tip.apiFailed(e)
         })
-        this.visible = false
       })
     }
   }
@@ -126,7 +180,7 @@
   border-radius: 4px;
 }
 .info-item {
-  display: flex;
+  /*display: flex;*/
   font-size: 14px;
 }
 .info-item .label {

--
Gitblit v1.9.3