From 025e46e11cb2962fd7692adfa401333758cc779b Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期二, 02 九月 2025 14:00:34 +0800 Subject: [PATCH] 修改组件 --- src/pages/cooperativeOffice/collaborativeApproval/detail.vue | 269 ++++++++++++++++++++++++++--------------------------- 1 files changed, 130 insertions(+), 139 deletions(-) diff --git a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue index 136c264..c83533e 100644 --- a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue +++ b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue @@ -3,75 +3,68 @@ <PageHeader title="瀹℃壒娴佺▼" @back="goBack" /> <!-- 琛ㄥ崟鍖哄煙 --> - <view class="form-section"> - <van-form ref="formRef" @submit="submitForm" :rules="rules" input-align="right" error-message-align="right" scroll-to-error scroll-to-error-position="center"> - <van-cell-group style="margin-bottom: 16px;"> - <van-field - v-model="form.approveReason" - name="approveReason" - rows="2" - autosize - label="鐢宠浜嬬敱" - type="textarea" - maxlength="200" - :rules="[{ required: true, message: '鐢宠浜嬬敱涓嶈兘涓虹┖' }]" - placeholder="璇疯緭鍏ョ敵璇蜂簨鐢�" - show-word-limit - required - /> - </van-cell-group> - <van-cell-group> - <van-field - v-model="form.approveDeptName" - readonly - name="picker" - label="鐢宠閮ㄩ棬" - placeholder="璇烽�夋嫨鐢宠閮ㄩ棬" - :rules="[{ required: true, message: '璇烽�夋嫨鐢宠閮ㄩ棬' }]" + <u-form ref="formRef" @submit="submitForm" :rules="rules" :model="form" label-width="140rpx"> + <u-form-item prop="approveReason" label="鐢宠浜嬬敱" required> + <u-input + v-model="form.approveReason" + type="textarea" + rows="2" + auto-height + maxlength="200" + placeholder="璇疯緭鍏ョ敵璇蜂簨鐢�" + show-word-limit + /> + </u-form-item> + <u-form-item prop="approveDeptName" label="鐢宠閮ㄩ棬" required> + <u-input + v-model="form.approveDeptName" + readonly + placeholder="璇烽�夋嫨鐢宠閮ㄩ棬" + @click="showPicker = true" + /> + <template #right> + <up-icon + name="arrow-right" @click="showPicker = true" - required - /> - <van-field - v-model="form.approveUserName" - name="taxPrice" - label="鐢宠浜�" - placeholder="璇疯緭鍏ョ敵璇蜂汉" - :rules="[{ required: true, message: '鐢宠浜轰笉鑳戒负绌�' }]" - required - readonly - /> - <van-popup - v-model:show="showPicker" - position="bottom" - > - <van-picker - :columns="productOptions" - :model-value="pickerValue" - @confirm="onConfirm" - @cancel="showPicker = false" - /> - </van-popup> - <van-field - v-model="form.approveTime" - label="鐢宠鏃ユ湡" - placeholder="璇烽�夋嫨" - readonly - required - @click="showDatePicker" - :rules="[{ required: true, message: '璇烽�夋嫨鏉ユ鏃ユ湡' }]" - /> - <!-- 鏃ユ湡閫夋嫨鍣� --> - <van-popup v-model:show="showDate" position="bottom"> - <van-date-picker - v-model="currentDate" - title="閫夋嫨鏃ユ湡" - @confirm="onDateConfirm" - @cancel="showDate = false" - /> - </van-popup> - </van-cell-group> - </van-form> - </view> + ></up-icon> + </template> + </u-form-item> + <u-form-item prop="approveUser" label="鐢宠浜�" required> + <u-input + v-model="form.approveUserName" + placeholder="璇疯緭鍏ョ敵璇蜂汉" + readonly + /> + </u-form-item> + <u-form-item prop="approveTime" label="鐢宠鏃ユ湡" required> + <u-input + v-model="form.approveTime" + placeholder="璇烽�夋嫨" + readonly + @click="showDatePicker" + /> + </u-form-item> + </u-form> + + <!-- 閫夋嫨鍣ㄥ脊绐� --> + <up-action-sheet + :show="showPicker" + :actions="productOptions" + title="閫夋嫨閮ㄩ棬" + @select="onConfirm" + @close="showPicker = false" + /> + + <!-- 鏃ユ湡閫夋嫨鍣� --> + <u-popup v-model="showDate" mode="bottom"> + <u-datetime-picker + v-model="currentDate" + title="閫夋嫨鏃ユ湡" + mode="date" + @confirm="onDateConfirm" + @cancel="showDate = false" + /> + </u-popup> <!-- 瀹℃牳娴佺▼鍖哄煙 --> <view class="approval-process"> <view class="approval-header"> @@ -107,14 +100,14 @@ </view> <view class="add-step-btn"> - <van-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</van-button> + <u-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</u-button> </view> </view> <!-- 搴曢儴鎸夐挳 --> <view class="footer-btns"> - <van-button class="cancel-btn" @click="goBack">鍙栨秷</van-button> - <van-button class="save-btn" @click="submitForm">淇濆瓨</van-button> + <u-button class="cancel-btn" @click="goBack">鍙栨秷</u-button> + <u-button class="save-btn" @click="submitForm">淇濆瓨</u-button> </view> </view> </template> @@ -123,6 +116,7 @@ import { ref, onMounted, onUnmounted, reactive, toRefs } from "vue"; import PageHeader from "@/components/PageHeader.vue"; import useUserStore from "@/store/modules/user"; +import { formatDateToYMD } from '@/utils/ruoyi' import {getDept, approveProcessGetInfo, approveProcessAdd, approveProcessUpdate} from "@/api/collaborativeApproval/approvalProcess"; const showToast = (message) => { uni.showToast({ @@ -148,7 +142,6 @@ rules: { approveTime: [{ required: false, message: "璇疯緭鍏�", trigger: "change" },], approveId: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], - approveUser: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], approveDeptId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], approveReason: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], checkResult: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], @@ -156,7 +149,6 @@ }); const { form, rules } = toRefs(data); const result = ref(""); -const pickerValue = ref([]); const showPicker = ref(false); const productOptions = ref([]); const operationType = ref(""); @@ -173,7 +165,7 @@ getDept().then((res) => { productOptions.value = res.data.map(item => ({ value: item.deptId, - text: item.deptName + name: item.deptName })) }); }; @@ -245,10 +237,15 @@ uni.$off('selectContact', handleSelectContact); }); -const onConfirm = ({ selectedValues, selectedOptions }) => { - form.value.approveDeptName = selectedOptions[0]?.text; - form.value.approveDeptId = selectedOptions[0]?.value; - pickerValue.value = selectedValues; +const onConfirm = (item) => { + // 璁剧疆閫変腑鐨勯儴闂� + form.value.approveDeptName = item.name; + // 纭繚璁剧疆鐨勬槸瀛楃涓茬被鍨嬬殑閮ㄩ棬ID + form.value.approveDeptId = String(item.value || ''); + console.log('閮ㄩ棬閫夋嫨鍚庣殑鍊�:', { + approveDeptId: form.value.approveDeptId, + approveDeptName: form.value.approveDeptName + }); showPicker.value = false; }; @@ -266,38 +263,59 @@ return; } - formRef.value.validate().then(() => { - // 琛ㄥ崟鏍¢獙閫氳繃锛屽彲浠ユ彁浜ゆ暟鎹� - // 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d - console.log('approverNodes---', approverNodes.value) - form.value.approveUserIds = approverNodes.value.map(node => node.userId).join(',') - form.value.approveType = 0 - if (operationType.value === "add" || currentApproveStatus.value == 3) { - approveProcessAdd(form.value).then(res => { - showToast("鎻愪氦鎴愬姛"); - goBack() - }) - } else { - approveProcessUpdate(form.value).then(res => { - showToast("鎻愪氦鎴愬姛"); - goBack() - }) - } + // 鎵嬪姩妫�鏌ュ繀濉瓧娈碉紝闃叉鍥犳暟鎹被鍨嬮棶棰樺鑷寸殑鏍¢獙澶辫触 + if (!form.value.approveReason || !form.value.approveReason.trim()) { + showToast('璇疯緭鍏ョ敵璇蜂簨鐢�'); + return; + } + + if (!form.value.approveDeptId || String(form.value.approveDeptId).trim() === '') { + showToast('璇烽�夋嫨鐢宠閮ㄩ棬'); + return; + } + + if (!form.value.approveTime) { + showToast('璇烽�夋嫨鐢宠鏃ユ湡'); + return; + } + + formRef.value.validate().then((valid) => { + if (valid) { + // 琛ㄥ崟鏍¢獙閫氳繃锛屽彲浠ユ彁浜ゆ暟鎹� + // 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d + console.log('approverNodes---', approverNodes.value) + form.value.approveUserIds = approverNodes.value.map(node => node.userId).join(',') + form.value.approveType = 0 + if (operationType.value === "add" || currentApproveStatus.value == 3) { + approveProcessAdd(form.value).then(res => { + showToast("鎻愪氦鎴愬姛"); + goBack() + }) + } else { + approveProcessUpdate(form.value).then(res => { + showToast("鎻愪氦鎴愬姛"); + goBack() + }) + } + } }).catch((error) => { console.error("琛ㄥ崟鏍¢獙澶辫触:", error); - // 鏄剧ず鍏蜂綋鐨勯敊璇俊鎭� - if (error.length > 0) { - const firstError = error[0]; - uni.showToast({ - title: firstError.message || '琛ㄥ崟鏍¢獙澶辫触', - icon: 'none' - }); - } else { - uni.showToast({ - title: '琛ㄥ崟鏍¢獙澶辫触锛岃妫�鏌ュ繀濉」', - icon: 'none' - }); + // 灏濊瘯鑾峰彇鍏蜂綋鐨勯敊璇瓧娈� + if (error && error.errors) { + const firstError = error.errors[0]; + if (firstError) { + uni.showToast({ + title: firstError.message || '琛ㄥ崟鏍¢獙澶辫触锛岃妫�鏌ュ繀濉」', + icon: 'none' + }); + return; + } } + // 鏄剧ず閫氱敤閿欒淇℃伅 + uni.showToast({ + title: '琛ㄥ崟鏍¢獙澶辫触锛岃妫�鏌ュ繀濉」', + icon: 'none' + }); }); }; @@ -344,10 +362,10 @@ } // 纭鏃ユ湡閫夋嫨 -const onDateConfirm = ({ selectedValues }) => { - form.value.approveTime = selectedValues.join('-') - currentDate.value = selectedValues - showDate.value = false +const onDateConfirm = (e) => { + form.value.approveTime = formatDateToYMD(e.value) + currentDate.value = formatDateToYMD(e.value) + showDate.value = false; } // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD function getCurrentDate() { @@ -360,34 +378,7 @@ </script> <style scoped lang="scss"> -.account-detail { - min-height: 100vh; - background: #f8f9fa; - padding-bottom: 80px; -} - -.header { - display: flex; - align-items: center; - background: #fff; - padding: 16px 20px; - border-bottom: 1px solid #f0f0f0; - position: sticky; - top: 0; - z-index: 100; -} - -.title { - flex: 1; - text-align: center; - font-size: 18px; - font-weight: 600; - color: #333; -} - -.form-section { - margin-top: 16px; -} +@import '@/static/scss/form-common.scss'; .approval-process { background: #fff; -- Gitblit v1.9.3