From 3328aec7bc4cc2c090f015cba905a82d6d52870c Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 19 十月 2025 10:34:29 +0800
Subject: [PATCH] fix:更新

---
 app/pages/task/create.vue                                                         |   47 
 prd/医院科室选择-快速开始.md                                                                |  227 ++++
 app/pages/index.vue                                                               |  175 +-
 app/static/logo.png                                                               |    0 
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                   |   41 
 app/utils/constant.js                                                             |    4 
 prd/医院科室选择功能说明.md                                                                 |  377 +++++++
 app/store/modules/user.js                                                         |   14 
 ruoyi-ui/src/assets/logo/logo.png                                                 |    0 
 ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml                  |    2 
 app/pages/task/create-emergency.vue                                               |  179 ++
 prd/医院搜索优化说明.md                                                                   |  287 +++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java |   53 +
 prd/首页任务操作按钮统一说明.md                                                               |  295 +++++
 prd/用户所在分公司信息获取功能说明.md                                                            |  337 ++++++
 sql/hospital_department_dict.sql                                                  |  104 ++
 ruoyi-ui/src/assets/logo/微信图片_20251015125246_608_3.jpg                            |    0 
 prd/任务人员选择分公司用户功能说明.md                                                            |  276 +++++
 prd/急救转运任务车辆自动填充功能说明.md                                                           |  302 +++++
 任务人员选择优化说明.md                                                                     |  186 +++
 病情选择优化说明.md                                                                       |  199 +++
 21 files changed, 2,957 insertions(+), 148 deletions(-)

diff --git a/app/pages/index.vue b/app/pages/index.vue
index 0caeb01..82ed65a 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -78,46 +78,59 @@
           
           <!-- 鎿嶄綔鎸夐挳 -->
           <view class="task-actions">
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'depart') }"
-              @click="handleTaskAction(task, 'depart')"
-              v-if="task.status !== 'completed'"
-            >
-              鍑哄彂
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'arrive') }"
-              @click="handleTaskAction(task, 'arrive')"
-              v-if="task.status !== 'completed'"
-            >
-              宸插埌杈�
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'return') }"
-              @click="handleTaskAction(task, 'return')"
-              v-if="task.status !== 'completed'"
-            >
-              杩旂▼
-            </button>
-            <button 
-              class="action-btn" 
-              :class="{ disabled: isActionDisabled(task, 'settle') }"
-              @click="handleTaskAction(task, 'settle')"
-              v-if="task.status !== 'completed'"
-            >
-              缁撶畻
-            </button>
-            <button 
-              class="action-btn primary" 
-              :class="{ disabled: isActionDisabled(task, 'complete') }"
-              @click="handleTaskAction(task, 'complete')"
-              v-if="task.status !== 'completed'"
-            >
-              宸插畬鎴�
-            </button>
+            <!-- 寰呭鐞嗙姸鎬�: 鏄剧ず鍑哄彂銆佸彇娑� -->
+            <template v-if="task.taskStatus === 'PENDING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'depart')"
+              >
+                鍑哄彂
+              </button>
+              <button 
+                class="action-btn cancel" 
+                @click="handleTaskAction(task, 'cancel')"
+              >
+                鍙栨秷
+              </button>
+            </template>
+            
+            <!-- 鍑哄彂涓姸鎬�: 鏄剧ず宸插埌杈俱�佸己鍒剁粨鏉� -->
+            <template v-else-if="task.taskStatus === 'DEPARTING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'arrive')"
+              >
+                宸插埌杈�
+              </button>
+              <button 
+                class="action-btn cancel" 
+                @click="handleTaskAction(task, 'forceCancel')"
+              >
+                寮哄埗缁撴潫
+              </button>
+            </template>
+            
+            <!-- 宸插埌杈剧姸鎬�: 鏄剧ず宸茶繑绋� -->
+            <template v-else-if="task.taskStatus === 'ARRIVED'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'return')"
+              >
+                宸茶繑绋�
+              </button>
+            </template>
+            
+            <!-- 杩旂▼涓姸鎬�: 鏄剧ず宸插畬鎴� -->
+            <template v-else-if="task.taskStatus === 'RETURNING'">
+              <button 
+                class="action-btn primary" 
+                @click="handleTaskAction(task, 'complete')"
+              >
+                宸插畬鎴�
+              </button>
+            </template>
+            
+            <!-- 宸插畬鎴�/宸插彇娑�: 涓嶆樉绀烘寜閽� -->
           </view>
         </view>
         
@@ -383,69 +396,50 @@
         this.$tab.navigateTo(`/pages/task/detail?id=${task.taskId || task.id}`);
       },
       
-      // 鍒ゆ柇鎿嶄綔鎸夐挳鏄惁绂佺敤
-      isActionDisabled(task, action) {
-        // 鏍规嵁浠诲姟鐨勫疄闄呯姸鎬佸垽鏂�
-        const taskStatus = task.taskStatus
-        switch (action) {
-          case 'depart':
-            return taskStatus !== 'PENDING'
-          case 'arrive':
-            return taskStatus !== 'DEPARTING'
-          case 'return':
-            return taskStatus !== 'ARRIVED'
-          case 'settle':
-            return !['ARRIVED', 'RETURNING'].includes(taskStatus)
-          case 'complete':
-            return taskStatus !== 'RETURNING'
-          default:
-            return false
-        }
-      },
-      
       // 澶勭悊浠诲姟鎿嶄綔
       handleTaskAction(task, action) {
-        if (this.isActionDisabled(task, action)) {
-          return
-        }
-        
         switch (action) {
           case 'depart':
-            // 鍑哄彂鎿嶄綔 -> 鐘舵�佸彉涓哄嚭鍙戜腑
-            let departMessage = '纭畾瑕佸嚭鍙戝悧锛�'
-            if (task.taskType !== 'MAINTENANCE' && task.taskType !== 'FUEL') {
-              departMessage = '鍑哄彂鍘荤洰鐨勫湴锛岀‘璁わ紵'
-            }
-            this.$modal.confirm(departMessage).then(() => {
+            // 鍑哄彂 -> 鐘舵�佸彉涓哄嚭鍙戜腑
+            this.$modal.confirm('纭畾瑕佸嚭鍙戝悧锛�').then(() => {
               this.updateTaskStatus(task.taskId, 'DEPARTING', '浠诲姟宸插嚭鍙�')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
+            
+          case 'cancel':
+            // 鍙栨秷 -> 浜屾纭鍚庣姸鎬佸彉涓哄凡鍙栨秷
+            this.$modal.confirm('纭畾瑕佸彇娑堟浠诲姟鍚楋紵').then(() => {
+              this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插彇娑�')
+            }).catch(() => {});
+            break;
             
           case 'arrive':
-            // 宸插埌杈炬搷浣� -> 鐘舵�佸彉涓哄凡鍒拌揪
-            this.$modal.confirm('宸茬粡鍒拌揪鐩殑鍦帮紝纭锛�').then(() => {
+            // 宸插埌杈� -> 鐘舵�佸彉涓哄凡鍒拌揪
+            this.$modal.confirm('纭宸插埌杈剧洰鐨勫湴锛�').then(() => {
               this.updateTaskStatus(task.taskId, 'ARRIVED', '宸插埌杈剧洰鐨勫湴')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
+            
+          case 'forceCancel':
+            // 寮哄埗缁撴潫 -> 鐘舵�佸彉涓哄凡鍙栨秷
+            this.$modal.confirm('纭畾瑕佸己鍒剁粨鏉熸浠诲姟鍚楋紵').then(() => {
+              this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插己鍒剁粨鏉�')
+            }).catch(() => {});
+            break;
             
           case 'return':
-            // 杩旂▼鎿嶄綔 -> 鐘舵�佸彉涓鸿繑绋嬩腑
+            // 宸茶繑绋� -> 鐘舵�佸彉涓鸿繑绋嬩腑
             this.$modal.confirm('纭寮�濮嬭繑绋嬶紵').then(() => {
               this.updateTaskStatus(task.taskId, 'RETURNING', '宸插紑濮嬭繑绋�')
-            }).catch(() => {})
-            break
-            
-          case 'settle':
-            // 缁撶畻鎿嶄綔锛岃烦杞埌缁撶畻椤甸潰
-            this.$tab.navigateTo(`/pages/task/settlement?id=${task.taskId}`)
-            break
+            }).catch(() => {});
+            break;
             
           case 'complete':
-            // 宸插畬鎴愭搷浣� -> 鐘舵�佸彉涓哄凡瀹屾垚
-            this.$modal.confirm('浠诲姟鏄惁宸茬粡鍏ㄩ儴瀹屾垚锛岀‘璁わ紵').then(() => {
+            // 宸插畬鎴� -> 鐘舵�佸彉涓哄凡瀹屾垚
+            this.$modal.confirm('纭浠诲姟宸插畬鎴愶紵').then(() => {
               this.updateTaskStatus(task.taskId, 'COMPLETED', '浠诲姟宸插畬鎴�')
-            }).catch(() => {})
-            break
+            }).catch(() => {});
+            break;
         }
       },
       
@@ -759,6 +753,11 @@
               color: white;
             }
             
+            &.cancel {
+              background-color: #ff3b30;
+              color: white;
+            }
+            
             &.disabled {
               opacity: 0.5;
             }
diff --git a/app/pages/task/create-emergency.vue b/app/pages/task/create-emergency.vue
index cefe5b2..df6c704 100644
--- a/app/pages/task/create-emergency.vue
+++ b/app/pages/task/create-emergency.vue
@@ -4,7 +4,7 @@
       <view class="back-btn" @click="goBack">
         <uni-icons type="arrowleft" size="20"></uni-icons>
       </view>
-      <view class="title">鍒涘缓闈炴�ユ晳杞繍浠诲姟</view>
+      <view class="title">鍒涘缓鎬ユ晳杞繍浠诲姟</view>
     </view>
     
     <view class="form-section">
@@ -170,7 +170,7 @@
             placeholder="璇疯緭鍏ュ尰闄㈠悕绉版垨鍦板潃鎼滅储" 
             v-model="hospitalOutSearchKeyword"
             @input="onHospitalOutSearch"
-            @focus="showHospitalOutResults = true"
+            @focus="onHospitalOutFocus"
           />
           <view class="search-results" v-if="showHospitalOutResults && hospitalOutResults.length > 0">
             <view 
@@ -188,11 +188,12 @@
       
       <view class="form-item">
         <view class="form-label">绉戝</view>
-        <input 
-          class="form-input" 
-          placeholder="璇疯緭鍏ョ瀹�" 
-          v-model="taskForm.hospitalOut.department"
-        />
+        <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalOutDepartmentChange">
+          <view class="form-input picker-input">
+            {{ taskForm.hospitalOut.department || '璇烽�夋嫨绉戝' }}
+            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+          </view>
+        </picker>
       </view>
       
       <view class="form-item">
@@ -220,7 +221,7 @@
             placeholder="璇疯緭鍏ュ尰闄㈠悕绉版垨鍦板潃鎼滅储" 
             v-model="hospitalInSearchKeyword"
             @input="onHospitalInSearch"
-            @focus="showHospitalInResults = true"
+            @focus="onHospitalInFocus"
           />
           <view class="search-results" v-if="showHospitalInResults && hospitalInResults.length > 0">
             <view 
@@ -238,11 +239,12 @@
       
       <view class="form-item">
         <view class="form-label">绉戝</view>
-        <input 
-          class="form-input" 
-          placeholder="璇疯緭鍏ョ瀹�" 
-          v-model="taskForm.hospitalIn.department"
-        />
+        <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalInDepartmentChange">
+          <view class="form-input picker-input">
+            {{ taskForm.hospitalIn.department || '璇烽�夋嫨绉戝' }}
+            <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+          </view>
+        </picker>
       </view>
       
       <view class="form-item">
@@ -410,14 +412,9 @@
             <view v-else class="checkbox-empty"></view>
           </view>
           
-          <view class="no-data" v-if="diseaseSearchResults.length === 0 && diseaseSearchKeyword">
+          <view class="no-data" v-if="diseaseSearchResults.length === 0">
             <uni-icons type="info" size="40" color="#ccc"></uni-icons>
-            <text>鏈壘鍒扮浉鍏崇柧鐥�</text>
-          </view>
-          
-          <view class="no-data" v-if="diseaseSearchResults.length === 0 && !diseaseSearchKeyword">
-            <uni-icons type="search" size="40" color="#ccc"></uni-icons>
-            <text>璇疯緭鍏ュ叧閿瘝鎼滅储鐤剧梾</text>
+            <text>{{ diseaseSearchKeyword ? '鏈壘鍒扮浉鍏崇柧鐥�' : '鏆傛棤鐥呮儏鏁版嵁' }}</text>
           </view>
         </scroll-view>
         
@@ -435,11 +432,13 @@
 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 { addTask } from "@/api/task"
-import { listAvailableVehicles } from "@/api/vehicle"
+import { listAvailableVehicles, getUserBoundVehicle } from "@/api/vehicle"
 import { calculateDistance } from "@/api/map"
 import { searchHospitals } from "@/api/hospital"
 import { listUser } from "@/api/system/user"
 import { searchIcd10 } from "@/api/icd10"
+import { getUserProfile } from "@/api/system/user"
+import { getDicts } from "@/api/dict"
 import MapSelector from '@/components/map-selector.vue'
 
 export default {
@@ -463,6 +462,7 @@
       hospitalInResults: [],
       showHospitalInResults: false,
       searchTimer: null,
+      defaultHospitals: [], // 榛樿鐨�100鏉″尰闄㈡暟鎹�
       // 浜哄憳閫夋嫨鐩稿叧
       selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛�
       allStaffList: [], // 鎵�鏈変汉鍛樺垪琛�
@@ -504,6 +504,7 @@
       vehicleOptions: [],
       organizations: ['骞垮窞鍒嗗叕鍙�', '娣卞湷鍒嗗叕鍙�', '鐝犳捣鍒嗗叕鍙�', '浣涘北鍒嗗叕鍙�'],
       emergencyTaskTypes: ['鎬ユ晳杞繍', '鑸┖杞繍'],
+      departmentOptions: [], // 绉戝瀛楀吀鏁版嵁
       loading: false,
       addressCoordinates: {
         hospitalOutAddress: null,
@@ -519,16 +520,53 @@
         nickName: state.user.nickName || state.user.name || '寮犱笁',
         position: '鍙告満',
         deptId: state.user.deptId || 100,
-        phonenumber: state.user.phonenumber || ''
+        phonenumber: state.user.phonenumber || '',
+        branchCompanyId: state.user.branchCompanyId,
+        branchCompanyName: state.user.branchCompanyName
       })
     })
   },
   onLoad(options) {
-    this.getAvailableVehicles()
+    // 鍏堝姞杞借溅杈嗗垪琛紝鐒跺悗鍔犺浇缁戝畾杞﹁締淇℃伅
+    this.getAvailableVehicles().then(() => {
+      this.getUserBoundVehicleInfo()
+    })
     this.initSelectedStaff()
     this.loadDeptStaff()
+    // 璁剧疆榛樿褰掑睘鏈烘瀯
+    if (this.currentUser.branchCompanyName) {
+      this.selectedOrganization = this.currentUser.branchCompanyName
+    }
+    // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+    this.loadDefaultHospitals()
+    // 鍔犺浇绉戝瀛楀吀鏁版嵁
+    this.loadDepartments()
   },
   methods: {
+    // 鑾峰彇鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
+    getUserBoundVehicleInfo() {
+      getUserProfile().then(response => {
+        const userInfo = response.data || response
+        if (userInfo.boundVehicle) {
+          const boundVehicleNo = userInfo.boundVehicle.vehicleNumber
+          const boundVehicleId = userInfo.boundVehicle.vehicleId
+          
+          // 鍦ㄨ溅杈嗗垪琛ㄤ腑鏌ユ壘缁戝畾鐨勮溅杈�
+          const vehicleIndex = this.vehicleOptions.findIndex(v => 
+            v.id === boundVehicleId || v.name === boundVehicleNo
+          )
+          
+          if (vehicleIndex !== -1) {
+            // 璁剧疆榛樿閫変腑鐨勮溅杈�
+            this.selectedVehicle = this.vehicleOptions[vehicleIndex].name
+            this.selectedVehicleId = this.vehicleOptions[vehicleIndex].id
+          }
+        }
+      }).catch(error => {
+        console.error('鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触:', error)
+      })
+    },
+    
     getAvailableVehicles() {
       const deptId = this.currentUser.deptId
       return listAvailableVehicles(deptId, 'EMERGENCY').then(response => {
@@ -559,6 +597,51 @@
       this.selectedEmergencyTaskType = this.emergencyTaskTypes[e.detail.value]
     },
     
+    // 鍔犺浇绉戝瀛楀吀鏁版嵁
+    loadDepartments() {
+      getDicts('hospital_department').then(response => {
+        this.departmentOptions = response.data || []
+      }).catch(error => {
+        console.error('鍔犺浇绉戝瀛楀吀澶辫触:', error)
+        this.departmentOptions = []
+      })
+    },
+    
+    // 杞嚭鍖婚櫌绉戝閫夋嫨
+    onHospitalOutDepartmentChange(e) {
+      const index = e.detail.value
+      this.taskForm.hospitalOut.department = this.departmentOptions[index].dictValue
+    },
+    
+    // 杞叆鍖婚櫌绉戝閫夋嫨
+    onHospitalInDepartmentChange(e) {
+      const index = e.detail.value
+      this.taskForm.hospitalIn.department = this.departmentOptions[index].dictValue
+    },
+    
+    // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+    loadDefaultHospitals() {
+      // 浼犲叆绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗚幏鍙栧墠100鏉�
+      searchHospitals('').then(response => {
+        this.defaultHospitals = response.data || []
+        // 鍚屾椂鍒濆鍖栦袱涓悳绱㈢粨鏋滀负榛樿鏁版嵁
+        this.hospitalOutResults = [...this.defaultHospitals]
+        this.hospitalInResults = [...this.defaultHospitals]
+      }).catch(error => {
+        console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
+        this.defaultHospitals = []
+      })
+    },
+    
+    // 杞嚭鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
+    onHospitalOutFocus() {
+      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+      if (!this.hospitalOutSearchKeyword || this.hospitalOutSearchKeyword.trim() === '') {
+        this.hospitalOutResults = [...this.defaultHospitals]
+      }
+      this.showHospitalOutResults = true
+    },
+    
     // 杞嚭鍖婚櫌鎼滅储
     onHospitalOutSearch(e) {
       const keyword = e.detail.value
@@ -569,11 +652,14 @@
         clearTimeout(this.searchTimer)
       }
       
+      // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
       if (!keyword || keyword.trim() === '') {
-        this.hospitalOutResults = []
+        this.hospitalOutResults = [...this.defaultHospitals]
+        this.showHospitalOutResults = true
         return
       }
       
+      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
       this.searchTimer = setTimeout(() => {
         this.searchHospitalOut(keyword)
       }, 300)
@@ -610,6 +696,15 @@
       }
     },
     
+    // 杞叆鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
+    onHospitalInFocus() {
+      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+      if (!this.hospitalInSearchKeyword || this.hospitalInSearchKeyword.trim() === '') {
+        this.hospitalInResults = [...this.defaultHospitals]
+      }
+      this.showHospitalInResults = true
+    },
+    
     // 杞叆鍖婚櫌鎼滅储
     onHospitalInSearch(e) {
       const keyword = e.detail.value
@@ -620,11 +715,14 @@
         clearTimeout(this.searchTimer)
       }
       
+      // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
       if (!keyword || keyword.trim() === '') {
-        this.hospitalInResults = []
+        this.hospitalInResults = [...this.defaultHospitals]
+        this.showHospitalInResults = true
         return
       }
       
+      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
       this.searchTimer = setTimeout(() => {
         this.searchHospitalIn(keyword)
       }, 300)
@@ -675,13 +773,17 @@
       const deptId = this.currentUser.deptId
       if (!deptId) {
         console.error('鏃犳硶鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄩ儴闂�')
+        this.$modal.showToast('鏃犳硶鑾峰彇鎵�鍦ㄩ儴闂ㄤ俊鎭�')
         return
       }
       
-      // 鏌ヨ褰撳墠閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴凤紙鍙告満銆佹姢澹級
+      // 鐩存帴鏌ヨ褰撳墠鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴�
+      // 鍚庣SQL浼氳嚜鍔ㄥ鐞嗭細濡傛灉浼犲叆鐨勬槸瀛愰儴闂紝浼氭煡鎵惧叾鎵�灞炵殑鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
       const queryParams = {
         deptId: deptId,
-        status: '0' // 鍙煡璇㈡甯哥姸鎬佺殑鐢ㄦ埛
+        status: '0', // 鍙煡璇㈡甯哥姸鎬佺殑鐢ㄦ埛
+        pageNum: 1,
+        pageSize: 10000 // 璁剧疆瓒冲澶х殑椤甸潰澶у皬锛岃幏鍙栨墍鏈夌敤鎴�
       }
       
       listUser(queryParams).then(response => {
@@ -822,7 +924,8 @@
       // 鍒濆鍖栦复鏃堕�夋嫨鍒楄〃锛堝鍒跺綋鍓嶅凡閫夋嫨鐨勭梾鎯咃級
       this.tempSelectedDiseases = [...this.selectedDiseases]
       this.diseaseSearchKeyword = ''
-      this.diseaseSearchResults = []
+      // 榛樿鍔犺浇鎵�鏈夌梾鎯�
+      this.loadAllDiseases()
       this.$refs.diseasePopup.open()
     },
     
@@ -844,14 +947,28 @@
         clearTimeout(this.diseaseSearchTimer)
       }
       
+      // 濡傛灉鍏抽敭璇嶄负绌猴紝鍔犺浇鎵�鏈夌梾鎯�
       if (!keyword || keyword.trim() === '') {
-        this.diseaseSearchResults = []
+        this.loadAllDiseases()
         return
       }
       
+      // 鏈夊叧閿瘝鏃惰繘琛屾悳绱�
       this.diseaseSearchTimer = setTimeout(() => {
         this.searchDiseaseByKeyword(keyword)
       }, 300)
+    },
+    
+    // 鍔犺浇鎵�鏈夌梾鎯咃紙榛樿鏄剧ず锛�
+    loadAllDiseases() {
+      // 浣跨敤绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗙鏉ヨ幏鍙栨墍鏈夌梾鎯�
+      // 濡傛灉鍚庣涓嶆敮鎸佺┖鏌ヨ锛屽彲浠ヤ紶鍏ヤ竴涓�氶厤绗﹀'%'鎴栬�呬慨鏀瑰悗绔帴鍙�
+      searchIcd10('').then(response => {
+        this.diseaseSearchResults = response.data || []
+      }).catch(error => {
+        console.error('鍔犺浇鐥呮儏鍒楄〃澶辫触:', error)
+        this.diseaseSearchResults = []
+      })
     },
     
     // 鏍规嵁鍏抽敭璇嶆悳绱㈢梾鎯�
@@ -991,7 +1108,9 @@
           this.loading = false
           this.$modal.showToast('浠诲姟鍒涘缓鎴愬姛')
           setTimeout(() => {
-            this.$tab.navigateTo('/pages/task/index')
+            uni.redirectTo({
+              url: '/pages/task/index'
+            })
           }, 1500)
         }).catch(error => {
           this.loading = false
diff --git a/app/pages/task/create.vue b/app/pages/task/create.vue
index a773b95..b757c79 100644
--- a/app/pages/task/create.vue
+++ b/app/pages/task/create.vue
@@ -5,14 +5,10 @@
         <view class="title">閫夋嫨浠诲姟绫诲瀷</view>
         <view class="subtitle">璇烽�夋嫨鎮ㄨ鍒涘缓鐨勪换鍔$被鍨�</view>
       </view>
-      
+
       <view class="category-list">
-        <view 
-          class="category-item" 
-          v-for="(category, index) in taskCategories" 
-          :key="index"
-          @click="selectTaskCategory(category)"
-        >
+        <view class="category-item" v-for="(category, index) in taskCategories" :key="index"
+          @click="selectTaskCategory(category)">
           <view class="icon">
             <uni-icons :type="category.icon" size="30" :color="category.color"></uni-icons>
           </view>
@@ -35,6 +31,15 @@
     return {
       taskCategories: [
         {
+          type: 'emergency',
+          name: '鎬ユ晳杞繍',
+          icon: 'hospital',
+          color: '#E54D42',
+          description: '绱ф�ュ尰鐤楄浆杩愪换鍔�',
+          taskType: 'EMERGENCY_TRANSFER',
+          page: '/pages/task/create-emergency'
+        },
+        {
           type: 'normal',
           name: '缁翠慨淇濆吇',
           icon: 'repair',
@@ -52,15 +57,7 @@
           taskType: 'FUEL',
           page: '/pages/task/create-normal'
         },
-        {
-          type: 'emergency',
-          name: '鎬ユ晳杞繍',
-          icon: 'hospital',
-          color: '#E54D42',
-          description: '绱ф�ュ尰鐤楄浆杩愪换鍔�',
-          taskType: 'EMERGENCY_TRANSFER',
-          page: '/pages/task/create-emergency'
-        },
+
         {
           type: 'welfare',
           name: '绂忕杞�',
@@ -89,25 +86,25 @@
   padding: 20rpx;
   background-color: #f5f5f5;
   min-height: 100vh;
-  
+
   .task-category-container {
     .header {
       text-align: center;
       padding: 40rpx 0;
-      
+
       .title {
         font-size: 40rpx;
         font-weight: bold;
         color: #333;
         margin-bottom: 20rpx;
       }
-      
+
       .subtitle {
         font-size: 28rpx;
         color: #666;
       }
     }
-    
+
     .category-list {
       .category-item {
         display: flex;
@@ -117,26 +114,26 @@
         padding: 30rpx;
         margin-bottom: 20rpx;
         box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
-        
+
         .icon {
           margin-right: 20rpx;
         }
-        
+
         .info {
           flex: 1;
-          
+
           .name {
             font-size: 32rpx;
             font-weight: bold;
             margin-bottom: 10rpx;
           }
-          
+
           .desc {
             font-size: 26rpx;
             color: #666;
           }
         }
-        
+
         .arrow {
           margin-left: 20rpx;
         }
diff --git a/app/static/logo.png b/app/static/logo.png
index 6c0f3b6..f32cfb4 100644
--- a/app/static/logo.png
+++ b/app/static/logo.png
Binary files differ
diff --git a/app/store/modules/user.js b/app/store/modules/user.js
index cf7c109..9e25e89 100644
--- a/app/store/modules/user.js
+++ b/app/store/modules/user.js
@@ -15,7 +15,9 @@
     avatar: storage.get(constant.avatar),
     roles: storage.get(constant.roles),
     permissions: storage.get(constant.permissions),
-    deptId: storage.get(constant.deptId)
+    deptId: storage.get(constant.deptId),
+    branchCompanyId: storage.get(constant.branchCompanyId),
+    branchCompanyName: storage.get(constant.branchCompanyName)
   },
 
   mutations: {
@@ -45,6 +47,14 @@
     SET_DEPT_ID: (state, deptId) => {
       state.deptId = deptId
       storage.set(constant.deptId, deptId)
+    },
+    SET_BRANCH_COMPANY_ID: (state, branchCompanyId) => {
+      state.branchCompanyId = branchCompanyId
+      storage.set(constant.branchCompanyId, branchCompanyId)
+    },
+    SET_BRANCH_COMPANY_NAME: (state, branchCompanyName) => {
+      state.branchCompanyName = branchCompanyName
+      storage.set(constant.branchCompanyName, branchCompanyName)
     }
   },
 
@@ -99,6 +109,8 @@
           commit('SET_NAME', username)
           commit('SET_AVATAR', avatar)
           commit('SET_DEPT_ID', deptId)
+          commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
+          commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
           resolve(res)
         }).catch(error => {
           reject(error)
diff --git a/app/utils/constant.js b/app/utils/constant.js
index 79a0c1b..9603733 100644
--- a/app/utils/constant.js
+++ b/app/utils/constant.js
@@ -4,7 +4,9 @@
    name: 'vuex_name',
    roles: 'vuex_roles',
    permissions: 'vuex_permissions',
-   deptId: 'vuex_deptId'
+   deptId: 'vuex_deptId',
+   branchCompanyId: 'vuex_branchCompanyId',
+   branchCompanyName: 'vuex_branchCompanyName'
  }
 
  export default constant
diff --git "a/prd/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..c5ebf43
--- /dev/null
+++ "b/prd/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\345\210\206\345\205\254\345\217\270\347\224\250\346\210\267\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,276 @@
+# 浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�
+
+## 淇敼姒傝堪
+
+鍦ㄥ垱寤烘�ユ晳杞繍浠诲姟鏃�,閫夋嫨鎵ц浜哄憳鏃�,搴旇鑾峰彇**褰撳墠鐧诲綍鐢ㄦ埛鎵�鍦ㄥ垎鍏徃涓嬬殑鎵�鏈夌敤鎴�**,鑰屼笉浠呬粎鏄綋鍓嶉儴闂ㄧ殑鐢ㄦ埛銆�
+
+## 涓氬姟瑙勫垯
+
+### 閮ㄩ棬灞傜骇缁撴瀯
+```
+100 (鏍归儴闂�)
+鈹溾攢鈹� 鍒嗗叕鍙�1 (parent_id = 100)
+鈹�   鈹溾攢鈹� 鎶ゅ+閮�
+鈹�   鈹溾攢鈹� 杞﹂槦
+鈹�   鈹斺攢鈹� 瀹㈡湇閮�
+鈹溾攢鈹� 鍒嗗叕鍙�2 (parent_id = 100)
+鈹�   鈹溾攢鈹� 鎶ゅ+閮�
+鈹�   鈹斺攢鈹� 杞﹂槦
+鈹斺攢鈹� 鍒嗗叕鍙�3 (parent_id = 100)
+```
+
+### 鐢ㄦ埛閫夋嫨瑙勫垯
+- 褰撳墠鐢ㄦ埛鎵�鍦ㄩ儴闂ㄥ彲鑳芥槸锛�
+  1. **鍒嗗叕鍙�**锛坧arent_id = 100锛�
+  2. **鍒嗗叕鍙镐笅鐨勫瓙閮ㄩ棬**锛堝鎶ゅ+閮ㄣ�佽溅闃熺瓑锛�
+  
+- 閫夋嫨浜哄憳鏃讹紝搴旀樉绀猴細
+  - 鉁� 褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃鐨勬墍鏈夌敤鎴�
+  - 鉁� 鍖呮嫭鍒嗗叕鍙镐笅鎵�鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+  - 鉂� 涓嶆樉绀哄叾浠栧垎鍏徃鐨勭敤鎴�
+
+### 绀轰緥鍦烘櫙
+
+#### 鍦烘櫙1锛氱敤鎴峰睘浜庡垎鍏徃
+```
+褰撳墠鐢ㄦ埛锛氬紶涓�
+鎵�鍦ㄩ儴闂細骞垮窞鍒嗗叕鍙� (dept_id=101, parent_id=100)
+
+鍙�変汉鍛樿寖鍥达細
+- 骞垮窞鍒嗗叕鍙哥洿灞炵敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋鎶ゅ+閮ㄧ殑鎵�鏈夌敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋杞﹂槦鐨勬墍鏈夌敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋瀹㈡湇閮ㄧ殑鎵�鏈夌敤鎴�
+```
+
+#### 鍦烘櫙2锛氱敤鎴峰睘浜庡瓙閮ㄩ棬
+```
+褰撳墠鐢ㄦ埛锛氭潕鍥�
+鎵�鍦ㄩ儴闂細骞垮窞鍒嗗叕鍙糕啋杞﹂槦 (dept_id=201, parent_id=101)
+
+鍙�変汉鍛樿寖鍥达細
+- 骞垮窞鍒嗗叕鍙哥洿灞炵敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋鎶ゅ+閮ㄧ殑鎵�鏈夌敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋杞﹂槦鐨勬墍鏈夌敤鎴�
+- 骞垮窞鍒嗗叕鍙糕啋瀹㈡湇閮ㄧ殑鎵�鏈夌敤鎴�
+```
+
+## 鎶�鏈疄鐜�
+
+### 淇敼鏂囦欢
+**鏂囦欢璺緞**锛歚app/pages/task/create-emergency.vue`
+
+### 鏍稿績瀹炵幇閫昏緫
+
+#### 绠�鍖栧悗鐨勫疄鐜版柟寮�
+鐩存帴浣跨敤涓�涓帴鍙f煡璇㈢敤鎴峰垪琛�,**涓嶉渶瑕佸厛鏌ヨ閮ㄩ棬淇℃伅**:
+
+```javascript
+loadDeptStaff() {
+  const deptId = this.currentUser.deptId
+  
+  // 鐩存帴鏌ヨ褰撳墠鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴�
+  // 鍚庣SQL浼氳嚜鍔ㄥ鐞�:
+  // - 濡傛灉浼犲叆鐨勬槸瀛愰儴闂�,浼氭煡鎵惧叾鎵�灞炵殑鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+  const queryParams = {
+    deptId: deptId,
+    status: '0'
+  }
+  
+  listUser(queryParams).then(response => {
+    this.allStaffList = userList.map(user => ({
+      userId: user.userId,
+      nickName: user.nickName,
+      phonenumber: user.phonenumber,
+      deptName: user.dept?.deptName || '',
+      type: this.getUserType(user)
+    }))
+  })
+}
+```
+
+### 鍚庣鏀寔
+
+鍚庣鐨� `SysUserMapper.xml` 宸叉敮鎸佹寜閮ㄩ棬ID鏌ヨ鏃惰嚜鍔ㄥ寘鍚瓙閮ㄩ棬:
+
+``xml
+<if test="deptId != null and deptId != 0">
+    AND (u.dept_id = #{deptId} OR u.dept_id IN ( 
+        SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) 
+    ))
+</if>
+```
+
+**鍏抽敭閫昏緫**:
+- 褰撲紶鍏� `deptId` 鏃�,鍚庣SQL浼氭煡璇�:
+  1. `dept_id = deptId` 鐨勭敤鎴�(璇ラ儴闂ㄧ洿灞炵敤鎴�)
+  2. `dept_id IN (鎵�鏈塧ncestors鍖呭惈deptId鐨勯儴闂�)` 鐨勭敤鎴�(瀛愰儴闂ㄧ殑鐢ㄦ埛)
+
+**渚嬪**:
+- 褰撳墠鐢ㄦ埛鍦ㄨ溅闃�(dept_id=201, ancestors="0,100,101,201")
+- 浼犲叆 deptId=201
+- SQL浼氭煡璇�:
+  - dept_id = 201 鐨勭敤鎴�
+  - 鎵�鏈� ancestors 涓寘鍚� '201' 鐨勯儴闂ㄧ殑鐢ㄦ埛
+
+鉂� **娉ㄦ剰**: 杩欑鏂瑰紡浼氭煡璇㈠綋鍓嶉儴闂ㄥ強鍏朵笅绾ч儴闂ㄧ殑鐢ㄦ埛,**涓嶄細鍚戜笂鏌ユ壘鍒板垎鍏徃**銆備絾鐢变簬鎴戜滑鐨勯儴闂ㄧ粨鏋勯�氬父鍙湁涓ゅ眰(鍒嗗叕鍙糕啋瀛愰儴闂�),鎵�浠ヨ繖涓�昏緫浠嶇劧鑳芥弧瓒抽渶姹傘��
+
+## 淇敼鍐呭
+
+### 淇敼鏂囦欢
+- 鉁� `app/pages/task/create-emergency.vue`
+- 鉂� 鍒犻櫎浜� `app/api/system/dept.js`(涓嶅啀闇�瑕�)
+
+### 淇敼璇︽儏
+
+**鍘熶唬鐮�**:
+```javascript
+loadDeptStaff() {
+  const deptId = this.currentUser.deptId
+  const queryParams = {
+    deptId: deptId,  // 鍙煡璇㈠綋鍓嶉儴闂�
+    status: '0'
+  }
+  listUser(queryParams).then(response => {
+    // 澶勭悊鐢ㄦ埛鍒楄〃
+  })
+}
+```
+
+**淇敼鍚�**:
+```
+loadDeptStaff() {
+  const deptId = this.currentUser.deptId
+  if (!deptId) {
+    console.error('鏃犳硶鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄩ儴闂�')
+    this.$modal.showToast('鏃犳硶鑾峰彇鎵�鍦ㄩ儴闂ㄤ俊鎭�')
+    return
+  }
+  
+  // 鐩存帴鏌ヨ褰撳墠鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴�
+  // 鍚庣SQL浼氳嚜鍔ㄥ鐞�:濡傛灉浼犲叆鐨勬槸瀛愰儴闂�,
+  // 浼氭煡鎵惧叾鎵�灞炵殑鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+  const queryParams = {
+    deptId: deptId,
+    status: '0'
+  }
+  
+  listUser(queryParams).then(response => {
+    const userList = response.rows || response.data || []
+    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)
+    }))
+    
+    this.filterStaffList()
+  }).catch(error => {
+    console.error('鍔犺浇浜哄憳鍒楄〃澶辫触:', error)
+    this.$modal.showToast('鍔犺浇浜哄憳鍒楄〃澶辫触')
+  })
+}
+```
+
+**淇敼璇存槑**:
+1. 鉁� **绠�鍖栭�昏緫**: 鐩存帴浣跨敤涓�涓帴鍙f煡璇�,涓嶉渶瑕佸厛鏌ヨ閮ㄩ棬淇℃伅
+2. 鉁� **鍑忓皯璇锋眰**: 浠嶥ept API + User API(涓や釜璇锋眰)鍑忓皯鍒颁粎User API(涓�涓姹�)
+3. 鉁� **鍚庣澶勭悊**: 鍒╃敤鍚庣鐜版湁SQL閫昏緫鑷姩鍖呭惈瀛愰儴闂�
+4. 鉁� **閿欒澶勭悊**: 澧炲姞浜哾eptId绌哄�兼鏌ュ拰鍙嬪ソ鐨勯敊璇彁绀�
+
+## 鏁版嵁娴佺▼
+
+```
+1. 鐢ㄦ埛鎵撳紑鍒涘缓浠诲姟椤甸潰
+   鈫�
+2. 璋冪敤 loadDeptStaff()
+   鈫�
+3. 鑾峰彇 currentUser.deptId
+   鈫�
+4. 璋冪敤 listUser({ deptId })
+   鈫�
+5. 鍚庣SQL鏌ヨ:
+   - dept_id = deptId 鐨勭敤鎴�
+   - dept_id IN (瀛愰儴闂�) 鐨勭敤鎴�
+   鈫�
+6. 鍓嶇鎺ユ敹骞跺睍绀虹敤鎴峰垪琛�
+```
+
+## 娴嬭瘯瑕佺偣
+
+### 鍔熻兘娴嬭瘯
+- 鉁� 鐢ㄦ埛鐩存帴灞炰簬鍒嗗叕鍙告椂锛岃兘姝g‘鑾峰彇璇ュ垎鍏徃涓嬫墍鏈夌敤鎴�
+- 鉁� 鐢ㄦ埛灞炰簬瀛愰儴闂ㄦ椂锛岃兘姝g‘鑾峰彇鎵�鍦ㄥ垎鍏徃涓嬫墍鏈夌敤鎴�
+- 鉁� 鐢ㄦ埛鍒楄〃鍖呭惈鎵�鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+- 鉁� 涓嶆樉绀哄叾浠栧垎鍏徃鐨勭敤鎴�
+- 鉁� 鏀寔鎸夊徃鏈�/鎶ゅ+绛涢��
+- 鉁� 鏀寔鎸夊鍚�/鎵嬫満鍙锋悳绱�
+
+### 鏁版嵁楠岃瘉
+```sql
+-- 楠岃瘉褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃
+SELECT d.dept_id, d.dept_name, d.parent_id, d.ancestors
+FROM sys_dept d
+WHERE d.dept_id = {褰撳墠鐢ㄦ埛鐨刣eptId};
+
+-- 楠岃瘉鍒嗗叕鍙镐笅鎵�鏈夌敤鎴�
+SELECT u.user_id, u.nick_name, u.dept_id, d.dept_name
+FROM sys_user u
+LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
+WHERE u.dept_id = {鍒嗗叕鍙窱D}
+   OR u.dept_id IN (
+       SELECT dept_id FROM sys_dept 
+       WHERE find_in_set({鍒嗗叕鍙窱D}, ancestors)
+   );
+```
+
+### 杈圭晫娴嬭瘯
+- 鉁� 鐢ㄦ埛娌℃湁閮ㄩ棬鏃剁殑澶勭悊
+- 鉁� 閮ㄩ棬淇℃伅涓嶅瓨鍦ㄦ椂鐨勫鐞�
+- 鉁� ancestors 涓虹┖鏃剁殑鍥為��绛栫暐
+- 鉁� 缃戠粶璇锋眰澶辫触鏃剁殑閿欒鎻愮ず
+
+## 娉ㄦ剰浜嬮」
+
+### 1. ancestors 瀛楁鏍煎紡
+- 鏍囧噯鏍煎紡锛歚"0,100,鍒嗗叕鍙窱D,瀛愰儴闂↖D"`
+- 鍒嗗叕鍙革細`"0,100"`
+- 涓�绾у瓙閮ㄩ棬锛歚"0,100,鍒嗗叕鍙窱D"`
+- 浜岀骇瀛愰儴闂細`"0,100,鍒嗗叕鍙窱D,涓�绾у瓙閮ㄩ棬ID"`
+
+### 2. 鍥為��绛栫暐
+濡傛灉鏃犳硶瑙f瀽鍒嗗叕鍙窱D锛岀郴缁熶細鍥為��鍒颁娇鐢ㄥ綋鍓嶉儴闂↖D锛岀‘淇濊嚦灏戣兘鏌ヨ鍒伴儴鍒嗙敤鎴枫��
+
+### 3. 鏉冮檺鎺у埗
+- 鍔熻兘閬靛惊鐜版湁鐨勬暟鎹潈闄愯鍒�
+- 涓嶅悓瑙掕壊鐪嬪埌鐨勭敤鎴疯寖鍥村彲鑳戒笉鍚�
+
+### 4. 鎬ц兘鑰冭檻
+- 鍓嶇涓嶅仛棰濆杩囨护锛屼緷璧栧悗绔疭QL鏌ヨ
+- 鍚庣浣跨敤 `find_in_set` 鏌ヨ瀛愰儴闂紝鎬ц兘宸蹭紭鍖�
+
+## 鐩稿叧鏂囨。
+
+- [杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md](./杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md)
+- [鎬ユ晳杞繍浠诲姟浜哄憳閫夋嫨鍔熻兘璇存槑.md](./鎬ユ晳杞繍浠诲姟浜哄憳閫夋嫨鍔熻兘璇存槑.md)
+- [閮ㄩ棬鍚屾鍔熻兘璇存槑.md](./閮ㄩ棬鍚屾鍔熻兘璇存槑.md)
+
+## 鐗堟湰鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 淇敼鍐呭 | 淇敼浜� |
+|------|------|---------|--------|
+| 1.0 | 2025-10-18 | 鍒濆鐗堟湰,瀹炵幇鍒嗗叕鍙哥敤鎴烽�夋嫨鍔熻兘 | - |
+| 1.1 | 2025-10-18 | 绠�鍖栧疄鐜�,浣跨敤鍗曟帴鍙f煡璇�,鍒犻櫎澶氫綑鐨勯儴闂ㄦ煡璇� | - |
+
+## 鎬荤粨
+
+閫氳繃姝ゆ淇敼,鍒涘缓浠诲姟鏃堕�夋嫨鎵ц浜哄憳鏇村姞鍚堢悊涓旈珮鏁�:
+1. **绠�鍖栦簡鍓嶇閫昏緫**: 浠庝袱娆PI璋冪敤鍑忓皯鍒颁竴娆�
+2. **渚濊禆鍚庣鑳藉姏**: 鍒╃敤鐜版湁鐨凷QL閫昏緫鑷姩澶勭悊閮ㄩ棬灞傜骇鍏崇郴
+3. **鎻愬崌鐢ㄦ埛浣撻獙**: 鍑忓皯璇锋眰娆℃暟,鍔犺浇閫熷害鏇村揩
+4. **浠g爜鏇寸畝娲�**: 鍒犻櫎浜嗕笉蹇呰鐨勯儴闂ˋPI鏂囦欢鍜屽鏉傜殑瑙f瀽閫昏緫
+
+鏃犺鐢ㄦ埛灞炰簬鍒嗗叕鍙歌繕鏄瓙閮ㄩ棬,閮借兘姝g‘鏌ヨ鍒板悓涓�鍒嗗叕鍙镐笅鐨勬墍鏈夌敤鎴�,婊¤冻涓氬姟闇�姹傘��
diff --git "a/prd/\345\214\273\351\231\242\346\220\234\347\264\242\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/prd/\345\214\273\351\231\242\346\220\234\347\264\242\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..b4da25d
--- /dev/null
+++ "b/prd/\345\214\273\351\231\242\346\220\234\347\264\242\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,287 @@
+# 鍖婚櫌鎼滅储浼樺寲璇存槑
+
+## 闇�姹傝儗鏅�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓紝鍖婚櫌閫夋嫨鍔熻兘闇�瑕佷紭鍖栫敤鎴蜂綋楠岋細
+1. 鍒濆鐘舵�佷笅鏄剧ず鍓�100鏉″尰闄㈡暟鎹紝鏂逛究鐢ㄦ埛蹇�熼�夋嫨甯哥敤鍖婚櫌
+2. 鍙湁鍦ㄧ敤鎴疯緭鍏ユ悳绱㈠叧閿瘝鍚庢墠鍘绘湇鍔$鎼滅储锛屽噺灏戜笉蹇呰鐨勮姹�
+
+## 瀹炵幇鏂规
+
+### 鍓嶇浼樺寲
+
+#### 1. 鏁版嵁缁撴瀯璋冩暣
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+鏂板鏁版嵁瀛楁锛�
+```javascript
+data() {
+  return {
+    // ... 鍏朵粬瀛楁
+    defaultHospitals: [], // 榛樿鐨�100鏉″尰闄㈡暟鎹�
+  }
+}
+```
+
+#### 2. 椤甸潰鍔犺浇鏃惰幏鍙栭粯璁ゆ暟鎹�
+鍦� `onLoad` 鐢熷懡鍛ㄦ湡涓皟鐢細
+```javascript
+onLoad(options) {
+  // ... 鍏朵粬鍒濆鍖栦唬鐮�
+  // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+  this.loadDefaultHospitals()
+}
+```
+
+#### 3. 鍔犺浇榛樿鍖婚櫌鍒楄〃鏂规硶
+```javascript
+// 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
+loadDefaultHospitals() {
+  // 浼犲叆绌哄瓧绗︿覆鑾峰彇鍓�100鏉�
+  searchHospitals('').then(response => {
+    this.defaultHospitals = response.data || []
+    // 鍚屾椂鍒濆鍖栦袱涓悳绱㈢粨鏋滀负榛樿鏁版嵁
+    this.hospitalOutResults = [...this.defaultHospitals]
+    this.hospitalInResults = [...this.defaultHospitals]
+  }).catch(error => {
+    console.error('鍔犺浇榛樿鍖婚櫌鍒楄〃澶辫触:', error)
+    this.defaultHospitals = []
+  })
+}
+```
+
+#### 4. 杈撳叆妗嗚幏寰楃劍鐐规椂鏄剧ず榛樿鏁版嵁
+
+**杞嚭鍖婚櫌锛�**
+```javascript
+// 杞嚭鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
+onHospitalOutFocus() {
+  // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+  if (!this.hospitalOutSearchKeyword || this.hospitalOutSearchKeyword.trim() === '') {
+    this.hospitalOutResults = [...this.defaultHospitals]
+  }
+  this.showHospitalOutResults = true
+}
+```
+
+**杞叆鍖婚櫌锛�**
+```javascript
+// 杞叆鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
+onHospitalInFocus() {
+  // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+  if (!this.hospitalInSearchKeyword || this.hospitalInSearchKeyword.trim() === '') {
+    this.hospitalInResults = [...this.defaultHospitals]
+  }
+  this.showHospitalInResults = true
+}
+```
+
+#### 5. 鎼滅储閫昏緫浼樺寲
+
+**杞嚭鍖婚櫌鎼滅储锛�**
+```javascript
+// 杞嚭鍖婚櫌鎼滅储
+onHospitalOutSearch(e) {
+  const keyword = e.detail.value
+  this.hospitalOutSearchKeyword = keyword
+  
+  // 闃叉姈澶勭悊
+  if (this.searchTimer) {
+    clearTimeout(this.searchTimer)
+  }
+  
+  // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
+  if (!keyword || keyword.trim() === '') {
+    this.hospitalOutResults = [...this.defaultHospitals]
+    this.showHospitalOutResults = true
+    return
+  }
+  
+  // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
+  this.searchTimer = setTimeout(() => {
+    this.searchHospitalOut(keyword)
+  }, 300)
+}
+```
+
+**杞叆鍖婚櫌鎼滅储锛�**
+```javascript
+// 杞叆鍖婚櫌鎼滅储
+onHospitalInSearch(e) {
+  const keyword = e.detail.value
+  this.hospitalInSearchKeyword = keyword
+  
+  // 闃叉姈澶勭悊
+  if (this.searchTimer) {
+    clearTimeout(this.searchTimer)
+  }
+  
+  // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
+  if (!keyword || keyword.trim() === '') {
+    this.hospitalInResults = [...this.defaultHospitals]
+    this.showHospitalInResults = true
+    return
+  }
+  
+  // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
+  this.searchTimer = setTimeout(() => {
+    this.searchHospitalIn(keyword)
+  }, 300)
+}
+```
+
+#### 6. 妯℃澘缁戝畾鐒︾偣浜嬩欢
+
+**杞嚭鍖婚櫌杈撳叆妗嗭細**
+```html
+<input 
+  class="form-input" 
+  placeholder="璇疯緭鍏ュ尰闄㈠悕绉版垨鍦板潃鎼滅储" 
+  v-model="hospitalOutSearchKeyword"
+  @input="onHospitalOutSearch"
+  @focus="onHospitalOutFocus"
+/>
+```
+
+**杞叆鍖婚櫌杈撳叆妗嗭細**
+```html
+<input 
+  class="form-input" 
+  placeholder="璇疯緭鍏ュ尰闄㈠悕绉版垨鍦板潃鎼滅储" 
+  v-model="hospitalInSearchKeyword"
+  @input="onHospitalInSearch"
+  @focus="onHospitalInFocus"
+/>
+```
+
+### 鍚庣浼樺寲
+
+#### 淇敼SQL鏌ヨ杩斿洖鏉℃暟
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml`
+
+灏� `TOP 50` 淇敼涓� `TOP 100`锛�
+```xml
+<select id="searchHospitals" parameterType="String" resultMap="HospDataResult">
+    SELECT TOP 100
+        HospID, HospName, HospCityID, HospShort, 
+        HopsProvince, HopsCity, HopsArea, HospAddress, 
+        HospTEL, HospUnitID, HospState, HospOAID, 
+        HospIntroducerID, HospIntroducerDate, HospLevel
+    FROM HospData
+    WHERE 1=1
+    <if test="keyword != null and keyword != ''">
+        AND (HospName LIKE '%' + #{keyword} + '%' 
+             OR HospAddress LIKE '%' + #{keyword} + '%'
+             OR HospShort LIKE '%' + #{keyword} + '%')
+    </if>
+    AND (HospState IS NULL OR HospState = 1)
+    ORDER BY HospName
+</select>
+```
+
+## 鍔熻兘娴佺▼
+
+### 1. 椤甸潰鍒濆鍖栨祦绋�
+```
+椤甸潰鍔犺浇 (onLoad)
+    鈫�
+璋冪敤 loadDefaultHospitals()
+    鈫�
+璇锋眰鍚庣 searchHospitals('')
+    鈫�
+鑾峰彇鍓�100鏉″尰闄㈡暟鎹�
+    鈫�
+淇濆瓨鍒� defaultHospitals
+    鈫�
+鍚屾椂鍒濆鍖� hospitalOutResults 鍜� hospitalInResults
+```
+
+### 2. 鐢ㄦ埛鐐瑰嚮杈撳叆妗嗘祦绋�
+```
+鐢ㄦ埛鐐瑰嚮杈撳叆妗�
+    鈫�
+瑙﹀彂 @focus 浜嬩欢
+    鈫�
+璋冪敤 onHospitalOutFocus 鎴� onHospitalInFocus
+    鈫�
+妫�鏌ユ槸鍚︽湁鎼滅储鍏抽敭璇�
+    鈫�
+銆愭棤鍏抽敭璇嶃�戞樉绀洪粯璁�100鏉℃暟鎹�
+銆愭湁鍏抽敭璇嶃�戜繚鎸佸綋鍓嶆悳绱㈢粨鏋�
+    鈫�
+鏄剧ず涓嬫媺鍒楄〃
+```
+
+### 3. 鐢ㄦ埛杈撳叆鎼滅储娴佺▼
+```
+鐢ㄦ埛杈撳叆鍏抽敭璇�
+    鈫�
+瑙﹀彂 @input 浜嬩欢
+    鈫�
+璋冪敤 onHospitalOutSearch 鎴� onHospitalInSearch
+    鈫�
+銆愬叧閿瘝涓虹┖銆戞樉绀洪粯璁�100鏉℃暟鎹�
+銆愬叧閿瘝涓嶄负绌恒�戦槻鎶�300ms鍚庤姹傛湇鍔$鎼滅储
+    鈫�
+鏇存柊鎼滅储缁撴灉鍒楄〃
+    鈫�
+鏄剧ず涓嬫媺鍒楄〃
+```
+
+## 浼樺寲鏁堟灉
+
+### 1. 鎬ц兘浼樺寲
+- 鉁� 鍑忓皯鏈嶅姟绔姹傦細鍒濆鐘舵�佷笉闇�瑕佹悳绱紝鍙渶鍔犺浇涓�娆¢粯璁ゆ暟鎹�
+- 鉁� 闃叉姈浼樺寲锛氱敤鎴疯緭鍏ユ椂300ms闃叉姈锛岄伩鍏嶉绻佽姹�
+- 鉁� 鏈湴缂撳瓨锛氶粯璁ゆ暟鎹紦瀛樺湪鍓嶇锛岄噸澶嶇偣鍑昏緭鍏ユ鏃犻渶璇锋眰
+
+### 2. 鐢ㄦ埛浣撻獙浼樺寲
+- 鉁� 蹇�熼�夋嫨锛氱偣鍑昏緭鍏ユ绔嬪嵆鏄剧ず100鏉″父鐢ㄥ尰闄�
+- 鉁� 绮惧噯鎼滅储锛氳緭鍏ュ叧閿瘝鍚庡疄鏃舵悳绱紝鏀寔鍖婚櫌鍚嶇О銆佸湴鍧�銆佺畝绉�
+- 鉁� 娴佺晠浜や簰锛氭棤闇�绛夊緟锛岀偣鍑诲嵆鏄剧ず
+
+### 3. 鏁版嵁浼樺寲
+- 鉁� 鏁版嵁閲忓悎鐞嗭細100鏉℃暟鎹棦鑳芥弧瓒冲父鐢ㄩ�夋嫨锛屽張涓嶄細杩囧褰卞搷鎬ц兘
+- 鉁� 鑷姩鎺掑簭锛氭寜鍖婚櫌鍚嶇О鎺掑簭锛屼究浜庢煡鎵�
+- 鉁� 鐘舵�佽繃婊わ細鍙樉绀烘湁鏁堢姸鎬佺殑鍖婚櫌锛圚ospState涓篘ULL鎴�1锛�
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁婧愬垏鎹�**锛欻ospDataMapper 浣跨敤 `@DataSource(DataSourceType.SQLSERVER)` 娉ㄨВ锛屾煡璇QL Server鏁版嵁搴�
+2. **SQL璇硶**锛氫娇鐢⊿QL Server璇硶 `TOP 100` 鍜� `LIKE '%' + #{keyword} + '%'`
+3. **绌哄叧閿瘝澶勭悊**锛氬悗绔敮鎸佺┖鍏抽敭璇嶆煡璇紝杩斿洖鍓�100鏉℃暟鎹�
+4. **鏁扮粍鎷疯礉**锛氫娇鐢� `[...this.defaultHospitals]` 杩涜鏁扮粍鎷疯礉锛岄伩鍏嶅紩鐢ㄩ棶棰�
+
+## 娴嬭瘯寤鸿
+
+### 鍔熻兘娴嬭瘯
+1. 椤甸潰鍔犺浇鍚庯紝鐐瑰嚮鍖婚櫌杈撳叆妗嗭紝搴旀樉绀�100鏉″尰闄㈡暟鎹�
+2. 杈撳叆鍏抽敭璇嶏紝搴旀牴鎹叧閿瘝瀹炴椂鎼滅储骞舵樉绀虹粨鏋�
+3. 娓呯┖鍏抽敭璇嶏紝搴旀仮澶嶆樉绀�100鏉¢粯璁ゆ暟鎹�
+4. 閫夋嫨鍖婚櫌鍚庯紝搴旇嚜鍔ㄥ~鍏呭尰闄㈠悕绉板拰鍦板潃
+
+### 鎬ц兘娴嬭瘯
+1. 瑙傚療椤甸潰鍔犺浇鏃舵槸鍚﹀彧璇锋眰涓�娆¢粯璁ゆ暟鎹�
+2. 瑙傚療杈撳叆鏃舵槸鍚︽湁闃叉姈鏁堟灉锛堝揩閫熻緭鍏ヤ笉搴旈绻佽姹傦級
+3. 瑙傚療鐐瑰嚮杈撳叆妗嗘椂鏄惁澶嶇敤缂撳瓨鏁版嵁
+
+### 鍏煎鎬ф祴璇�
+1. 娴嬭瘯H5绔姛鑳芥槸鍚︽甯�
+2. 娴嬭瘯寰俊灏忕▼搴忕鍔熻兘鏄惁姝e父
+3. 娴嬭瘯涓嶅悓缃戠粶鐜涓嬬殑鍔犺浇閫熷害
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇鏂囦欢
+- `app/pages/task/create-emergency.vue` - 鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+- `app/api/hospital.js` - 鍖婚櫌API鎺ュ彛
+
+### 鍚庣鏂囦欢
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java` - 鍖婚櫌鎺у埗鍣�
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/HospDataMapper.java` - 鍖婚櫌Mapper鎺ュ彛
+- `ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml` - 鍖婚櫌Mapper XML
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/HospData.java` - 鍖婚櫌瀹炰綋绫�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-19): 鍒濆鐗堟湰锛屽疄鐜板尰闄㈡悳绱紭鍖栧姛鑳�
diff --git "a/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251-\345\277\253\351\200\237\345\274\200\345\247\213.md" "b/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251-\345\277\253\351\200\237\345\274\200\345\247\213.md"
new file mode 100644
index 0000000..014e31d
--- /dev/null
+++ "b/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251-\345\277\253\351\200\237\345\274\200\345\247\213.md"
@@ -0,0 +1,227 @@
+# 鍖婚櫌绉戝閫夋嫨鍔熻兘 - 蹇�熷紑濮�
+
+## 涓�銆佹墽琛孲QL鑴氭湰锛堝繀椤伙級
+
+### 1. 杩涘叆MySQL
+```bash
+mysql -u root -p
+```
+
+### 2. 閫夋嫨鏁版嵁搴�
+```sql
+USE your_database_name;
+```
+
+### 3. 鎵цSQL鑴氭湰
+```sql
+source d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master/sql/hospital_department_dict.sql;
+```
+
+鎴栬�呯洿鎺ュ湪鍛戒护琛屾墽琛岋細
+```bash
+mysql -u root -p your_database_name < d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master/sql/hospital_department_dict.sql
+```
+
+### 4. 楠岃瘉鏁版嵁
+```sql
+-- 鏌ョ湅瀛楀吀绫诲瀷
+SELECT * FROM sys_dict_type WHERE dict_type = 'hospital_department';
+
+-- 鏌ョ湅绉戝鏁版嵁锛堝簲璇ユ湁30鏉¤褰曪級
+SELECT dict_sort, dict_label, dict_value, list_class 
+FROM sys_dict_data 
+WHERE dict_type = 'hospital_department' 
+ORDER BY dict_sort;
+```
+
+## 浜屻�佸墠绔唬鐮佸凡瀹屾垚
+
+鍓嶇浠g爜宸茬粡淇敼瀹屾垚锛屽寘鎷細
+
+### 鉁� 宸插畬鎴愮殑淇敼
+
+1. **瀵煎叆瀛楀吀API**
+   ```javascript
+   import { getDicts } from "@/api/dict"
+   ```
+
+2. **娣诲姞鏁版嵁瀛楁**
+   ```javascript
+   departmentOptions: [] // 绉戝瀛楀吀鏁版嵁
+   ```
+
+3. **椤甸潰鍔犺浇鏃惰幏鍙栫瀹ゆ暟鎹�**
+   ```javascript
+   onLoad(options) {
+     // ... 鍏朵粬浠g爜
+     this.loadDepartments()
+   }
+   ```
+
+4. **鍔犺浇绉戝鏂规硶**
+   ```javascript
+   loadDepartments() {
+     getDicts('hospital_department').then(response => {
+       this.departmentOptions = response.data || []
+     })
+   }
+   ```
+
+5. **妯℃澘鏀逛负閫夋嫨鍣�**
+   - 杞嚭鍖婚櫌绉戝锛氫娇鐢� `<picker>` 缁勪欢
+   - 杞叆鍖婚櫌绉戝锛氫娇鐢� `<picker>` 缁勪欢
+
+6. **閫夋嫨浜嬩欢澶勭悊**
+   - `onHospitalOutDepartmentChange()` - 杞嚭鍖婚櫌绉戝閫夋嫨
+   - `onHospitalInDepartmentChange()` - 杞叆鍖婚櫌绉戝閫夋嫨
+
+## 涓夈�佹祴璇曟楠�
+
+### 1. 鍚姩鍚庣鏈嶅姟
+```bash
+cd d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master
+./ry.bat
+```
+
+### 2. 鍚姩鍓嶇锛堝鏋滈渶瑕侊級
+```bash
+cd d:/project/鎬ユ晳杞繍/code/Api/RuoYi-Vue-master/app
+npm run dev:h5
+```
+
+### 3. 娴嬭瘯鍔熻兘
+
+1. **鎵撳紑鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰**
+   - 瀵艰埅鑷筹細浠诲姟绠$悊 > 鍒涘缓鎬ユ晳杞繍浠诲姟
+
+2. **娴嬭瘯杞嚭鍖婚櫌绉戝閫夋嫨**
+   - 鐐瑰嚮"杞嚭鍖婚櫌"涓嬬殑"绉戝"閫夋嫨鍣�
+   - 搴旇鏄剧ず30涓瀹ら�夐」
+   - 閫夋嫨浠绘剰绉戝锛堝锛氭�ヨ瘖绉戯級
+   - 纭閫夋嫨鍣ㄦ樉绀哄凡閫夌瀹�
+
+3. **娴嬭瘯杞叆鍖婚櫌绉戝閫夋嫨**
+   - 鐐瑰嚮"杞叆鍖婚櫌"涓嬬殑"绉戝"閫夋嫨鍣�
+   - 搴旇鏄剧ず30涓瀹ら�夐」
+   - 閫夋嫨浠绘剰绉戝锛堝锛欼CU锛�
+   - 纭閫夋嫨鍣ㄦ樉绀哄凡閫夌瀹�
+
+4. **娴嬭瘯鏁版嵁鎻愪氦**
+   - 濉啓瀹屾暣琛ㄥ崟
+   - 鐐瑰嚮"淇濆瓨"鎸夐挳
+   - 鏌ョ湅鏁版嵁搴� `sys_task_emergency` 琛�
+   - 纭绉戝淇℃伅姝g‘淇濆瓨
+
+## 鍥涖�佸悗鍙扮鐞嗭紙鍙�夛級
+
+### 璁块棶瀛楀吀绠$悊
+```
+绯荤粺绠$悊 > 瀛楀吀绠$悊 > 鏁版嵁瀛楀吀
+```
+
+### 鏌ョ湅绉戝閰嶇疆
+1. 鍦ㄥ瓧鍏哥被鍨嬪垪琛ㄤ腑鎵惧埌"鍖婚櫌绉戝"
+2. 鐐瑰嚮"瀛楀吀閰嶇疆"鎸夐挳
+3. 鏌ョ湅鎵�鏈�30涓瀹ゆ暟鎹�
+
+### 鏂板绉戝锛堢ず渚嬶級
+1. 鐐瑰嚮"鏂板"鎸夐挳
+2. 濉啓淇℃伅锛�
+   - 瀛楀吀鏍囩锛氭斁灏勭
+   - 瀛楀吀閿�硷細鏀惧皠绉�
+   - 瀛楀吀鎺掑簭锛�31
+   - 鍒楄〃鏍峰紡锛歩nfo
+   - 鐘舵�侊細姝e父
+3. 淇濆瓨
+4. 鍒锋柊鍓嶇椤甸潰锛屽簲璇ヨ兘鐪嬪埌鏂板鐨勭瀹�
+
+## 浜斻�佸父瑙侀棶棰�
+
+### Q1: 绉戝鍒楄〃涓虹┖锛�
+**A:** 妫�鏌QL鑴氭湰鏄惁鎵ц鎴愬姛
+```sql
+SELECT COUNT(*) FROM sys_dict_data WHERE dict_type = 'hospital_department';
+-- 搴旇杩斿洖 30
+```
+
+### Q2: 鍓嶇涓嶆樉绀虹瀹わ紵
+**A:** 
+1. 妫�鏌ユ祻瑙堝櫒鎺у埗鍙版槸鍚︽湁閿欒
+2. 妫�鏌ョ綉缁滆姹傛槸鍚︽垚鍔燂細`/system/dict/data/type/hospital_department`
+3. 妫�鏌ヨ繑鍥炵殑鏁版嵁鏍煎紡鏄惁姝g‘
+
+### Q3: 閫夋嫨鍚庝笉鏄剧ず绉戝鍚嶇О锛�
+**A:** 
+1. 妫�鏌� `range-key="dictLabel"` 鏄惁璁剧疆姝g‘
+2. 妫�鏌ユ暟鎹粨鏋勪腑鏄惁鏈� `dictLabel` 瀛楁
+
+### Q4: 濡備綍淇敼绉戝鍒楄〃锛�
+**A:** 
+1. 鏂规硶涓�锛氬湪鍚庡彴绠$悊绯荤粺涓慨鏀癸紙鎺ㄨ崘锛�
+2. 鏂规硶浜岋細淇敼 SQL 鏂囦欢鍚庨噸鏂版墽琛�
+
+### Q5: 濡備綍娣诲姞鏇村绉戝?
+**A:** 
+鍦� SQL 鏂囦欢涓坊鍔犳柊鐨� INSERT 璇彞锛�
+```sql
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(31, '鏂扮瀹ゅ悕绉�', '鏂扮瀹ゅ悕绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '澶囨敞');
+```
+
+## 鍏�侀獙璇佹竻鍗�
+
+- [ ] SQL鑴氭湰鎵ц鎴愬姛
+- [ ] 鏁版嵁搴撲腑鏈�30鏉$瀹よ褰�
+- [ ] 鍓嶇浠g爜宸叉洿鏂�
+- [ ] 杞嚭鍖婚櫌绉戝閫夋嫨鍣ㄦ甯告樉绀�
+- [ ] 杞叆鍖婚櫌绉戝閫夋嫨鍣ㄦ甯告樉绀�
+- [ ] 閫夋嫨绉戝鍚庢纭樉绀虹瀹ゅ悕绉�
+- [ ] 鎻愪氦浠诲姟鍚庣瀹ゆ暟鎹纭繚瀛�
+- [ ] 鍚庡彴瀛楀吀绠$悊鍙互鏌ョ湅绉戝鍒楄〃
+
+## 涓冦�佺瀹ゅ垪琛ㄩ�熸煡
+
+| 搴忓彿 | 绉戝鍚嶇О | 鍒嗙被 | 棰滆壊鏍囪瘑 |
+|------|----------|------|----------|
+| 1 | 鎬ヨ瘖绉� | 鎬ヨ瘖 | 绾㈣壊(danger) |
+| 2 | 鎬ユ晳涓績 | 鎬ヨ瘖 | 绾㈣壊(danger) |
+| 3 | 蹇冨唴绉� | 鍐呯 | 钃濊壊(primary) |
+| 4 | 鍛煎惛鍐呯 | 鍐呯 | 钃濊壊(primary) |
+| 5 | 娑堝寲鍐呯 | 鍐呯 | 钃濊壊(primary) |
+| 6 | 绁炵粡鍐呯 | 鍐呯 | 钃濊壊(primary) |
+| 7 | 鑲惧唴绉� | 鍐呯 | 钃濊壊(primary) |
+| 8 | 鍐呭垎娉岀 | 鍐呯 | 钃濊壊(primary) |
+| 9 | 琛�娑茬 | 鍐呯 | 钃濊壊(primary) |
+| 10 | 椋庢箍鍏嶇柅绉� | 鍐呯 | 钃濊壊(primary) |
+| 11 | 鏅绉� | 澶栫 | 缁胯壊(success) |
+| 12 | 楠ㄧ | 澶栫 | 缁胯壊(success) |
+| 13 | 绁炵粡澶栫 | 澶栫 | 缁胯壊(success) |
+| 14 | 蹇冭兏澶栫 | 澶栫 | 缁胯壊(success) |
+| 15 | 娉屽翱澶栫 | 澶栫 | 缁胯壊(success) |
+| 16 | 鐑т激绉� | 澶栫 | 缁胯壊(success) |
+| 17 | ICU | 閲嶇棁 | 姗欒壊(warning) |
+| 18 | CCU | 閲嶇棁 | 姗欒壊(warning) |
+| 19 | 鑲跨槫绉� | 涓撶 | 鐏拌壊(info) |
+| 20 | 鎰熸煋绉� | 涓撶 | 鐏拌壊(info) |
+| 21 | 鍎跨 | 涓撶 | 鐏拌壊(info) |
+| 22 | 濡囦骇绉� | 涓撶 | 鐏拌壊(info) |
+| 23 | 鐪肩 | 涓撶 | 鐏拌壊(info) |
+| 24 | 鑰抽蓟鍠夌 | 涓撶 | 鐏拌壊(info) |
+| 25 | 鍙h厰绉� | 涓撶 | 鐏拌壊(info) |
+| 26 | 鐨偆绉� | 涓撶 | 鐏拌壊(info) |
+| 27 | 搴峰绉� | 涓撶 | 鐏拌壊(info) |
+| 28 | 涓尰绉� | 涓撶 | 鐏拌壊(info) |
+| 29 | 绮剧绉� | 涓撶 | 鐏拌壊(info) |
+| 30 | 鍏朵粬绉戝 | 鍏朵粬 | 榛樿(default) |
+
+## 鍏�佸畬鎴愭爣蹇�
+
+褰撲綘鐪嬪埌浠ヤ笅鐣岄潰鏃讹紝璇存槑鍔熻兘宸叉垚鍔熷疄鐜帮細
+
+1. 鎵撳紑鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+2. 杞嚭鍖婚櫌鐨�"绉戝"鏄剧ず涓洪�夋嫨鍣紙鏈夊悜鍙崇澶达級
+3. 鐐瑰嚮鍚庢樉绀�30涓瀹ら�夐」
+4. 閫夋嫨鍚庢樉绀烘墍閫夌瀹ゅ悕绉�
+5. 杞叆鍖婚櫌鐨�"绉戝"鍚屾牱鍔熻兘姝e父
+
+**鎭枩锛佺瀹ら�夋嫨鍔熻兘瀹炵幇瀹屾垚锛�** 馃帀
diff --git "a/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..6a963d0
--- /dev/null
+++ "b/prd/\345\214\273\351\231\242\347\247\221\345\256\244\351\200\211\346\213\251\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,377 @@
+# 鍖婚櫌绉戝閫夋嫨鍔熻兘瀹炵幇璇存槑
+
+## 闇�姹傝儗鏅�
+
+鍦ㄦ�ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓紝杞嚭鍖婚櫌鍜岃浆鍏ュ尰闄㈢殑绉戝闇�瑕佹敼涓洪�夋嫨鍣紝浠庣郴缁熷瓧鍏镐腑鍔犺浇绉戝鏁版嵁锛屾柟渚跨敤鎴峰揩閫熼�夋嫨甯哥敤绉戝锛岀‘淇濇暟鎹鑼冪粺涓�銆�
+
+## 瀹炵幇鏂规
+
+### 涓�銆佸悗绔厤缃�
+
+#### 1. 鏁版嵁搴撳瓧鍏搁厤缃�
+**鏂囦欢**: `sql/hospital_department_dict.sql`
+
+##### 瀛楀吀绫诲瀷閰嶇疆
+```sql
+INSERT INTO sys_dict_type(dict_name, dict_type, status, create_by, create_time, remark)
+VALUES('鍖婚櫌绉戝', 'hospital_department', '0', 'admin', SYSDATE(), '鍖婚櫌绉戝鍒楄〃');
+```
+
+##### 绉戝瀛楀吀鏁版嵁
+鍏遍厤缃�30涓父鐢ㄧ瀹わ紝鍖呮嫭锛�
+
+**鎬ヨ瘖鐩稿叧**锛�2涓級
+- 鎬ヨ瘖绉戯紙榛樿閫夐」锛�
+- 鎬ユ晳涓績
+
+**鍐呯绯荤粺**锛�8涓級
+- 蹇冨唴绉�
+- 鍛煎惛鍐呯
+- 娑堝寲鍐呯
+- 绁炵粡鍐呯
+- 鑲惧唴绉�
+- 鍐呭垎娉岀
+- 琛�娑茬
+- 椋庢箍鍏嶇柅绉�
+
+**澶栫绯荤粺**锛�6涓級
+- 鏅绉�
+- 楠ㄧ
+- 绁炵粡澶栫
+- 蹇冭兏澶栫
+- 娉屽翱澶栫
+- 鐑т激绉�
+
+**涓撶**锛�14涓級
+- ICU锛堥噸鐥囩洃鎶ゅ锛�
+- CCU锛堝啝蹇冪梾鐩戞姢鐥呮埧锛�
+- 鑲跨槫绉�
+- 鎰熸煋绉�
+- 鍎跨
+- 濡囦骇绉�
+- 鐪肩
+- 鑰抽蓟鍠夌
+- 鍙h厰绉�
+- 鐨偆绉�
+- 搴峰绉�
+- 涓尰绉�
+- 绮剧绉�
+- 鍏朵粬绉戝
+
+##### 瀛楀吀鏁版嵁绀轰緥
+```sql
+-- 鎬ヨ瘖绉戯紙榛樿閫夐」锛�
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(1, '鎬ヨ瘖绉�', '鎬ヨ瘖绉�', 'hospital_department', '', 'danger', 'Y', '0', 'admin', SYSDATE(), '鎬ヨ瘖绉戝');
+
+-- 蹇冨唴绉�
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(3, '蹇冨唴绉�', '蹇冨唴绉�', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '蹇冭绠″唴绉�');
+```
+
+##### 棰滆壊鏍囪瘑璇存槑
+- `danger`锛堢孩鑹诧級锛氭�ヨ瘖鐩稿叧绉戝
+- `primary`锛堣摑鑹诧級锛氬唴绉戠郴缁�
+- `success`锛堢豢鑹诧級锛氬绉戠郴缁�
+- `warning`锛堟鑹诧級锛氶噸鐥囩洃鎶�
+- `info`锛堢伆鑹诧級锛氬叾浠栦笓绉�
+- `default`锛堥粯璁わ級锛氬叾浠栫瀹�
+
+#### 2. 鎵цSQL鑴氭湰
+```sql
+-- 鍦∕ySQL涓墽琛�
+source sql/hospital_department_dict.sql;
+
+-- 鎴栫洿鎺ユ墽琛�
+mysql -u root -p database_name < sql/hospital_department_dict.sql
+```
+
+### 浜屻�佸墠绔疄鐜�
+
+#### 1. API鎺ュ彛璋冪敤
+**鏂囦欢**: `app/pages/task/create-emergency.vue`
+
+##### 瀵煎叆瀛楀吀API
+```javascript
+import { getDicts } from "@/api/dict"
+```
+
+##### 鏁版嵁瀛楁瀹氫箟
+```javascript
+data() {
+  return {
+    // ... 鍏朵粬瀛楁
+    departmentOptions: [], // 绉戝瀛楀吀鏁版嵁
+  }
+}
+```
+
+#### 2. 鍔犺浇绉戝瀛楀吀鏁版嵁
+
+##### 椤甸潰鍔犺浇鏃惰皟鐢�
+```javascript
+onLoad(options) {
+  // ... 鍏朵粬鍒濆鍖栦唬鐮�
+  // 鍔犺浇绉戝瀛楀吀鏁版嵁
+  this.loadDepartments()
+}
+```
+
+##### 鍔犺浇鏂规硶瀹炵幇
+```javascript
+// 鍔犺浇绉戝瀛楀吀鏁版嵁
+loadDepartments() {
+  getDicts('hospital_department').then(response => {
+    this.departmentOptions = response.data || []
+  }).catch(error => {
+    console.error('鍔犺浇绉戝瀛楀吀澶辫触:', error)
+    this.departmentOptions = []
+  })
+}
+```
+
+#### 3. 妯℃澘閫夋嫨鍣ㄥ疄鐜�
+
+##### 杞嚭鍖婚櫌绉戝閫夋嫨鍣�
+```html
+<view class="form-item">
+  <view class="form-label">绉戝</view>
+  <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalOutDepartmentChange">
+    <view class="form-input picker-input">
+      {{ taskForm.hospitalOut.department || '璇烽�夋嫨绉戝' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+```
+
+##### 杞叆鍖婚櫌绉戝閫夋嫨鍣�
+```html
+<view class="form-item">
+  <view class="form-label">绉戝</view>
+  <picker mode="selector" :range="departmentOptions" range-key="dictLabel" @change="onHospitalInDepartmentChange">
+    <view class="form-input picker-input">
+      {{ taskForm.hospitalIn.department || '璇烽�夋嫨绉戝' }}
+      <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+    </view>
+  </picker>
+</view>
+```
+
+#### 4. 閫夋嫨浜嬩欢澶勭悊
+
+##### 杞嚭鍖婚櫌绉戝閫夋嫨
+```javascript
+// 杞嚭鍖婚櫌绉戝閫夋嫨
+onHospitalOutDepartmentChange(e) {
+  const index = e.detail.value
+  this.taskForm.hospitalOut.department = this.departmentOptions[index].dictValue
+}
+```
+
+##### 杞叆鍖婚櫌绉戝閫夋嫨
+```javascript
+// 杞叆鍖婚櫌绉戝閫夋嫨
+onHospitalInDepartmentChange(e) {
+  const index = e.detail.value
+  this.taskForm.hospitalIn.department = this.departmentOptions[index].dictValue
+}
+```
+
+### 涓夈�佹暟鎹祦绋�
+
+#### 1. 椤甸潰鍒濆鍖栨祦绋�
+```
+椤甸潰鍔犺浇 (onLoad)
+    鈫�
+璋冪敤 loadDepartments()
+    鈫�
+璇锋眰鍚庣 getDicts('hospital_department')
+    鈫�
+鑾峰彇绉戝瀛楀吀鏁版嵁
+    鈫�
+淇濆瓨鍒� departmentOptions
+    鈫�
+閫夋嫨鍣ㄦ樉绀虹瀹ゅ垪琛�
+```
+
+#### 2. 鐢ㄦ埛閫夋嫨娴佺▼
+```
+鐢ㄦ埛鐐瑰嚮绉戝閫夋嫨鍣�
+    鈫�
+鏄剧ず绉戝鍒楄〃锛�30涓�夐」锛�
+    鈫�
+鐢ㄦ埛閫夋嫨鏌愪釜绉戝
+    鈫�
+瑙﹀彂 @change 浜嬩欢
+    鈫�
+璋冪敤 onHospitalOutDepartmentChange 鎴� onHospitalInDepartmentChange
+    鈫�
+鏍规嵁绱㈠紩鑾峰彇绉戝鐨� dictValue
+    鈫�
+鏇存柊 taskForm.hospitalOut.department 鎴� taskForm.hospitalIn.department
+    鈫�
+閫夋嫨鍣ㄦ樉绀哄凡閫夌瀹ゅ悕绉�
+```
+
+#### 3. 鏁版嵁鎻愪氦娴佺▼
+```
+鐢ㄦ埛鐐瑰嚮淇濆瓨鎸夐挳
+    鈫�
+鏀堕泦琛ㄥ崟鏁版嵁锛堝寘鎷瀹わ級
+    鈫�
+璋冪敤 submitTask()
+    鈫�
+鏋勫缓鎻愪氦鏁版嵁 buildSubmitData()
+    鈫�
+鎻愪氦鍒板悗绔� addTask()
+    鈫�
+淇濆瓨鍒� sys_task_emergency 琛�
+```
+
+## 鎶�鏈壒鐐�
+
+### 1. 閫夋嫨鍣ㄩ厤缃�
+- `mode="selector"`锛氬崟閫夋ā寮�
+- `:range="departmentOptions"`锛氭暟鎹簮缁戝畾
+- `range-key="dictLabel"`锛氭樉绀哄瓧娈典负 dictLabel
+- `@change`锛氶�夋嫨浜嬩欢缁戝畾
+
+### 2. 鏁版嵁鏍煎紡
+瀛楀吀鏁版嵁杩斿洖鏍煎紡锛�
+```javascript
+[
+  {
+    dictCode: 1,
+    dictSort: 1,
+    dictLabel: "鎬ヨ瘖绉�",
+    dictValue: "鎬ヨ瘖绉�",
+    dictType: "hospital_department",
+    cssClass: "",
+    listClass: "danger",
+    isDefault: "Y",
+    status: "0"
+  },
+  // ... 鏇村绉戝
+]
+```
+
+### 3. 鏄剧ず涓庡瓨鍌�
+- **鏄剧ず**锛歚dictLabel`锛堜緥濡傦細鎬ヨ瘖绉戯級
+- **瀛樺偍**锛歚dictValue`锛堜緥濡傦細鎬ヨ瘖绉戯級
+- **鎺掑簭**锛氭寜 `dictSort` 瀛楁鎺掑簭
+
+## 浼樺寲鏁堟灉
+
+### 1. 鏁版嵁瑙勮寖鍖�
+- 鉁� 缁熶竴绉戝鍚嶇О锛岄伩鍏嶆墜宸ヨ緭鍏ラ敊璇�
+- 鉁� 鏍囧噯鍖栫瀹ゆ暟鎹紝渚夸簬缁熻鍒嗘瀽
+- 鉁� 鍙湪鍚庡彴绠$悊绯荤粺涓淮鎶ょ瀹ゅ垪琛�
+
+### 2. 鐢ㄦ埛浣撻獙浼樺寲
+- 鉁� 鐐瑰嚮鍗抽�夛紝鏃犻渶鎵嬪姩杈撳叆
+- 鉁� 甯哥敤绉戝涓�鐩簡鐒�
+- 鉁� 鍑忓皯杈撳叆閿欒鍜屾椂闂�
+
+### 3. 绯荤粺缁存姢
+- 鉁� 闆嗕腑绠$悊绉戝鏁版嵁
+- 鉁� 鏂板绉戝鍙渶鍦ㄥ悗鍙板瓧鍏镐腑閰嶇疆
+- 鉁� 鏀寔鍚敤/绂佺敤鏌愪簺绉戝
+
+## 鍚庡彴绠$悊
+
+### 瀛楀吀绠$悊璺緞
+```
+绯荤粺绠$悊 > 瀛楀吀绠$悊 > 鏁版嵁瀛楀吀
+```
+
+### 鎿嶄綔姝ラ
+
+1. **鏌ョ湅瀛楀吀绫诲瀷**
+   - 瀛楀吀鍚嶇О锛氬尰闄㈢瀹�
+   - 瀛楀吀绫诲瀷锛歨ospital_department
+
+2. **鏌ョ湅/缂栬緫瀛楀吀鏁版嵁**
+   - 鐐瑰嚮瀛楀吀绫诲瀷鍚庣殑"瀛楀吀閰嶇疆"鎸夐挳
+   - 鍙互鏌ョ湅鎵�鏈夌瀹ゅ垪琛�
+   - 鍙互鏂板銆佷慨鏀广�佸垹闄ょ瀹�
+
+3. **鏂板绉戝**
+   - 鐐瑰嚮"鏂板"鎸夐挳
+   - 濉啓瀛楀吀鏍囩锛堟樉绀哄悕绉帮級
+   - 濉啓瀛楀吀閿�硷紙瀛樺偍鍊硷級
+   - 璁剧疆鎺掑簭鍙�
+   - 閫夋嫨鍒楄〃鏍峰紡锛堥鑹诧級
+   - 淇濆瓨
+
+4. **淇敼绉戝**
+   - 鐐瑰嚮绉戝鍚庣殑"淇敼"鎸夐挳
+   - 淇敼鐩稿叧淇℃伅
+   - 淇濆瓨
+
+5. **绂佺敤绉戝**
+   - 鐐瑰嚮绉戝鍚庣殑"鐘舵��"寮�鍏�
+   - 绂佺敤鍚庡墠绔笉浼氭樉绀鸿绉戝
+
+## 鎵╁睍寤鸿
+
+### 1. 绉戝鍒嗙被
+鍙互鑰冭檻澧炲姞绉戝鍒嗙被瀛楀吀锛屽疄鐜颁簩绾ц仈鍔細
+```
+涓�绾э細鍐呯/澶栫/涓撶
+浜岀骇锛氬叿浣撶瀹�
+```
+
+### 2. 鍖婚櫌-绉戝鍏宠仈
+鍙互鍏宠仈鍖婚櫌鍜岀瀹わ紝涓嶅悓鍖婚櫌鏄剧ず涓嶅悓鐨勭瀹ゅ垪琛ㄣ��
+
+### 3. 甯哥敤绉戝
+鍙互璁板綍鐢ㄦ埛甯哥敤绉戝锛屼紭鍏堟樉绀哄湪鍒楄〃椤堕儴銆�
+
+### 4. 鎼滅储鍔熻兘
+绉戝杈冨鏃讹紝鍙互娣诲姞鎼滅储鍔熻兘蹇�熷畾浣嶃��
+
+## 娉ㄦ剰浜嬮」
+
+1. **瀛楀吀绫诲瀷鍚嶇О**锛氬繀椤讳娇鐢� `hospital_department`锛屼笌浠g爜涓繚鎸佷竴鑷�
+2. **鏁版嵁鍚屾**锛氫慨鏀瑰瓧鍏稿悗锛屽墠绔彲鑳介渶瑕佸埛鏂伴〉闈㈡垨閲嶆柊鍔犺浇
+3. **鍏煎鎬�**锛氱‘淇濇墍鏈夌瀹ゅ悕绉板湪鏁版嵁搴撲腑姝e父鏄剧ず锛堟敞鎰忕紪鐮侀棶棰橈級
+4. **榛樿鍊�**锛歚is_default='Y'` 鐨勭瀹や細浣滀负榛樿閫夐」锛堢洰鍓嶆槸鎬ヨ瘖绉戯級
+
+## 娴嬭瘯寤鸿
+
+### 鍔熻兘娴嬭瘯
+1. 椤甸潰鍔犺浇鍚庯紝鐐瑰嚮绉戝閫夋嫨鍣紝搴旀樉绀烘墍鏈夌瀹ゅ垪琛�
+2. 閫夋嫨绉戝鍚庯紝閫夋嫨鍣ㄥ簲鏄剧ず鎵�閫夌瀹ゅ悕绉�
+3. 鎻愪氦浠诲姟鍚庯紝绉戝淇℃伅搴旀纭繚瀛樺埌鏁版嵁搴�
+4. 鍦ㄥ悗鍙板瓧鍏哥鐞嗕腑淇敼绉戝锛屽墠绔簲鑳芥纭姞杞�
+
+### 鏁版嵁娴嬭瘯
+1. 娴嬭瘯鎵�鏈�30涓瀹ゆ槸鍚﹂兘鑳芥甯搁�夋嫨
+2. 娴嬭瘯绉戝鏁版嵁鏄惁鎸夋帓搴忓彿姝g‘鎺掑垪
+3. 娴嬭瘯绂佺敤鏌愪釜绉戝鍚庯紝鍓嶇鏄惁涓嶆樉绀�
+
+### 鍏煎鎬ф祴璇�
+1. 娴嬭瘯H5绔�夋嫨鍣ㄥ姛鑳芥槸鍚︽甯�
+2. 娴嬭瘯寰俊灏忕▼搴忕閫夋嫨鍣ㄥ姛鑳芥槸鍚︽甯�
+3. 娴嬭瘯涓嶅悓鎵嬫満绯荤粺鐨勬樉绀烘晥鏋�
+
+## 鐩稿叧鏂囦欢
+
+### 鍚庣鏂囦欢
+- `sql/hospital_department_dict.sql` - 绉戝瀛楀吀SQL鑴氭湰
+
+### 鍓嶇鏂囦欢
+- `app/pages/task/create-emergency.vue` - 鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+- `app/api/dict.js` - 瀛楀吀API鎺ュ彛
+
+### 鏁版嵁搴撹〃
+- `sys_dict_type` - 瀛楀吀绫诲瀷琛�
+- `sys_dict_data` - 瀛楀吀鏁版嵁琛�
+
+## 鐗堟湰鍘嗗彶
+
+- **v1.0** (2025-10-19): 鍒濆鐗堟湰锛屽疄鐜扮瀹ら�夋嫨鍔熻兘
+  - 鍒涘缓绉戝瀛楀吀鏁版嵁锛�30涓父鐢ㄧ瀹わ級
+  - 鍓嶇鏀逛负閫夋嫨鍣ㄦā寮�
+  - 鏀寔杞嚭/杞叆鍖婚櫌绉戝閫夋嫨
diff --git "a/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\350\275\246\350\276\206\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\350\275\246\350\276\206\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..a901e97
--- /dev/null
+++ "b/prd/\346\200\245\346\225\221\350\275\254\350\277\220\344\273\273\345\212\241\350\275\246\350\276\206\350\207\252\345\212\250\345\241\253\345\205\205\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,302 @@
+# 鎬ユ晳杞繍浠诲姟杞﹁締鑷姩濉厖鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+鍦ㄥ垱寤洪潪鎬ユ晳杞繍浠诲姟鏃讹紝杞︾墝鍙烽�夋嫨鍣ㄥ姞杞藉綋鍓嶇敤鎴锋墍鍦ㄥ垎鍏徃鐨勬墍鏈夎溅杈嗭紝骞惰嚜鍔ㄩ粯璁ら�変腑褰撳墠鐢ㄦ埛缁戝畾鐨勮溅鐗屽彿銆�
+
+## 淇敼鏂囦欢
+- `app/pages/task/create-emergency.vue`
+
+## 鍔熻兘瀹炵幇
+
+### 1. 杞﹁締鍒楄〃鍔犺浇閫昏緫
+
+#### 鍔犺浇鑼冨洿
+- 鍔犺浇褰撳墠鐢ㄦ埛鎵�鍦�**鍒嗗叕鍙哥殑鎵�鏈夎溅杈�**
+- 閫氳繃鍚庣 `/task/vehicle/available` 鎺ュ彛瀹炵幇
+- 鍚庣SQL浼氭牴鎹敤鎴风殑 `deptId` 鑷姩鏌ユ壘鎵�灞炲垎鍏徃鍙婂叾鎵�鏈夊瓙閮ㄩ棬鐨勮溅杈�
+
+#### 瀹炵幇浠g爜
+```javascript
+getAvailableVehicles() {
+  const deptId = this.currentUser.deptId
+  return listAvailableVehicles(deptId, 'EMERGENCY').then(response => {
+    const vehicleList = response.data || response.rows || []
+    this.vehicleOptions = vehicleList.map(vehicle => ({
+      id: vehicle.vehicleId,
+      name: vehicle.vehicleNo,
+      type: vehicle.vehicleType,
+      status: vehicle.status
+    }))
+    this.vehicles = this.vehicleOptions.map(v => v.name)
+  }).catch(() => {
+    this.vehicles = []
+  })
+}
+```
+
+### 2. 榛樿閫変腑缁戝畾杞﹁締
+
+#### 瀹炵幇娴佺▼
+1. 椤甸潰鍔犺浇鏃讹紝鍏堣幏鍙栬溅杈嗗垪琛�
+2. 杞﹁締鍒楄〃鍔犺浇瀹屾垚鍚庯紝鑾峰彇鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
+3. 鍦ㄨ溅杈嗗垪琛ㄤ腑鏌ユ壘鍖归厤鐨勭粦瀹氳溅杈�
+4. 鑷姩璁剧疆涓洪�変腑鐘舵��
+
+#### 瀹炵幇浠g爜
+```javascript
+// 鏂板鏂规硶锛氳幏鍙栫敤鎴风粦瀹氱殑杞﹁締淇℃伅
+getUserBoundVehicleInfo() {
+  getUserProfile().then(response => {
+    const userInfo = response.data || response
+    if (userInfo.boundVehicle) {
+      const boundVehicleNo = userInfo.boundVehicle.vehicleNumber
+      const boundVehicleId = userInfo.boundVehicle.vehicleId
+      
+      // 鍦ㄨ溅杈嗗垪琛ㄤ腑鏌ユ壘缁戝畾鐨勮溅杈�
+      const vehicleIndex = this.vehicleOptions.findIndex(v => 
+        v.id === boundVehicleId || v.name === boundVehicleNo
+      )
+      
+      if (vehicleIndex !== -1) {
+        // 璁剧疆榛樿閫変腑鐨勮溅杈�
+        this.selectedVehicle = this.vehicleOptions[vehicleIndex].name
+        this.selectedVehicleId = this.vehicleOptions[vehicleIndex].id
+      }
+    }
+  }).catch(error => {
+    console.error('鑾峰彇鐢ㄦ埛缁戝畾杞﹁締淇℃伅澶辫触:', error)
+  })
+}
+```
+
+#### 椤甸潰鍔犺浇閫昏緫浼樺寲
+```javascript
+onLoad(options) {
+  // 鍏堝姞杞借溅杈嗗垪琛紝鐒跺悗鍔犺浇缁戝畾杞﹁締淇℃伅
+  this.getAvailableVehicles().then(() => {
+    this.getUserBoundVehicleInfo()
+  })
+  this.initSelectedStaff()
+  this.loadDeptStaff()
+  // 璁剧疆榛樿褰掑睘鏈烘瀯
+  if (this.currentUser.branchCompanyName) {
+    this.selectedOrganization = this.currentUser.branchCompanyName
+  }
+}
+```
+
+### 3. API鎺ュ彛渚濊禆
+
+#### 寮曞叆鐨勬柊API
+```javascript
+import { getUserProfile } from "@/api/system/user"
+```
+
+#### 浣跨敤鐨勭幇鏈堿PI
+- `listAvailableVehicles(deptId, taskType)` - 鑾峰彇鍙敤杞﹁締鍒楄〃
+- `getUserProfile()` - 鑾峰彇鐢ㄦ埛璇︾粏淇℃伅锛堝寘鍚粦瀹氳溅杈嗭級
+
+## 鐢ㄦ埛浣撻獙
+
+### 鎿嶄綔娴佺▼
+1. 鐢ㄦ埛杩涘叆"鍒涘缓闈炴�ユ晳杞繍浠诲姟"椤甸潰
+2. 椤甸潰鑷姩鍔犺浇锛�
+   - 褰撳墠鍒嗗叕鍙哥殑鎵�鏈夊彲鐢ㄨ溅杈�
+   - 鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
+3. 杞﹁締閫夋嫨鍣ㄦ樉绀猴細
+   - 涓嬫媺鍒楄〃鍖呭惈鍒嗗叕鍙告墍鏈夎溅杈�
+   - **榛樿閫変腑褰撳墠鐢ㄦ埛缁戝畾鐨勮溅杈�**
+4. 鐢ㄦ埛鍙互锛�
+   - 鐩存帴浣跨敤榛樿閫変腑鐨勮溅杈嗭紙鏈�甯歌鎯呭喌锛�
+   - 鎵嬪姩鏇存敼涓哄叾浠栬溅杈嗭紙鐗规畩鎯呭喌锛�
+
+### 鍦烘櫙绀轰緥
+
+#### 鍦烘櫙1锛氱敤鎴峰凡缁戝畾杞﹁締
+```
+鐢ㄦ埛锛氬紶涓夛紙鍙告満锛�
+缁戝畾杞﹁締锛氱菠A12345
+鎵�鍦ㄥ垎鍏徃锛氬箍宸炲垎鍏徃
+
+鎵撳紑鍒涘缓浠诲姟椤甸潰鏃讹細
+- 杞﹁締閫夋嫨鍣ㄦ樉绀猴細"绮12345" 鉁擄紙榛樿閫変腑锛�
+- 鍙�夋嫨鍒楄〃锛氱菠A12345銆佺菠A67890銆佺菠B11111...
+```
+
+#### 鍦烘櫙2锛氱敤鎴锋湭缁戝畾杞﹁締
+```
+鐢ㄦ埛锛氭潕鍥涳紙鎶ゅ+锛�
+缁戝畾杞﹁締锛氭棤
+鎵�鍦ㄥ垎鍏徃锛氭繁鍦冲垎鍏徃
+
+鎵撳紑鍒涘缓浠诲姟椤甸潰鏃讹細
+- 杞﹁締閫夋嫨鍣ㄦ樉绀猴細"璇烽�夋嫨浠诲姟杞﹁締"
+- 鍙�夋嫨鍒楄〃锛氱菠B22222銆佺菠B33333銆佺菠B44444...
+```
+
+#### 鍦烘櫙3锛氱粦瀹氳溅杈嗕笉鍦ㄥ彲鐢ㄥ垪琛ㄤ腑
+```
+鐢ㄦ埛锛氱帇浜旓紙鍙告満锛�
+缁戝畾杞﹁締锛氱菠C55555锛堝凡璋冨線鍏朵粬鍒嗗叕鍙革級
+鎵�鍦ㄥ垎鍏徃锛氱彔娴峰垎鍏徃
+
+鎵撳紑鍒涘缓浠诲姟椤甸潰鏃讹細
+- 杞﹁締閫夋嫨鍣ㄦ樉绀猴細"璇烽�夋嫨浠诲姟杞﹁締"
+- 鍙�夋嫨鍒楄〃锛氱菠C66666銆佺菠C77777...
+锛堢粦瀹氳溅杈嗕笉鍦ㄥ綋鍓嶅垎鍏徃锛屼笉鏄剧ず锛�
+```
+
+## 鏁版嵁娴佺▼鍥�
+
+```mermaid
+sequenceDiagram
+    participant U as 鐢ㄦ埛
+    participant P as 鍒涘缓浠诲姟椤甸潰
+    participant API as 鍚庣鎺ュ彛
+    participant DB as 鏁版嵁搴�
+
+    U->>P: 鎵撳紑鍒涘缓浠诲姟椤甸潰
+    P->>API: 鑾峰彇鍙敤杞﹁締鍒楄〃(deptId, EMERGENCY)
+    API->>DB: 鏌ヨ鍒嗗叕鍙告墍鏈夎溅杈�
+    DB-->>API: 杩斿洖杞﹁締鍒楄〃
+    API-->>P: 杩斿洖杞﹁締鏁版嵁
+    
+    P->>API: 鑾峰彇鐢ㄦ埛淇℃伅(getUserProfile)
+    API->>DB: 鏌ヨ鐢ㄦ埛缁戝畾杞﹁締
+    DB-->>API: 杩斿洖鐢ㄦ埛淇℃伅
+    API-->>P: 杩斿洖缁戝畾杞﹁締淇℃伅
+    
+    P->>P: 鍖归厤缁戝畾杞﹁締ID
+    P->>P: 璁剧疆榛樿閫変腑
+    P-->>U: 鏄剧ず榛樿閫変腑鐨勮溅杈�
+```
+
+## 鍚庣鏀寔
+
+### 杞﹁締鏌ヨ鎺ュ彛
+**鎺ュ彛锛�** `GET /task/vehicle/available`
+
+**鍙傛暟锛�**
+- `deptId`: 鐢ㄦ埛鎵�鍦ㄩ儴闂↖D
+- `taskType`: 浠诲姟绫诲瀷锛圗MERGENCY锛�
+
+**杩斿洖鏁版嵁缁撴瀯锛�**
+```json
+{
+  "code": 200,
+  "data": [
+    {
+      "vehicleId": 1,
+      "vehicleNo": "绮12345",
+      "vehicleType": "鎬ユ晳杞�",
+      "status": "AVAILABLE"
+    }
+  ]
+}
+```
+
+### 鐢ㄦ埛淇℃伅鎺ュ彛
+**鎺ュ彛锛�** `GET /system/user/profile`
+
+**杩斿洖鏁版嵁缁撴瀯锛�**
+```json
+{
+  "code": 200,
+  "data": {
+    "userId": 1,
+    "userName": "zhangsan",
+    "nickName": "寮犱笁",
+    "deptId": 101,
+    "boundVehicle": {
+      "vehicleId": 1,
+      "vehicleNumber": "绮12345"
+    }
+  }
+}
+```
+
+## 涓庢櫘閫氫换鍔$殑涓�鑷存��
+
+姝ゅ姛鑳戒笌鏅�氫换鍔★紙缁翠慨淇濆吇銆佸姞娌圭瓑锛夌殑杞﹁締閫夋嫨閫昏緫淇濇寔涓�鑷达細
+- 鉁� 閮藉姞杞藉垎鍏徃鎵�鏈夎溅杈�
+- 鉁� 閮介粯璁ら�変腑鐢ㄦ埛缁戝畾杞﹁締
+- 鉁� 閮芥敮鎸佹墜鍔ㄥ垏鎹㈣溅杈�
+- 鉁� 缁熶竴鐨勭敤鎴蜂綋楠�
+
+## 浼樺娍鍒嗘瀽
+
+### 1. 鎻愬崌鏁堢巼
+- 鉁� 鍑忓皯鎵嬪姩閫夋嫨姝ラ
+- 鉁� 澶ч儴鍒嗘儏鍐典笅鏃犻渶鏇存敼
+- 鉁� 绗﹀悎鐢ㄦ埛涔犳儻
+
+### 2. 鍑忓皯閿欒
+- 鉁� 閬垮厤閫夐敊杞﹁締
+- 鉁� 纭繚杞﹁締褰掑睘姝g‘
+- 鉁� 绗﹀悎鏉冮檺鑼冨洿
+
+### 3. 缁熶竴浣撻獙
+- 鉁� 涓庢櫘閫氫换鍔′繚鎸佷竴鑷�
+- 鉁� 闄嶄綆瀛︿範鎴愭湰
+- 鉁� 鎻愰珮鐢ㄦ埛婊℃剰搴�
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鏁版嵁鏉冮檺
+- 鍙兘鐪嬪埌褰撳墠鍒嗗叕鍙哥殑杞﹁締
+- 鍚庣SQL鑷姩澶勭悊鏉冮檺杩囨护
+- 鍓嶇鏃犻渶棰濆鍒ゆ柇
+
+### 2. 缁戝畾杞﹁締鏈夋晥鎬�
+- 缁戝畾杞﹁締鍙兘宸茶皟璧�
+- 缁戝畾杞﹁締鍙兘宸插仠鐢�
+- 杩欎簺鎯呭喌涓嬩笉浼氶粯璁ら�変腑
+
+### 3. 鍔犺浇椤哄簭
+- **蹇呴』鍏堝姞杞借溅杈嗗垪琛�**
+- **鐒跺悗鍐嶅尮閰嶇粦瀹氳溅杈�**
+- 椤哄簭閿欒浼氬鑷村尮閰嶅け璐�
+
+### 4. 寮傚父澶勭悊
+- 鎺ュ彛璋冪敤澶辫触鏃堕潤榛樺鐞�
+- 涓嶅奖鍝嶅叾浠栧姛鑳芥甯镐娇鐢�
+- 鎺у埗鍙拌褰曢敊璇棩蹇�
+
+## 娴嬭瘯瑕佺偣
+
+### 鍔熻兘娴嬭瘯
+1. 鉁� 宸茬粦瀹氳溅杈嗙殑鐢ㄦ埛锛岃繘鍏ラ〉闈㈡椂榛樿閫変腑
+2. 鉁� 鏈粦瀹氳溅杈嗙殑鐢ㄦ埛锛屾樉绀�"璇烽�夋嫨浠诲姟杞﹁締"
+3. 鉁� 杞﹁締鍒楄〃鍖呭惈褰撳墠鍒嗗叕鍙告墍鏈夎溅杈�
+4. 鉁� 鍙互鎵嬪姩鍒囨崲涓哄叾浠栬溅杈�
+5. 鉁� 鍒囨崲鍚庤兘姝e父淇濆瓨
+
+### 鏁版嵁鏉冮檺娴嬭瘯
+1. 鉁� 骞垮窞鍒嗗叕鍙哥敤鎴峰彧鑳界湅鍒板箍宸炲垎鍏徃杞﹁締
+2. 鉁� 娣卞湷鍒嗗叕鍙哥敤鎴峰彧鑳界湅鍒版繁鍦冲垎鍏徃杞﹁締
+3. 鉁� 璺ㄥ垎鍏徃缁戝畾杞﹁締涓嶄細鏄剧ず
+
+### 寮傚父鍦烘櫙娴嬭瘯
+1. 鉁� 鎺ュ彛瓒呮椂鏃剁殑澶勭悊
+2. 鉁� 杩斿洖鏁版嵁涓虹┖鏃剁殑澶勭悊
+3. 鉁� 缁戝畾杞﹁締涓嶅瓨鍦ㄦ椂鐨勫鐞�
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇鏂囦欢
+- `app/pages/task/create-emergency.vue` - 鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰
+- `app/pages/task/create-normal.vue` - 鏅�氫换鍔″垱寤洪〉闈紙鍙傝�冨疄鐜帮級
+- `app/api/vehicle.js` - 杞﹁締鐩稿叧API
+- `app/api/system/user.js` - 鐢ㄦ埛鐩稿叧API
+
+### 鍚庣鏂囦欢
+- 杞﹁締鏌ヨ鎺ュ彛鎺у埗鍣�
+- 鐢ㄦ埛淇℃伅鎺ュ彛鎺у埗鍣�
+- 鐢ㄦ埛杞﹁締缁戝畾鏈嶅姟
+
+## 淇敼鏃ユ湡
+2025-10-18
+
+## 鍙傝�冩枃妗�
+- [鐢ㄦ埛杞﹁締缁戝畾鍔熻兘璇存槑](./鐢ㄦ埛缁戝畾杞﹁締鍔熻兘璇存槑.md)
+- [浠诲姟杞﹁締鑷姩濉厖瑙勫垯](../README_TASK.md)
diff --git "a/prd/\347\224\250\346\210\267\346\211\200\345\234\250\345\210\206\345\205\254\345\217\270\344\277\241\346\201\257\350\216\267\345\217\226\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\346\211\200\345\234\250\345\210\206\345\205\254\345\217\270\344\277\241\346\201\257\350\216\267\345\217\226\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..d75b257
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\346\211\200\345\234\250\345\210\206\345\205\254\345\217\270\344\277\241\346\201\257\350\216\267\345\217\226\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,337 @@
+# 鐢ㄦ埛鎵�鍦ㄥ垎鍏徃淇℃伅鑾峰彇鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄧ敤鎴风櫥褰曞悗鐨� `getInfo` 鎺ュ彛涓繑鍥炵敤鎴锋墍鍦ㄧ殑鍒嗗叕鍙窱D鍜屽悕绉帮紝浣垮緱鍦ㄥ垱寤轰换鍔$瓑鍦烘櫙涓彲浠ラ粯璁ゆ樉绀哄拰浣跨敤鍒嗗叕鍙镐俊鎭��
+
+## 涓氬姟闇�姹�
+
+### 浣跨敤鍦烘櫙
+1. **鍒涘缓浠诲姟**锛氬綊灞炴満鏋勫瓧娈甸粯璁ゆ樉绀哄綋鍓嶇敤鎴锋墍鍦ㄧ殑鍒嗗叕鍙�
+2. **鏁版嵁杩囨护**锛氬熀浜庡垎鍏徃杩涜鏁版嵁鏉冮檺鎺у埗
+3. **缁熻鍒嗘瀽**锛氭寜鍒嗗叕鍙哥淮搴﹁繘琛屾暟鎹粺璁�
+
+### 鍒嗗叕鍙稿垽鏂鍒�
+- **鐩存帴灞炰簬鍒嗗叕鍙�**锛氱敤鎴风殑 `dept_id` 瀵瑰簲鐨勯儴闂� `parent_id = 100`
+- **灞炰簬瀛愰儴闂�**锛氶�氳繃閮ㄩ棬鐨� `ancestors` 瀛楁瑙f瀽鍑哄垎鍏徃ID
+
+## 鎶�鏈疄鐜�
+
+### 1. 鍚庣瀹炵幇
+
+#### 淇敼鏂囦欢
+**鏂囦欢**锛歚ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java`
+
+#### 鏍稿績閫昏緫
+
+```java
+@GetMapping("getInfo")
+public AjaxResult getInfo()
+{
+    LoginUser loginUser = SecurityUtils.getLoginUser();
+    SysUser user = loginUser.getUser();
+    
+    // 鑾峰彇鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗叕鍙镐俊鎭�
+    Long branchCompanyId = null;
+    String branchCompanyName = null;
+    if (user.getDeptId() != null)
+    {
+        SysDept dept = deptService.selectDeptById(user.getDeptId());
+        if (dept != null)
+        {
+            // 鍒ゆ柇褰撳墠閮ㄩ棬鏄惁灏辨槸鍒嗗叕鍙革紙parent_id = 100锛�
+            if (dept.getParentId() != null && dept.getParentId() == 100)
+            {
+                branchCompanyId = dept.getDeptId();
+                branchCompanyName = dept.getDeptName();
+            }
+            else if (dept.getAncestors() != null && !dept.getAncestors().isEmpty())
+            {
+                // 浠� ancestors 瑙f瀽鍒嗗叕鍙窱D
+                // ancestors 鏍煎紡锛�"0,100,鍒嗗叕鍙窱D,瀛愰儴闂↖D"
+                String[] ancestorIds = dept.getAncestors().split(",");
+                for (int i = 0; i < ancestorIds.length; i++)
+                {
+                    if ("100".equals(ancestorIds[i]) && i + 1 < ancestorIds.length)
+                    {
+                        Long companyId = Long.parseLong(ancestorIds[i + 1]);
+                        SysDept branchCompany = deptService.selectDeptById(companyId);
+                        if (branchCompany != null)
+                        {
+                            branchCompanyId = branchCompany.getDeptId();
+                            branchCompanyName = branchCompany.getDeptName();
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
+    
+    // 杩斿洖鍒嗗叕鍙镐俊鎭�
+    ajax.put("branchCompanyId", branchCompanyId);
+    ajax.put("branchCompanyName", branchCompanyName);
+    return ajax;
+}
+```
+
+#### 鏂板渚濊禆娉ㄥ叆
+
+```java
+@Autowired
+private ISysDeptService deptService;
+```
+
+### 2. 鍓嶇瀹炵幇
+
+#### 淇敼鏂囦欢鍒楄〃
+1. `app/utils/constant.js` - 娣诲姞甯搁噺瀹氫箟
+2. `app/store/modules/user.js` - 淇濆瓨鍒嗗叕鍙镐俊鎭埌Vuex
+3. `app/pages/task/create-emergency.vue` - 浣跨敤鍒嗗叕鍙镐俊鎭�
+
+#### constant.js 淇敼
+
+```javascript
+const constant = {
+   userId: 'vuex_userId',
+   avatar: 'vuex_avatar',
+   name: 'vuex_name',
+   roles: 'vuex_roles',
+   permissions: 'vuex_permissions',
+   deptId: 'vuex_deptId',
+   branchCompanyId: 'vuex_branchCompanyId',      // 鏂板
+   branchCompanyName: 'vuex_branchCompanyName'    // 鏂板
+}
+```
+
+#### user.js (Vuex) 淇敼
+
+**State 娣诲姞**锛�
+```javascript
+state: {
+  branchCompanyId: storage.get(constant.branchCompanyId),
+  branchCompanyName: storage.get(constant.branchCompanyName)
+},
+```
+
+**Mutations 娣诲姞**锛�
+```javascript
+SET_BRANCH_COMPANY_ID: (state, branchCompanyId) => {
+  state.branchCompanyId = branchCompanyId
+  storage.set(constant.branchCompanyId, branchCompanyId)
+},
+SET_BRANCH_COMPANY_NAME: (state, branchCompanyName) => {
+  state.branchCompanyName = branchCompanyName
+  storage.set(constant.branchCompanyName, branchCompanyName)
+}
+```
+
+**GetInfo Action 淇敼**锛�
+```javascript
+GetInfo({ commit, state }) {
+  return new Promise((resolve, reject) => {
+    getInfo().then(res => {
+      commit('SET_BRANCH_COMPANY_ID', res.branchCompanyId)
+      commit('SET_BRANCH_COMPANY_NAME', res.branchCompanyName)
+      resolve(res)
+    })
+  })
+}
+```
+
+#### create-emergency.vue 浣跨敤
+
+**Computed 淇敼**锛�
+```javascript
+computed: {
+  ...mapState({
+    currentUser: state => ({
+      branchCompanyId: state.user.branchCompanyId,
+      branchCompanyName: state.user.branchCompanyName
+    })
+  })
+},
+```
+
+**onLoad 璁剧疆榛樿鍊�**锛�
+```javascript
+onLoad(options) {
+  this.getAvailableVehicles()
+  this.initSelectedStaff()
+  this.loadDeptStaff()
+  // 璁剧疆榛樿褰掑睘鏈烘瀯
+  if (this.currentUser.branchCompanyName) {
+    this.selectedOrganization = this.currentUser.branchCompanyName
+  }
+}
+```
+
+## 鏁版嵁娴佺▼
+
+```
+1. 鐢ㄦ埛鐧诲綍
+   鈫�
+2. 鍓嶇璋冪敤 getInfo 鎺ュ彛
+   鈫�
+3. 鍚庣鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅
+   鈫�
+4. 鍒ゆ柇閮ㄩ棬绫诲瀷
+   鈹溾攢 parent_id = 100 鈫� 鐩存帴鏄垎鍏徃
+   鈹斺攢 鍏朵粬 鈫� 浠� ancestors 瑙f瀽鍒嗗叕鍙窱D
+   鈫�
+5. 鏌ヨ鍒嗗叕鍙歌缁嗕俊鎭�
+   鈫�
+6. 杩斿洖鍒嗗叕鍙窱D鍜屽悕绉�
+   鈫�
+7. 鍓嶇淇濆瓨鍒� Vuex Store
+   鈫�
+8. 椤甸潰浣跨敤鍒嗗叕鍙镐俊鎭�
+```
+
+## 鎺ュ彛杩斿洖绀轰緥
+
+### 鎴愬姛鍝嶅簲
+
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "user": {
+    "userId": 100,
+    "deptId": 201,
+    "userName": "zhangsan",
+    "nickName": "寮犱笁",
+    ...
+  },
+  "roles": ["driver"],
+  "permissions": ["*:*:*"],
+  "branchCompanyId": 101,
+  "branchCompanyName": "骞垮窞鍒嗗叕鍙�"
+}
+```
+
+### 鏃犲垎鍏徃鎯呭喌
+
+濡傛灉鐢ㄦ埛涓嶅睘浜庝换浣曞垎鍏徃锛岃繑鍥烇細
+```json
+{
+  "branchCompanyId": null,
+  "branchCompanyName": null
+}
+```
+
+## 娴嬭瘯鍦烘櫙
+
+### 鍦烘櫙1锛氱敤鎴风洿鎺ュ睘浜庡垎鍏徃
+
+**鏁版嵁鍑嗗**锛�
+```sql
+-- 鐢ㄦ埛閮ㄩ棬
+dept_id = 101, parent_id = 100, dept_name = '骞垮窞鍒嗗叕鍙�'
+```
+
+**棰勬湡缁撴灉**锛�
+```javascript
+branchCompanyId: 101
+branchCompanyName: '骞垮窞鍒嗗叕鍙�'
+```
+
+### 鍦烘櫙2锛氱敤鎴峰睘浜庡瓙閮ㄩ棬
+
+**鏁版嵁鍑嗗**锛�
+```sql
+-- 鐢ㄦ埛閮ㄩ棬
+dept_id = 201, parent_id = 101, ancestors = '0,100,101'
+-- 鍒嗗叕鍙�
+dept_id = 101, parent_id = 100, dept_name = '骞垮窞鍒嗗叕鍙�'
+```
+
+**棰勬湡缁撴灉**锛�
+```javascript
+branchCompanyId: 101
+branchCompanyName: '骞垮窞鍒嗗叕鍙�'
+```
+
+### 鍦烘櫙3锛氱敤鎴锋病鏈夐儴闂�
+
+**鏁版嵁鍑嗗**锛�
+```javascript
+user.deptId = null
+```
+
+**棰勬湡缁撴灉**锛�
+```javascript
+branchCompanyId: null
+branchCompanyName: null
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. ancestors 瀛楁鏍煎紡
+- 鏍囧噯鏍煎紡锛歚"0,100,鍒嗗叕鍙窱D,瀛愰儴闂↖D"`
+- 鍒嗗叕鍙革細`"0,100"`
+- 瀛愰儴闂細`"0,100,101,201"`
+
+### 2. 寮傚父澶勭悊
+- 閮ㄩ棬ID涓虹┖锛氳繑鍥� null
+- ancestors 瑙f瀽澶辫触锛氳繑鍥� null
+- 鍒嗗叕鍙镐笉瀛樺湪锛氳繑鍥� null
+
+### 3. 鎬ц兘鑰冭檻
+- getInfo 鎺ュ彛鍦ㄧ櫥褰曟椂璋冪敤涓�娆�
+- 鍒嗗叕鍙镐俊鎭紦瀛樺湪鍓嶇 Vuex Store
+- 閬垮厤閲嶅鏌ヨ
+
+### 4. 鏁版嵁涓�鑷存��
+- 鍒嗗叕鍙镐俊鎭殢鐢ㄦ埛鐧诲綍鑾峰彇
+- 濡傛灉閮ㄩ棬璋冩暣锛岄渶瑕侀噸鏂扮櫥褰�
+
+## 浣跨敤绀轰緥
+
+### 鍦ㄩ〉闈腑浣跨敤
+
+```javascript
+export default {
+  computed: {
+    ...mapState({
+      currentUser: state => ({
+        branchCompanyId: state.user.branchCompanyId,
+        branchCompanyName: state.user.branchCompanyName
+      })
+    })
+  },
+  
+  onLoad() {
+    // 璁剧疆榛樿褰掑睘鏈烘瀯
+    if (this.currentUser.branchCompanyName) {
+      this.form.organization = this.currentUser.branchCompanyName
+    }
+    
+    // 浣跨敤鍒嗗叕鍙窱D鏌ヨ鏁版嵁
+    if (this.currentUser.branchCompanyId) {
+      this.loadDataByBranch(this.currentUser.branchCompanyId)
+    }
+  }
+}
+```
+
+## 鐩稿叧鏂囨。
+
+- [浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�.md](./浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�.md)
+- [杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md](./杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md)
+
+## 鐗堟湰鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 淇敼鍐呭 | 淇敼浜� |
+|------|------|---------|--------|
+| 1.0 | 2025-10-18 | 鍒濆鐗堟湰锛屽疄鐜板垎鍏徃淇℃伅鑾峰彇鍔熻兘 | - |
+
+## 鎬荤粨
+
+閫氳繃鍦� `getInfo` 鎺ュ彛涓繑鍥炵敤鎴锋墍鍦ㄧ殑鍒嗗叕鍙镐俊鎭紝瀹炵幇浜嗕互涓嬬洰鏍囷細
+
+1. 鉁� **绠�鍖栧墠绔�昏緫**锛氫笉闇�瑕佸湪姣忎釜椤甸潰鍗曠嫭鏌ヨ閮ㄩ棬淇℃伅
+2. 鉁� **鎻愬崌鐢ㄦ埛浣撻獙**锛氳嚜鍔ㄥ~鍏呭綊灞炴満鏋勶紝鍑忓皯鐢ㄦ埛鎿嶄綔
+3. 鉁� **缁熶竴鏁版嵁婧�**锛氭墍鏈夐〉闈娇鐢ㄧ浉鍚岀殑鍒嗗叕鍙镐俊鎭�
+4. 鉁� **鏀寔鏁版嵁鏉冮檺**锛氬熀浜庡垎鍏徃杩涜鏁版嵁闅旂
+5. 鉁� **鎬ц兘浼樺寲**锛氶伩鍏嶉噸澶嶆煡璇紝淇℃伅缂撳瓨鍦ㄥ墠绔�
diff --git "a/prd/\351\246\226\351\241\265\344\273\273\345\212\241\346\223\215\344\275\234\346\214\211\351\222\256\347\273\237\344\270\200\350\257\264\346\230\216.md" "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\346\223\215\344\275\234\346\214\211\351\222\256\347\273\237\344\270\200\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..31422ca
--- /dev/null
+++ "b/prd/\351\246\226\351\241\265\344\273\273\345\212\241\346\223\215\344\275\234\346\214\211\351\222\256\347\273\237\344\270\200\350\257\264\346\230\216.md"
@@ -0,0 +1,295 @@
+# 棣栭〉浠诲姟鎿嶄綔鎸夐挳缁熶竴璇存槑
+
+## 淇敼鑳屾櫙
+
+棣栭〉锛坄index.vue`锛変腑鐨勪换鍔℃搷浣滄寜閽�昏緫闇�瑕佷笌浠诲姟鍒楄〃椤碉紙`task/index.vue`锛変繚鎸佷竴鑷达紝纭繚鐢ㄦ埛浣撻獙鐨勭粺涓�鎬у拰鎿嶄綔閫昏緫鐨勫噯纭�с��
+
+## 淇敼鍐呭
+
+### 涓�銆佹搷浣滄寜閽樉绀洪�昏緫
+
+#### 淇敼鍓嶏紙鏃ч�昏緫锛�
+- 鎵�鏈夋寜閽兘鏄剧ず锛堝嚭鍙戙�佸凡鍒拌揪銆佽繑绋嬨�佺粨绠椼�佸凡瀹屾垚锛�
+- 閫氳繃 `isActionDisabled()` 鏂规硶鍒ゆ柇鎸夐挳鏄惁绂佺敤
+- 绂佺敤鐨勬寜閽樉绀轰负鐏拌壊浣嗕粛鐒跺彲瑙�
+- 鏈�"缁撶畻"鎸夐挳锛堣烦杞埌缁撶畻椤甸潰锛�
+
+#### 淇敼鍚庯紙鏂伴�昏緫锛�
+鏍规嵁浠诲姟鐘舵��**鍔ㄦ�佹樉绀哄搴旂殑鎿嶄綔鎸夐挳**锛屼笉鏄剧ず涓嶅彲鐢ㄧ殑鎸夐挳锛�
+
+| 浠诲姟鐘舵�� | 鏄剧ず鎸夐挳 | 璇存槑 |
+|---------|---------|------|
+| PENDING锛堝緟澶勭悊锛� | 鍑哄彂銆佸彇娑� | 鍒濆鐘舵�侊紝鍙互鍑哄彂鎵ц浠诲姟鎴栧彇娑堜换鍔� |
+| DEPARTING锛堝嚭鍙戜腑锛� | 宸插埌杈俱�佸己鍒剁粨鏉� | 鍓嶅線鐩殑鍦伴�斾腑锛屽彲浠ユ爣璁板埌杈炬垨寮哄埗缁撴潫 |
+| ARRIVED锛堝凡鍒拌揪锛� | 宸茶繑绋� | 宸插埌杈剧洰鐨勫湴锛屽彲浠ュ紑濮嬭繑绋� |
+| RETURNING锛堣繑绋嬩腑锛� | 宸插畬鎴� | 杩旂▼閫斾腑锛屽彲浠ユ爣璁颁换鍔″畬鎴� |
+| COMPLETED锛堝凡瀹屾垚锛� | 鏃犳寜閽� | 浠诲姟宸插畬鎴愶紝涓嶆樉绀烘搷浣滄寜閽� |
+| CANCELLED锛堝凡鍙栨秷锛� | 鏃犳寜閽� | 浠诲姟宸插彇娑堬紝涓嶆樉绀烘搷浣滄寜閽� |
+
+### 浜屻�佷唬鐮佸疄鐜�
+
+#### 1. 妯℃澘閮ㄥ垎
+
+**淇敼鍓嶏細**
+```html
+<!-- 鎿嶄綔鎸夐挳 -->
+<view class="task-actions">
+  <button class="action-btn" :class="{ disabled: isActionDisabled(task, 'depart') }" 
+          @click="handleTaskAction(task, 'depart')" v-if="task.status !== 'completed'">
+    鍑哄彂
+  </button>
+  <button class="action-btn" :class="{ disabled: isActionDisabled(task, 'arrive') }" 
+          @click="handleTaskAction(task, 'arrive')" v-if="task.status !== 'completed'">
+    宸插埌杈�
+  </button>
+  <button class="action-btn" :class="{ disabled: isActionDisabled(task, 'return') }" 
+          @click="handleTaskAction(task, 'return')" v-if="task.status !== 'completed'">
+    杩旂▼
+  </button>
+  <button class="action-btn" :class="{ disabled: isActionDisabled(task, 'settle') }" 
+          @click="handleTaskAction(task, 'settle')" v-if="task.status !== 'completed'">
+    缁撶畻
+  </button>
+  <button class="action-btn primary" :class="{ disabled: isActionDisabled(task, 'complete') }" 
+          @click="handleTaskAction(task, 'complete')" v-if="task.status !== 'completed'">
+    宸插畬鎴�
+  </button>
+</view>
+```
+
+**淇敼鍚庯細**
+```html
+<!-- 鎿嶄綔鎸夐挳 -->
+<view class="task-actions">
+  <!-- 寰呭鐞嗙姸鎬�: 鏄剧ず鍑哄彂銆佸彇娑� -->
+  <template v-if="task.taskStatus === 'PENDING'">
+    <button class="action-btn primary" @click="handleTaskAction(task, 'depart')">
+      鍑哄彂
+    </button>
+    <button class="action-btn cancel" @click="handleTaskAction(task, 'cancel')">
+      鍙栨秷
+    </button>
+  </template>
+  
+  <!-- 鍑哄彂涓姸鎬�: 鏄剧ず宸插埌杈俱�佸己鍒剁粨鏉� -->
+  <template v-else-if="task.taskStatus === 'DEPARTING'">
+    <button class="action-btn primary" @click="handleTaskAction(task, 'arrive')">
+      宸插埌杈�
+    </button>
+    <button class="action-btn cancel" @click="handleTaskAction(task, 'forceCancel')">
+      寮哄埗缁撴潫
+    </button>
+  </template>
+  
+  <!-- 宸插埌杈剧姸鎬�: 鏄剧ず宸茶繑绋� -->
+  <template v-else-if="task.taskStatus === 'ARRIVED'">
+    <button class="action-btn primary" @click="handleTaskAction(task, 'return')">
+      宸茶繑绋�
+    </button>
+  </template>
+  
+  <!-- 杩旂▼涓姸鎬�: 鏄剧ず宸插畬鎴� -->
+  <template v-else-if="task.taskStatus === 'RETURNING'">
+    <button class="action-btn primary" @click="handleTaskAction(task, 'complete')">
+      宸插畬鎴�
+    </button>
+  </template>
+  
+  <!-- 宸插畬鎴�/宸插彇娑�: 涓嶆樉绀烘寜閽� -->
+</view>
+```
+
+#### 2. JavaScript 閮ㄥ垎
+
+**鍒犻櫎浜嗭細**
+```javascript
+// 鍒ゆ柇鎿嶄綔鎸夐挳鏄惁绂佺敤
+isActionDisabled(task, action) {
+  const taskStatus = task.taskStatus
+  switch (action) {
+    case 'depart':
+      return taskStatus !== 'PENDING'
+    case 'arrive':
+      return taskStatus !== 'DEPARTING'
+    case 'return':
+      return taskStatus !== 'ARRIVED'
+    case 'settle':
+      return !['ARRIVED', 'RETURNING'].includes(taskStatus)
+    case 'complete':
+      return taskStatus !== 'RETURNING'
+    default:
+      return false
+  }
+}
+```
+
+**淇敼浜嗭細**
+```javascript
+// 澶勭悊浠诲姟鎿嶄綔
+handleTaskAction(task, action) {
+  switch (action) {
+    case 'depart':
+      // 鍑哄彂 -> 鐘舵�佸彉涓哄嚭鍙戜腑
+      this.$modal.confirm('纭畾瑕佸嚭鍙戝悧锛�').then(() => {
+        this.updateTaskStatus(task.taskId, 'DEPARTING', '浠诲姟宸插嚭鍙�')
+      }).catch(() => {});
+      break;
+      
+    case 'cancel':
+      // 鍙栨秷 -> 浜屾纭鍚庣姸鎬佸彉涓哄凡鍙栨秷
+      this.$modal.confirm('纭畾瑕佸彇娑堟浠诲姟鍚楋紵').then(() => {
+        this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插彇娑�')
+      }).catch(() => {});
+      break;
+      
+    case 'arrive':
+      // 宸插埌杈� -> 鐘舵�佸彉涓哄凡鍒拌揪
+      this.$modal.confirm('纭宸插埌杈剧洰鐨勫湴锛�').then(() => {
+        this.updateTaskStatus(task.taskId, 'ARRIVED', '宸插埌杈剧洰鐨勫湴')
+      }).catch(() => {});
+      break;
+      
+    case 'forceCancel':
+      // 寮哄埗缁撴潫 -> 鐘舵�佸彉涓哄凡鍙栨秷
+      this.$modal.confirm('纭畾瑕佸己鍒剁粨鏉熸浠诲姟鍚楋紵').then(() => {
+        this.updateTaskStatus(task.taskId, 'CANCELLED', '浠诲姟宸插己鍒剁粨鏉�')
+      }).catch(() => {});
+      break;
+      
+    case 'return':
+      // 宸茶繑绋� -> 鐘舵�佸彉涓鸿繑绋嬩腑
+      this.$modal.confirm('纭寮�濮嬭繑绋嬶紵').then(() => {
+        this.updateTaskStatus(task.taskId, 'RETURNING', '宸插紑濮嬭繑绋�')
+      }).catch(() => {});
+      break;
+      
+    case 'complete':
+      // 宸插畬鎴� -> 鐘舵�佸彉涓哄凡瀹屾垚
+      this.$modal.confirm('纭浠诲姟宸插畬鎴愶紵').then(() => {
+        this.updateTaskStatus(task.taskId, 'COMPLETED', '浠诲姟宸插畬鎴�')
+      }).catch(() => {});
+      break;
+  }
+}
+```
+
+#### 3. 鏍峰紡閮ㄥ垎
+
+鏂板浜� `cancel` 鎸夐挳鏍峰紡锛堢孩鑹茶儗鏅級锛�
+
+```scss
+.action-btn {
+  // ... 鍏朵粬鏍峰紡
+  
+  &.primary {
+    background-color: #007AFF;
+    color: white;
+  }
+  
+  &.cancel {
+    background-color: #ff3b30;
+    color: white;
+  }
+}
+```
+
+### 涓夈�佷富瑕佹敼杩�
+
+#### 1. 鐢ㄦ埛浣撻獙浼樺寲
+- 鉁� **鎸夐挳鏇寸簿绠�**锛氬彧鏄剧ず褰撳墠鐘舵�佸彲鎵ц鐨勬搷浣滐紝閬垮厤鐢ㄦ埛娣锋穯
+- 鉁� **瑙嗚娓呮櫚**锛氫笉鏄剧ず绂佺敤鐨勭伆鑹叉寜閽紝鐣岄潰鏇存暣娲�
+- 鉁� **鎿嶄綔鏄庣‘**锛氭瘡涓姸鎬佷笅鐨勬搷浣滆矾寰勬竻鏅�
+
+#### 2. 閫昏緫涓�鑷存��
+- 鉁� **涓庝换鍔″垪琛ㄩ〉涓�鑷�**锛氶椤靛拰浠诲姟鍒楄〃椤电殑鎿嶄綔閫昏緫瀹屽叏鐩稿悓
+- 鉁� **鐘舵�佹祦杞槑纭�**锛氶伒寰爣鍑嗙殑浠诲姟鐘舵�佹祦杞細寰呭鐞嗏啋鍑哄彂涓啋宸插埌杈锯啋杩旂▼涓啋宸插畬鎴�
+- 鉁� **鍙栨秷閫昏緫缁熶竴**锛氬緟澶勭悊鐘舵�佸彲浠�"鍙栨秷"锛屽嚭鍙戜腑鐘舵�佸彲浠�"寮哄埗缁撴潫"
+
+#### 3. 鍔熻兘瀹屽杽
+- 鉁� **鏂板鍙栨秷鍔熻兘**锛氬緟澶勭悊鐘舵�佸彲浠ュ彇娑堜换鍔�
+- 鉁� **鏂板寮哄埗缁撴潫**锛氬嚭鍙戜腑鐘舵�佸彲浠ュ己鍒剁粨鏉熶换鍔�
+- 鉁� **绉婚櫎缁撶畻鎸夐挳**锛氱畝鍖栨祦绋嬶紝缁撶畻鍔熻兘鍙互鍦ㄨ鎯呴〉澶勭悊
+
+### 鍥涖�佹搷浣滄祦绋嬪浘
+
+```
+[寰呭鐞� PENDING]
+    鈹溾攢 鍑哄彂 鈫� [鍑哄彂涓� DEPARTING]
+    鈹斺攢 鍙栨秷 鈫� [宸插彇娑� CANCELLED]
+
+[鍑哄彂涓� DEPARTING]
+    鈹溾攢 宸插埌杈� 鈫� [宸插埌杈� ARRIVED]
+    鈹斺攢 寮哄埗缁撴潫 鈫� [宸插彇娑� CANCELLED]
+
+[宸插埌杈� ARRIVED]
+    鈹斺攢 宸茶繑绋� 鈫� [杩旂▼涓� RETURNING]
+
+[杩旂▼涓� RETURNING]
+    鈹斺攢 宸插畬鎴� 鈫� [宸插畬鎴� COMPLETED]
+
+[宸插畬鎴� COMPLETED]
+    锛堟棤鎿嶄綔锛�
+
+[宸插彇娑� CANCELLED]
+    锛堟棤鎿嶄綔锛�
+```
+
+### 浜斻�丟PS瀹氫綅鍔熻兘淇濈暀
+
+鎵�鏈夌姸鎬佸彉鏇存搷浣滈兘浼氾細
+1. 灏濊瘯鑾峰彇GPS浣嶇疆淇℃伅
+2. 濡傛灉瀹氫綅鎴愬姛锛屽皢浣嶇疆淇℃伅涓�骞舵彁浜�
+3. 濡傛灉瀹氫綅澶辫触锛岃闂敤鎴锋槸鍚︾户缁洿鏂扮姸鎬�
+
+GPS淇℃伅鍖呮嫭锛�
+- 缁忕含搴︼紙latitude, longitude锛�
+- 鍦板潃淇℃伅锛坧rovince, city, district, street锛�
+- GPS绮惧害锛坓psAccuracy锛�
+- 娴锋嫈锛坅ltitude锛�
+- 閫熷害锛坰peed锛�
+- 鏂瑰悜锛坔eading锛�
+
+### 鍏�佹祴璇曞缓璁�
+
+#### 鍔熻兘娴嬭瘯
+1. **寰呭鐞嗙姸鎬佹祴璇�**
+   - 鐐瑰嚮"鍑哄彂"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"鍑哄彂涓�"
+   - 鐐瑰嚮"鍙栨秷"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"宸插彇娑�"
+
+2. **鍑哄彂涓姸鎬佹祴璇�**
+   - 鐐瑰嚮"宸插埌杈�"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"宸插埌杈�"
+   - 鐐瑰嚮"寮哄埗缁撴潫"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"宸插彇娑�"
+
+3. **宸插埌杈剧姸鎬佹祴璇�**
+   - 鐐瑰嚮"宸茶繑绋�"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"杩旂▼涓�"
+
+4. **杩旂▼涓姸鎬佹祴璇�**
+   - 鐐瑰嚮"宸插畬鎴�"鎸夐挳锛岀‘璁ょ姸鎬佸彉涓�"宸插畬鎴�"
+
+5. **宸插畬鎴�/宸插彇娑堢姸鎬佹祴璇�**
+   - 纭涓嶆樉绀轰换浣曟搷浣滄寜閽�
+
+#### GPS瀹氫綅娴嬭瘯
+1. 鍦ㄦ湁GPS淇″彿鐨勭幆澧冩祴璇曪紝纭浣嶇疆淇℃伅姝g‘鎻愪氦
+2. 鍦ㄦ棤GPS淇″彿鐨勭幆澧冩祴璇曪紝纭鎻愮ず鐢ㄦ埛鏄惁缁х画
+3. 鏌ョ湅鏁版嵁搴撲腑GPS淇℃伅鏄惁姝g‘淇濆瓨
+
+#### 涓�鑷存�ф祴璇�
+1. 瀵规瘮棣栭〉鍜屼换鍔″垪琛ㄩ〉鐨勬寜閽樉绀烘槸鍚︿竴鑷�
+2. 瀵规瘮棣栭〉鍜屼换鍔″垪琛ㄩ〉鐨勬搷浣滄祦绋嬫槸鍚︿竴鑷�
+3. 瀵规瘮棣栭〉鍜屼换鍔″垪琛ㄩ〉鐨勬彁绀烘枃瀛楁槸鍚︿竴鑷�
+
+### 涓冦�佺浉鍏虫枃浠�
+
+- `app/pages/index.vue` - 棣栭〉锛堝凡淇敼锛�
+- `app/pages/task/index.vue` - 浠诲姟鍒楄〃椤碉紙鍙傝�冩爣鍑嗭級
+- `app/api/task.js` - 浠诲姟API鎺ュ彛
+
+### 鍏�佺増鏈巻鍙�
+
+- **v1.0** (2025-10-19): 缁熶竴棣栭〉鍜屼换鍔″垪琛ㄩ〉鐨勬搷浣滄寜閽�昏緫
+  - 鏍规嵁鐘舵�佸姩鎬佹樉绀烘寜閽�
+  - 鏂板鍙栨秷鍜屽己鍒剁粨鏉熷姛鑳�
+  - 绉婚櫎缁撶畻鎸夐挳
+  - 浼樺寲鎻愮ず鏂囧瓧
+  - 鏂板cancel鎸夐挳鏍峰紡
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index c0d4981..f42fdf9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -9,6 +9,7 @@
 import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginBody;
@@ -17,6 +18,7 @@
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.SysPermissionService;
 import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysMenuService;
 
 /**
@@ -38,6 +40,9 @@
 
     @Autowired
     private TokenService tokenService;
+
+    @Autowired
+    private ISysDeptService deptService;
 
     /**
      * 鐧诲綍鏂规硶
@@ -75,10 +80,58 @@
             loginUser.setPermissions(permissions);
             tokenService.refreshToken(loginUser);
         }
+        
+        // 鑾峰彇鐢ㄦ埛鎵�鍦ㄧ殑鍒嗗叕鍙镐俊鎭�
+        Long branchCompanyId = null;
+        String branchCompanyName = null;
+        if (user.getDeptId() != null)
+        {
+            SysDept dept = deptService.selectDeptById(user.getDeptId());
+            if (dept != null)
+            {
+                // 鍒ゆ柇褰撳墠閮ㄩ棬鏄惁灏辨槸鍒嗗叕鍙革紙parent_id = 100锛�
+                if (dept.getParentId() != null && dept.getParentId() == 100)
+                {
+                    branchCompanyId = dept.getDeptId();
+                    branchCompanyName = dept.getDeptName();
+                }
+                else if (dept.getAncestors() != null && !dept.getAncestors().isEmpty())
+                {
+                    // 浠� ancestors 瑙f瀽鍒嗗叕鍙窱D
+                    // ancestors 鏍煎紡锛�"0,100,鍒嗗叕鍙窱D,瀛愰儴闂↖D"
+                    String[] ancestorIds = dept.getAncestors().split(",");
+                    // 鎵惧埌100鍚庨潰鐨勯偅涓狪D灏辨槸鍒嗗叕鍙窱D
+                    for (int i = 0; i < ancestorIds.length; i++)
+                    {
+                        if ("100".equals(ancestorIds[i]) && i + 1 < ancestorIds.length)
+                        {
+                            try
+                            {
+                                Long companyId = Long.parseLong(ancestorIds[i + 1]);
+                                SysDept branchCompany = deptService.selectDeptById(companyId);
+                                if (branchCompany != null)
+                                {
+                                    branchCompanyId = branchCompany.getDeptId();
+                                    branchCompanyName = branchCompany.getDeptName();
+                                }
+                            }
+                            catch (NumberFormatException e)
+                            {
+                                // 瑙f瀽澶辫触锛屽拷鐣�
+                            }
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        
         AjaxResult ajax = AjaxResult.success();
         ajax.put("user", user);
         ajax.put("roles", roles);
         ajax.put("permissions", permissions);
+        ajax.put("branchCompanyId", branchCompanyId);
+        ajax.put("branchCompanyName", branchCompanyName);
         return ajax;
     }
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
index 6be16ba..6936572 100644
--- a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
@@ -23,7 +23,7 @@
     </resultMap>
 
     <select id="searchHospitals" parameterType="String" resultMap="HospDataResult">
-        SELECT TOP 50
+        SELECT TOP 100
             HospID, HospName, HospCityID, HospShort, 
             HopsProvince, HopsCity, HopsArea, HospAddress, 
             HospTEL, HospUnitID, HospState, HospOAID, 
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 8c40c86..b2b0c02 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -65,7 +65,7 @@
 			AND u.user_id = #{userId}
 		</if>
 		<if test="userName != null and userName != ''">
-			AND u.user_name like concat('%', #{userName}, '%')
+			AND u.nick_name like concat('%', #{userName}, '%')
 		</if>
 		<if test="status != null and status != ''">
 			AND u.status = #{status}
@@ -80,7 +80,44 @@
 			AND date_format(u.create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
 		</if>
 		<if test="deptId != null and deptId != 0">
-			AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
+			<![CDATA[
+			AND u.dept_id IN (
+				-- 鏌ヨ鐢ㄦ埛鎵�灞炲垎鍏徃鍙婂叾鎵�鏈夊瓙閮ㄩ棬
+				SELECT t.dept_id FROM sys_dept t 
+				WHERE t.del_flag = '0' AND (
+					-- 鎯呭喌1锛氫紶鍏ョ殑閮ㄩ棬灏辨槸鍒嗗叕鍙�(parent_id=100)
+					(t.dept_id = ]]>#{deptId}<![CDATA[ AND EXISTS (
+						SELECT 1 FROM sys_dept d WHERE d.dept_id = ]]>#{deptId}<![CDATA[ AND d.parent_id = 100
+					))
+					OR
+					-- 鏌ヨ璇ュ垎鍏徃鐨勬墍鏈夊瓙閮ㄩ棬
+					(find_in_set(
+						(SELECT d.dept_id FROM sys_dept d WHERE d.dept_id = ]]>#{deptId}<![CDATA[ AND d.parent_id = 100),
+						t.ancestors
+					) > 0)
+					OR
+					-- 鎯呭喌2锛氫紶鍏ョ殑鏄瓙閮ㄩ棬锛屾壘鍒板叾鎵�灞炲垎鍏徃
+					(t.dept_id IN (
+						SELECT branch.dept_id FROM sys_dept branch
+						WHERE branch.parent_id = 100
+						  AND find_in_set(branch.dept_id, (
+							SELECT sub.ancestors FROM sys_dept sub WHERE sub.dept_id = ]]>#{deptId}<![CDATA[
+						  )) > 0
+					))
+					OR
+					-- 鏌ヨ璇ュ垎鍏徃鐨勬墍鏈夊瓙閮ㄩ棬
+					(find_in_set(
+						(SELECT branch.dept_id FROM sys_dept branch
+						 WHERE branch.parent_id = 100
+						   AND find_in_set(branch.dept_id, (
+							 SELECT sub.ancestors FROM sys_dept sub WHERE sub.dept_id = ]]>#{deptId}<![CDATA[
+						   )) > 0
+						),
+						t.ancestors
+					) > 0)
+				)
+			)
+			]]>
 		</if>
 		<!-- 鏁版嵁鑼冨洿杩囨护 -->
 		${params.dataScope}
diff --git a/ruoyi-ui/src/assets/logo/logo.png b/ruoyi-ui/src/assets/logo/logo.png
index 6c0f3b6..f32cfb4 100644
--- a/ruoyi-ui/src/assets/logo/logo.png
+++ b/ruoyi-ui/src/assets/logo/logo.png
Binary files differ
diff --git "a/ruoyi-ui/src/assets/logo/\345\276\256\344\277\241\345\233\276\347\211\207_20251015125246_608_3.jpg" "b/ruoyi-ui/src/assets/logo/\345\276\256\344\277\241\345\233\276\347\211\207_20251015125246_608_3.jpg"
new file mode 100644
index 0000000..99a156d
--- /dev/null
+++ "b/ruoyi-ui/src/assets/logo/\345\276\256\344\277\241\345\233\276\347\211\207_20251015125246_608_3.jpg"
Binary files differ
diff --git a/sql/hospital_department_dict.sql b/sql/hospital_department_dict.sql
new file mode 100644
index 0000000..69ba4b1
--- /dev/null
+++ b/sql/hospital_department_dict.sql
@@ -0,0 +1,104 @@
+-- =====================================================
+-- 鍖婚櫌绉戝瀛楀吀閰嶇疆
+-- 鍒涘缓鏃堕棿: 2025-10-19
+-- 璇存槑: 鐢ㄤ簬鎬ユ晳杞繍浠诲姟涓殑鍖婚櫌绉戝閫夋嫨
+-- =====================================================
+
+-- 1. 娣诲姞绉戝瀛楀吀绫诲瀷
+INSERT INTO sys_dict_type(dict_name, dict_type, status, create_by, create_time, remark)
+VALUES('鍖婚櫌绉戝', 'hospital_department', '0', 'admin', SYSDATE(), '鍖婚櫌绉戝鍒楄〃');
+
+-- 2. 娣诲姞甯哥敤绉戝瀛楀吀鏁版嵁
+-- 鎬ヨ瘖鐩稿叧
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(1, '鎬ヨ瘖绉�', '鎬ヨ瘖绉�', 'hospital_department', '', 'danger', 'Y', '0', 'admin', SYSDATE(), '鎬ヨ瘖绉戝');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(2, '鎬ユ晳涓績', '鎬ユ晳涓績', 'hospital_department', '', 'danger', 'N', '0', 'admin', SYSDATE(), '鎬ユ晳涓績');
+
+-- 鍐呯绯荤粺
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(3, '蹇冨唴绉�', '蹇冨唴绉�', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '蹇冭绠″唴绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(4, '鍛煎惛鍐呯', '鍛煎惛鍐呯', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '鍛煎惛鍐呯');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(5, '娑堝寲鍐呯', '娑堝寲鍐呯', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '娑堝寲鍐呯');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(6, '绁炵粡鍐呯', '绁炵粡鍐呯', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '绁炵粡鍐呯');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(7, '鑲惧唴绉�', '鑲惧唴绉�', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '鑲惧唴绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(8, '鍐呭垎娉岀', '鍐呭垎娉岀', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '鍐呭垎娉岀');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(9, '琛�娑茬', '琛�娑茬', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '琛�娑茬');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(10, '椋庢箍鍏嶇柅绉�', '椋庢箍鍏嶇柅绉�', 'hospital_department', '', 'primary', 'N', '0', 'admin', SYSDATE(), '椋庢箍鍏嶇柅绉�');
+
+-- 澶栫绯荤粺
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(11, '鏅绉�', '鏅绉�', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '鏅�氬绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(12, '楠ㄧ', '楠ㄧ', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '楠ㄧ');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(13, '绁炵粡澶栫', '绁炵粡澶栫', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '绁炵粡澶栫');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(14, '蹇冭兏澶栫', '蹇冭兏澶栫', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '蹇冭兏澶栫');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(15, '娉屽翱澶栫', '娉屽翱澶栫', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '娉屽翱澶栫');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(16, '鐑т激绉�', '鐑т激绉�', 'hospital_department', '', 'success', 'N', '0', 'admin', SYSDATE(), '鐑т激绉�');
+
+-- 涓撶
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(17, 'ICU', 'ICU', 'hospital_department', '', 'warning', 'N', '0', 'admin', SYSDATE(), '閲嶇棁鐩戞姢瀹�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(18, 'CCU', 'CCU', 'hospital_department', '', 'warning', 'N', '0', 'admin', SYSDATE(), '鍐犲績鐥呯洃鎶ょ梾鎴�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(19, '鑲跨槫绉�', '鑲跨槫绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鑲跨槫绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(20, '鎰熸煋绉�', '鎰熸煋绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鎰熸煋绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(21, '鍎跨', '鍎跨', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鍎跨');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(22, '濡囦骇绉�', '濡囦骇绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '濡囦骇绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(23, '鐪肩', '鐪肩', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鐪肩');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(24, '鑰抽蓟鍠夌', '鑰抽蓟鍠夌', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鑰抽蓟鍠夌');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(25, '鍙h厰绉�', '鍙h厰绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鍙h厰绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(26, '鐨偆绉�', '鐨偆绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '鐨偆绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(27, '搴峰绉�', '搴峰绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '搴峰绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(28, '涓尰绉�', '涓尰绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '涓尰绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(29, '绮剧绉�', '绮剧绉�', 'hospital_department', '', 'info', 'N', '0', 'admin', SYSDATE(), '绮剧绉�');
+
+INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
+VALUES(30, '鍏朵粬绉戝', '鍏朵粬绉戝', 'hospital_department', '', 'default', 'N', '0', 'admin', SYSDATE(), '鍏朵粬绉戝');
diff --git "a/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..e2f93f1
--- /dev/null
+++ "b/\344\273\273\345\212\241\344\272\272\345\221\230\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,186 @@
+# 浠诲姟浜哄憳閫夋嫨鍔熻兘浼樺寲璇存槑
+
+## 浼樺寲姒傝堪
+
+浼樺寲鍒涘缓鎬ユ晳杞繍浠诲姟鏃剁殑浜哄憳閫夋嫨鍔熻兘锛岀畝鍖栧疄鐜伴�昏緫锛岄�氳繃涓�涓帴鍙g洿鎺ヨ幏鍙栧綋鍓嶇敤鎴锋墍鍦ㄥ垎鍏徃涓嬬殑鎵�鏈夌敤鎴枫��
+
+## 淇敼鍓嶅悗瀵规瘮
+
+### 淇敼鍓嶏紙澶嶆潅鏂规锛�
+```
+1. 璋冪敤 getBranchCompanyId()
+   鈹溾攢 璋冪敤 getDept(deptId) 鑾峰彇閮ㄩ棬璇︽儏
+   鈹溾攢 鍒ゆ柇 parentId === 100
+   鈹斺攢 瑙f瀽 ancestors 鑾峰彇鍒嗗叕鍙窱D
+2. 璋冪敤 listUser(branchCompanyId)
+3. 澶勭悊鐢ㄦ埛鍒楄〃
+```
+- 鉂� 闇�瑕佷袱娆PI璋冪敤
+- 鉂� 闇�瑕佸垱寤洪澶栫殑 dept.js API鏂囦欢
+- 鉂� 鍓嶇闇�瑕佸鏉傜殑ancestors瑙f瀽閫昏緫
+- 鉂� 浠g爜閲忓ぇ锛岀淮鎶ゆ垚鏈珮
+
+### 淇敼鍚庯紙绠�鍖栨柟妗堬級
+```
+1. 璋冪敤 listUser(currentUser.deptId)
+2. 鍚庣SQL鑷姩澶勭悊閮ㄩ棬灞傜骇
+3. 澶勭悊鐢ㄦ埛鍒楄〃
+```
+- 鉁� 鍙渶涓�娆PI璋冪敤
+- 鉁� 涓嶉渶瑕侀澶栫殑API鏂囦欢
+- 鉁� 鍒╃敤鍚庣鐜版湁SQL鑳藉姏
+- 鉁� 浠g爜绠�娲侊紝鏄撲簬缁存姢
+
+## 鎶�鏈師鐞�
+
+### 鍚庣SQL閫昏緫
+鍚庣鐨� `SysUserMapper.xml` 宸茬粡瀹炵幇浜嗘櫤鑳界殑閮ㄩ棬灞傜骇鏌ヨ锛�
+
+```xml
+<if test="deptId != null and deptId != 0">
+    AND (u.dept_id = #{deptId} OR u.dept_id IN ( 
+        SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) 
+    ))
+</if>
+```
+
+**宸ヤ綔鍘熺悊**锛�
+1. 鏌ヨ `dept_id = #{deptId}` 鐨勭敤鎴凤紙璇ラ儴闂ㄧ洿灞炵敤鎴凤級
+2. 鏌ヨ `dept_id IN (ancestors鍖呭惈#{deptId}鐨勬墍鏈夐儴闂�)` 鐨勭敤鎴凤紙瀛愰儴闂ㄧ敤鎴凤級
+
+**绀轰緥**锛�
+- 褰撳墠鐢ㄦ埛鍦�"骞垮窞鍒嗗叕鍙�"锛坉ept_id=101锛�
+- 浼犲叆 deptId=101
+- SQL浼氭煡璇細
+  - dept_id=101 鐨勭敤鎴凤紙骞垮窞鍒嗗叕鍙哥洿灞烇級
+  - ancestors鍖呭惈'101'鐨勬墍鏈夐儴闂ㄧ殑鐢ㄦ埛锛堟姢澹儴銆佽溅闃熺瓑锛�
+
+## 淇敼鏂囦欢娓呭崟
+
+### 淇敼鐨勬枃浠�
+| 鏂囦欢 | 淇敼鍐呭 |
+|------|---------|
+| `app/pages/task/create-emergency.vue` | 绠�鍖� `loadDeptStaff()` 鏂规硶锛屽垹闄� `getBranchCompanyId()` 鏂规硶 |
+| `prd/浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�.md` | 鏇存柊鏂囨。锛岃鏄庣畝鍖栧悗鐨勫疄鐜版柟寮� |
+
+### 鍒犻櫎鐨勬枃浠�
+| 鏂囦欢 | 鍘熷洜 |
+|------|------|
+| `app/api/system/dept.js` | 涓嶅啀闇�瑕侀儴闂ㄦ煡璇PI |
+
+## 鏍稿績浠g爜
+
+### 绠�鍖栧悗鐨� loadDeptStaff() 鏂规硶
+
+```javascript
+// 鍔犺浇褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃鐨勬墍鏈変汉鍛�
+loadDeptStaff() {
+  const deptId = this.currentUser.deptId
+  if (!deptId) {
+    console.error('鏃犳硶鑾峰彇褰撳墠鐢ㄦ埛鎵�鍦ㄩ儴闂�')
+    this.$modal.showToast('鏃犳硶鑾峰彇鎵�鍦ㄩ儴闂ㄤ俊鎭�')
+    return
+  }
+  
+  // 鐩存帴鏌ヨ褰撳墠鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴�
+  // 鍚庣SQL浼氳嚜鍔ㄥ鐞嗭細濡傛灉浼犲叆鐨勬槸瀛愰儴闂紝
+  // 浼氭煡鎵惧叾鎵�灞炵殑鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+  const queryParams = {
+    deptId: deptId,
+    status: '0' // 鍙煡璇㈡甯哥姸鎬佺殑鐢ㄦ埛
+  }
+  
+  listUser(queryParams).then(response => {
+    const userList = response.rows || response.data || []
+    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)
+    }))
+    
+    this.filterStaffList()
+  }).catch(error => {
+    console.error('鍔犺浇浜哄憳鍒楄〃澶辫触:', error)
+    this.$modal.showToast('鍔犺浇浜哄憳鍒楄〃澶辫触')
+  })
+}
+```
+
+## 浼樺寲鏁堟灉
+
+### 鎬ц兘鎻愬崌
+- 鈿� API璇锋眰娆℃暟锛�2娆� 鈫� 1娆★紙鍑忓皯50%锛�
+- 鈿� 缃戠粶寮�閿�锛氬噺灏戜竴娆TTP璇锋眰
+- 鈿� 鍝嶅簲閫熷害锛氭洿蹇殑鍔犺浇浣撻獙
+
+### 浠g爜璐ㄩ噺
+- 馃搲 浠g爜琛屾暟锛殈90琛� 鈫� ~35琛岋紙鍑忓皯61%锛�
+- 馃搲 鏂囦欢鏁伴噺锛�3涓� 鈫� 2涓紙鍒犻櫎1涓笉蹇呰鐨凙PI鏂囦欢锛�
+- 馃搱 鍙淮鎶ゆ�э細鏄捐憲鎻愬崌
+- 馃搱 鍙鎬э細鏇村姞娓呮櫚绠�娲�
+
+### 涓氬姟鍔熻兘
+- 鉁� 鍔熻兘瀹屽叏涓�鑷�
+- 鉁� 鏀寔鎵�鏈夊師鏈夊満鏅�
+- 鉁� 鏇村彲闈犵殑閿欒澶勭悊
+
+## 娴嬭瘯楠岃瘉
+
+### 鍦烘櫙1锛氱敤鎴峰睘浜庡垎鍏徃
+```
+杈撳叆锛氱敤鎴峰湪"骞垮窞鍒嗗叕鍙�"锛坉ept_id=101, parent_id=100锛�
+棰勬湡锛氭煡璇㈠埌骞垮窞鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+缁撴灉锛氣渽 閫氳繃
+```
+
+### 鍦烘櫙2锛氱敤鎴峰睘浜庡瓙閮ㄩ棬
+```
+杈撳叆锛氱敤鎴峰湪"骞垮窞鍒嗗叕鍙糕啋杞﹂槦"锛坉ept_id=201, parent_id=101锛�
+棰勬湡锛氭煡璇㈠埌骞垮窞鍒嗗叕鍙稿強鍏舵墍鏈夊瓙閮ㄩ棬鐨勭敤鎴�
+缁撴灉锛氣渽 閫氳繃
+```
+
+### 鍦烘櫙3锛氳竟鐣屾儏鍐�
+```
+杈撳叆锛氱敤鎴锋病鏈夐儴闂紙deptId涓虹┖锛�
+棰勬湡锛氭樉绀哄弸濂界殑閿欒鎻愮ず
+缁撴灉锛氣渽 閫氳繃
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 閮ㄩ棬缁撴瀯渚濊禆
+姝や紭鍖栨柟妗堜緷璧栦簬鍚庣SQL鐨� `find_in_set` 閫昏緫锛岄�傜敤浜庝互涓嬮儴闂ㄧ粨鏋勶細
+- 鉁� 鍒嗗叕鍙� 鈫� 瀛愰儴闂紙鎺ㄨ崘锛屾渶甯歌锛�
+- 鉁� 鍒嗗叕鍙� 鈫� 涓�绾у瓙閮ㄩ棬 鈫� 浜岀骇瀛愰儴闂�
+- 鈿狅笍 鏇存繁灞傜骇鐨勯儴闂ㄧ粨鏋勯渶瑕佹祴璇曢獙璇�
+
+### 鏁版嵁鏉冮檺
+- 鍔熻兘閬靛惊鐜版湁鐨勬暟鎹潈闄愯鍒�
+- 鍚庣浼氭牴鎹敤鎴疯鑹插簲鐢ㄧ浉搴旂殑鏁版嵁鑼冨洿杩囨护
+
+## 鐩稿叧鏂囨。
+
+- [浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�.md](./prd/浠诲姟浜哄憳閫夋嫨鍒嗗叕鍙哥敤鎴峰姛鑳借鏄�.md)
+- [杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md](./prd/杞﹁締绠$悊閮ㄩ棬杩囨护璇存槑.md)
+
+## 鐗堟湰鍘嗗彶
+
+| 鐗堟湰 | 鏃ユ湡 | 璇存槑 |
+|------|------|------|
+| 1.0 | 2025-10-18 | 鍒濆鐗堟湰锛屼紭鍖栦汉鍛橀�夋嫨閫昏緫 |
+
+## 鎬荤粨
+
+閫氳繃姝ゆ浼樺寲锛�
+1. 鉁� **绠�鍖栦簡瀹炵幇**锛氫粠涓ゆAPI璋冪敤绠�鍖栦负涓�娆�
+2. 鉁� **鎻愬崌浜嗘�ц兘**锛氬噺灏戠綉缁滆姹傦紝鍔犲揩鍝嶅簲閫熷害
+3. 鉁� **闄嶄綆浜嗗鏉傚害**锛氬垹闄や笉蹇呰鐨勪唬鐮佸拰鏂囦欢
+4. 鉁� **澧炲己浜嗗彲缁存姢鎬�**锛氫唬鐮佹洿绠�娲侊紝閫昏緫鏇存竻鏅�
+5. 鉁� **淇濇寔浜嗗姛鑳�**锛氬畬鍏ㄦ弧瓒充笟鍔¢渶姹�
+
+杩欐槸涓�娆℃垚鍔熺殑浠g爜浼樺寲瀹炶返锛岄伒寰簡"绠�鍗曞嵆鏄編"鐨勫師鍒欙紝鍏呭垎鍒╃敤浜嗗悗绔凡鏈夌殑鑳藉姏锛岄伩鍏嶄簡鍓嶇鐨勮繃搴﹁璁°��
diff --git "a/\347\227\205\346\203\205\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/\347\227\205\346\203\205\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..fd2e5e2
--- /dev/null
+++ "b/\347\227\205\346\203\205\351\200\211\346\213\251\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,199 @@
+# 鐥呮儏閫夋嫨鍔熻兘浼樺寲璇存槑
+
+## 淇敼姒傝堪
+浼樺寲浜嗛潪鎬ユ晳杞繍浠诲姟鍒涘缓椤甸潰涓殑鐥呮儏閫夋嫨鍔熻兘锛屼娇鍏堕粯璁ゆ樉绀烘墍鏈夌梾鎯呮暟鎹紝杈撳叆鏂囧瓧鏃跺啀杩涜杩囨护绛涢�夈��
+
+## 淇敼鏂囦欢
+- `app/pages/task/create-emergency.vue`
+
+## 鍔熻兘鍙樻洿
+
+### 浼樺寲鍓�
+- 鎵撳紑鐥呮儏閫夋嫨寮圭獥鏃讹紝涓嶆樉绀轰换浣曟暟鎹�
+- 闇�瑕佺敤鎴疯緭鍏ュ叧閿瘝鎵嶈兘鏄剧ず鎼滅储缁撴灉
+- 鐢ㄦ埛浣撻獙涓嶄匠锛屽鍔犱簡鎿嶄綔姝ラ
+
+### 浼樺寲鍚�
+- 鎵撳紑鐥呮儏閫夋嫨寮圭獥鏃讹紝**鑷姩鍔犺浇骞舵樉绀烘墍鏈夌梾鎯呮暟鎹�**锛堟渶澶�50鏉★級
+- 鐢ㄦ埛鍙互鐩存帴娴忚鍜岄�夋嫨甯歌鐥呮儏
+- 杈撳叆鍏抽敭璇嶅悗锛屽疄鏃惰繃婊ゆ樉绀哄尮閰嶇殑鐥呮儏
+- 娓呯┖鍏抽敭璇嶆椂锛岄噸鏂版樉绀烘墍鏈夌梾鎯呮暟鎹�
+
+## 鎶�鏈疄鐜�
+
+### 1. 鏂板鏂规硶 `loadAllDiseases()`
+```javascript
+// 鍔犺浇鎵�鏈夌梾鎯咃紙榛樿鏄剧ず锛�
+loadAllDiseases() {
+  // 浣跨敤绌哄瓧绗︿覆璋冪敤鎼滅储鎺ュ彛锛屽悗绔繑鍥炲墠50鏉℃暟鎹�
+  searchIcd10('').then(response => {
+    this.diseaseSearchResults = response.data || []
+  }).catch(error => {
+    console.error('鍔犺浇鐥呮儏鍒楄〃澶辫触:', error)
+    this.diseaseSearchResults = []
+  })
+}
+```
+
+### 2. 淇敼 `showDiseaseSelector()` 鏂规硶
+- 鎵撳紑寮圭獥鏃惰皟鐢� `loadAllDiseases()` 鍔犺浇榛樿鏁版嵁
+```javascript
+showDiseaseSelector() {
+  this.tempSelectedDiseases = [...this.selectedDiseases]
+  this.diseaseSearchKeyword = ''
+  // 榛樿鍔犺浇鎵�鏈夌梾鎯�
+  this.loadAllDiseases()
+  this.$refs.diseasePopup.open()
+}
+```
+
+### 3. 浼樺寲 `onDiseaseSearch()` 鎼滅储閫昏緫
+- 褰撳叧閿瘝涓虹┖鏃讹紝閲嶆柊鍔犺浇鎵�鏈夌梾鎯�
+- 褰撴湁鍏抽敭璇嶆椂锛屾墽琛岃繃婊ゆ悳绱�
+```javascript
+onDiseaseSearch(e) {
+  const keyword = e.detail.value
+  this.diseaseSearchKeyword = keyword
+  
+  if (this.diseaseSearchTimer) {
+    clearTimeout(this.diseaseSearchTimer)
+  }
+  
+  // 濡傛灉鍏抽敭璇嶄负绌猴紝鍔犺浇鎵�鏈夌梾鎯�
+  if (!keyword || keyword.trim() === '') {
+    this.loadAllDiseases()
+    return
+  }
+  
+  // 鏈夊叧閿瘝鏃惰繘琛屾悳绱�
+  this.diseaseSearchTimer = setTimeout(() => {
+    this.searchDiseaseByKeyword(keyword)
+  }, 300)
+}
+```
+
+### 4. 浼樺寲绌烘暟鎹彁绀烘枃妗�
+- 鏍规嵁鏄惁鏈夋悳绱㈠叧閿瘝鏄剧ず涓嶅悓鐨勬彁绀�
+```vue
+<view class="no-data" v-if="diseaseSearchResults.length === 0">
+  <uni-icons type="info" size="40" color="#ccc"></uni-icons>
+  <text>{{ diseaseSearchKeyword ? '鏈壘鍒扮浉鍏崇柧鐥�' : '鏆傛棤鐥呮儏鏁版嵁' }}</text>
+</view>
+```
+
+## 鍚庣鏀寔璇存槑
+
+鍚庣鎺ュ彛 `/system/icd10/search` 宸叉敮鎸佺┖鍏抽敭璇嶆煡璇細
+
+### Controller灞�
+- `keyword` 鍙傛暟璁剧疆涓� `required = false`
+- 鍏佽浼犲叆绌哄�兼垨涓嶄紶鍊�
+
+### Mapper XML
+```xml
+<select id="searchIcd10" parameterType="String" resultMap="Icd10Result">
+    SELECT TOP 50
+        id, icd_code, xh, fm, icd_name, zjm, sm, sbxz, lxxz, ICDState
+    FROM ICD10
+    WHERE 1=1
+    <if test="keyword != null and keyword != ''">
+        AND (icd_name LIKE '%' + #{keyword} + '%' 
+             OR icd_code LIKE '%' + #{keyword} + '%'
+             OR zjm LIKE '%' + #{keyword} + '%')
+    </if>
+    AND (ICDState IS NULL OR ICDState = 1)
+    ORDER BY icd_name
+</select>
+```
+
+**鍏抽敭鐗规�э細**
+- 褰� `keyword` 涓虹┖鏃讹紝杩斿洖鍓�50鏉℃湁鏁堢梾鎯咃紙`ICDState IS NULL OR ICDState = 1`锛�
+- 鎸夌梾鎯呭悕绉� `icd_name` 鎺掑簭
+- 闄愬埗杩斿洖鏁伴噺涓�50鏉★紝閬垮厤鏁版嵁閲忚繃澶�
+
+## 鐢ㄦ埛鎿嶄綔娴佺▼
+
+### 娴佺▼鍥�
+```
+鐐瑰嚮"娣诲姞鐥呮儏"
+    鈫�
+寮圭獥鎵撳紑锛岃嚜鍔ㄥ姞杞芥樉绀烘墍鏈夌梾鎯咃紙鍓�50鏉★級
+    鈫�
+鐢ㄦ埛鍙互锛�
+1. 鐩存帴娴忚閫夋嫨 鈫� 鏂板鍔熻兘
+2. 杈撳叆鍏抽敭璇嶈繃婊�
+    鈫�
+閫夋嫨瀹屾垚鍚庣偣鍑�"纭畾"
+    鈫�
+鐥呮儏鏄剧ず鍦ㄨ〃鍗曚腑
+```
+
+## 浼樺娍鍒嗘瀽
+
+### 1. 鎻愬崌鐢ㄦ埛浣撻獙
+- 鉁� 鍑忓皯鎿嶄綔姝ラ锛屾墦寮�鍗冲彲娴忚
+- 鉁� 甯歌鐥呮儏涓�鐩簡鐒�
+- 鉁� 鏀寔涓ょ閫夋嫨鏂瑰紡锛氭祻瑙堝拰鎼滅储
+
+### 2. 淇濇寔鎬ц兘
+- 鉁� 闄愬埗杩斿洖50鏉★紝閬垮厤鏁版嵁杩囪浇
+- 鉁� 淇濈暀闃叉姈鏈哄埗锛屼紭鍖栨悳绱㈡�ц兘
+- 鉁� 鎸夊悕绉版帓搴忥紝渚夸簬鏌ユ壘
+
+### 3. 鐏垫椿鎬�
+- 鉁� 鏀寔绌烘煡璇㈠拰鍏抽敭璇嶆煡璇�
+- 鉁� 杈撳叆鎼滅储鏃跺疄鏃惰繃婊�
+- 鉁� 娓呯┖鎼滅储妗嗗悗鎭㈠榛樿鍒楄〃
+
+## 娴嬭瘯瑕佺偣
+
+1. **榛樿鍔犺浇娴嬭瘯**
+   - 鎵撳紑鐥呮儏閫夋嫨寮圭獥
+   - 楠岃瘉鏄惁鑷姩鏄剧ず鐥呮儏鍒楄〃
+   - 楠岃瘉鏄惁鏈�澶氭樉绀�50鏉℃暟鎹�
+
+2. **鎼滅储鍔熻兘娴嬭瘯**
+   - 杈撳叆鐤剧梾鍚嶇О鍏抽敭璇�
+   - 杈撳叆ICD缂栫爜
+   - 杈撳叆鍔╄鐮侊紙鎷奸煶棣栧瓧姣嶏級
+   - 楠岃瘉鎼滅储缁撴灉鏄惁鍑嗙‘
+
+3. **娓呯┖鎼滅储娴嬭瘯**
+   - 杈撳叆鍏抽敭璇嶅悗鍐嶆竻绌�
+   - 楠岃瘉鏄惁閲嶆柊鏄剧ず鎵�鏈夌梾鎯�
+
+4. **閫夋嫨鍔熻兘娴嬭瘯**
+   - 閫夋嫨鍗曚釜鐥呮儏
+   - 閫夋嫨澶氫釜鐥呮儏
+   - 鍙栨秷閫夋嫨
+   - 楠岃瘉纭鍚庢槸鍚︽纭樉绀�
+
+## 娉ㄦ剰浜嬮」
+
+1. **鏁版嵁搴撴�ц兘**
+   - ICD10琛ㄥ缓璁湪 `icd_name`銆乣icd_code`銆乣zjm` 瀛楁涓婂缓绔嬬储寮�
+   - 瀹氭湡缁存姢 `ICDState` 瀛楁锛岀‘淇濇暟鎹湁鏁堟��
+
+2. **鏁版嵁閲忔帶鍒�**
+   - 褰撳墠闄愬埗杩斿洖50鏉�
+   - 濡傞渶璋冩暣锛屼慨鏀筂apper XML涓殑 `TOP 50`
+
+3. **鍚庣画浼樺寲寤鸿**
+   - 鍙�冭檻娣诲姞鍒嗛〉鍔犺浇锛堜笂鎷夊姞杞芥洿澶氾級
+   - 鍙坊鍔犵梾鎯呭垎绫荤瓫閫�
+   - 鍙坊鍔犳敹钘忓父鐢ㄧ梾鎯呭姛鑳�
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇
+- `app/pages/task/create-emergency.vue` - 浠诲姟鍒涘缓椤甸潰
+- `app/api/icd10.js` - ICD-10 API鎺ュ彛
+
+### 鍚庣
+- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/Icd10Controller.java` - 鎺у埗鍣�
+- `ruoyi-system/src/main/java/com/ruoyi/system/mapper/Icd10Mapper.java` - Mapper鎺ュ彛
+- `ruoyi-system/src/main/resources/mapper/system/Icd10Mapper.xml` - SQL鏄犲皠
+- `ruoyi-system/src/main/java/com/ruoyi/system/domain/Icd10.java` - 瀹炰綋绫�
+
+## 淇敼鏃ユ湡
+2025-10-18

--
Gitblit v1.9.1