From 39bd5a37487895a3cfd25871dde7bf3eb44e7842 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 26 九月 2025 15:59:54 +0800
Subject: [PATCH] 打包修改
---
src/pages/cooperativeOffice/collaborativeApproval/detail.vue | 283 +++++++++++++++++++++++++++++---------------------------
1 files changed, 147 insertions(+), 136 deletions(-)
diff --git a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
index 6fa0c13..a564628 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/detail.vue
@@ -3,63 +3,68 @@
<PageHeader title="瀹℃壒娴佺▼" @back="goBack" />
<!-- 琛ㄥ崟鍖哄煙 -->
- <view class="form-section">
- <u-form ref="formRef" @submit="submitForm" input-align="right" error-message-align="right">
- <u-cell-group style="margin-bottom: 16px;">
- <u-form-item label="鐢宠浜嬬敱" prop="approveReason" required>
- <u-textarea
- v-model="form.approveReason"
- placeholder="璇疯緭鍏ョ敵璇蜂簨鐢�"
- :maxlength="200"
- count
- :autoHeight="true"
- />
- </u-form-item>
- </u-cell-group>
- <u-cell-group>
- <u-form-item label="鐢宠閮ㄩ棬" prop="approveDeptName" required>
- <u-input
- v-model="form.approveDeptName"
- readonly
- placeholder="璇烽�夋嫨鐢宠閮ㄩ棬"
- @click="showPicker = true"
- />
- </u-form-item>
- <u-form-item label="鐢宠浜�" prop="approveUserName" required>
- <u-input
- v-model="form.approveUserName"
- placeholder="璇疯緭鍏ョ敵璇蜂汉"
- readonly
- />
- </u-form-item>
- <u-popup v-model="showPicker" mode="bottom">
- <u-picker
- :columns="productOptions"
- v-model="pickerValue"
- @confirm="onConfirm"
- @cancel="showPicker = false"
- />
- </u-popup>
- <u-form-item label="鐢宠鏃ユ湡" prop="approveTime" required>
- <u-input
- v-model="form.approveTime"
- placeholder="璇烽�夋嫨"
- readonly
- @click="showDatePicker"
- />
- </u-form-item>
- <!-- 鏃ユ湡閫夋嫨鍣� -->
- <u-popup v-model="showDate" mode="bottom">
- <u-datetime-picker
- v-model="currentDate"
- title="閫夋嫨鏃ユ湡"
- @confirm="onDateConfirm"
- @cancel="showDate = false"
- />
- </u-popup>
- </u-cell-group>
- </u-form>
- </view>
+ <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"
+ ></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">
@@ -86,19 +91,23 @@
</view>
<view v-else class="add-approver-btn" @click="addApprover(stepIndex)">
<view class="add-circle">+</view>
- <text class="add-text">娣诲姞瀹℃壒浜�</text>
+ <text class="add-label">閫夋嫨瀹℃壒浜�</text>
</view>
</view>
+ <view class="step-line" v-if="stepIndex < approverNodes.length - 1"></view>
+ <view class="delete-step-btn" v-if="approverNodes.length > 1" @click="removeApprovalStep(stepIndex)">鍒犻櫎鑺傜偣</view>
</view>
</view>
- <u-button icon="plus" plain type="primary" style="width: 100%" @click="addApprovalStep">鏂板鑺傜偣</u-button>
+ <view class="add-step-btn">
+ <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>
@@ -107,8 +116,14 @@
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";
-import { showToast } from 'vant'
+const showToast = (message) => {
+ uni.showToast({
+ title: message,
+ icon: 'none'
+ })
+}
import {userListNoPageByTenantId} from "@/api/system/user";
const data = reactive({
@@ -127,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" }],
@@ -135,7 +149,6 @@
});
const { form, rules } = toRefs(data);
const result = ref("");
-const pickerValue = ref([]);
const showPicker = ref(false);
const productOptions = ref([]);
const operationType = ref("");
@@ -152,7 +165,7 @@
getDept().then((res) => {
productOptions.value = res.data.map(item => ({
value: item.deptId,
- text: item.deptName
+ name: item.deptName
}))
});
};
@@ -169,11 +182,8 @@
form.value.approveUserName = userStore.nickName
form.value.approveTime = getCurrentDate();
- // 鑾峰彇URL鍙傛暟
- const pages = getCurrentPages();
- const currentPage = pages[pages.length - 1];
- const options = currentPage && currentPage.options ? currentPage.options : {};
- operationType.value = options.operationType || 'add';
+ // 浠庢湰鍦板瓨鍌ㄨ幏鍙栧弬鏁�
+ operationType.value = uni.getStorageSync('operationType') || 'add';
// 濡傛灉鏄紪杈戞ā寮忥紝浠庢湰鍦板瓨鍌ㄨ幏鍙栨暟鎹�
if (operationType.value === 'edit') {
@@ -224,15 +234,21 @@
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;
};
const goBack = () => {
// 娓呴櫎鏈湴瀛樺偍鐨勬暟鎹�
+ uni.removeStorageSync('operationType');
uni.removeStorageSync('invoiceLedgerEditRow');
uni.navigateBack();
};
@@ -245,38 +261,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'
+ });
});
};
@@ -290,8 +327,9 @@
const addApprover = (stepIndex) => {
// 璺宠浆鍒拌仈绯讳汉閫夋嫨椤甸潰
+ uni.setStorageSync('stepIndex', stepIndex);
uni.navigateTo({
- url: `/pages/cooperativeOffice/collaborativeApproval/contactSelect?stepIndex=${stepIndex}`
+ url: "/pages/cooperativeOffice/collaborativeApproval/contactSelect"
});
};
@@ -323,10 +361,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() {
@@ -339,34 +377,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