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