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