From 57e98ac3f59e9ca12d3fdbc6f89c9c0b1f86be4d Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 05 二月 2026 00:49:10 +0800
Subject: [PATCH] feat:增加发票申请

---
 app/pagesTask/detail.vue |   82 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/app/pagesTask/detail.vue b/app/pagesTask/detail.vue
index 38a10c8..4bd3c08 100644
--- a/app/pagesTask/detail.vue
+++ b/app/pagesTask/detail.vue
@@ -237,7 +237,17 @@
       
       <!-- 杞繍 - 璐圭敤淇℃伅 -->
       <view class="detail-section" v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo">
-        <view class="section-title">璐圭敤淇℃伅</view>
+        <view class="section-title">
+          璐圭敤淇℃伅
+          <!-- 宸插畬鎴愪笖鏈敵璇峰彂绁ㄦ椂鏄剧ず鐢宠鍙戠エ鎸夐挳 -->
+          <button 
+            v-if="canApplyInvoice" 
+            class="apply-invoice-btn"
+            @click="handleApplyInvoice"
+          >
+            <text class="cuIcon-form"></text> 鐢宠鍙戠エ
+          </button>
+        </view>
         <view class="info-item" v-if="taskDetail.emergencyInfo.transferDistance">
           <view class="label">杞繍鍏噷鏁�</view>
           <view class="value">{{ taskDetail.emergencyInfo.transferDistance }}鍏噷</view>
@@ -566,6 +576,7 @@
   import { checkVehicleActiveTasks } from '@/api/task'
   import { getPaymentInfo } from '@/api/payment'
   import { getDicts } from '@/api/dict'
+  import { checkTaskInvoice } from '@/api/invoice'
   import { formatDateTime } from '@/utils/common'
   import { validateTaskForDepart, validateTaskForSettlement, getTaskVehicleId, checkTaskCanDepart } from '@/utils/taskValidator'
   import AttachmentUpload from './components/AttachmentUpload.vue'
@@ -587,7 +598,9 @@
         forceCompleteForm: {
           actualStartTime: '',
           actualEndTime: ''
-        }
+        },
+        hasInvoiceApplied: false, // 鏄惁宸茬敵璇峰彂绁�
+        invoiceStatus: null // 鍙戠エ鐘舵�侊細0-寰呭鏍�, 1-宸查�氳繃, 2-宸查┏鍥�
       }
     },
     computed: {
@@ -597,6 +610,16 @@
           return false
         }
         return ['COMPLETED', 'CANCELLED'].includes(this.taskDetail.taskStatus)
+      },
+      
+      // 鏄惁鍙互鐢宠鍙戠エ
+      canApplyInvoice() {
+        // 浠呮�ユ晳杞繍浠诲姟
+        if (this.taskDetail?.taskType !== 'EMERGENCY_TRANSFER') return false
+        // 浠诲姟蹇呴』宸插畬鎴�
+        if (this.taskDetail?.taskStatus !== 'COMPLETED') return false
+        // 鏈敵璇疯繃鍙戠エ锛屾垨鏇捐椹冲洖
+        return !this.hasInvoiceApplied || this.invoiceStatus === 2
       },
       
       // 鐢熸垚鎵ц浜哄憳瑙掕壊鏍囩鐨勭被鍚�
@@ -699,6 +722,8 @@
       this.taskId = options.id
       this.loadTaskDetail()
       this.loadCancelReasonDict() // 鍔犺浇鍙栨秷鍘熷洜瀛楀吀
+      // 妫�鏌ュ彂绁ㄧ敵璇风姸鎬�
+      this.checkInvoiceStatus()
     },
     onShow() {
       // 姣忔椤甸潰鏄剧ず鏃堕噸鏂板姞杞芥暟鎹紝纭繚浠庣紪杈戦〉闈㈣繑鍥炲悗鑳界湅鍒版渶鏂版暟鎹�
@@ -1058,6 +1083,45 @@
         }
         
         return null;
+      },
+      
+      // 妫�鏌ュ彂绁ㄧ敵璇风姸鎬�
+      checkInvoiceStatus() {
+        if (!this.taskId) return;
+        
+        // 璋冪敤鍚庣鎺ュ彛妫�鏌ヨ浠诲姟鏄惁宸茬敵璇峰彂绁�
+        checkTaskInvoice(this.taskId).then(response => {
+          if (response.code === 200 && response.data) {
+            this.hasInvoiceApplied = true;
+            this.invoiceStatus = response.data.status;
+          }
+        }).catch(error => {
+          console.error('妫�鏌ュ彂绁ㄧ敵璇风姸鎬佸け璐�:', error);
+          // 蹇界暐閿欒锛岄粯璁ゆ湭鐢宠
+        });
+      },
+      
+      // 鐢宠鍙戠エ
+      handleApplyInvoice() {
+        // 鍑嗗浠诲姟淇℃伅
+        const taskInfo = {
+          taskId: this.taskDetail.taskId,
+          taskCode: this.taskDetail.showTaskCode || this.taskDetail.taskCode,
+          legacyServiceOrderId: this.taskDetail.emergencyInfo?.legacyServiceOrdId,
+          serviceCode: this.taskDetail.emergencyInfo?.serviceCode,
+          departure: this.taskDetail.departureAddress,
+          destination: this.taskDetail.destinationAddress,
+          completionTime: this.formatTime(this.taskDetail.actualEndTime),
+          transferPrice: this.paymentInfo?.transferPrice || this.paymentInfo?.totalAmount
+        };
+        
+        // 灏嗕换鍔′俊鎭簭鍒楀寲涓� URL 鍙傛暟
+        const taskInfoParam = encodeURIComponent(JSON.stringify(taskInfo));
+        
+        // 璺宠浆鍒板彂绁ㄧ敵璇烽〉闈紝浼犻�掍换鍔′俊鎭�
+        uni.navigateTo({
+          url: `/pages/mine/invoice/apply?taskInfo=${taskInfoParam}`
+        });
       },
       
       // 鏇存柊浠诲姟鐘舵��
@@ -2310,6 +2374,20 @@
       margin-left: 10rpx;
       vertical-align: middle;
     }
+          
+    .apply-invoice-btn {
+      padding: 8rpx 16rpx;
+      font-size: 24rpx;
+      color: #fff;
+      background-color: #34C759;
+      border: none;
+      border-radius: 6rpx;
+      margin-left: 20rpx;
+    }
+          
+    .apply-invoice-btn::after {
+      border: none;
+    }
     
     // 鍙栨秷鍘熷洜瀵硅瘽妗嗘牱寮�
     .cancel-dialog {

--
Gitblit v1.9.1