From bdca092494179de8c30f0a46ed77da9004cb6a6b Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 29 六月 2026 14:06:19 +0800
Subject: [PATCH] feat(pages): 优化1、出差审批增加出差开始时间和出差结束时间2、开放一些新增修改功能3、销售报价去掉数量

---
 src/pages/cooperativeOffice/collaborativeApproval/detail.vue |  123 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 113 insertions(+), 10 deletions(-)

diff --git a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
index 16f9923..377de64 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
@@ -87,14 +87,39 @@
           </u-form-item>
         </template>
         <!-- approveType=3 鍑哄樊鐩稿叧瀛楁 -->
-        <u-form-item v-if="approveType === 3"
-                     prop="location"
-                     label="鍑哄樊鍦扮偣"
-                     required>
-          <u-input v-model="form.location"
-                   placeholder="璇疯緭鍏ュ嚭宸湴鐐�"
-                   clearable />
-        </u-form-item>
+        <template v-if="approveType === 3">
+          <u-form-item prop="location"
+                       label="鍑哄樊鍦扮偣"
+                       required>
+            <u-input v-model="form.location"
+                     placeholder="璇疯緭鍏ュ嚭宸湴鐐�"
+                     clearable />
+          </u-form-item>
+          <u-form-item prop="startDateTime"
+                       label="鍑哄樊寮�濮嬫椂闂�"
+                       required>
+            <u-input v-model="form.startDateTime"
+                     readonly
+                     placeholder="璇烽�夋嫨鍑哄樊寮�濮嬫椂闂�"
+                     @click="showTripStartDateTimePicker" />
+            <template #right>
+              <up-icon name="arrow-right"
+                       @click="showTripStartDateTimePicker"></up-icon>
+            </template>
+          </u-form-item>
+          <u-form-item prop="endDateTime"
+                       label="鍑哄樊缁撴潫鏃堕棿"
+                       required>
+            <u-input v-model="form.endDateTime"
+                     readonly
+                     placeholder="璇烽�夋嫨鍑哄樊缁撴潫鏃堕棿"
+                     @click="showTripEndDateTimePicker" />
+            <template #right>
+              <up-icon name="arrow-right"
+                       @click="showTripEndDateTimePicker"></up-icon>
+            </template>
+          </u-form-item>
+        </template>
         <!-- approveType=4 鎶ラ攢鐩稿叧瀛楁 -->
         <u-form-item v-if="approveType === 4"
                      prop="price"
@@ -325,6 +350,26 @@
                             @cancel="showEndDate = false"
                             mode="date" />
       </up-popup>
+      <!-- 鍑哄樊寮�濮嬫椂闂撮�夋嫨鍣� -->
+      <up-popup :show="showTripStartDateTime"
+                mode="bottom"
+                @close="showTripStartDateTime = false">
+        <up-datetime-picker :show="true"
+                            v-model="tripStartDateTimeValue"
+                            @confirm="onTripStartDateTimeConfirm"
+                            @cancel="showTripStartDateTime = false"
+                            mode="datetime" />
+      </up-popup>
+      <!-- 鍑哄樊缁撴潫鏃堕棿閫夋嫨鍣� -->
+      <up-popup :show="showTripEndDateTime"
+                mode="bottom"
+                @close="showTripEndDateTime = false">
+        <up-datetime-picker :show="true"
+                            v-model="tripEndDateTimeValue"
+                            @confirm="onTripEndDateTimeConfirm"
+                            @cancel="showTripEndDateTime = false"
+                            mode="datetime" />
+      </up-popup>
     </template>
     <!-- 搴曢儴鎸夐挳 -->
     <view class="footer-btns"
@@ -350,7 +395,7 @@
   import PageHeader from "@/components/PageHeader.vue";
   import CommonUpload from "@/components/CommonUpload.vue";
   import useUserStore from "@/store/modules/user";
-  import { formatDateToYMD } from "@/utils/ruoyi";
+  import { formatDateToYMD, parseTime } from "@/utils/ruoyi";
   import {
     getDept,
     approveProcessGetInfo,
@@ -380,6 +425,8 @@
       storageBlobDTOS: [],
       startDate: "",
       endDate: "",
+      startDateTime: "",
+      endDateTime: "",
       location: "",
       price: "",
     },
@@ -394,6 +441,12 @@
       ],
       endDate: [
         { required: false, message: "璇烽�夋嫨缁撴潫鏃堕棿", trigger: "change" },
+      ],
+      startDateTime: [
+        { required: false, message: "璇烽�夋嫨鍑哄樊寮�濮嬫椂闂�", trigger: "change" },
+      ],
+      endDateTime: [
+        { required: false, message: "璇烽�夋嫨鍑哄樊缁撴潫鏃堕棿", trigger: "change" },
       ],
       location: [{ required: false, message: "璇疯緭鍏ュ嚭宸湴鐐�", trigger: "blur" }],
       price: [{ required: false, message: "璇疯緭鍏ユ姤閿�閲戦", trigger: "blur" }],
@@ -413,6 +466,10 @@
   const startDateValue = ref(Date.now());
   const showEndDate = ref(false);
   const endDateValue = ref(Date.now());
+  const showTripStartDateTime = ref(false);
+  const tripStartDateTimeValue = ref(Date.now());
+  const showTripEndDateTime = ref(false);
+  const tripEndDateTimeValue = ref(Date.now());
   const userStore = useUserStore();
   const approveType = ref(0);
   const isInitialLoading = ref(false);
@@ -475,6 +532,24 @@
   const onEndDateConfirm = e => {
     form.value.endDate = formatDateToYMD(e.value);
     showEndDate.value = false;
+  };
+
+  const showTripStartDateTimePicker = () => {
+    showTripStartDateTime.value = true;
+  };
+
+  const onTripStartDateTimeConfirm = e => {
+    form.value.startDateTime = parseTime(e.value, "{y}-{m}-{d} {h}:{i}");
+    showTripStartDateTime.value = false;
+  };
+
+  const showTripEndDateTimePicker = () => {
+    showTripEndDateTime.value = true;
+  };
+
+  const onTripEndDateTimeConfirm = e => {
+    form.value.endDateTime = parseTime(e.value, "{y}-{m}-{d} {h}:{i}");
+    showTripEndDateTime.value = false;
   };
 
   const fetchDetailData = async row => {
@@ -647,6 +722,34 @@
       return;
     }
 
+    if (Number(approveType.value) === 3) {
+      if (!form.value.location || !String(form.value.location).trim()) {
+        showToast("璇疯緭鍏ュ嚭宸湴鐐�");
+        return;
+      }
+
+      if (!form.value.startDateTime) {
+        showToast("璇烽�夋嫨鍑哄樊寮�濮嬫椂闂�");
+        return;
+      }
+
+      if (!form.value.endDateTime) {
+        showToast("璇烽�夋嫨鍑哄樊缁撴潫鏃堕棿");
+        return;
+      }
+
+      const start = new Date(String(form.value.startDateTime).replace(/-/g, "/"));
+      const end = new Date(String(form.value.endDateTime).replace(/-/g, "/"));
+      if (
+        Number.isFinite(start.getTime()) &&
+        Number.isFinite(end.getTime()) &&
+        end < start
+      ) {
+        showToast("鍑哄樊缁撴潫鏃堕棿涓嶈兘鏃╀簬寮�濮嬫椂闂�");
+        return;
+      }
+    }
+
     formRef.value
       .validate()
       .then(valid => {
@@ -737,4 +840,4 @@
     box-shadow: 0 0.25rem 0.625rem 0 rgba(3, 88, 185, 0.2);
     border-radius: 2.5rem 2.5rem 2.5rem 2.5rem;
   }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3