From 4f2925f1974844b66225ac70ae35065b8262b315 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 04 十二月 2025 13:26:11 +0800
Subject: [PATCH] feat:增加微信token缓存

---
 app/pagesTask/edit-emergency.vue |  399 +++-----------------------------------------------------
 1 files changed, 22 insertions(+), 377 deletions(-)

diff --git a/app/pagesTask/edit-emergency.vue b/app/pagesTask/edit-emergency.vue
index 4b133bf..cb0d7dc 100644
--- a/app/pagesTask/edit-emergency.vue
+++ b/app/pagesTask/edit-emergency.vue
@@ -47,27 +47,14 @@
         />
       </view>
       
-      <view class="form-item">
-        <view class="form-label">鎵ц浠诲姟浜哄憳</view>
-        <view class="staff-list">
-          <view class="staff-item" v-for="(staff, index) in selectedStaff" :key="staff.userId">
-            <view class="staff-info">
-              <text class="staff-name">{{ staff.nickName }}</text>
-              <text class="staff-role">({{ getUserTypeName(staff.type) || '鏈煡鑱屼綅' }})</text>
-            </view>
-            <uni-icons 
-              type="closeempty" 
-              size="20" 
-              color="#ff4d4f"
-              @click="removeStaff(index)"
-            ></uni-icons>
-          </view>
-          <view class="add-staff" @click="showStaffSelector">
-            <uni-icons type="plusempty" size="20" color="#007AFF"></uni-icons>
-            <text>娣诲姞浜哄憳</text>
-          </view>
-        </view>
-      </view>
+      <StaffSelector
+        v-model="selectedStaff"
+        label="鎵ц浠诲姟浜哄憳"
+        :required="false"
+        :auto-add-current-user="false"
+        :current-user-removable="true"
+        @change="onStaffChange"
+      />
       
       <view class="form-section-title">鎮h�呬俊鎭�</view>
       <view class="form-item">
@@ -198,80 +185,6 @@
         ></map-selector>
       </view>
     </uni-popup>
-    
-    <!-- 浜哄憳閫夋嫨鍣ㄥ脊绐� -->
-    <uni-popup ref="staffPopup" type="bottom" :mask-click="false">
-      <view class="staff-popup-container">
-        <view class="popup-header">
-          <view class="popup-title">閫夋嫨鎵ц浜哄憳</view>
-          <view class="close-btn" @click="closeStaffSelector">
-            <uni-icons type="closeempty" size="20" color="#999"></uni-icons>
-          </view>
-        </view>
-        
-        <view class="search-bar">
-          <input 
-            class="search-input" 
-            placeholder="鎼滅储濮撳悕鎴栫數璇�" 
-            v-model="staffSearchKeyword"
-            @input="onStaffSearch"
-          />
-        </view>
-        
-        <view class="filter-tabs">
-          <view 
-            class="filter-tab" 
-            :class="{ active: staffFilterType === 'driver' }"
-            @click="filterStaff('driver')"
-          >
-            鍙告満
-          </view>
-          <view 
-            class="filter-tab" 
-            :class="{ active: staffFilterType === 'doctor' }"
-            @click="filterStaff('doctor')"
-          >
-            鍖荤敓
-          </view>
-          <view 
-            class="filter-tab" 
-            :class="{ active: staffFilterType === 'nurse' }"
-            @click="filterStaff('nurse')"
-          >
-            鎶ゅ+
-          </view>
-        </view>
-        
-        <scroll-view class="staff-list-scroll" scroll-y="true">
-          <view 
-            class="staff-list-item" 
-            v-for="staff in filteredStaffList" 
-            :key="staff.userId"
-            @click="toggleStaffSelection(staff)"
-          >
-            <view class="staff-item-info">
-              <text class="staff-item-name">{{ staff.nickName }}</text>
-              <text class="staff-item-dept">{{ staff.deptName }}</text>
-            </view>
-            <view class="staff-item-check">
-              <uni-icons 
-                v-if="isStaffSelected(staff.userId)" 
-                type="checkmarkempty" 
-                size="24" 
-                color="#007AFF"
-              ></uni-icons>
-            </view>
-          </view>
-          <view v-if="filteredStaffList.length === 0" class="empty-tip">
-            鏆傛棤浜哄憳鏁版嵁
-          </view>
-        </scroll-view>
-        
-        <view class="popup-footer">
-          <button class="confirm-btn" @click="confirmStaffSelection">纭畾(宸查�墈{ selectedStaff.length }})</button>
-        </view>
-      </view>
-    </uni-popup>
   </scroll-view>
 </template>
 
@@ -280,7 +193,6 @@
 import uniDatetimePicker from '@/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue'
 import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue'
 import { getTask, updateTask } from "@/api/task"
-import { listBranchUsers } from "@/api/system/user"
 import { baiduDistanceByAddress } from "@/api/map"
 import { calculateTransferPrice } from "@/api/price"
 import MapSelector from './components/map-selector.vue'
@@ -289,6 +201,7 @@
 import HospitalSelector from './components/HospitalSelector.vue'
 import DiseaseSelector from './components/DiseaseSelector.vue'
 import DepartureSelector from './components/DepartureSelector.vue'
+import StaffSelector from './components/StaffSelector.vue'
 import distanceCalculator from '@/mixins/distanceCalculator.js'
 
 export default {
@@ -300,7 +213,8 @@
     OrganizationSelector,
     HospitalSelector,
     DiseaseSelector,
-    DepartureSelector
+    DepartureSelector,
+    StaffSelector
   },
   mixins: [distanceCalculator],
   data() {
@@ -325,10 +239,6 @@
       departureLatitude: null,
       selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
       selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
-      allStaffList: [], // 鎵�鏈変汉鍛樺垪琛�
-      filteredStaffList: [], // 杩囨护鍚庣殑浜哄憳鍒楄〃
-      staffSearchKeyword: '', // 浜哄憳鎼滅储鍏抽敭璇�
-      staffFilterType: 'driver', // 浜哄憳绛涢�夌被鍨�
       taskForm: {
         transferTime: '',
         patient: {
@@ -375,7 +285,6 @@
     if (options.id) {
       this.taskId = options.id
       this.loadTaskDetail()
-      this.loadDeptStaff() // 鍔犺浇浜哄憳鍒楄〃
     } else {
       this.$modal.showToast('浠诲姟ID涓嶈兘涓虹┖')
       setTimeout(() => {
@@ -429,8 +338,10 @@
           this.taskForm.hospitalOut.id = info.hospitalOutId || null
           this.taskForm.hospitalOut.name = info.hospitalOutName || ''
           this.taskForm.hospitalOut.department = info.hospitalOutDepartment || ''
+          this.taskForm.hospitalOut.departmentId = info.hospitalOutDepartmentId || null
           this.taskForm.hospitalOut.bedNumber = info.hospitalOutBedNumber || ''
           this.taskForm.hospitalOut.address = info.hospitalOutAddress || ''
+          console.log('杞嚭鍖婚櫌绉戝ID:', info.hospitalOutDepartmentId)
           
           // 鍔犺浇杞嚭鍖婚櫌GPS鍧愭爣锛堜笉鏄剧ず锛屼絾淇濆瓨鍦ㄦ暟鎹腑锛�
           if (info.hospitalOutLongitude && info.hospitalOutLatitude) {
@@ -445,8 +356,10 @@
           this.taskForm.hospitalIn.id = info.hospitalInId || null
           this.taskForm.hospitalIn.name = info.hospitalInName || ''
           this.taskForm.hospitalIn.department = info.hospitalInDepartment || ''
+          this.taskForm.hospitalIn.departmentId = info.hospitalInDepartmentId || null
           this.taskForm.hospitalIn.bedNumber = info.hospitalInBedNumber || ''
           this.taskForm.hospitalIn.address = info.hospitalInAddress || ''
+          console.log('杞叆鍖婚櫌绉戝ID:', info.hospitalInDepartmentId)
           
           // 鍔犺浇杞叆鍖婚櫌GPS鍧愭爣锛堜笉鏄剧ず锛屼絾淇濆瓨鍦ㄦ暟鎹腑锛�
           if (info.hospitalInLongitude && info.hospitalInLatitude) {
@@ -627,154 +540,10 @@
       // 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� selectedDiseases
     },
     
-    // 鍔犺浇褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃鐨勬墍鏈変汉鍛�
-    loadDeptStaff() {
-      console.log('寮�濮嬪姞杞戒汉鍛樺垪琛�')
-      
-      listBranchUsers().then(response => {
-        console.log('浜哄憳鍒楄〃API鍝嶅簲:', response)
-        const userList = response.data || []
-        console.log('瑙f瀽鍑虹殑鐢ㄦ埛鍒楄〃:', userList, '鏁伴噺:', userList.length)
-        
-        this.allStaffList = userList.map(user => ({
-          userId: user.userId,
-          nickName: user.nickName,
-          phonenumber: user.phonenumber,
-          deptName: user.dept?.deptName || '',
-          postName: user.posts && user.posts.length > 0 ? user.posts[0].postName : '',
-          roleName: user.roles && user.roles.length > 0 ? user.roles[0].roleName : '',
-          type: this.getUserType(user)
-        }))
-        
-        console.log('澶勭悊鍚庣殑浜哄憳鍒楄〃:', this.allStaffList, '鏁伴噺:', this.allStaffList.length)
-        
-        this.filterStaffList()
-      }).catch(error => {
-        console.error('鍔犺浇浜哄憳鍒楄〃澶辫触:', error)
-        this.$modal.showToast('鍔犺浇浜哄憳鍒楄〃澶辫触')
-      })
-    },
-    
-    // 鏍规嵁鐢ㄦ埛鐨勫矖浣嶆垨瑙掕壊鍒ゆ柇绫诲瀷
-    getUserType(user) {
-      const postName = user.posts && user.posts.length > 0 ? user.posts[0].postName : ''
-      const roleName = user.roles && user.roles.length > 0 ? user.roles[0].roleName : ''
-      const deptName = user.dept?.deptName || ''
-      
-      if (postName.includes('鍙告満') || roleName.includes('鍙告満') || deptName.includes('杞﹂槦') || deptName.includes('鍙告満')) {
-        return 'driver'
-      }
-      if (postName.includes('鎶ゅ+') || roleName.includes('鎶ゅ+') || deptName.includes('鎶ゅ+')) {
-        return 'nurse'
-      }
-      if (postName.includes('鍖荤敓') || roleName.includes('鍖荤敓') || deptName.includes('鍖荤敓')) {
-        return 'doctor'
-      }
-      if (deptName.includes('鍖绘姢')) {
-        return 'doctor'
-      }
-      
-      return 'driver'
-    },
-    
-    getUserTypeName(staffType) {
-      switch(staffType) {
-        case 'nurse':
-          return '鎶ゅ+'
-        case 'doctor':
-          return '鍖荤敓'
-        case 'driver':
-          return '鍙告満'
-        default:
-          return '鍙告満'
-      }
-    },
-    
-    // 鏄剧ず浜哄憳閫夋嫨寮圭獥
-    showStaffSelector() {
-      this.$refs.staffPopup.open()
-      this.filterStaffList()
-    },
-    
-    // 鍏抽棴浜哄憳閫夋嫨寮圭獥
-    closeStaffSelector() {
-      this.$refs.staffPopup.close()
-      this.staffSearchKeyword = ''
-      this.staffFilterType = 'driver'
-    },
-    
-    // 浜哄憳鎼滅储
-    onStaffSearch(e) {
-      this.staffSearchKeyword = e.detail.value
-      this.filterStaffList()
-    },
-    
-    // 绛涢�変汉鍛樼被鍨�
-    filterStaff(type) {
-      this.staffFilterType = type
-      this.filterStaffList()
-    },
-    
-    // 杩囨护浜哄憳鍒楄〃
-    filterStaffList() {
-      console.log('寮�濮嬭繃婊や汉鍛樺垪琛紝鍘熷鏁伴噺:', this.allStaffList.length)
-      let list = [...this.allStaffList]
-      
-      // 鎸夌被鍨嬭繃婊�
-      if (this.staffFilterType === 'driver') {
-        list = list.filter(staff => staff.type === 'driver')
-      } else if (this.staffFilterType === 'doctor') {
-        list = list.filter(staff => staff.type === 'doctor')
-      } else if (this.staffFilterType === 'nurse') {
-        list = list.filter(staff => staff.type === 'nurse')
-      }
-      
-      console.log('鎸夌被鍨嬭繃婊ゅ悗:', this.staffFilterType, '鏁伴噺:', list.length)
-      
-      // 鎸夊叧閿瘝鎼滅储
-      if (this.staffSearchKeyword && this.staffSearchKeyword.trim() !== '') {
-        const keyword = this.staffSearchKeyword.trim().toLowerCase()
-        list = list.filter(staff => {
-          return staff.nickName.toLowerCase().includes(keyword) || 
-                 (staff.phonenumber && staff.phonenumber.includes(keyword))
-        })
-      }
-      
-      console.log('鎸夊叧閿瘝杩囨护鍚庯紝鏁伴噺:', list.length)
-      
-      this.filteredStaffList = list
-    },
-    
-    // 鍒囨崲浜哄憳閫変腑鐘舵��
-    toggleStaffSelection(staff) {
-      const index = this.selectedStaff.findIndex(s => s.userId === staff.userId)
-      
-      if (index > -1) {
-        // 宸查�変腑锛岀Щ闄�
-        this.selectedStaff.splice(index, 1)
-      } else {
-        // 鏈�変腑锛屾坊鍔�
-        this.selectedStaff.push(staff)
-      }
-    },
-    
-    // 鍒ゆ柇浜哄憳鏄惁宸查�変腑
-    isStaffSelected(userId) {
-      return this.selectedStaff.some(staff => staff.userId === userId)
-    },
-    
-    // 纭浜哄憳閫夋嫨
-    confirmStaffSelection() {
-      if (this.selectedStaff.length === 0) {
-        this.$modal.showToast('璇疯嚦灏戦�夋嫨涓�鍚嶄汉鍛�')
-        return
-      }
-      this.closeStaffSelector()
-    },
-    
-    // 绉婚櫎浜哄憳
-    removeStaff(index) {
-      this.selectedStaff.splice(index, 1)
+    // 浜哄憳鍙樺寲
+    onStaffChange(staff) {
+      console.log('閫変腑浜哄憳鍙樺寲:', staff)
+      // 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� selectedStaff
     },
     
     // 瑙f瀽鐥呮儏淇℃伅锛堜粠瀛楃涓茶В鏋愬嚭ICD-10鐤剧梾鍒楄〃锛�- 淇锛氫笌鍒涘缓鐣岄潰淇濇寔涓�鑷�
@@ -1088,6 +857,9 @@
       this.$modal.confirm('纭畾瑕佷繚瀛樹慨鏀瑰悧锛�').then(() => {
         this.loading = true
         const submitData = this.buildSubmitData()
+        
+        console.log('鎻愪氦鏁版嵁 - 杞嚭鍖婚櫌绉戝ID:', submitData.hospitalOut.departmentId)
+        console.log('鎻愪氦鏁版嵁 - 杞叆鍖婚櫌绉戝ID:', submitData.hospitalIn.departmentId)
         
         updateTask(submitData).then(response => {
           this.loading = false
@@ -1451,133 +1223,6 @@
         display: flex;
         align-items: center;
         justify-content: center;
-      }
-    }
-  }
-  
-  .staff-popup-container {
-    height: 80vh;
-    background-color: white;
-    border-top-left-radius: 20rpx;
-    border-top-right-radius: 20rpx;
-    display: flex;
-    flex-direction: column;
-    
-    .popup-header {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 20rpx 30rpx;
-      border-bottom: 1rpx solid #f0f0f0;
-      
-      .popup-title {
-        font-size: 32rpx;
-        font-weight: bold;
-        color: #333;
-      }
-      
-      .close-btn {
-        width: 50rpx;
-        height: 50rpx;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-      }
-    }
-    
-    .search-bar {
-      padding: 20rpx 30rpx;
-      border-bottom: 1rpx solid #f0f0f0;
-      
-      .search-input {
-        height: 70rpx;
-        padding: 0 20rpx;
-        background-color: #f5f5f5;
-        border-radius: 10rpx;
-        font-size: 28rpx;
-      }
-    }
-    
-    .filter-tabs {
-      display: flex;
-      padding: 20rpx 30rpx;
-      gap: 20rpx;
-      border-bottom: 1rpx solid #f0f0f0;
-      
-      .filter-tab {
-        flex: 1;
-        height: 60rpx;
-        line-height: 60rpx;
-        text-align: center;
-        background-color: #f5f5f5;
-        border-radius: 10rpx;
-        font-size: 28rpx;
-        color: #666;
-        
-        &.active {
-          background-color: #007AFF;
-          color: white;
-        }
-      }
-    }
-    
-    .staff-list-scroll {
-      flex: 1;
-      padding: 20rpx 30rpx;
-      
-      .staff-list-item {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        padding: 20rpx;
-        margin-bottom: 15rpx;
-        background-color: #f8f8f8;
-        border-radius: 10rpx;
-        
-        .staff-item-info {
-          flex: 1;
-          
-          .staff-item-name {
-            display: block;
-            font-size: 30rpx;
-            color: #333;
-            margin-bottom: 8rpx;
-          }
-          
-          .staff-item-dept {
-            display: block;
-            font-size: 24rpx;
-            color: #999;
-          }
-        }
-        
-        .staff-item-check {
-          width: 50rpx;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-        }
-      }
-      
-      .empty-tip {
-        text-align: center;
-        padding: 100rpx 0;
-        color: #999;
-        font-size: 28rpx;
-      }
-    }
-    
-    .popup-footer {
-      padding: 20rpx 30rpx;
-      border-top: 1rpx solid #f0f0f0;
-      
-      .confirm-btn {
-        width: 100%;
-        height: 80rpx;
-        background-color: #007AFF;
-        color: white;
-        border-radius: 10rpx;
-        font-size: 32rpx;
       }
     }
   }

--
Gitblit v1.9.1