From c9e78ad7be4006bfd62e728b249e68a7366d2e38 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 21 一月 2026 17:27:18 +0800
Subject: [PATCH] 湟水峡 1.生产报工单价默认值修改 2.车辆管理页面开发和联调 3.生产管理模块修改 4.发货前端页面开发

---
 src/views/collaborativeApproval/vehicleManagement/index.vue |  399 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 226 insertions(+), 173 deletions(-)

diff --git a/src/views/collaborativeApproval/vehicleManagement/index.vue b/src/views/collaborativeApproval/vehicleManagement/index.vue
index 6725a39..acbf408 100644
--- a/src/views/collaborativeApproval/vehicleManagement/index.vue
+++ b/src/views/collaborativeApproval/vehicleManagement/index.vue
@@ -3,7 +3,7 @@
     <div class="search_form">
       <el-form :model="searchForm" :inline="true">
         <el-form-item label="杞︾墝鍙凤細">
-          <el-input v-model="searchForm.plateNumber" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable prefix-icon="Search"
+          <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable prefix-icon="Search"
             @change="handleQuery" />
         </el-form-item>
         <el-form-item label="棰滆壊锛�">
@@ -15,10 +15,10 @@
             @change="handleQuery" />
         </el-form-item>
         <el-form-item label="浣跨敤鐘舵�侊細">
-          <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" clearable @change="handleQuery" style="width: 200px">
-            <el-option label="绌洪棽" value="idle" />
-            <el-option label="浣跨敤涓�" value="in_use" />
-            <el-option label="缁翠慨涓�" value="maintenance" />
+          <el-select v-model="searchForm.usageStatus" placeholder="璇烽�夋嫨" clearable @change="handleQuery" style="width: 200px">
+            <el-option label="绌洪棽" value="绌洪棽" />
+            <el-option label="浣跨敤涓�" value="浣跨敤涓�" />
+            <el-option label="缁翠慨涓�" value="缁翠慨涓�" />
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -33,7 +33,7 @@
           <el-button type="primary" @click="openForm('add')">
             鏂板杞﹁締
           </el-button>
-          <el-button @click="handleOut">瀵煎嚭</el-button>
+<!--          <el-button @click="handleOut">瀵煎嚭</el-button>-->
           <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
         </div>
       </div>
@@ -42,6 +42,8 @@
         :column="tableColumns"
         :is-selection="true"
         :border="true"
+        :row-key="'id'"
+        :expand-row-keys="expandRowKeys"
         :table-loading="tableLoading"
         :table-style="{ width: '100%', height: 'calc(100vh - 21.5em)' }"
         :page="{
@@ -52,14 +54,39 @@
         }"
         @selection-change="handleSelectionChange"
         @pagination="paginationChange"
+        @expand-change="handleExpandChange"
       >
+        <template #expand="{ row }">
+          <div class="expand-wrapper">
+            <el-skeleton v-if="expandChildLoading[row.id]" animated :rows="3" />
+            <template v-else>
+              <el-empty v-if="!(expandChildData[row.id] && expandChildData[row.id].length)" description="鏆傛棤浣跨敤璁板綍" />
+              <el-table
+                v-else
+                :data="expandChildData[row.id]"
+                size="small"
+                border
+                style="width: 100%"
+                :header-cell-style="{ background: '#F7F8FA' }"
+              >
+                <el-table-column prop="userName" label="浣跨敤浜�" width="140" />
+                <el-table-column prop="desc" label="鐩殑鍦�" width="180" />
+                <el-table-column prop="useTime" label="浣跨敤鏃堕棿" width="180" />
+                <el-table-column prop="carReturnDate" label="杩樿溅鏃堕棿" width="180" />
+                <el-table-column prop="odometerBefore" label="浣跨敤鍓嶉噷绋�(km)" width="140" />
+                <el-table-column prop="odometerAfter" label="杩樿溅鏃堕噷绋�(km)" width="140" />
+                <el-table-column prop="thisTripMileage" label="鏈琛岄┒閲岀▼(km)" width="160" />
+              </el-table>
+            </template>
+          </div>
+        </template>
         <template #operation="{ row }">
           <el-button link type="primary" size="small" @click="openForm('edit', row)">缂栬緫</el-button>
-          <el-button link type="primary" size="small" v-if="row.status === 'idle'"
-            @click="openUseForm(row)">浣跨敤杞﹁締</el-button>
-          <el-button link type="primary" size="small" v-if="row.status === 'in_use'"
+          <el-button link type="primary" size="small" v-if="row.usageStatus === '绌洪棽'"
+            @click="openUseForm(row)">鐢ㄨ溅</el-button>
+          <el-button link type="primary" size="small" v-if="row.usageStatus === '浣跨敤涓�'"
             @click="openReturnForm(row)">杩樿溅</el-button>
-          <el-button link type="primary" size="small" @click="viewUsageRecords(row)">浣跨敤璁板綍</el-button>
+          <el-button link type="primary" size="small" @click="openUsageRecordsDialog(row)">浣跨敤璁板綍</el-button>
         </template>
       </PIMTable>
     </div>
@@ -70,8 +97,8 @@
       <el-form :model="form" label-width="120px" label-position="top" :rules="rules" ref="formRef">
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="杞︾墝鍙凤細" prop="plateNumber">
-              <el-input v-model="form.plateNumber" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable />
+            <el-form-item label="杞︾墝鍙凤細" prop="carNo">
+              <el-input v-model="form.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -87,11 +114,11 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="浣跨敤鐘舵�侊細" prop="status">
-              <el-select v-model="form.status" placeholder="璇烽�夋嫨" clearable style="width: 100%">
-                <el-option label="绌洪棽" value="idle" />
-                <el-option label="浣跨敤涓�" value="in_use" />
-                <el-option label="缁翠慨涓�" value="maintenance" />
+            <el-form-item label="浣跨敤鐘舵�侊細" prop="usageStatus">
+              <el-select v-model="form.usageStatus" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+                <el-option label="绌洪棽" value="绌洪棽" />
+                <el-option label="浣跨敤涓�" value="浣跨敤涓�" />
+                <el-option label="缁翠慨涓�" value="缁翠慨涓�" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -99,7 +126,7 @@
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="琛ㄦ樉閲岀▼(km)锛�">
-              <el-input-number v-model="form.odometer" :min="0" :precision="2" style="width: 100%"
+              <el-input-number v-model="form.odometerMileage" :min="0" :precision="2" style="width: 100%"
                 placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
             </el-form-item>
           </el-col>
@@ -126,7 +153,7 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="杞︾墝鍙凤細">
-              <el-input :value="currentUseRow ? currentUseRow.plateNumber : ''" disabled />
+              <el-input :value="currentUseRow ? currentUseRow.carNo : ''" disabled />
             </el-form-item>
           </el-col>
         </el-row>
@@ -138,25 +165,40 @@
           </el-col>
         </el-row>
         <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometer">
-              <el-input-number v-model="useForm.odometer" :min="0" :precision="2" style="width: 100%"
-                placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈琛岄┒閲岀▼(km)锛�" prop="travelDistance">
-              <el-input-number v-model="useForm.travelDistance" :min="0" :precision="2" style="width: 100%"
-                placeholder="璇疯緭鍏ユ湰娆¤椹堕噷绋�" clearable />
+          <el-col :span="24">
+            <el-form-item label="鍊熺敤鏃堕棿锛�" prop="carRentalDate">
+              <el-date-picker
+                style="width: 100%"
+                v-model="useForm.carRentalDate"
+                type="date"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨鍊熺敤鏃堕棿"
+                clearable
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="浣跨敤浜猴細" prop="userId">
-              <el-select v-model="useForm.userId" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
-                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
+            <el-form-item label="浣跨敤浜猴細" prop="userName">
+              <el-select v-model="useForm.userName" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
+                <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" />
               </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometerMileage">
+              <el-input-number v-model="useForm.odometerMileage" :min="0" :precision="2" style="width: 100%"
+                placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏈棰勮琛岄┒閲岀▼(km)锛�" prop="thisTripMileage">
+              <el-input-number v-model="useForm.thisTripMileage" :min="0" :precision="2" style="width: 100%"
+                placeholder="璇疯緭鍏ユ湰娆¢璁¤椹堕噷绋�" clearable />
             </el-form-item>
           </el-col>
         </el-row>
@@ -182,30 +224,23 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="杞︾墝鍙凤細">
-              <el-input :value="currentReturnRow ? currentReturnRow.plateNumber : ''" disabled />
+              <el-input :value="currentReturnRow ? currentReturnRow.carNo : ''" disabled />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="杩樿溅鏃堕棿锛�" prop="returnTime">
-              <el-date-picker style="width: 100%" v-model="returnForm.returnTime" value-format="YYYY-MM-DD HH:mm:ss"
-                format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="璇烽�夋嫨杩樿溅鏃堕棿" clearable />
+            <el-form-item label="杩樿溅鏃堕棿锛�" prop="carReturnDate">
+              <el-date-picker style="width: 100%" v-model="returnForm.carReturnDate" value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨杩樿溅鏃堕棿" clearable />
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometer">
-              <el-input-number v-model="returnForm.odometer" :min="0" :precision="2" style="width: 100%"
+          <el-col :span="24">
+            <el-form-item label="琛ㄦ樉閲岀▼(km)锛�" prop="odometerMileage">
+              <el-input-number v-model="returnForm.odometerMileage" :min="0" :precision="2" style="width: 100%"
                 placeholder="璇疯緭鍏ヨ〃鏄鹃噷绋�" clearable />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浣跨敤浜猴細" prop="userId">
-              <el-select v-model="returnForm.userId" placeholder="璇烽�夋嫨浣跨敤浜�" clearable filterable>
-                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
-              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -232,7 +267,7 @@
         :column="usageRecordsColumns"
         :border="true"
         :table-loading="usageRecordsLoading"
-        :table-style="{ width: '100%' }"
+				:table-style="{ height: 'calc(100vh - 24em)', width: '100%' }"
         :page="{
           current: usageRecordsPage.current,
           size: usageRecordsPage.size,
@@ -248,7 +283,6 @@
 <script setup>
 import { onMounted, ref, reactive, toRefs, getCurrentInstance } from "vue";
 import PIMTable from "@/components/PIMTable/PIMTable.vue";
-import pagination from "@/components/PIMTable/Pagination.vue";
 import { ElMessageBox } from "element-plus";
 import useUserStore from "@/store/modules/user";
 import { userListNoPage } from "@/api/system/user.js";
@@ -271,33 +305,52 @@
 const selectedRows = ref([]);
 const userList = ref([]);
 const tableLoading = ref(false);
+const expandRowKeys = ref([]);
 const page = reactive({
   current: 1,
   size: 100,
 });
 const total = ref(0);
 
+// 浣跨敤璁板綍寮圭獥
+const usageRecordsVisible = ref(false);
+const usageRecordsData = ref([]);
+const usageRecordsLoading = ref(false);
+const usageRecordsPage = reactive({
+  current: 1,
+  size: 10,
+});
+const usageRecordsTotal = ref(0);
+const usageRecordsColumns = ref([
+  { label: "浣跨敤浜�", prop: "userName", width: "120" },
+  { label: "鐩殑鍦�", prop: "destination", width: "150" },
+  { label: "鍊熺敤鏃堕棿", prop: "carRentalDate", },
+  { label: "杩樿溅鏃堕棿", prop: "carReturnDate",},
+  { label: "浣跨敤鍓嶉噷绋�(km)", prop: "odometerMileage", },
+  { label: "鏈琛岄┒閲岀▼(km)", prop: "thisTripMileage",},
+]);
+
 // 鎼滅储琛ㄥ崟
 const data = reactive({
   searchForm: {
-    plateNumber: "",
+    carNo: "",
     color: "",
     brand: "",
-    status: "",
+		usageStatus: "",
   },
   form: {
-    plateNumber: "",
+    carNo: "",
     color: "",
     brand: "",
-    status: "idle",
-    odometer: 0,
+		usageStatus: "绌洪棽",
+    odometerMileage: 0,
     remark: "",
   },
   rules: {
-    plateNumber: [{ required: true, message: "璇疯緭鍏ヨ溅鐗屽彿", trigger: "blur" }],
+    carNo: [{ required: true, message: "璇疯緭鍏ヨ溅鐗屽彿", trigger: "blur" }],
     color: [{ required: true, message: "璇疯緭鍏ラ鑹�", trigger: "blur" }],
     brand: [{ required: true, message: "璇疯緭鍏ュ搧鐗�", trigger: "blur" }],
-    status: [{ required: true, message: "璇烽�夋嫨浣跨敤鐘舵��", trigger: "change" }],
+		usageStatus: [{ required: true, message: "璇烽�夋嫨浣跨敤鐘舵��", trigger: "change" }],
   },
 });
 const { form, rules } = toRefs(data);
@@ -308,18 +361,20 @@
 const currentUseRow = ref(null);
 const useVehicleFormData = reactive({
   useForm: {
-    vehicleId: "",
+    carInfoId: "",
     destination: "",
-    odometer: 0,
-    travelDistance: 0,
-    userId: "",
+    carRentalDate: dayjs().format("YYYY-MM-DD"),
+    odometerMileage: 0,
+    thisTripMileage: 0,
+    userName: "",
     remark: "",
   },
   useRules: {
     destination: [{ required: true, message: "璇疯緭鍏ョ洰鐨勫湴", trigger: "blur" }],
-    odometer: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
-    travelDistance: [{ required: true, message: "璇疯緭鍏ユ湰娆¤椹堕噷绋�", trigger: "blur" }],
-    userId: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
+    carRentalDate: [{ required: true, message: "璇烽�夋嫨鍊熺敤鏃堕棿", trigger: "change" }],
+    odometerMileage: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
+    thisTripMileage: [{ required: true, message: "璇疯緭鍏ユ湰娆¤椹堕噷绋�", trigger: "blur" }],
+    userName: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
   },
 });
 const { useForm, useRules } = toRefs(useVehicleFormData);
@@ -329,30 +384,20 @@
 const currentReturnRow = ref(null);
 const returnFormData = reactive({
   returnForm: {
-    vehicleId: "",
-    returnTime: "",
-    odometer: 0,
-    userId: "",
+    carInfoId: "",
+    carReturnDate: "",
+    odometerMileage: 0,
     remark: "",
   },
   returnRules: {
-    returnTime: [{ required: true, message: "璇烽�夋嫨杩樿溅鏃堕棿", trigger: "change" }],
-    odometer: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
-    userId: [{ required: true, message: "璇烽�夋嫨浣跨敤浜�", trigger: "change" }],
+    carReturnDate: [{ required: true, message: "璇烽�夋嫨杩樿溅鏃堕棿", trigger: "change" }],
+    odometerMileage: [{ required: true, message: "璇疯緭鍏ヨ〃鏄鹃噷绋�", trigger: "blur" }],
   },
 });
 const { returnForm, returnRules } = toRefs(returnFormData);
 
-// 浣跨敤璁板綍
-const usageRecordsVisible = ref(false);
-const usageRecordsData = ref([]);
-const usageRecordsLoading = ref(false);
-const usageRecordsPage = reactive({
-  current: 1,
-  size: 100,
-});
-const usageRecordsTotal = ref(0);
-const currentVehicleId = ref(null);
+const expandChildData = reactive({});
+const expandChildLoading = reactive({});
 
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const operationType = ref("");
@@ -361,29 +406,22 @@
 
 // 琛ㄦ牸鍒楅厤缃�
 const tableColumns = ref([
-  { label: "杞︾墝鍙�", prop: "plateNumber", width: "120" },
+  { label: "杞︾墝鍙�", prop: "carNo", width: "120" },
   { label: "棰滆壊", prop: "color", width: "100" },
   { label: "鍝佺墝", prop: "brand", width: "120" },
   {
     label: "浣跨敤鐘舵��",
-    prop: "status",
-    width: "100",
+    prop: "usageStatus",
     dataType: "tag",
-    formatData: (val) => {
-      if (val === "idle") return "绌洪棽";
-      if (val === "in_use") return "浣跨敤涓�";
-      if (val === "maintenance") return "缁翠慨涓�";
-      return val || "-";
-    },
     formatType: (val) => {
-      if (val === "idle") return "success";
-      if (val === "in_use") return "warning";
-      if (val === "maintenance") return "danger";
+      if (val === "绌洪棽") return "success";
+      if (val === "浣跨敤涓�") return "warning";
+      if (val === "缁翠慨涓�") return "danger";
       return "info";
     },
   },
-  { label: "褰撳墠浣跨敤浜�", prop: "currentUser", width: "120" },
-  { label: "琛ㄦ樉閲岀▼(km)", prop: "odometer", width: "120" },
+  { label: "褰撳墠浣跨敤浜�", prop: "currentUserName", },
+  { label: "琛ㄦ樉閲岀▼(km)", prop: "odometerMileage",},
   { label: "鍒涘缓鏃堕棿", prop: "createTime", width: "180" },
   {
     label: "鎿嶄綔",
@@ -391,25 +429,14 @@
     slot: "operation",
     align: "center",
     fixed: "right",
-    width: "250",
+    width: "180",
   },
-]);
-
-// 浣跨敤璁板綍琛ㄦ牸鍒楅厤缃�
-const usageRecordsColumns = ref([
-  { label: "杞︾墝鍙�", prop: "plateNumber", width: "120" },
-  { label: "浣跨敤浜�", prop: "userName", width: "120" },
-  { label: "鐩殑鍦�", prop: "destination", width: "150" },
-  { label: "浣跨敤鏃堕棿", prop: "useTime", width: "180" },
-  { label: "杩樿溅鏃堕棿", prop: "returnTime", width: "180" },
-  { label: "浣跨敤鍓嶉噷绋�(km)", prop: "odometerBefore", width: "130" },
-  { label: "杩樿溅鏃堕噷绋�(km)", prop: "odometerAfter", width: "130" },
-  { label: "鏈琛岄┒閲岀▼(km)", prop: "travelDistance", width: "140" },
 ]);
 
 // 鏌ヨ鍒楄〃
 const handleQuery = () => {
   page.current = 1;
+  expandRowKeys.value = [];
   getList();
 };
 
@@ -424,8 +451,8 @@
   listVehicle(page, searchForm)
     .then((res) => {
       tableLoading.value = false;
-      tableData.value = res.records || res.data || [];
-      total.value = res.total || 0;
+      tableData.value = res.data.records;
+      total.value = res.data.total || 0;
     })
     .catch(() => {
       tableLoading.value = false;
@@ -437,26 +464,45 @@
   selectedRows.value = selection;
 };
 
+// 灞曞紑瀛愯〃鏁版嵁
+const handleExpandChange = (row, expandedRows) => {
+  expandRowKeys.value = expandedRows.map((item) => item.id);
+  if (expandRowKeys.value.includes(row.id)) {
+    loadChildRecords(row.id);
+  }
+};
+
+const loadChildRecords = (carInfoId) => {
+  if (expandChildLoading[carInfoId]) return;
+  expandChildLoading[carInfoId] = true;
+  getVehicleUsageRecords({ current: 1, size: 20 }, { carInfoId })
+    .then((res) => {
+      expandChildData[carInfoId] = res.records || res.data || [];
+    })
+    .finally(() => {
+      expandChildLoading[carInfoId] = false;
+    });
+};
+
 // 鎵撳紑寮规
 const openForm = async (type, row) => {
   operationType.value = type;
   form.value = {
-    plateNumber: "",
+    carNo: "",
     color: "",
     brand: "",
-    status: "idle",
-    odometer: 0,
+		usageStatus: "绌洪棽",
+    odometerMileage: 0,
     remark: "",
   };
-  
-  let userLists = await userListNoPage();
+
+  const userLists = await userListNoPage();
   userList.value = userLists.data || [];
 
   if (type !== "add") {
     currentId.value = row.id;
-    getVehicleById(row.id).then((res) => {
-      form.value = { ...res.data || res };
-    });
+    // 鐩存帴浣跨敤琛ㄦ牸琛屾暟鎹紝涓嶅啀璋冪敤API
+    form.value = { ...row };
   }
   dialogFormVisible.value = true;
 };
@@ -466,14 +512,14 @@
   proxy.$refs["formRef"].validate((valid) => {
     if (valid) {
       if (operationType.value === "add") {
-        addVehicle(form.value).then((res) => {
+        addVehicle(form.value).then(() => {
           proxy.$modal.msgSuccess("鏂板鎴愬姛");
           closeDia();
           getList();
         });
       } else {
         form.value.id = currentId.value;
-        updateVehicle(form.value).then((res) => {
+        updateVehicle(form.value).then(() => {
           proxy.$modal.msgSuccess("淇敼鎴愬姛");
           closeDia();
           getList();
@@ -487,23 +533,25 @@
 const closeDia = () => {
   proxy.resetForm("formRef");
   dialogFormVisible.value = false;
+  currentId.value = "";
 };
 
-// 鎵撳紑鍙戣揣寮规
+// 鎵撳紑浣跨敤杞﹁締寮规
 const openUseForm = async (row) => {
   currentUseRow.value = row;
   useForm.value = {
-    vehicleId: row.id,
+    carInfoId: row.id,
     destination: "",
-    odometer: row.odometer || 0,
-    travelDistance: 0,
-    userId: "",
+    carRentalDate: dayjs().format("YYYY-MM-DD"),
+    odometerMileage: row.odometerMileage || 0,
+    thisTripMileage: 0,
+    userName: "",
     remark: "",
   };
-  
-  let userLists = await userListNoPage();
+
+  const userLists = await userListNoPage();
   userList.value = userLists.data || [];
-  
+
   useFormVisible.value = true;
 };
 
@@ -511,7 +559,7 @@
 const submitUseForm = () => {
   proxy.$refs["useFormRef"].validate((valid) => {
     if (valid) {
-      useVehicle(useForm.value).then((res) => {
+      useVehicle(useForm.value).then(() => {
         proxy.$modal.msgSuccess("浣跨敤杞﹁締鎴愬姛");
         closeUseDia();
         getList();
@@ -522,25 +570,60 @@
 
 // 鍏抽棴浣跨敤杞﹁締寮规
 const closeUseDia = () => {
-  proxy.resetForm("useFormRef");
+  try {
+    proxy.resetForm("useFormRef");
+  } catch (error) {
+    console.error("Error resetting form:", error);
+  }
   useFormVisible.value = false;
   currentUseRow.value = null;
+};
+
+// 鎵撳紑浣跨敤璁板綍寮圭獥
+const openUsageRecordsDialog = async (row) => {
+  usageRecordsVisible.value = true;
+  usageRecordsPage.current = 1;
+  loadUsageRecords(row.id);
+};
+
+// 鍔犺浇浣跨敤璁板綍
+const loadUsageRecords = (carInfoId) => {
+  usageRecordsLoading.value = true;
+  getVehicleUsageRecords(usageRecordsPage, { carInfoId: carInfoId })
+    .then((res) => {
+      usageRecordsData.value = res.data.records;
+      usageRecordsTotal.value = res.data.total || 0;
+    })
+    .finally(() => {
+      usageRecordsLoading.value = false;
+    });
+};
+
+// 浣跨敤璁板綍鍒嗛〉
+const usageRecordsPaginationChange = (obj) => {
+  usageRecordsPage.current = obj.page;
+  usageRecordsPage.size = obj.limit;
+  loadUsageRecords(currentUseRow.value.id);
+};
+
+// 鍏抽棴浣跨敤璁板綍寮圭獥
+const closeUsageRecords = () => {
+  usageRecordsVisible.value = false;
 };
 
 // 鎵撳紑杩樿溅寮规
 const openReturnForm = async (row) => {
   currentReturnRow.value = row;
   returnForm.value = {
-    vehicleId: row.id,
-    returnTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
-    odometer: row.odometer || 0,
-    userId: "",
+    carInfoId: row.id,
+    carReturnDate: dayjs().format("YYYY-MM-DD"),
+    odometerMileage: row.odometerMileage || 0,
     remark: "",
   };
-  
-  let userLists = await userListNoPage();
+
+  const userLists = await userListNoPage();
   userList.value = userLists.data || [];
-  
+
   returnFormVisible.value = true;
 };
 
@@ -548,7 +631,13 @@
 const submitReturnForm = () => {
   proxy.$refs["returnFormRef"].validate((valid) => {
     if (valid) {
-      returnVehicle(returnForm.value).then((res) => {
+      // 鑷姩璁剧疆浣跨敤鐘舵�佷负绌洪棽骞舵坊鍔犺溅杈嗚褰旾D
+      const formData = { 
+        ...returnForm.value, 
+        usageStatus: "绌洪棽",
+        id: currentReturnRow.value.carInfoRecordId
+      };
+      returnVehicle(formData).then(() => {
         proxy.$modal.msgSuccess("杩樿溅鎴愬姛");
         closeReturnDia();
         getList();
@@ -562,42 +651,6 @@
   proxy.resetForm("returnFormRef");
   returnFormVisible.value = false;
   currentReturnRow.value = null;
-};
-
-// 鏌ョ湅浣跨敤璁板綍
-const viewUsageRecords = (row) => {
-  currentVehicleId.value = row.id;
-  usageRecordsPage.current = 1;
-  getUsageRecords();
-  usageRecordsVisible.value = true;
-};
-
-// 鑾峰彇浣跨敤璁板綍
-const getUsageRecords = () => {
-  usageRecordsLoading.value = true;
-  getVehicleUsageRecords(usageRecordsPage, { vehicleId: currentVehicleId.value })
-    .then((res) => {
-      usageRecordsLoading.value = false;
-      usageRecordsData.value = res.records || res.data || [];
-      usageRecordsTotal.value = res.total || 0;
-    })
-    .catch(() => {
-      usageRecordsLoading.value = false;
-    });
-};
-
-// 浣跨敤璁板綍鍒嗛〉
-const usageRecordsPaginationChange = (obj) => {
-  usageRecordsPage.current = obj.page;
-  usageRecordsPage.size = obj.limit;
-  getUsageRecords();
-};
-
-// 鍏抽棴浣跨敤璁板綍寮规
-const closeUsageRecords = () => {
-  usageRecordsVisible.value = false;
-  usageRecordsData.value = [];
-  currentVehicleId.value = null;
 };
 
 // 瀵煎嚭
@@ -630,7 +683,7 @@
     type: "warning",
   })
     .then(() => {
-      delVehicle(ids).then((res) => {
+      delVehicle(ids).then(() => {
         proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
         getList();
       });

--
Gitblit v1.9.3