From 4ddfa807643c73ff90840b0b65a5118741e12b48 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期六, 09 五月 2026 18:06:13 +0800
Subject: [PATCH] 移动端维护

---
 components/attachment/index.vue |    6 
 pages/case/transfer.vue         |    4 
 pages/case/transferinfo.vue     |  160 +++++++++++----
 pages/login/Login.vue           |    5 
 pages/my/index.vue              |    2 
 pages/case/CaseDetails.vue      |  413 +++++++++++++++++++++++++++++++++++++---
 pages/my/profile.vue            |    2 
 pages/case/index.vue            |    6 
 8 files changed, 500 insertions(+), 98 deletions(-)

diff --git a/components/attachment/index.vue b/components/attachment/index.vue
index 42276f6..b8d497c 100644
--- a/components/attachment/index.vue
+++ b/components/attachment/index.vue
@@ -120,14 +120,14 @@
           <!-- 绌虹姸鎬� -->
           <view class="empty" v-if="currentFileList.length === 0">
             <uni-icons type="info" size="24" color="#999" />
-            <text v-if="currentTab === 'base' || !showGradeSlip">鏆傛棤鍩虹闄勪欢</text>
+            <text v-if="currentTab === 'base' || !showGradeSlip">鏆傛棤闄勪欢</text>
             <text v-else-if="currentTab === 'grade'">鏆傛棤鎴愮哗鍗曢檮浠�</text>
           </view>
         </scroll-view>
 
         <!-- 鎿嶄綔鎸夐挳 -->
         <view class="popup-footer" v-if="!readonly">
-          <button class="btn" @click="chooseFile">娣诲姞{{ currentTab === 'grade' ? '鎴愮哗鍗�' : '鍩虹' }}闄勪欢</button>
+          <button class="btn" @click="chooseFile">娣诲姞</button>
           <button class="btn primary" @click="confirmUpload">纭涓婁紶</button>
         </view>
       </view>
@@ -520,7 +520,7 @@
         });
         emit("upload-base", file);
       } catch (error) {
-        console.error('鍩虹闄勪欢涓婁紶澶辫触:', error);
+        console.error('涓婁紶澶辫触:', error);
         file.status = 'error';
         uni.showToast({
           title: `鏂囦欢 ${file.name} 涓婁紶澶辫触`,
diff --git a/pages/case/CaseDetails.vue b/pages/case/CaseDetails.vue
index fa0f18c..4e84cef 100644
--- a/pages/case/CaseDetails.vue
+++ b/pages/case/CaseDetails.vue
@@ -17,7 +17,7 @@
 
           <view class="form-grid">
             <!-- 淇敼鍚庯細娌荤枟鍖婚櫌杈撳叆妗� -->
-            <view class="form-item">
+            <!-- <view class="form-item">
               <text class="item-label required">娌荤枟鍖婚櫌</text>
               <u-input
                 v-model="form.treatmenthospitalname"
@@ -25,7 +25,7 @@
                 maxlength="100"
                 class="custom-input"
               />
-            </view>
+            </view> -->
 
             <!-- 鏂板锛氫笂鎶ュ尰闄� -->
             <view class="form-item">
@@ -40,10 +40,10 @@
 
             <!-- 鏂板锛氶儴闂ㄥ悕绉� -->
             <view class="form-item">
-              <text class="item-label">閮ㄩ棬鍚嶇О</text>
+              <text class="item-label">绉戝鍚嶇О</text>
               <u-input
                 v-model="form.deptName"
-                placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
+                placeholder="璇疯緭鍏ヤ笂鎶ョ瀹�"
                 maxlength="50"
                 class="custom-input"
               />
@@ -120,7 +120,7 @@
                 placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
                 maxlength="18"
                 class="custom-input"
-                @blur="validateIdCard"
+                @blur="onIdCardChange"
               />
               <text class="error-text" v-if="idCardError">{{
                 idCardError
@@ -241,24 +241,30 @@
                 </view>
               </view>
             </view>
-            <view class="form-item">
+            <view class="form-item full-width">
               <text class="item-label">浼犳煋鐥�</text>
-              <view class="radio-group horizontal">
+              <view class="checkbox-group single-line">
                 <view
-                  v-for="bloodType in infectiousDiseaselist"
-                  :key="bloodType.value"
-                  class="radio-item"
-                  @click="form.infectious = bloodType.value"
+                  v-for="disease in infectiousDiseaselist"
+                  :key="disease.value"
+                  class="checkbox-item"
+                  @click="toggleInfectious(disease.value)"
                 >
                   <view
-                    class="radio-dot"
-                    :class="{ active: form.infectious == bloodType.value }"
-                  ></view>
-                  <text class="radio-label">{{ bloodType.label }}</text>
+                    class="checkbox-box"
+                    :class="{ active: isInfectiousSelected(disease.value) }"
+                  >
+                    <text
+                      v-if="isInfectiousSelected(disease.value)"
+                      class="checkbox-check"
+                      >鉁�</text
+                    >
+                  </view>
+                  <text class="checkbox-label">{{ disease.label }}</text>
                 </view>
               </view>
             </view>
-            <view class="form-item">
+            <view class="form-item full-width"">
               <text class="item-label">鍏朵粬</text>
               <u-input
                 v-model="form.infectiousOther"
@@ -296,9 +302,9 @@
 
           <view class="form-grid">
             <view class="form-item">
-              <text class="item-label">淇℃伅鍛�</text>
+              <text class="item-label">涓婃姤淇℃伅鍛�</text>
               <u-input
-                v-model="form.infoname"
+                v-model="form.infoName"
                 placeholder="璇疯緭鍏ヤ俊鎭憳"
                 border="none"
               />
@@ -307,7 +313,7 @@
             <view class="form-item">
               <text class="item-label">鑱旂郴鐢佃瘽</text>
               <u-input
-                v-model="form.infophone"
+                v-model="form.phone"
                 placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
                 type="number"
                 border="none"
@@ -432,7 +438,7 @@
 </template>
 
 <script setup>
-import { ref, computed, onMounted } from "vue";
+import { ref, computed, onMounted, watch } from "vue";
 import { onLoad } from "@dcloudio/uni-app";
 import attachmentUpload from "@/components/attachment";
 import { useUserStore } from "@/stores/user";
@@ -442,10 +448,15 @@
 const userStore = useUserStore();
 const isEditMode = ref(false);
 const currentId = ref(null);
+const selectedInfectious = ref([]); // 瀛樺偍閫変腑鐨勪紶鏌撶梾鍊兼暟缁�
+
 // 琛ㄥ崟鏁版嵁
 const form = ref({
   caseNo: "",
-  treatmenthospitalname: "",
+  treatmenthospitalname: userStore.userInfo.user.orgName,
+  toHospital: userStore.userInfo.user.orgName,
+  coordinatorName: userStore.userInfo.user.coordinatorName,
+  coordinatorNo: userStore.userInfo.user.coordinatorNo,
   treatmentdeptname: "",
   name: "",
   nation: "",
@@ -460,8 +471,8 @@
   diagnosisname: "",
   bloodType: "",
   rhYin: "",
-  infoname: "",
-  infophone: "",
+  infoName: userStore.userInfo.user.nickName,
+  phone: userStore.userInfo.user.phonenumber,
   reportername: userStore.name || "",
   reporterno: userStore.userId || "",
   reporterphone: "", // 鎶ュ憡鑰呰仈绯荤數璇�
@@ -475,7 +486,6 @@
   nativeplace: "", // 鏂板锛氱睄璐�
   occupation: "", // 鏂板锛氳亴涓�
   patientstate: "", // 鏂板锛氱梾浜虹姸鍐�
-  phone: "", // 鏂板锛氳仈绯荤數璇�
   registeraddress: "", // 鏂板锛氭埛绫嶅湴鍧�
   registerprovince: "", // 鏂板锛氭埛绫嶅湴鍧�鐪佺紪鍙�
   registerprovincename: "", // 鏂板锛氭埛绫嶅湴鍧�鐪佸悕绉�
@@ -626,7 +636,7 @@
 const currentNation = computed(() => {
   return nationIndex.value >= 0
     ? nationLabels.value[nationIndex.value]
-    : "璇烽�夋嫨姘戞棌";
+    : (form.value.nation?form.value.nation:"璇烽�夋嫨璇佷欢绫诲瀷");
 });
 
 const currentIdCardType = computed(() => {
@@ -668,24 +678,153 @@
 // 韬唤璇侀獙璇�
 const idCardError = ref("");
 const validateIdCard = () => {
-  if (!form.value.idcardno) {
+  const idCard = form.value.idcardno;
+  console.log(idCard, "褰撳墠杈撳叆");
+
+  if (!idCard) {
     idCardError.value = "璇疯緭鍏ヨ瘉浠跺彿鐮�";
     return false;
   }
 
-  if (form.value.idcardno.length !== 18) {
-    idCardError.value = "璇疯緭鍏�18浣嶈韩浠借瘉鍙风爜";
+  if (idCard.length !== 18) {
+    idCardError.value = "韬唤璇佸彿鐮佸繀椤绘槸18浣�";
     return false;
   }
+  console.log(1);
+
+  // 楠岃瘉鍓�17浣嶅繀椤绘槸鏁板瓧
+  const reg = /^\d{17}(\d|X|x)$/;
+  if (!reg.test(idCard)) {
+    idCardError.value = "韬唤璇佸彿鐮佹牸寮忎笉姝g‘";
+    return false;
+  }
+  console.log(2);
+
+  // 楠岃瘉鍑虹敓鏃ユ湡
+  const birthStr = idCard.substring(6, 14);
+  const year = birthStr.substring(0, 4);
+  const month = birthStr.substring(4, 6);
+  const day = birthStr.substring(6, 8);
+
+  const birthDate = new Date(`${year}-${month}-${day}`);
+  if (isNaN(birthDate.getTime())) {
+    idCardError.value = "韬唤璇佸彿鐮佷腑鐨勫嚭鐢熸棩鏈熸棤鏁�";
+    return false;
+  }
+  console.log(3);
+
+  // 楠岃瘉鏃ユ湡鑼冨洿锛�1900骞磋嚦浠婏級
+  const currentYear = new Date().getFullYear();
+  const birthYear = parseInt(year, 10);
+  if (birthYear < 1900 || birthYear > currentYear) {
+    idCardError.value = "鍑虹敓骞翠唤涓嶅湪鏈夋晥鑼冨洿鍐�";
+    return false;
+  }
+  console.log(4);
+
+  // 楠岃瘉鏍¢獙鐮侊紙绗�18浣嶏級
+  if (!validateIdCardCheckCode(idCard)) {
+    idCardError.value = "韬唤璇佸彿鐮佹牎楠屽け璐�";
+    return false;
+  }
+  console.log(5);
 
   idCardError.value = "";
   return true;
 };
-// 鏍峰紡鏂规硶
-const inputStyle = (isError) => {
-  return isError
-    ? "border: 2rpx solid #ff4757; border-radius: 12rpx;"
-    : "border: 2rpx solid #e5e5e7; border-radius: 12rpx;";
+// 韬唤璇佸彿鍙樺寲澶勭悊
+const onIdCardChange = (value) => {
+  // 楠岃瘉韬唤璇佹牸寮�
+  if (validateIdCard()) {
+    // 灏濊瘯鎻愬彇鍑虹敓鏃ユ湡
+    extractBirthdayFromIdCard();
+  }
+};
+// 韬唤璇佹牎楠岀爜楠岃瘉鍑芥暟
+const validateIdCardCheckCode = (idCard) => {
+  // 绯绘暟鏁扮粍
+  const coefficientArray = [
+    7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,
+  ];
+  // 鏍¢獙鐮佸搴斿��
+  const checkCodeMap = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
+
+  let sum = 0;
+  for (let i = 0; i < 17; i++) {
+    sum += parseInt(idCard.charAt(i), 10) * coefficientArray[i];
+  }
+
+  const checkCode = checkCodeMap[sum % 11];
+  return checkCode === idCard.charAt(17).toUpperCase();
+};
+// 浠庤韩浠借瘉鍙锋彁鍙栧嚭鐢熸棩鏈�
+const extractBirthdayFromIdCard = () => {
+  const idCard = form.value.idcardno;
+
+  if (!idCard || idCard.length !== 18) {
+    return;
+  }
+
+  try {
+    // 鎻愬彇鍑虹敓鏃ユ湡閮ㄥ垎锛堢7-14浣嶏細YYYYMMDD锛�
+    const birthStr = idCard.substring(6, 14);
+    const year = birthStr.substring(0, 4);
+    const month = birthStr.substring(4, 6);
+    const day = birthStr.substring(6, 8);
+
+    // 楠岃瘉鏃ユ湡鏄惁鏈夋晥
+    const birthDate = new Date(`${year}-${month}-${day}`);
+    if (isNaN(birthDate.getTime())) {
+      console.log("韬唤璇佸彿鐮佷腑鐨勫嚭鐢熸棩鏈熸棤鏁�");
+      return;
+    }
+
+    // 楠岃瘉鏃ユ湡鑼冨洿锛堜笉鑳芥槸鏈潵鏃ユ湡锛�
+    const today = new Date();
+    if (birthDate > today) {
+      console.log("鍑虹敓鏃ユ湡涓嶈兘鏄湭鏉ユ棩鏈�");
+      return;
+    }
+
+    // 楠岃瘉鏈堜唤鍜屾棩鏈熸槸鍚﹀悎鐞�
+    const monthNum = parseInt(month, 10);
+    const dayNum = parseInt(day, 10);
+
+    if (monthNum < 1 || monthNum > 12) {
+      console.log("鏈堜唤鏃犳晥");
+      return;
+    }
+
+    // 妫�鏌ユ棩鏈熸槸鍚︽湁鏁堬紙绠�鍗曢獙璇侊級
+    const daysInMonth = new Date(year, monthNum, 0).getDate();
+    if (dayNum < 1 || dayNum > daysInMonth) {
+      console.log("鏃ユ湡鏃犳晥");
+      return;
+    }
+
+    // 璁剧疆鍑虹敓鏃ユ湡
+    form.value.birthday = `${year}-${month.padStart(2, "0")}-${day.padStart(
+      2,
+      "0",
+    )}`;
+
+    // 璁$畻骞撮緞
+    calculateAge();
+
+    // 浠庤韩浠借瘉鎻愬彇鎬у埆锛堢17浣嶏紝濂囨暟涓虹敺锛屽伓鏁颁负濂筹級
+    const genderCode = parseInt(idCard.charAt(16), 10);
+    if (!isNaN(genderCode)) {
+      form.value.sex = genderCode % 2 === 1 ? "1" : "2";
+    }
+
+    uni.showToast({
+      title: "宸茶嚜鍔ㄦ彁鍙栧嚭鐢熸棩鏈熷拰鎬у埆",
+      icon: "success",
+      duration: 1500,
+    });
+  } catch (error) {
+    console.error("瑙f瀽韬唤璇佸嚭鐢熸棩鏈熷け璐�:", error);
+  }
 };
 
 const textareaStyle = (isError) => {
@@ -730,7 +869,35 @@
   infectiousDiseaselist.value = dict.value.sys_Infectious || [];
   idCardTypeOptions.value = dict.value.sys_IDType || [];
   nationLabel.value = dict.value.sys_Nation || [];
+
+  // 鍒濆鍖栦紶鏌撶梾閫夋嫨鐘舵��
+  if (form.value.infectious) {
+    // 灏嗛�楀彿鍒嗛殧鐨勫瓧绗︿覆杞崲涓烘暟缁�
+    selectedInfectious.value = form.value.infectious
+      .split(",")
+      .filter((item) => item.trim() !== "");
+  }
 };
+// 鍒囨崲浼犳煋鐥呴�夋嫨
+const toggleInfectious = (value) => {
+  const index = selectedInfectious.value.indexOf(value);
+
+  if (index === -1) {
+    // 娣诲姞閫変腑
+    selectedInfectious.value.push(value);
+  } else {
+    // 绉婚櫎閫変腑
+    selectedInfectious.value.splice(index, 1);
+  }
+
+  // 鏇存柊琛ㄥ崟鐨� infectious 瀛楁锛堥�楀彿鍒嗛殧鐨勫瓧绗︿覆锛�
+  form.value.infectious = selectedInfectious.value.join(",");
+};
+// 妫�鏌ヤ紶鏌撶梾鏄惁琚�変腑
+const isInfectiousSelected = (value) => {
+  return selectedInfectious.value.includes(value);
+};
+
 // 鏂规硶瀹氫箟
 const updateCurrentTime = () => {
   const now = new Date();
@@ -769,6 +936,17 @@
 
   // 妫�鏌ユ棩鏈熸湁鏁堟��
   if (isNaN(birthDate.getTime())) {
+    form.value.age = "";
+    form.value.ageunit = "";
+    return;
+  }
+
+  // 妫�鏌ユ槸鍚︿负鏈潵鏃ユ湡
+  if (birthDate > today) {
+    uni.showToast({
+      title: "鍑虹敓鏃ユ湡涓嶈兘鏄湭鏉ユ棩鏈�",
+      icon: "none",
+    });
     form.value.age = "";
     form.value.ageunit = "";
     return;
@@ -944,6 +1122,10 @@
         deptIndex.value = -1;
         nationIndex.value = -1;
         idCardTypeIndex.value = -1;
+        // 閲嶇疆浼犳煋鐥呴�夋嫨
+        selectedInfectious.value = [];
+
+        // 閲嶇疆闄勪欢
         attachments.value = [];
         form.value.nationality = "涓浗";
         form.value.isTransport = "1";
@@ -980,7 +1162,6 @@
         fileName: file.name,
         type: file.type,
       })),
-      phone: form.value.infophone,
       isTransport: form.value.isTransport || "1",
       terminationCase: form.value.terminationCase || 0,
       reportStatus: form.value.reportStatus || "1",
@@ -1045,11 +1226,15 @@
 
     if (res.code) {
       form.value = res.data;
-
+      if (res.data.infectious) {
+        selectedInfectious.value = res.data.infectious
+          .split(",")
+          .filter((item) => item.trim() !== "");
+      }
+      currentNation.value=form.value.nation;
+      idCardTypeIndex.value=form.value.idcardtype;
       // 澶勭悊閫夋嫨鍣ㄧ储寮�
       // updatePickerIndexes();
-
-      console.log(2, "res");
       // 澶勭悊闄勪欢
       if (res.data.annexfilesList) {
         attachments.value = res.data.annexfilesList;
@@ -1077,7 +1262,6 @@
     loading.value = false;
   }
 };
-
 </script>
 <style lang="scss" scoped>
 .case-report-container {
@@ -1446,7 +1630,30 @@
   padding: 20rpx 24rpx !important;
   background: #fff !important;
 }
+.idcard-hint {
+  margin-top: 8rpx;
+  padding: 12rpx 16rpx;
+  background: #f0f9ff;
+  border-radius: 8rpx;
+  border-left: 4rpx solid #0f95b0;
+}
 
+.hint-text {
+  display: block;
+  font-size: 24rpx;
+  color: #0f95b0;
+  margin-bottom: 4rpx;
+
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
+
+.error-text {
+  font-size: 24rpx;
+  color: #ff4757;
+  margin-top: 8rpx;
+}
 .btn {
   flex: 1;
   height: 80rpx;
@@ -1469,4 +1676,134 @@
     }
   }
 }
+.checkbox-group {
+  display: flex;
+  flex-wrap: nowrap; /* 绂佹鎹㈣ */
+  gap: 20rpx;
+  overflow-x: auto; /* 姘村钩婊氬姩 */
+  padding-bottom: 10rpx; /* 缁欐粴鍔ㄦ潯鐣欏嚭绌洪棿 */
+  -webkit-overflow-scrolling: touch; /* iOS骞虫粦婊氬姩 */
+  
+  &.single-line {
+    display: flex;
+    flex-wrap: nowrap;
+    overflow-x: auto;
+    width: 100%;
+    
+    /* 闅愯棌婊氬姩鏉★紝浣嗕繚鎸佹粴鍔ㄥ姛鑳� */
+    &::-webkit-scrollbar {
+      display: none;
+    }
+  }
+}
+
+.checkbox-item {
+  display: flex;
+  align-items: center;
+  gap: 8rpx;
+  flex-shrink: 0; /* 闃叉閫夐」琚帇缂� */
+  padding: 8rpx 16rpx;
+  border-radius: 20rpx;
+  background: #f5f5f7;
+  transition: all 0.3s ease;
+  
+  &.active {
+    background: rgba(15, 149, 176, 0.1);
+  }
+}
+
+.checkbox-box {
+  width: 28rpx;
+  height: 28rpx;
+  border: 2rpx solid #e5e5e7;
+  border-radius: 6rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #fff;
+  transition: all 0.3s ease;
+  flex-shrink: 0;
+  
+  &.active {
+    border-color: #0f95b0;
+    background: #0f95b0;
+  }
+}
+
+.checkbox-check {
+  font-size: 20rpx;
+  color: white;
+  font-weight: bold;
+}
+
+.checkbox-label {
+  font-size: 24rpx;
+  color: #1d1d1f;
+  white-space: nowrap;
+}
+
+/* 浼樺寲鍗曢�夋寜閽粍鐨勬牱寮忥紝淇濇寔涓�鑷存�� */
+.radio-group.horizontal {
+  display: flex;
+  flex-wrap: nowrap;
+  overflow-x: auto;
+  gap: 20rpx;
+  padding-bottom: 10rpx;
+  -webkit-overflow-scrolling: touch;
+  
+  &::-webkit-scrollbar {
+    display: none;
+  }
+  
+  .radio-item {
+    flex-shrink: 0;
+    display: flex;
+    align-items: center;
+    gap: 8rpx;
+    padding: 8rpx 16rpx;
+    border-radius: 20rpx;
+  }
+  
+  .radio-item .radio-dot.active {
+    border-color: #0f95b0;
+    
+    &::after {
+      background: #0f95b0;
+    }
+  }
+}
+
+/* 濡傛灉闇�瑕佸浐瀹氶珮搴︼紝鍙互杩欐牱璁剧疆 */
+.checkbox-group.single-line {
+  min-height: 60rpx;
+  align-items: center;
+}
+
+/* 鍦ㄧЩ鍔ㄧ浼樺寲瑙︽懜鍖哄煙 */
+.checkbox-item {
+  min-height: 60rpx;
+  padding: 8rpx 20rpx;
+  cursor: pointer;
+}
+
+/* 娣诲姞閫変腑鐘舵�佺殑瑙嗚鍙嶉 */
+.checkbox-item.active {
+  border: 1rpx solid #0f95b0;
+  background: rgba(15, 149, 176, 0.08);
+}
+
+/* 鍝嶅簲寮忚皟鏁� */
+@media (max-width: 768px) {
+  .checkbox-group.single-line {
+    gap: 12rpx;
+  }
+  
+  .checkbox-item {
+    padding: 6rpx 14rpx;
+  }
+  
+  .checkbox-label {
+    font-size: 22rpx;
+  }
+}
 </style>
diff --git a/pages/case/index.vue b/pages/case/index.vue
index 79f8731..a50694e 100644
--- a/pages/case/index.vue
+++ b/pages/case/index.vue
@@ -222,13 +222,13 @@
             <text class="case-status">{{ caseItem.statusText }}</text>
           </view>
           <view class="actions">
-            <button
+            <!-- <button
               class="action-btn"
               v-if="caseItem.reportStatus == '1' || caseItem.reportStatus == '2'"
               @tap.stop="withdrawCase(caseItem)"
             >
               鎾ゅ洖
-            </button>
+            </button> -->
             <button class="action-btn" @tap.stop="viewDetails(caseItem)">
               鏌ョ湅璇︽儏
             </button>
@@ -327,6 +327,7 @@
   return {
     id: apiData.id || apiData.donatebaseinfoReportId,
     donorNo: apiData.caseNo,
+    reportStatus: apiData.reportStatus,
     hospitalName: apiData.treatmenthospitalname,
     hospitalLogo: "/static/hospital/default.jpg",
     caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
@@ -644,6 +645,7 @@
 // 璁$畻灞炴�э細绛涢�夎褰� - 鐜板湪鍙仛鍓嶇鐘舵�佺瓫閫�
 const filteredCases = computed(() => {
   let result = cases.value;
+  console.log(result,'result');
   
   // 鍙仛鍓嶇鐘舵�佺瓫閫夛紝鏃堕棿绛涢�夊凡缁忛�氳繃鎺ュ彛瀹炵幇
   // if (currentType.value !== "all") {
diff --git a/pages/case/transfer.vue b/pages/case/transfer.vue
index b9e34fe..3f911eb 100644
--- a/pages/case/transfer.vue
+++ b/pages/case/transfer.vue
@@ -316,12 +316,12 @@
     4: "宸插彇娑�",
     5: "鏆傚瓨",
   };
-  return map[status] || "鏈煡";
+  return map[status] || "寰呰浆杩�";
 };
 
 // 鑾峰彇鎬у埆鏂囨湰
 const getGenderText = (gender) => {
-  if (!gender) return "鏈煡";
+  if (!gender) return "寰呰浆杩�";
   if (!dict.value.sys_user_sex) return gender;
   const genderItem = dict.value.sys_user_sex.find(
     (item) => item.dictValue === gender,
diff --git a/pages/case/transferinfo.vue b/pages/case/transferinfo.vue
index 1ada6e7..54ffe7e 100644
--- a/pages/case/transferinfo.vue
+++ b/pages/case/transferinfo.vue
@@ -95,29 +95,21 @@
 
             <view class="form-item">
               <text class="item-label">杞繍鐘舵��</text>
-              <u-select
-                v-model="statusSelectVisible"
-                :list="statusOptions"
-                :default-value="[statusIndex]"
-                :confirm-text="'纭畾'"
-                :cancel-text="'鍙栨秷'"
-                @confirm="onStatusConfirm"
-                :disabled="!isEdit"
+              <view
+                class="picker-trigger"
+                @click="isEdit && handleStatusClick()"
+                :class="{ disabled: !isEdit }"
               >
-                <template #default>
-                  <view class="picker-trigger">
-                    <text>{{
-                      getTransportStatusText(transportData.transitStatus)
-                    }}</text>
-                    <u-icon
-                      v-if="isEdit"
-                      name="arrow-down"
-                      size="16"
-                      color="#999"
-                    ></u-icon>
-                  </view>
-                </template>
-              </u-select>
+                <text>{{
+                  getTransportStatusText(transportData.transitStatus)
+                }}</text>
+                <u-icon
+                  v-if="isEdit"
+                  name="arrow-down"
+                  size="16"
+                  color="#999"
+                ></u-icon>
+              </view>
             </view>
 
             <view class="form-item">
@@ -331,14 +323,23 @@
       @cancel="showTimePicker = false"
       title="閫夋嫨鍑哄彂鏃堕棿"
     ></u-datetime-picker>
-
+    <!-- 鐘舵�侀�夋嫨鍣� -->
+    <u-picker
+      :show="statusPickerVisible"
+      :columns="[statusLabels]"
+      :defaultIndex="[statusCurrentIndex]"
+      keyName="label"
+      @confirm="onStatusPickerConfirm"
+      @cancel="statusPickerVisible = false"
+      title="璇烽�夋嫨杞繍鐘舵��"
+    ></u-picker>
     <!-- 鍔犺浇鐘舵�� -->
     <u-loading-icon :show="loading" :text="loadingText"></u-loading-icon>
   </view>
 </template>
 
 <script setup>
-import { ref, computed, onMounted } from "vue";
+import { ref, computed, onMounted,watch } from "vue";
 import attachmentUpload from "@/components/attachment";
 import { useUserStore } from "@/stores/user";
 
@@ -354,13 +355,14 @@
 const loading = ref(false);
 const saving = ref(false);
 const isEdit = ref(false);
+const statusPickerVisible = ref(false);
+const statusCurrentIndex = ref(0);
 const transportId = ref(null);
 const showTimePicker = ref(false);
 const departureTimeValue = ref(0);
 const statusSelectVisible = ref(false);
 const isReadonly = ref(false);
 const attachments = ref([]);
-
 
 // 瀛楀吀閫夐」
 const statusOptions = ref([
@@ -411,14 +413,35 @@
   return true; // 鏍规嵁瀹為檯鏉冮檺鎺у埗
 });
 
-// 璁$畻绱㈠紩
-const statusIndex = computed(() => {
-  if (!transportData.value.transitStatus) return 0;
-  return statusOptions.value.findIndex(
-    (item) => item.value === transportData.value.transitStatus,
-  );
+// 淇敼鎴栨坊鍔犺绠楀睘鎬�
+const statusLabels = computed(() => {
+  return statusOptions.value.map((item) => item.label);
 });
 
+// 淇敼 statusIndex 璁$畻灞炴��
+const statusIndex = computed(() => {
+  if (!transportData.value.transitStatus) return 0;
+  const index = statusOptions.value.findIndex(
+    (item) => item.value == transportData.value.transitStatus,
+  );
+  return index >= 0 ? index : 0;
+});
+
+// 娣诲姞鐩戝惉锛屽綋杞繍鐘舵�佸彉鍖栨椂鏇存柊褰撳墠绱㈠紩
+watch(
+  () => transportData.value.transitStatus,
+  (newVal) => {
+    if (newVal !== undefined && newVal !== null) {
+      const index = statusOptions.value.findIndex(
+        (item) => item.value == newVal,
+      );
+      if (index >= 0) {
+        statusCurrentIndex.value = index;
+      }
+    }
+  },
+  { immediate: true },
+);
 onLoad(async (options) => {
   if (options.id) {
     transportId.value = options.id;
@@ -427,6 +450,14 @@
     // 鏂板妯″紡
     isEdit.value = true;
     await initNewTransport(options.caseId, options.caseNo);
+  }
+
+  // 纭繚鐘舵�佺储寮曟纭垵濮嬪寲
+  if (transportData.value.transitStatus !== undefined) {
+    const index = statusOptions.value.findIndex(
+      (item) => item.value == transportData.value.transitStatus,
+    );
+    statusCurrentIndex.value = index >= 0 ? index : 0;
   }
 });
 
@@ -438,14 +469,21 @@
 
     if (res.data) {
       transportData.value = res.data;
-      
-        if (res.data.annexfilesList) {
-           attachments.value = res.data.annexfilesList;
-        attachments.value.forEach(item=>{
-          item.url=item.opath,
-          item.name=item.fileName
-        })
-        }
+
+      if (res.data.annexfilesList) {
+        attachments.value = res.data.annexfilesList;
+        attachments.value.forEach((item) => {
+          (item.url = item.opath), (item.name = item.fileName);
+        });
+      }
+
+      // 鏇存柊鐘舵�佺储寮�
+      if (transportData.value.transitStatus !== undefined) {
+        const index = statusOptions.value.findIndex(
+          (item) => item.value == transportData.value.transitStatus,
+        );
+        statusCurrentIndex.value = index >= 0 ? index : 0;
+      }
     } else {
       throw new Error(res.msg || "鏁版嵁鍔犺浇澶辫触");
     }
@@ -561,12 +599,18 @@
   showTimePicker.value = false;
 };
 
-// 鐘舵�佺‘璁�
-const onStatusConfirm = (e) => {
-  if (e[0]) {
-    transportData.value.transitStatus = e[0].value;
+// 鍒犻櫎鍘熸潵鐨� onStatusConfirm 鍑芥暟锛屾坊鍔犳柊鐨勫嚱鏁�
+const handleStatusClick = () => {
+  if (!isEdit.value) return;
+  statusPickerVisible.value = true;
+};
+
+const onStatusPickerConfirm = (e) => {
+  const index = e.indexs[0];
+  if (statusOptions.value[index]) {
+    transportData.value.transitStatus = statusOptions.value[index].value;
   }
-  statusSelectVisible.value = false;
+  statusPickerVisible.value = false;
 };
 
 // 棰勮鏂囦欢
@@ -736,7 +780,7 @@
       id: transportId.value,
       transitStatus: newStatus,
       ...transportData.value,
-       annexfilesList: attachments.value.map((file) => ({
+      annexfilesList: attachments.value.map((file) => ({
         path: file.url,
         fileName: file.name,
         type: file.type,
@@ -761,13 +805,12 @@
 const handleBaseUpload = (file) => {
   console.log("鍩虹闄勪欢涓婁紶鎴愬姛:", file);
   attachments.value.push(file);
-
 };
 
 // 澶勭悊鍏朵粬闄勪欢涓婁紶
 const handleFilesUpdate = (files) => {
-  console.log(files,'files');
-  
+  console.log(files, "files");
+
   attachments.value = files.map((file) => ({
     ...file,
     // 纭繚鍙瓨鍌ㄥ崐璺緞
@@ -776,7 +819,6 @@
     //   : file.url,
   }));
   console.log(attachments.value);
-  
 };
 
 // 棰勮鏂囦欢 - 淇敼涓轰娇鐢ㄥ畬鏁碪RL
@@ -831,7 +873,27 @@
 .form-content {
   padding: 30rpx;
 }
+.picker-trigger {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 88rpx;
+  padding: 0 20rpx;
+  background: #f5f5f5;
+  border-radius: 8rpx;
+  border: 1rpx solid #dcdfe6;
+  font-size: 28rpx;
+  color: #303133;
 
+  &.disabled {
+    background: #f8f9fa;
+    color: #909399;
+  }
+
+  text {
+    font-size: 28rpx;
+  }
+}
 .form-section {
   background: #fff;
   border-radius: 20rpx;
diff --git a/pages/login/Login.vue b/pages/login/Login.vue
index 1faefaa..1548219 100644
--- a/pages/login/Login.vue
+++ b/pages/login/Login.vue
@@ -66,14 +66,14 @@
 
   // 鑷姩鐢熸垚瀵嗙爜鍑芥暟
   const generatePassword = () => {
-    const currentDate = getCurrentDate();  // 鐩存帴璋冪敤鍑芥暟
+    const currentDate = getCurrentDate(); // 鐩存帴璋冪敤鍑芥暟
     return `Hrs#${currentDate}*`;
   };
 
   if (options.redirect) {
     redirect.value = decodeURIComponent(options.redirect);
   }
-  password.value = generatePassword();  // 鐩存帴璋冪敤鍑芥暟
+  password.value = generatePassword(); // 鐩存帴璋冪敤鍑芥暟
   username.value = "admin";
   // 妫�娴嬫槸鍚﹂缚钂欑郴缁�
   // #ifdef HARMONY
@@ -121,6 +121,7 @@
 
     // 6. 瀛樺偍鐢ㄦ埛淇℃伅
     userStore.setUserInfo(userInfo);
+    console.log(userInfo,'userInfo');
 
     // 7. 璺宠浆鍒扮洰鏍囬〉闈�
     const redirects = redirect.value || "/pages/index/index";
diff --git a/pages/my/index.vue b/pages/my/index.vue
index 3909adb..ac6920e 100644
--- a/pages/my/index.vue
+++ b/pages/my/index.vue
@@ -188,7 +188,7 @@
         uni.clearStorageSync();
         // 璺宠浆鍒扮櫥褰曢〉
         uni.reLaunch({
-          url: "/pages/login/index",
+          url: "/pages/login/Login",
         });
       }
     },
diff --git a/pages/my/profile.vue b/pages/my/profile.vue
index 516e280..825292b 100644
--- a/pages/my/profile.vue
+++ b/pages/my/profile.vue
@@ -229,7 +229,7 @@
       if (res.confirm) {
         // 杩欓噷澶勭悊閫�鍑虹櫥褰曢�昏緫
         uni.reLaunch({
-          url: '/pages/login/index'
+          url: '/pages/login/Login'
         })
       }
     }

--
Gitblit v1.9.3