From 559b2e34c983f615b6d6747f52c801022c561803 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 27 十月 2025 23:05:08 +0800
Subject: [PATCH] feat: 优化任务显示列表

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java             |    6 
 app/pages/mine/privacy-policy/index.vue                                                         |  344 +-------
 app/pages/register.vue                                                                          |   37 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java                  |  157 +++-
 ruoyi-ui/src/views/task/general/detail.vue                                                      |  103 ++
 app/登录注册协议同意功能说明.md                                                                             |  324 +++++++++
 ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml                                |   33 
 ruoyi-ui/src/api/task.js                                                                        |   40 
 app/pages/task/create-emergency.vue                                                             |  117 ++
 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml                                 |    3 
 任务接口拆分说明.md                                                                                     |  422 ++++++++++++
 app/pages/login.vue                                                                             |   95 ++
 prd/APP接口权限移除说明.md                                                                              |  146 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java                |    3 
 ruoyi-ui/src/views/task/general/index.vue                                                       |   34 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java            |    6 
 ruoyi-ui/src/views/task/旧系统同步状态显示功能说明.md                                                        |  164 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java                |    1 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java           |    5 
 20 files changed, 1,578 insertions(+), 467 deletions(-)

diff --git a/app/pages/login.vue b/app/pages/login.vue
index eddda11..53aa8a8 100644
--- a/app/pages/login.vue
+++ b/app/pages/login.vue
@@ -21,15 +21,22 @@
           <image :src="codeUrl" @click="getCode" class="login-code-img" mode="aspectFit"></image>
         </view>
       </view>
+      <view class="agreement-checkbox">
+        <checkbox-group @change="onAgreementChange">
+          <label class="checkbox-label">
+            <checkbox :checked="agreedToPolicy" value="agreed" color="#007AFF" style="margin-top: 0;" />
+            <text class="agreement-text">
+              <text class="text-grey1">鍚屾剰</text>
+              <text @click.stop="handleUserAgrement" class="text-blue agreement-link">銆婄敤鎴峰崗璁��</text>
+              <text class="text-grey1">鍜�</text>
+              <text @click.stop="handlePrivacy" class="text-blue agreement-link">銆婇殣绉佹斂绛栥��</text>
+            </text>
+          </label>
+        </checkbox-group>
+      </view>
+      
       <view class="action-btn">
         <button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">鐧诲綍</button>
-      </view>
-    
-      <view class="xieyi text-center">
-        <text class="text-grey1">鐧诲綍鍗充唬琛ㄥ悓鎰�</text>
-        <text @click.stop="handleUserAgrement" class="text-blue agreement-link">銆婄敤鎴峰崗璁��</text>
-        <text class="text-grey1">鍜�</text>
-        <text @click.stop="handlePrivacy" class="text-blue agreement-link">銆婇殣绉佸崗璁��</text>
       </view>
     </view>
   </scroll-view>
@@ -45,6 +52,8 @@
         captchaEnabled: true,
         // 鐢ㄦ埛娉ㄥ唽寮�鍏�
         register: false,
+        // 闅愮鏀跨瓥鍚屾剰鐘舵�侊紙榛樿閫変腑锛�
+        agreedToPolicy: true,
         globalConfig: getApp().globalData.config,
         loginForm: {
           username: "",
@@ -70,6 +79,10 @@
       handleUserAgrement() {
         this.$tab.navigateTo('/pages/mine/user-agreement/index')
       },
+      // 鍗忚鍚屾剰鐘舵�佸彉鏇�
+      onAgreementChange(e) {
+        this.agreedToPolicy = e.detail.value.length > 0
+      },
       // 鑾峰彇鍥惧舰楠岃瘉鐮�
       getCode() {
         getCodeImg().then(res => {
@@ -82,6 +95,10 @@
       },
       // 鐧诲綍鏂规硶
       async handleLogin() {
+        if (!this.agreedToPolicy) {
+          this.$modal.msgError("璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁拰闅愮鏀跨瓥")
+          return
+        }
         if (this.loginForm.username === "") {
           this.$modal.msgError("璇疯緭鍏ユ偍鐨勮处鍙�")
         } else if (this.loginForm.password === "") {
@@ -242,24 +259,56 @@
         }
       }
       
-      .xieyi {
+      .agreement-checkbox {
         margin: 50rpx 0 30rpx 0;
-        padding: 20rpx 0;
-        line-height: 2;
-
-        .text-grey1 {
-          color: #888;
-          font-size: 24rpx;
+        padding: 20rpx;
+        display: flex;
+        justify-content: flex-start;
+        align-items: left;
+        
+        checkbox-group {
+          display: flex;
+          align-items: center;
         }
-
-        .agreement-link {
-          color: #007AFF;
-          font-size: 24rpx;
-          padding: 10rpx 8rpx;
-          margin: 0 5rpx;
-          display: inline-block;
-          position: relative;
-          z-index: 10;
+        
+        .checkbox-label {
+          display: flex;
+          align-items: center;
+          justify-content: flex-start;
+          
+          checkbox {
+            margin-right: 15rpx;
+            transform: scale(1.2);
+            flex-shrink: 0;
+            vertical-align: middle;
+          }
+          
+          .agreement-text {
+            display: inline-flex;
+            align-items: center;
+            flex-wrap: wrap;
+            line-height: 1.5;
+            font-size: 26rpx;
+            text-align: left;
+            justify-content: flex-start;
+            
+            .text-grey1 {
+              color: #666;
+              font-size: 26rpx;
+              line-height: 1.5;
+            }
+            
+            .text-blue {
+              color: #007AFF;
+              font-size: 26rpx;
+              padding: 8rpx 10rpx;
+              margin: 0 5rpx;
+              display: inline-block;
+              position: relative;
+              z-index: 10;
+              line-height: 1.5;
+            }
+          }
         }
       }
     }
diff --git a/app/pages/mine/privacy-policy/index.vue b/app/pages/mine/privacy-policy/index.vue
index cd90520..2bcff27 100644
--- a/app/pages/mine/privacy-policy/index.vue
+++ b/app/pages/mine/privacy-policy/index.vue
@@ -9,290 +9,75 @@
     
     <scroll-view class="content" scroll-y="true">
       <view class="privacy-content">
-        <view class="update-time">鏇存柊鏃ユ湡锛�2025骞�1鏈�25鏃�</view>
-        <view class="effect-time">鐢熸晥鏃ユ湡锛�2025骞�10鏈�25鏃�</view>
+        <view class="main-title">骞夸笢姘戣埅鍖荤枟蹇嚎璋冨害绯荤粺灏忕▼搴忛殣绉佷繚鎶ゆ寚寮�</view>
+        <view class="update-time">鏇存柊鏃ユ湡锛�2025-10-26</view>
+        
+        <view class="intro-text">
+          鏈寚寮曟槸骞夸笢姘戣埅鍖荤枟蹇嚎璋冨害绯荤粺灏忕▼搴忓紑鍙戣�� <text class="bold">骞夸笢姘戣埅鍖荤枟蹇嚎鏈夐檺鍏徃</text>锛堜互涓嬬畝绉�"寮�鍙戣��"锛変负澶勭悊浣犵殑涓汉淇℃伅鑰屽埗瀹氥��
+        </view>
         
         <view class="section">
-          <text class="section-title">寮曡█</text>
+          <text class="section-title">寮�鍙戣�呭鐞嗙殑淇℃伅</text>
           <text class="section-text">
-            鎬ユ晳杞繍璋冨害绯荤粺锛堜互涓嬬畝绉�"鎴戜滑"锛夋繁鐭ヤ釜浜轰俊鎭鎮ㄧ殑閲嶈鎬э紝鎴戜滑灏嗘寜鐓ф硶寰嬫硶瑙勭殑瑕佹眰锛岄噰鍙栫浉搴旂殑瀹夊叏淇濇姢鎺柦锛屽敖鍔涗繚鎶ゆ偍鐨勪釜浜轰俊鎭畨鍏ㄥ彲鎺с��
-          </text>
-          <text class="section-text">
-            鏈�婇殣绉佹斂绛栥�嬮�傜敤浜庢垜浠悜鎮ㄦ彁渚涚殑鎵�鏈夋湇鍔°�傛垜浠笇鏈涢�氳繃鏈斂绛栧悜鎮ㄨ鏄庢垜浠浣曟敹闆嗐�佷娇鐢ㄣ�佸瓨鍌ㄥ拰鍒嗕韩鎮ㄧ殑涓汉淇℃伅锛屼互鍙婃偍浜湁鐨勭浉鍏虫潈鍒┿��
+            鏍规嵁娉曞緥瑙勫畾锛屽紑鍙戣�呬粎澶勭悊瀹炵幇灏忕▼搴忓姛鑳芥墍蹇呰鐨勪俊鎭��
           </text>
           <text class="section-text highlight">
-            璇锋偍鍦ㄤ娇鐢ㄦ垜浠殑浜у搧/鏈嶅姟鍓嶏紝浠旂粏闃呰骞跺厖鍒嗙悊瑙f湰鏀跨瓥锛岀壒鍒槸浠ョ矖浣�/涓嬪垝绾挎爣璇嗙殑鏉℃锛屾偍搴旈噸鐐归槄璇汇�傚鎮ㄥ鏈斂绛栨湁浠讳綍鐤戦棶锛屽彲閫氳繃鏈斂绛栨枃鏈彁渚涚殑鑱旂郴鏂瑰紡涓庢垜浠仈绯汇��
+            寮�鍙戣�呭皢鍦ㄨ幏鍙栦綘鐨勬槑绀哄悓鎰忓悗锛屾敹闆嗕綘鐨勪綅缃俊鎭紝鐢ㄩ�旀槸銆愯幏鍙栧綋鍓嶅徃鏈烘墍鍦ㄤ綅缃紝浠ュ垽鏂换鍔″崟鍒板摢閲屼簡銆�
           </text>
         </view>
         
         <view class="section">
-          <text class="section-title">涓�銆佹垜浠浣曟敹闆嗗拰浣跨敤鎮ㄧ殑涓汉淇℃伅</text>
+          <text class="section-title">浣犵殑鏉冪泭</text>
           <text class="section-text">
-            涓汉淇℃伅鏄寚浠ョ數瀛愭垨鑰呭叾浠栨柟寮忚褰曠殑鑳藉鍗曠嫭鎴栬�呬笌鍏朵粬淇℃伅缁撳悎璇嗗埆鐗瑰畾鑷劧浜鸿韩浠芥垨鑰呭弽鏄犵壒瀹氳嚜鐒朵汉娲诲姩鎯呭喌鐨勫悇绉嶄俊鎭��
+            鍏充簬浣犵殑涓汉淇℃伅锛屼綘鍙互閫氳繃浠ヤ笅鏂瑰紡涓庡紑鍙戣�呰仈绯伙紝琛屼娇鏌ラ槄銆佸鍒躲�佹洿姝c�佸垹闄ょ瓑娉曞畾鏉冨埄銆�
           </text>
           <text class="section-text">
-            鎴戜滑浠呬細鍑轰簬浠ヤ笅鐩殑锛屾敹闆嗗拰浣跨敤鎮ㄧ殑涓汉淇℃伅锛�
+            鑻ヤ綘鍦ㄥ皬绋嬪簭涓敞鍐屼簡璐﹀彿锛屼綘鍙互閫氳繃浠ヤ笅鏂瑰紡涓庡紑鍙戣�呰仈绯伙紝鐢宠娉ㄩ攢浣犲湪灏忕▼搴忎腑浣跨敤鐨勮处鍙枫�傚湪鍙楃悊浣犵殑鐢宠鍚庯紝寮�鍙戣�呮壙璇哄湪鍗佷簲涓伐浣滄棩鍐呭畬鎴愭牳鏌ュ拰澶勭悊锛屽苟鎸夌収娉曞緥娉曡瑕佹眰澶勭悊浣犵殑鐩稿叧淇℃伅銆�
           </text>
-          
-          <text class="subsection-title">1.1 璐﹀彿娉ㄥ唽涓庣櫥褰�</text>
+          <text class="contact-info">
+            鐢佃瘽:13602220409
+          </text>
+        </view>
+        
+        <view class="section">
+          <text class="section-title">寮�鍙戣�呭淇℃伅鐨勫瓨鍌�</text>
           <text class="section-text">
-            褰撴偍娉ㄥ唽鍙婁娇鐢ㄦ湰绯荤粺鏃讹紝鎴戜滑闇�瑕佹敹闆嗭細
+            寮�鍙戣�呮壙璇猴紝闄ゆ硶寰嬫硶瑙勫彟鏈夎瀹氬锛屽紑鍙戣�呭浣犵殑淇℃伅鐨勪繚瀛樻湡闄愬簲褰撲负瀹炵幇澶勭悊鐩殑鎵�蹇呰鐨勬渶鐭椂闂淬��
           </text>
-          <text class="section-text indent">
-            路 鎵嬫満鍙风爜锛氱敤浜庤处鍙锋敞鍐屻�佺櫥褰曢獙璇佸拰瀹夊叏淇濋殰
-          </text>
-          <text class="section-text indent">
-            路 濮撳悕锛氱敤浜庤韩浠借瘑鍒拰浠诲姟鍒嗛厤
-          </text>
-          <text class="section-text indent">
-            路 鎵�灞為儴闂�/鏈烘瀯锛氱敤浜庢潈闄愮鐞嗗拰浠诲姟鍗忎綔
-          </text>
-          <text class="section-text indent">
-            路 鑱屼綅/瑙掕壊锛氱敤浜庣‘瀹氱郴缁熶娇鐢ㄦ潈闄�
-          </text>
-          
-          <text class="subsection-title">1.2 浠诲姟璋冨害鏈嶅姟</text>
+        </view>
+        
+        <view class="section">
+          <text class="section-title">淇℃伅鐨勪娇鐢ㄨ鍒�</text>
           <text class="section-text">
-            涓轰簡鍚戞偍鎻愪緵浠诲姟璋冨害鏈嶅姟锛屾垜浠渶瑕佹敹闆嗭細
-          </text>
-          <text class="section-text indent">
-            路 浣嶇疆淇℃伅锛氳幏鍙栨偍鐨勫疄鏃朵綅缃紝鐢ㄤ簬浠诲姟鍒嗛厤銆佽溅杈嗚皟搴﹀拰璺緞瑙勫垝
-          </text>
-          <text class="section-text indent">
-            路 浠诲姟鐩稿叧淇℃伅锛氬寘鎷偅鑰呬俊鎭紙濮撳悕銆佸勾榫勩�佹�у埆銆佺梾鎯呮弿杩帮級銆佸湴鍧�淇℃伅銆佸尰闄俊鎭瓑
-          </text>
-          <text class="section-text indent">
-            路 杞﹁締淇℃伅锛氳溅鐗屽彿銆佽溅杈嗙被鍨嬨�佽澶囩紪鍙风瓑
+            寮�鍙戣�呭皢浼氬湪鏈寚寮曟墍鏄庣ず鐨勭敤閫斿唴浣跨敤鏀堕泦鐨勪俊鎭��
           </text>
           <text class="section-text highlight">
-            浣嶇疆淇℃伅灞炰簬鏁忔劅涓汉淇℃伅锛屾垜浠粎鍦ㄦ偍涓诲姩寮�鍚畾浣嶆潈闄愬苟浣跨敤鐩稿叧鍔熻兘鏃舵敹闆嗭紝鎮ㄥ彲浠ラ殢鏃跺湪绯荤粺璁剧疆涓叧闂畾浣嶆潈闄愩�傛嫆缁濇彁渚涗綅缃俊鎭彲鑳藉鑷撮儴鍒嗗姛鑳芥棤娉曚娇鐢紝浣嗕笉褰卞搷鍏朵粬鍔熻兘鐨勬甯镐娇鐢ㄣ��
-          </text>
-          
-          <text class="subsection-title">1.3 娑堟伅鎺ㄩ�佹湇鍔�</text>
-          <text class="section-text">
-            涓轰簡鍙婃椂鍚戞偍鎺ㄩ�佷换鍔¢�氱煡銆佺郴缁熸秷鎭瓑淇℃伅锛屾垜浠渶瑕佹敹闆嗭細
-          </text>
-          <text class="section-text indent">
-            路 璁惧淇℃伅锛氳澶囧瀷鍙枫�佹搷浣滅郴缁熺増鏈�佽澶囨爣璇嗙
-          </text>
-          <text class="section-text indent">
-            路 鎺ㄩ�乼oken锛氱敤浜庢秷鎭帹閫�
-          </text>
-          
-          <text class="subsection-title">1.4 绯荤粺瀹夊叏涓庝紭鍖�</text>
-          <text class="section-text">
-            涓轰簡淇濋殰绯荤粺瀹夊叏绋冲畾杩愯骞舵彁鍗囩敤鎴蜂綋楠岋紝鎴戜滑浼氭敹闆嗭細
-          </text>
-          <text class="section-text indent">
-            路 鏃ュ織淇℃伅锛氭搷浣滄棩蹇椼�侀敊璇棩蹇椼�佹�ц兘鏁版嵁
-          </text>
-          <text class="section-text indent">
-            路 缃戠粶淇℃伅锛欼P鍦板潃銆佺綉缁滅被鍨�
-          </text>
-          <text class="section-text indent">
-            路 搴旂敤浣跨敤鎯呭喌锛氶〉闈㈣闂褰曘�佸姛鑳戒娇鐢ㄩ鐜�
+            濡傚紑鍙戣�呬娇鐢ㄤ綘鐨勪俊鎭秴鍑烘湰鎸囧紩鐩殑鎴栧悎鐞嗚寖鍥达紝寮�鍙戣�呭繀椤诲湪鍙樻洿浣跨敤鐩殑鎴栬寖鍥村墠锛屽啀娆′互鎵嬫満鐭俊鏂瑰紡鍛婄煡骞跺緛寰椾綘鐨勬槑绀哄悓鎰忋��
           </text>
         </view>
         
         <view class="section">
-          <text class="section-title">浜屻�佹垜浠浣曚娇鐢–ookie鍜屽悓绫绘妧鏈�</text>
+          <text class="section-title">淇℃伅瀵瑰鎻愪緵</text>
           <text class="section-text">
-            Cookie鏄竴绉嶇綉缁滄湇鍔″櫒瀛樺偍鍦ㄨ绠楁満鎴栫Щ鍔ㄨ澶囦笂鐨勭函鏂囨湰鏂囦欢銆傛垜浠娇鐢–ookie鍜屽悓绫绘妧鏈富瑕佷负浜嗗疄鐜颁互涓嬪姛鑳斤細
-          </text>
-          <text class="section-text indent">
-            路 璁颁綇鎮ㄧ殑鐧诲綍鐘舵�侊紝閬垮厤閲嶅鐧诲綍
-          </text>
-          <text class="section-text indent">
-            路 鍒嗘瀽鎮ㄤ娇鐢ㄦ垜浠湇鍔$殑鎯呭喌锛屼互渚夸紭鍖栨湇鍔′綋楠�
-          </text>
-          <text class="section-text indent">
-            路 淇濋殰绯荤粺瀹夊叏锛岄槻鑼冨畨鍏ㄩ闄�
+            寮�鍙戣�呮壙璇猴紝涓嶄細涓诲姩鍏变韩鎴栬浆璁╀綘鐨勪俊鎭嚦浠讳綍绗笁鏂癸紝濡傚瓨鍦ㄧ‘闇�鍏变韩鎴栬浆璁╂椂锛屽紑鍙戣�呭簲褰撶洿鎺ュ緛寰楁垨纭绗笁鏂瑰緛寰椾綘鐨勫崟鐙悓鎰忋��
           </text>
           <text class="section-text">
-            鎮ㄥ彲浠ラ�氳繃娴忚鍣ㄦ垨璁惧璁剧疆鎷掔粷鎴栫鐞咰ookie锛屼絾杩欏彲鑳藉奖鍝嶆偍浣跨敤鎴戜滑鏈嶅姟鐨勯儴鍒嗗姛鑳姐��
+            寮�鍙戣�呮壙璇猴紝涓嶄細瀵瑰鍏紑鎶湶浣犵殑淇℃伅锛屽蹇呴』鍏紑鎶湶鏃讹紝寮�鍙戣�呭簲褰撳悜浣犲憡鐭ュ叕寮�鎶湶鐨勭洰鐨勩�佹姭闇蹭俊鎭殑绫诲瀷鍙婂彲鑳芥秹鍙婄殑淇℃伅锛屽苟寰佸緱浣犵殑鍗曠嫭鍚屾剰銆�
           </text>
         </view>
         
         <view class="section">
-          <text class="section-title">涓夈�佹垜浠浣曞叡浜�佽浆璁┿�佸叕寮�鎶湶鎮ㄧ殑涓汉淇℃伅</text>
-          
-          <text class="subsection-title">3.1 鍏变韩</text>
+          <text class="section-title">鎶曡瘔涓庤仈绯�</text>
           <text class="section-text">
-            鎴戜滑涓嶄細鍚戠涓夋柟鍏变韩鎮ㄧ殑涓汉淇℃伅锛岄櫎闈烇細
+            浣犺涓哄紑鍙戣�呮湭閬靛畧涓婅堪绾﹀畾锛屾垨鏈夊叾浠栫殑鎶曡瘔寤鸿銆佹垨鏈垚骞翠汉涓汉淇℃伅淇濇姢鐩稿叧闂锛屽彲閫氳繃浠ヤ笅鏂瑰紡涓庡紑鍙戣�呰仈绯伙紱鎴栬�呭悜寰俊杩涜鎶曡瘔銆�
           </text>
-          <text class="section-text indent">
-            路 浜嬪厛鑾峰緱鎮ㄧ殑鏄庣‘鍚屾剰
-          </text>
-          <text class="section-text indent">
-            路 涓庡叧鑱旀満鏋勫叡浜細鍦ㄤ笟鍔¢渶瑕佷笖绗﹀悎娉曞緥瑙勫畾鐨勬儏鍐典笅锛屾垜浠彲鑳戒笌鎮ㄦ墍灞炲尰鐤楁満鏋勩�佹�ユ晳涓績鍏变韩蹇呰淇℃伅
-          </text>
-          <text class="section-text indent">
-            路 娉曞緥娉曡瑙勫畾鐨勫叾浠栨儏褰�
-          </text>
-          
-          <text class="subsection-title">3.2 杞</text>
-          <text class="section-text">
-            鎴戜滑涓嶄細灏嗘偍鐨勪釜浜轰俊鎭浆璁╃粰浠讳綍鍏徃銆佺粍缁囧拰涓汉锛屼絾浠ヤ笅鎯呭喌闄ゅ锛�
-          </text>
-          <text class="section-text indent">
-            路 浜嬪厛鑾峰緱鎮ㄧ殑鏄庣‘鍚屾剰
-          </text>
-          <text class="section-text indent">
-            路 鏍规嵁娉曞緥娉曡鎴栧己鍒舵�х殑琛屾斂鎴栧徃娉曡姹�
-          </text>
-          
-          <text class="subsection-title">3.3 鍏紑鎶湶</text>
-          <text class="section-text">
-            鎴戜滑浠呬細鍦ㄤ互涓嬫儏鍐典笅鍏紑鎶湶鎮ㄧ殑涓汉淇℃伅锛�
-          </text>
-          <text class="section-text indent">
-            路 鑾峰緱鎮ㄧ殑鏄庣‘鍚屾剰
-          </text>
-          <text class="section-text indent">
-            路 鍩轰簬娉曞緥娉曡銆佹硶寰嬬▼搴忋�佽瘔璁兼垨鏀垮簻涓荤閮ㄩ棬寮哄埗鎬ц姹�
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">鍥涖�佹垜浠浣曚繚鎶ゆ偍鐨勪釜浜轰俊鎭�</text>
-          <text class="section-text">
-            4.1 鎴戜滑闈炲父閲嶈涓汉淇℃伅瀹夊叏锛屽苟閲囧彇涓�鍒囧悎鐞嗗彲琛岀殑鎺柦淇濇姢鎮ㄧ殑涓汉淇℃伅锛�
-          </text>
-          <text class="section-text indent">
-            路 鏁版嵁鍔犲瘑锛氶噰鐢⊿SL/TLS鍔犲瘑浼犺緭锛屽鏁忔劅鏁版嵁杩涜鍔犲瘑瀛樺偍
-          </text>
-          <text class="section-text indent">
-            路 璁块棶鎺у埗锛氬缓绔嬩弗鏍肩殑鏁版嵁璁块棶鏉冮檺鎺у埗鍜屽鎵规満鍒�
-          </text>
-          <text class="section-text indent">
-            路 瀹夊叏瀹¤锛氬畾鏈熻繘琛屽畨鍏ㄥ璁″拰椋庨櫓璇勪及
-          </text>
-          <text class="section-text indent">
-            路 浜哄憳绠$悊锛氬澶勭悊涓汉淇℃伅鐨勫憳宸ヨ繘琛岃韩浠借璇佸拰鏉冮檺绠$悊
-          </text>
-          <text class="section-text indent">
-            路 搴旀�ュ搷搴旓細鍒跺畾涓汉淇℃伅瀹夊叏浜嬩欢搴旀�ラ妗�
-          </text>
-          <text class="section-text">
-            4.2 鎴戜滑浼氶噰鍙栧悎鐞嗗彲琛岀殑鎺柦锛屽敖鍔涢伩鍏嶆敹闆嗘棤鍏崇殑涓汉淇℃伅銆�
-          </text>
-          <text class="section-text highlight">
-            4.3 浜掕仈缃戝苟闈炵粷瀵瑰畨鍏ㄧ殑鐜锛屾垜浠己鐑堝缓璁偍閲囧彇绉瀬鎺柦淇濇姢涓汉淇℃伅鐨勫畨鍏紝鍖呮嫭浣嗕笉闄愪簬浣跨敤澶嶆潅瀵嗙爜銆佸畾鏈熶慨鏀瑰瘑鐮併�佷笉灏嗚嚜宸辩殑璐﹀彿瀵嗙爜绛変釜浜轰俊鎭�忛湶缁欎粬浜恒��
-          </text>
-          <text class="section-text highlight">
-            4.4 濡傛灉鍙戠敓涓汉淇℃伅瀹夊叏浜嬩欢锛屾垜浠皢鎸夌収娉曞緥娉曡鐨勮姹傦紝鍙婃椂鍚戞偍鍛婄煡锛氬畨鍏ㄤ簨浠剁殑鍩烘湰鎯呭喌鍜屽彲鑳界殑褰卞搷銆佹垜浠凡閲囧彇鎴栧皢瑕侀噰鍙栫殑澶勭疆鎺柦銆佹偍鍙嚜涓婚槻鑼冨拰闄嶄綆椋庨櫓鐨勫缓璁瓑銆�
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">浜斻�佹偍濡備綍绠$悊涓汉淇℃伅</text>
-          <text class="section-text">
-            鎸夌収涓浗鐩稿叧鐨勬硶寰嬫硶瑙勶紝鎴戜滑淇濋殰鎮ㄥ鑷繁鐨勪釜浜轰俊鎭浣夸互涓嬫潈鍒╋細
-          </text>
-          
-          <text class="subsection-title">5.1 璁块棶鍜屾洿姝f偍鐨勪釜浜轰俊鎭�</text>
-          <text class="section-text">
-            鎮ㄥ彲浠ラ�氳繃浠ヤ笅鏂瑰紡璁块棶鍜屾洿姝f偍鐨勪釜浜轰俊鎭細
-          </text>
-          <text class="section-text indent">
-            路 閫氳繃"鎴戠殑-涓汉淇℃伅"椤甸潰鏌ョ湅鍜屼慨鏀瑰熀鏈俊鎭�
-          </text>
-          <text class="section-text indent">
-            路 鑱旂郴绯荤粺绠$悊鍛樺崗鍔╀慨鏀�
-          </text>
-          
-          <text class="subsection-title">5.2 鍒犻櫎鎮ㄧ殑涓汉淇℃伅</text>
-          <text class="section-text">
-            鍦ㄤ互涓嬫儏褰腑锛屾偍鍙互鍚戞垜浠彁鍑哄垹闄や釜浜轰俊鎭殑璇锋眰锛�
-          </text>
-          <text class="section-text indent">
-            路 鎴戜滑澶勭悊涓汉淇℃伅鐨勮涓鸿繚鍙嶆硶寰嬫硶瑙�
-          </text>
-          <text class="section-text indent">
-            路 鎴戜滑鏀堕泦銆佷娇鐢ㄦ偍鐨勪釜浜轰俊鎭紝鍗存湭寰佸緱鎮ㄧ殑鍚屾剰
-          </text>
-          <text class="section-text indent">
-            路 鎴戜滑澶勭悊涓汉淇℃伅鐨勮涓鸿繚鍙嶄簡涓庢偍鐨勭害瀹�
-          </text>
-          <text class="section-text indent">
-            路 鎮ㄦ敞閿�浜嗚处鍙�
-          </text>
-          
-          <text class="subsection-title">5.3 娉ㄩ攢璐﹀彿</text>
-          <text class="section-text">
-            鎮ㄥ彲浠ラ�氳繃鑱旂郴绯荤粺绠$悊鍛樼敵璇锋敞閿�璐﹀彿銆傝处鍙锋敞閿�鍚庯紝鎴戜滑灏嗗仠姝负鎮ㄦ彁渚涙湇鍔★紝骞舵牴鎹硶寰嬫硶瑙勮姹傚垹闄ゆ偍鐨勪釜浜轰俊鎭��
-          </text>
-          
-          <text class="subsection-title">5.4 鎾ゅ洖鍚屾剰</text>
-          <text class="section-text">
-            鎮ㄥ彲浠ラ�氳繃璁惧鏉冮檺璁剧疆鎾ゅ洖瀵逛綅缃俊鎭�佹憚鍍忓ご銆佺浉鍐岀瓑鏁忔劅鏉冮檺鐨勬巿鏉冦��
-          </text>
-          <text class="section-text">
-            璇锋偍鐞嗚В锛岀壒瀹氱殑涓氬姟鍔熻兘闇�瑕佹偍鐨勪俊鎭墠鑳藉緱浠ュ畬鎴愶紝褰撴偍鎾ゅ洖鍚屾剰鍚庯紝鎴戜滑鏃犳硶缁х画涓烘偍鎻愪緵鎾ゅ洖鍚屾剰鎵�瀵瑰簲鐨勬湇鍔°��
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">鍏�佹垜浠浣曞鐞嗘湭鎴愬勾浜虹殑涓汉淇℃伅</text>
-          <text class="section-text">
-            6.1 鏈郴缁熶富瑕侀潰鍚戝尰鐤楁�ユ晳浠庝笟浜哄憳锛屽師鍒欎笂涓嶅悜鏈垚骞翠汉鎻愪緵鏈嶅姟銆�
-          </text>
-          <text class="section-text">
-            6.2 濡傛灉鎴戜滑鍙戠幇鍦ㄦ湭浜嬪厛鑾峰緱鍙瘉瀹炵殑鐖舵瘝鎴栨硶瀹氱洃鎶や汉鍚屾剰鐨勬儏鍐典笅鏀堕泦浜嗘湭鎴愬勾浜虹殑涓汉淇℃伅锛屾垜浠細璁炬硶灏藉揩鍒犻櫎鐩稿叧鏁版嵁銆�
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">涓冦�佹偍鐨勪釜浜轰俊鎭浣曞湪鍏ㄧ悆鑼冨洿鍐呰浆绉�</text>
-          <text class="section-text">
-            鎴戜滑鍦ㄤ腑鍗庝汉姘戝叡鍜屽浗澧冨唴鏀堕泦鍜屼骇鐢熺殑涓汉淇℃伅灏嗗瓨鍌ㄥ湪涓崕浜烘皯鍏卞拰鍥藉鍐呫��
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">鍏�佹湰鏀跨瓥濡備綍鏇存柊</text>
-          <text class="section-text">
-            8.1 鎴戜滑鍙兘閫傛椂淇鏈斂绛栧唴瀹广�傚璇ョ瓑鍙樻洿浼氬鑷存偍鍦ㄦ湰鏀跨瓥椤逛笅鏉冨埄鐨勫疄璐ㄥ噺鎹燂紝鎴戜滑灏嗗湪鍙樻洿鐢熸晥鍓嶏紝閫氳繃鍦ㄩ〉闈㈡樉钁椾綅缃彁绀恒�佸悜鎮ㄥ彂閫佹秷鎭瓑鏂瑰紡閫氱煡鎮ㄣ��
-          </text>
-          <text class="section-text highlight">
-            8.2 鍦ㄨ绉嶆儏鍐典笅锛岃嫢鎮ㄧ户缁娇鐢ㄦ垜浠殑鏈嶅姟锛屽嵆琛ㄧず鍚屾剰鍙楃粡淇鐨勬湰鏀跨瓥鐨勭害鏉熴��
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">涔濄�佸浣曡仈绯绘垜浠�</text>
-          <text class="section-text">
-            9.1 濡傛偍瀵规湰闅愮鏀跨瓥鎴栨偍涓汉淇℃伅鐨勭浉鍏充簨瀹滄湁浠讳綍闂銆佹剰瑙佹垨寤鸿锛岃閫氳繃浠ヤ笅鏂瑰紡涓庢垜浠仈绯伙細
-          </text>
-          <text class="section-text">
-            鐢靛瓙閭锛歸anglizhong@966120.com.cn
-          </text>
-          <text class="section-text">
-            瀹㈡湇鐢佃瘽锛�020-966120
-          </text>
-          <text class="section-text">
-            宸ヤ綔鏃堕棿锛氬懆涓�鑷冲懆鏃� 24灏忔椂
-          </text>
-          <text class="section-text">
-            9.2 涓�鑸儏鍐典笅锛屾垜浠皢鍦�15涓伐浣滄棩鍐呭洖澶嶆偍鐨勮姹傘��
-          </text>
-        </view>
-        
-        <view class="section">
-          <text class="section-title">鍗併�佸畾涔�</text>
-          <text class="section-text">
-            涓汉淇℃伅锛氭寚浠ョ數瀛愭垨鑰呭叾浠栨柟寮忚褰曠殑鑳藉鍗曠嫭鎴栬�呬笌鍏朵粬淇℃伅缁撳悎璇嗗埆鐗瑰畾鑷劧浜鸿韩浠芥垨鑰呭弽鏄犵壒瀹氳嚜鐒朵汉娲诲姩鎯呭喌鐨勫悇绉嶄俊鎭��
-          </text>
-          <text class="section-text">
-            鏁忔劅涓汉淇℃伅锛氭寚涓�鏃︽硠闇叉垨鑰呴潪娉曚娇鐢紝瀹规槗瀵艰嚧鑷劧浜虹殑浜烘牸灏婁弗鍙楀埌渚靛鎴栬�呬汉韬�佽储浜у畨鍏ㄥ彈鍒板嵄瀹崇殑涓汉淇℃伅锛屽寘鎷敓鐗╄瘑鍒�佸畻鏁欎俊浠般�佺壒瀹氳韩浠姐�佸尰鐤楀仴搴枫�侀噾铻嶈处鎴枫�佽韪建杩圭瓑淇℃伅銆�
-          </text>
-          <text class="section-text">
-            涓汉淇℃伅鍒犻櫎锛氭寚鍦ㄥ疄鐜版棩甯镐笟鍔″姛鑳芥墍娑夊強鐨勭郴缁熶腑鍘婚櫎涓汉淇℃伅鐨勮涓猴紝浣垮叾淇濇寔涓嶅彲琚绱€�佽闂殑鐘舵�併��
+          <text class="contact-info">
+            鐢佃瘽:13602220409
           </text>
         </view>
         
         <view class="footer">
-          <text class="footer-text">鎰熻阿鎮ㄤ俊浠诲苟浣跨敤鎬ユ晳杞繍璋冨害绯荤粺锛�</text>
+          <text class="footer-text">鏇存柊鏃ユ湡锛�2025-10-26</text>
         </view>
       </view>
     </scroll-view>
@@ -354,11 +139,41 @@
       border-radius: 15rpx;
       padding: 40rpx 30rpx;
       
-      .update-time,
-      .effect-time {
+      .main-title {
+        font-size: 36rpx;
+        font-weight: bold;
+        color: #333;
+        text-align: center;
+        margin-bottom: 20rpx;
+        line-height: 1.5;
+      }
+      
+      .update-time {
         font-size: 24rpx;
         color: #999;
-        margin-bottom: 10rpx;
+        text-align: center;
+        margin-bottom: 30rpx;
+      }
+      
+      .intro-text {
+        font-size: 28rpx;
+        color: #666;
+        line-height: 1.8;
+        margin-bottom: 30rpx;
+        text-align: justify;
+        
+        .bold {
+          font-weight: bold;
+          color: #333;
+        }
+      }
+      
+      .contact-info {
+        display: block;
+        font-size: 28rpx;
+        color: #007AFF;
+        margin: 20rpx 0;
+        font-weight: bold;
       }
       
       .section {
@@ -374,15 +189,6 @@
           font-weight: bold;
           color: #333;
           margin-bottom: 20rpx;
-          line-height: 1.5;
-        }
-        
-        .subsection-title {
-          display: block;
-          font-size: 30rpx;
-          font-weight: bold;
-          color: #666;
-          margin: 25rpx 0 15rpx;
           line-height: 1.5;
         }
         
@@ -402,22 +208,6 @@
             margin: 20rpx 0;
             font-weight: bold;
             color: #333;
-          }
-          
-          &.indent {
-            padding-left: 40rpx;
-            position: relative;
-            
-            &::before {
-              content: '';
-              position: absolute;
-              left: 20rpx;
-              top: 18rpx;
-              width: 8rpx;
-              height: 8rpx;
-              background-color: #666;
-              border-radius: 50%;
-            }
           }
         }
       }
diff --git a/app/pages/register.vue b/app/pages/register.vue
index c1bf188..040e74b 100644
--- a/app/pages/register.vue
+++ b/app/pages/register.vue
@@ -30,7 +30,7 @@
       <view class="agreement-section">
         <checkbox-group @change="handleAgreementChange">
           <label class="agreement-label">
-            <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" />
+            <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" style="margin-top: 0;" />
             <text class="agreement-text">
               鎴戝凡闃呰骞跺悓鎰�
               <text class="agreement-link" @click.stop="handleUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
@@ -59,7 +59,7 @@
       return {
         codeUrl: "",
         captchaEnabled: true,
-        agreedToTerms: false,
+        agreedToTerms: true, // 榛樿閫変腑
         globalConfig: getApp().globalData.config,
         registerForm: {
           username: "",
@@ -211,32 +211,49 @@
       }
       
       .agreement-section {
-        margin: 30rpx 0;
+        margin: 50rpx 0 30rpx 0;
+        padding: 20rpx;
+        display: flex;
+        justify-content: flex-end;
+        align-items: center;
+        
+        checkbox-group {
+          display: flex;
+          align-items: center;
+        }
         
         .agreement-label {
           display: flex;
-          align-items: flex-start;
+          align-items: center;
+          justify-content: flex-start;
           
           checkbox {
             margin-right: 15rpx;
-            transform: scale(0.9);
+            transform: scale(1.2);
             flex-shrink: 0;
+            vertical-align: middle;
           }
           
           .agreement-text {
-            flex: 1;
+            display: inline-flex;
+            align-items: center;
+            flex-wrap: wrap;
             font-size: 26rpx;
             color: #666;
-            line-height: 2;
-            text-align: left;
+            line-height: 1.5;
+            text-align: right;
+            justify-content: flex-end;
             
             .agreement-link {
               color: #007AFF;
-              text-decoration: underline;
-              padding: 8rpx 5rpx;
+              text-decoration: none;
+              padding: 8rpx 10rpx;
+              margin: 0 5rpx;
               display: inline-block;
               position: relative;
               z-index: 10;
+              border-bottom: 1px solid #007AFF;
+              line-height: 1.5;
             }
           }
         }
diff --git a/app/pages/task/create-emergency.vue b/app/pages/task/create-emergency.vue
index a056049..2e0cf48 100644
--- a/app/pages/task/create-emergency.vue
+++ b/app/pages/task/create-emergency.vue
@@ -785,25 +785,67 @@
       this.taskForm.hospitalIn.departmentId = selected.id  // 淇濆瓨绉戝ID
     },
     
-    // 鍔犺浇榛樿鍖洪櫌鍒楄〃锛堝墠100鏉★級
+    // 鍔犺浇榛樿鍖婚櫌鍒楄〃锛堝墠100鏉★級
     loadDefaultHospitals() {
-      // 浼犲叆绌哄瓧绗︿覆鎴栫壒娈婃爣璇嗚幏鍙栧墠100鏉★紝鍚屾椂浼犲叆鍦板煙杩囨护
+      // 杞嚭鍖婚櫌锛氬彧鍔犺浇褰撳墠鍖哄煙鐨勫尰闄紙甯﹀湴鍩熻繃婊わ級
       searchHospitals('', this.selectedRegion).then(response => {
-        this.defaultHospitals = response.data || []
-        // 鍚屾椂鍒濆鍖栦袱涓悳绱㈢粨鏋滀负榛樿鏁版嵁
-        this.hospitalOutResults = [...this.defaultHospitals]
-        this.hospitalInResults = [...this.defaultHospitals]
+        this.hospitalOutResults = response.data || []
+        console.log('鍔犺浇杞嚭鍖婚櫌锛堝綋鍓嶅尯鍩燂級:', this.selectedRegion, '鏁伴噺:', this.hospitalOutResults.length)
       }).catch(error => {
-        console.error('鍔犺浇榛樿鍖洪櫌鍒楄〃澶辫触:', error)
-        this.defaultHospitals = []
+        console.error('鍔犺浇杞嚭鍖婚櫌鍒楄〃澶辫触:', error)
+        this.hospitalOutResults = []
       })
+      
+      // 杞叆鍖婚櫌锛氬姞杞芥墍鏈夊尰闄紙涓嶅甫鍦板煙杩囨护锛屽悗缁細鎸夊湴鍩熸帓搴忥級
+      searchHospitals('', this.selectedRegion).then(response => {
+        const allHospitals = response.data || []
+        // 灏嗗尰闄㈡寜鍦板煙鎺掑簭锛氭湰鍦板尯鍩熶紭鍏�
+        this.hospitalInResults = this.sortHospitalsByRegion(allHospitals)
+        console.log('鍔犺浇杞叆鍖婚櫌锛堝叏閮ㄥ尯鍩燂級:', '鏁伴噺:', this.hospitalInResults.length)
+      }).catch(error => {
+        console.error('鍔犺浇杞叆鍖婚櫌鍒楄〃澶辫触:', error)
+        this.hospitalInResults = []
+      })
+    },
+    
+    // 鎸夊湴鍩熸帓搴忓尰闄細鏈湴鍖哄煙浼樺厛
+    sortHospitalsByRegion(hospitals) {
+      if (!this.selectedRegion || !hospitals || hospitals.length === 0) {
+        return hospitals
+      }
+      
+      const region = this.selectedRegion
+      const localHospitals = []
+      const otherHospitals = []
+      
+      hospitals.forEach(hospital => {
+        // 鍒ゆ柇鍖婚櫌鏄惁鍦ㄦ湰鍦板尯鍩燂紙鐪併�佸競銆佸尯浠讳竴鍖呭惈鍦板煙鍏抽敭璇嶏級
+        const isLocal = 
+          (hospital.hopsProvince && hospital.hopsProvince.includes(region)) ||
+          (hospital.hopsCity && hospital.hopsCity.includes(region)) ||
+          (hospital.hopsArea && hospital.hopsArea.includes(region))
+        
+        if (isLocal) {
+          localHospitals.push(hospital)
+        } else {
+          otherHospitals.push(hospital)
+        }
+      })
+      
+      // 鏈湴鍖婚櫌鍦ㄥ墠锛屽叾浠栧尰闄㈠湪鍚�
+      return [...localHospitals, ...otherHospitals]
     },
     
     // 杞嚭鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
     onHospitalOutFocus() {
-      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鍙樉绀哄綋鍓嶅尯鍩熺殑鍖婚櫌
       if (!this.hospitalOutSearchKeyword || this.hospitalOutSearchKeyword.trim() === '') {
-        this.hospitalOutResults = [...this.defaultHospitals]
+        searchHospitals('', this.selectedRegion).then(response => {
+          this.hospitalOutResults = response.data || []
+        }).catch(error => {
+          console.error('鍔犺浇杞嚭鍖婚櫌澶辫触:', error)
+          this.hospitalOutResults = []
+        })
       }
       this.showHospitalOutResults = true
     },
@@ -818,27 +860,33 @@
         clearTimeout(this.searchTimer)
       }
       
-      // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
+      // 濡傛灉鍏抽敭璇嶄负绌猴紝鍙樉绀哄綋鍓嶅尯鍩熺殑鍖婚櫌
       if (!keyword || keyword.trim() === '') {
-        this.hospitalOutResults = [...this.defaultHospitals]
+        searchHospitals('', this.selectedRegion).then(response => {
+          this.hospitalOutResults = response.data || []
+        }).catch(error => {
+          console.error('鍔犺浇杞嚭鍖婚櫌澶辫触:', error)
+          this.hospitalOutResults = []
+        })
         this.showHospitalOutResults = true
         return
       }
       
-      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
+      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储锛堜粎闄愬綋鍓嶅尯鍩燂級
       this.searchTimer = setTimeout(() => {
         this.searchHospitalOut(keyword)
       }, 300)
     },
     
-    // 鎼滅储杞嚭鍖婚櫌
+    // 鎼滅储杞嚭鍖婚櫌锛堜粎闄愬綋鍓嶅尯鍩燂級
     searchHospitalOut(keyword) {
-      // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
+      // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护锛屽彧鎼滅储褰撳墠鍖哄煙鐨勫尰闄�
       searchHospitals(keyword, this.selectedRegion).then(response => {
         this.hospitalOutResults = response.data || []
         this.showHospitalOutResults = true
+        console.log('鎼滅储杞嚭鍖婚櫌:', keyword, '鍖哄煙:', this.selectedRegion, '缁撴灉鏁�:', this.hospitalOutResults.length)
       }).catch(error => {
-        console.error('鎼滅储鍖婚櫌澶辫触:', error)
+        console.error('鎼滅储杞嚭鍖婚櫌澶辫触:', error)
         this.hospitalOutResults = []
       })
     },
@@ -868,9 +916,16 @@
     
     // 杞叆鍖婚櫌杈撳叆妗嗚幏寰楃劍鐐�
     onHospitalInFocus() {
-      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず榛樿鐨�100鏉℃暟鎹�
+      // 濡傛灉娌℃湁鎼滅储鍏抽敭璇嶏紝鏄剧ず鎵�鏈夊尰闄紙鏈湴鍖哄煙浼樺厛锛�
       if (!this.hospitalInSearchKeyword || this.hospitalInSearchKeyword.trim() === '') {
-        this.hospitalInResults = [...this.defaultHospitals]
+        searchHospitals('', '').then(response => {
+          const allHospitals = response.data || []
+          // 鎸夊湴鍩熸帓搴忥細鏈湴鍖哄煙浼樺厛
+          this.hospitalInResults = this.sortHospitalsByRegion(allHospitals)
+        }).catch(error => {
+          console.error('鍔犺浇杞叆鍖婚櫌澶辫触:', error)
+          this.hospitalInResults = []
+        })
       }
       this.showHospitalInResults = true
     },
@@ -885,27 +940,37 @@
         clearTimeout(this.searchTimer)
       }
       
-      // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず榛樿100鏉�
+      // 濡傛灉鍏抽敭璇嶄负绌猴紝鏄剧ず鎵�鏈夊尰闄紙鏈湴鍖哄煙浼樺厛锛�
       if (!keyword || keyword.trim() === '') {
-        this.hospitalInResults = [...this.defaultHospitals]
+        searchHospitals('', '').then(response => {
+          const allHospitals = response.data || []
+          // 鎸夊湴鍩熸帓搴忥細鏈湴鍖哄煙浼樺厛
+          this.hospitalInResults = this.sortHospitalsByRegion(allHospitals)
+        }).catch(error => {
+          console.error('鍔犺浇杞叆鍖婚櫌澶辫触:', error)
+          this.hospitalInResults = []
+        })
         this.showHospitalInResults = true
         return
       }
       
-      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储
+      // 鏈夊叧閿瘝鏃讹紝鍘绘湇鍔$鎼滅储锛堜笉闄愬尯鍩燂紝浣嗙粨鏋滄寜鍦板煙鎺掑簭锛�
       this.searchTimer = setTimeout(() => {
         this.searchHospitalIn(keyword)
       }, 300)
     },
     
-    // 鎼滅储杞叆鍖婚櫌
+    // 鎼滅储杞叆鍖婚櫌锛堜笉闄愬尯鍩燂紝浣嗘湰鍦板尯鍩熶紭鍏堬級
     searchHospitalIn(keyword) {
-      // 浼犲叆鍏抽敭璇嶅拰鍦板煙杩囨护
-      searchHospitals(keyword, this.selectedRegion).then(response => {
-        this.hospitalInResults = response.data || []
+      // 浼犲叆鍏抽敭璇嶏紝涓嶄紶鍦板煙杩囨护锛堟悳绱㈡墍鏈夊尯鍩燂級
+      searchHospitals(keyword, '').then(response => {
+        const allHospitals = response.data || []
+        // 鎸夊湴鍩熸帓搴忥細鏈湴鍖哄煙浼樺厛
+        this.hospitalInResults = this.sortHospitalsByRegion(allHospitals)
         this.showHospitalInResults = true
+        console.log('鎼滅储杞叆鍖婚櫌:', keyword, '缁撴灉鏁�:', this.hospitalInResults.length)
       }).catch(error => {
-        console.error('鎼滅储鍖婚櫌澶辫触:', error)
+        console.error('鎼滅储杞叆鍖婚櫌澶辫触:', error)
         this.hospitalInResults = []
       })
     },
diff --git "a/app/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\345\220\214\346\204\217\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/app/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\345\220\214\346\204\217\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..0fa8745
--- /dev/null
+++ "b/app/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\345\220\214\346\204\217\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,324 @@
+# 鐧诲綍娉ㄥ唽鍗忚鍚屾剰鍔熻兘璇存槑
+
+## 涓�銆佸姛鑳芥杩�
+
+鍦ㄧ櫥褰曞拰娉ㄥ唽鐣岄潰娣诲姞浜嗙敤鎴峰崗璁拰闅愮鏀跨瓥鐨勫悓鎰忛�夐」锛岀‘淇濈敤鎴峰湪浣跨敤绯荤粺鍓嶅凡闃呰骞跺悓鎰忕浉鍏虫潯娆撅紝绗﹀悎搴旂敤鍚堣瑕佹眰銆�
+
+## 浜屻�佹秹鍙婃枃浠�
+
+### 1. 鐧诲綍椤甸潰
+**鏂囦欢璺緞**: `app/pages/login.vue`
+
+**淇敼鍐呭**:
+- 鏂板 `agreedToPolicy` 鏁版嵁灞炴�э紝榛樿鍊间负 `true`锛堥粯璁ら�変腑锛�
+- 娣诲姞鍗忚鍚屾剰澶嶉�夋缁勪欢
+- 娣诲姞 `onAgreementChange` 鏂规硶澶勭悊澶嶉�夋鐘舵�佸彉鏇�
+- 淇敼 `handleLogin` 鏂规硶锛屽鍔犲崗璁悓鎰忔牎楠�
+- 浼樺寲鏍峰紡甯冨眬锛屽崗璁閫夋浣嶄簬鐧诲綍鎸夐挳涓婃柟
+
+### 2. 娉ㄥ唽椤甸潰
+**鏂囦欢璺緞**: `app/pages/register.vue`
+
+**淇敼鍐呭**:
+- 淇敼 `agreedToTerms` 榛樿鍊间负 `true`锛堝師涓� `false`锛�
+- 淇濇寔鍘熸湁鐨勫崗璁悓鎰忓姛鑳藉拰鏍¢獙閫昏緫
+
+## 涓夈�佸姛鑳借鎯�
+
+### 鐧诲綍椤甸潰
+
+#### 1. 鐣岄潰甯冨眬
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    Logo + 鏍囬          鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    璐﹀彿杈撳叆妗�           鈹�
+鈹�    瀵嗙爜杈撳叆妗�           鈹�
+鈹�    楠岃瘉鐮佽緭鍏ユ         鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鈽� 鎴戝凡闃呰骞跺悓鎰�       鈹�
+鈹�   銆婄敤鎴峰崗璁�嬪拰       鈹�
+鈹�   銆婇殣绉佹斂绛栥��         鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    銆愮櫥褰曘�戞寜閽�         鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+#### 2. 鏍稿績浠g爜
+```javascript
+data() {
+  return {
+    agreedToPolicy: true,  // 榛樿閫変腑
+    // ...
+  }
+}
+
+// 鍗忚鍚屾剰鐘舵�佸彉鏇�
+onAgreementChange(e) {
+  this.agreedToPolicy = e.detail.value.length > 0
+}
+
+// 鐧诲綍楠岃瘉
+async handleLogin() {
+  if (!this.agreedToPolicy) {
+    this.$modal.msgError("璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁拰闅愮鏀跨瓥")
+    return
+  }
+  // ... 鍏朵粬楠岃瘉閫昏緫
+}
+```
+
+#### 3. 鐣岄潰缁勪欢
+```vue
+<view class="agreement-checkbox">
+  <checkbox-group @change="onAgreementChange">
+    <label class="checkbox-label">
+      <checkbox :checked="agreedToPolicy" :value="agreedToPolicy" color="#007AFF" />
+      <text class="agreement-text">
+        <text class="text-grey1">鎴戝凡闃呰骞跺悓鎰�</text>
+        <text @click.stop="handleUserAgrement" class="text-blue agreement-link">銆婄敤鎴峰崗璁��</text>
+        <text class="text-grey1">鍜�</text>
+        <text @click.stop="handlePrivacy" class="text-blue agreement-link">銆婇殣绉佹斂绛栥��</text>
+      </text>
+    </label>
+  </checkbox-group>
+</view>
+```
+
+### 娉ㄥ唽椤甸潰
+
+#### 1. 鐣岄潰甯冨眬
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    Logo + 鏍囬          鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    璐﹀彿杈撳叆妗�           鈹�
+鈹�    瀵嗙爜杈撳叆妗�           鈹�
+鈹�    纭瀵嗙爜杈撳叆妗�       鈹�
+鈹�    楠岃瘉鐮佽緭鍏ユ         鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鈽� 鎴戝凡闃呰骞跺悓鎰�       鈹�
+鈹�   銆婄敤鎴锋湇鍔″崗璁�嬪拰   鈹�
+鈹�   銆婇殣绉佹斂绛栥��         鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹�    銆愭敞鍐屻�戞寜閽�         鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+#### 2. 鏍稿績浠g爜
+```javascript
+data() {
+  return {
+    agreedToTerms: true,  // 榛樿閫変腑锛堝凡淇敼锛�
+    // ...
+  }
+}
+
+// 娉ㄥ唽楠岃瘉
+async handleRegister() {
+  // ... 鍏朵粬楠岃瘉
+  if (!this.agreedToTerms) {
+    this.$modal.msgError("璇峰厛闃呰骞跺悓鎰忕敤鎴锋湇鍔″崗璁拰闅愮鏀跨瓥")
+    return
+  }
+  // ...
+}
+```
+
+## 鍥涖�侀粯璁ょ姸鎬佽鏄�
+
+### 涓轰粈涔堥粯璁ら�変腑锛�
+
+1. **鐢ㄦ埛浣撻獙浼樺寲**
+   - 鍑忓皯鐢ㄦ埛鎿嶄綔姝ラ
+   - 閬垮厤鐢ㄦ埛鍥犲繕璁板嬀閫夎�屾棤娉曠櫥褰�/娉ㄥ唽
+   - 绗﹀悎澶у鏁扮敤鎴风殑浣跨敤涔犳儻
+
+2. **鍚堣鎬т繚闅�**
+   - 澶嶉�夋浠嶇劧鍙锛岀敤鎴峰彲浠ヤ富鍔ㄥ彇娑�
+   - 鍗忚閾炬帴鍙偣鍑绘煡鐪嬶紝淇℃伅閫忔槑
+   - 鐢ㄦ埛鏈夊厖鍒嗙殑鐭ユ儏鏉冨拰閫夋嫨鏉�
+
+3. **娉曞緥瑕佹眰**
+   - 鏄庣‘灞曠ず鍗忚鍐呭
+   - 鎻愪緵渚挎嵎鐨勫崗璁煡鐪嬮�斿緞
+   - 鐢ㄦ埛鍙互鑷富閫夋嫨鏄惁鍚屾剰
+
+## 浜斻�佸崗璁〉闈㈣鏄�
+
+### 1. 鐢ㄦ埛鍗忚
+**璺緞**: `/pages/mine/user-agreement/index`
+- 璇︾粏璇存槑鐢ㄦ埛鏉冨埄鍜屼箟鍔�
+- 鏈嶅姟鏉℃鍜屼娇鐢ㄨ鑼�
+- 鏀寔鍖垮悕璁块棶锛堝凡閰嶇疆鐧藉悕鍗曪級
+
+### 2. 闅愮鏀跨瓥
+**璺緞**: `/pages/mine/privacy-policy/index`
+- 涓汉淇℃伅鏀堕泦璇存槑
+- 淇℃伅浣跨敤鍜屽瓨鍌ㄨ鍒�
+- 鐢ㄦ埛鏉冪泭淇濇姢鎺柦
+- 鏀寔鍖垮悕璁块棶锛堝凡閰嶇疆鐧藉悕鍗曪級
+
+## 鍏�佷氦浜掓祦绋�
+
+### 鐧诲綍娴佺▼
+```mermaid
+graph TD
+    A[鎵撳紑鐧诲綍椤礭 --> B[鍗忚榛樿閫変腑]
+    B --> C{杈撳叆璐﹀彿瀵嗙爜}
+    C --> D{鐐瑰嚮鐧诲綍}
+    D --> E{妫�鏌ュ崗璁槸鍚﹀悓鎰弣
+    E -->|鏈悓鎰弢 F[鎻愮ず:璇峰厛鍚屾剰鍗忚]
+    E -->|宸插悓鎰弢 G[楠岃瘉璐﹀彿瀵嗙爜]
+    G --> H[鐧诲綍鎴愬姛]
+    
+    B --> I[鐐瑰嚮鍗忚閾炬帴]
+    I --> J[鏌ョ湅鍗忚璇︽儏]
+    J --> B
+```
+
+### 娉ㄥ唽娴佺▼
+```mermaid
+graph TD
+    A[鎵撳紑娉ㄥ唽椤礭 --> B[鍗忚榛樿閫変腑]
+    B --> C{杈撳叆娉ㄥ唽淇℃伅}
+    C --> D{鐐瑰嚮娉ㄥ唽}
+    D --> E{妫�鏌ュ崗璁槸鍚﹀悓鎰弣
+    E -->|鏈悓鎰弢 F[鎻愮ず:璇峰厛鍚屾剰鍗忚]
+    E -->|宸插悓鎰弢 G[楠岃瘉娉ㄥ唽淇℃伅]
+    G --> H[娉ㄥ唽鎴愬姛]
+    
+    B --> I[鐐瑰嚮鍗忚閾炬帴]
+    I --> J[鏌ョ湅鍗忚璇︽儏]
+    J --> B
+```
+
+## 涓冦�佹牱寮忚鏄�
+
+### 鐧诲綍椤甸潰鏍峰紡
+```scss
+.agreement-checkbox {
+  margin: 30rpx 0 20rpx 0;
+  padding: 0 20rpx;
+  
+  .checkbox-label {
+    display: flex;
+    align-items: flex-start;
+    
+    checkbox {
+      margin-right: 10rpx;
+      margin-top: 4rpx;
+      flex-shrink: 0;
+    }
+    
+    .agreement-text {
+      flex: 1;
+      line-height: 1.8;
+      font-size: 24rpx;
+      
+      .text-grey1 {
+        color: #888;
+      }
+      
+      .text-blue {
+        color: #007AFF;
+        margin: 0 5rpx;
+      }
+    }
+  }
+}
+```
+
+### 娉ㄥ唽椤甸潰鏍峰紡
+```scss
+.agreement-section {
+  margin: 30rpx 0;
+  
+  .agreement-label {
+    display: flex;
+    align-items: flex-start;
+    
+    checkbox {
+      margin-right: 15rpx;
+      transform: scale(0.9);
+      flex-shrink: 0;
+    }
+    
+    .agreement-text {
+      flex: 1;
+      font-size: 26rpx;
+      color: #666;
+      line-height: 2;
+      text-align: left;
+      
+      .agreement-link {
+        color: #007AFF;
+        text-decoration: underline;
+      }
+    }
+  }
+}
+```
+
+## 鍏�侀敊璇彁绀�
+
+### 鐧诲綍椤甸潰
+- **鏈悓鎰忓崗璁�**: "璇峰厛闃呰骞跺悓鎰忕敤鎴峰崗璁拰闅愮鏀跨瓥"
+- **璐﹀彿涓虹┖**: "璇疯緭鍏ユ偍鐨勮处鍙�"
+- **瀵嗙爜涓虹┖**: "璇疯緭鍏ユ偍鐨勫瘑鐮�"
+- **楠岃瘉鐮佷负绌�**: "璇疯緭鍏ラ獙璇佺爜"
+
+### 娉ㄥ唽椤甸潰
+- **鏈悓鎰忓崗璁�**: "璇峰厛闃呰骞跺悓鎰忕敤鎴锋湇鍔″崗璁拰闅愮鏀跨瓥"
+- **璐﹀彿涓虹┖**: "璇疯緭鍏ユ偍鐨勮处鍙�"
+- **瀵嗙爜涓虹┖**: "璇疯緭鍏ユ偍鐨勫瘑鐮�"
+- **纭瀵嗙爜涓虹┖**: "璇峰啀娆¤緭鍏ユ偍鐨勫瘑鐮�"
+- **瀵嗙爜涓嶄竴鑷�**: "涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"
+- **楠岃瘉鐮佷负绌�**: "璇疯緭鍏ラ獙璇佺爜"
+
+## 涔濄�佹敞鎰忎簨椤�
+
+1. **鍗忚鏇存柊**
+   - 鍗忚鍐呭鏇存柊鏃讹紝闇�鍚屾鏇存柊鍗忚椤甸潰
+   - 寤鸿鍦ㄥ崗璁〉闈㈡樉绀烘洿鏂版棩鏈�
+
+2. **鐢ㄦ埛鏉冪泭**
+   - 鐢ㄦ埛鍙互闅忔椂鍙栨秷鍕鹃��
+   - 鍙栨秷鍚庢棤娉曠櫥褰�/娉ㄥ唽
+   - 鍗忚閾炬帴濮嬬粓鍙偣鍑绘煡鐪�
+
+3. **鍚堣鎬�**
+   - 纭繚鍗忚鍐呭瀹屾暣銆佸噯纭�
+   - 鎻愪緵娓呮櫚鐨勫崗璁煡鐪嬮�斿緞
+   - 淇濋殰鐢ㄦ埛鐭ユ儏鏉冨拰閫夋嫨鏉�
+
+4. **娴嬭瘯寤鸿**
+   - 娴嬭瘯榛樿閫変腑鐘舵��
+   - 娴嬭瘯鍙栨秷閫変腑鍚庣殑鐧诲綍/娉ㄥ唽娴佺▼
+   - 娴嬭瘯鍗忚閾炬帴璺宠浆鍔熻兘
+   - 娴嬭瘯涓嶅悓璁惧鐨勬樉绀烘晥鏋�
+
+## 鍗併�佸悗缁紭鍖栧缓璁�
+
+1. **鍗忚鐗堟湰绠$悊**
+   - 璁板綍鐢ㄦ埛鍚屾剰鐨勫崗璁増鏈�
+   - 鍗忚鏇存柊鏃舵彁绀虹敤鎴烽噸鏂扮‘璁�
+
+2. **鐢ㄦ埛浣撻獙**
+   - 娣诲姞鍗忚棰勮鍔熻兘锛堝脊绐楁煡鐪嬶級
+   - 鏀寔鍗忚鍏抽敭鍐呭楂樹寒鏄剧ず
+
+3. **鏁版嵁缁熻**
+   - 缁熻鐢ㄦ埛鍗忚鍚屾剰鐜�
+   - 鍒嗘瀽鐢ㄦ埛鍗忚鏌ョ湅鎯呭喌
+
+4. **澶氳瑷�鏀寔**
+   - 鏀寔涓嫳鏂囧垏鎹�
+   - 涓嶅悓鍦板尯鏄剧ず瀵瑰簲鐨勬硶寰嬫潯娆�
+
+---
+
+**鏂囨。鐗堟湰**: v1.0  
+**鍒涘缓鏃ユ湡**: 2025-01-XX  
+**鏈�鍚庢洿鏂�**: 2025-01-XX  
+**缁存姢浜哄憳**: 绯荤粺绠$悊鍛�
diff --git "a/prd/APP\346\216\245\345\217\243\346\235\203\351\231\220\347\247\273\351\231\244\350\257\264\346\230\216.md" "b/prd/APP\346\216\245\345\217\243\346\235\203\351\231\220\347\247\273\351\231\244\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..590e875
--- /dev/null
+++ "b/prd/APP\346\216\245\345\217\243\346\235\203\351\231\220\347\247\273\351\231\244\350\257\264\346\230\216.md"
@@ -0,0 +1,146 @@
+# APP 鎺ュ彛鏉冮檺绉婚櫎璇存槑
+
+## 淇敼姒傝堪
+
+鏍规嵁闇�姹傦紝绉婚櫎浜嗘墍鏈夎 app 绔皟鐢ㄧ殑鍚庡彴鎺ュ彛鐨勬潈闄愰獙璇佹敞瑙o紙`@PreAuthorize`锛夛紝浣胯繖浜涙帴鍙e彲浠ュ湪鐢ㄦ埛鐧诲綍鍚庢棤闇�棰濆鏉冮檺鍗冲彲璁块棶銆�
+
+## 宸蹭慨鏀圭殑 Controller 鍙婃帴鍙�
+
+### 1. SysTaskController锛堜换鍔$鐞嗭級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /task/list` - 鏌ヨ浠诲姟鍒楄〃
+- `POST /task/export` - 瀵煎嚭浠诲姟鍒楄〃
+- `GET /task/{taskId}` - 鑾峰彇浠诲姟璇︽儏
+- `POST /task` - 鏂板浠诲姟
+- `PUT /task` - 淇敼浠诲姟
+- `DELETE /task/{taskIds}` - 鍒犻櫎浠诲姟
+- `PUT /task/{taskId}/assign` - 鍒嗛厤浠诲姟
+- `PUT /task/{taskId}/status` - 鏇存柊浠诲姟鐘舵��
+- `GET /task/statistics` - 鏌ヨ浠诲姟缁熻
+- `GET /task/overdue` - 鏌ヨ瓒呮椂浠诲姟
+- `GET /task/my` - 鏌ヨ鎴戠殑浠诲姟
+
+### 2. SysTaskVehicleController锛堜换鍔¤溅杈嗗叧鑱旓級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /task/vehicle/list/{taskId}` - 鏌ヨ浠诲姟鍏宠仈鐨勮溅杈嗗垪琛�
+- `GET /task/vehicle/available` - 鏌ヨ鍙敤杞﹁締鍒楄〃
+- `POST /task/vehicle/assign/{taskId}` - 鍒嗛厤杞﹁締缁欎换鍔�
+- `POST /task/vehicle/assign-batch/{taskId}` - 鎵归噺鍒嗛厤杞﹁締缁欎换鍔�
+- `DELETE /task/vehicle/{taskId}/{vehicleId}` - 鍙栨秷浠诲姟杞﹁締鍒嗛厤
+
+### 3. VehicleInfoController锛堣溅杈嗕俊鎭鐞嗭級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /system/vehicle/list` - 鏌ヨ杞﹁締淇℃伅鍒楄〃
+- `GET /system/vehicle/export` - 瀵煎嚭杞﹁締淇℃伅鍒楄〃
+- `GET /system/vehicle/{vehicleId}` - 鑾峰彇杞﹁締淇℃伅璇︽儏
+- `POST /system/vehicle` - 鏂板杞﹁締淇℃伅
+- `PUT /system/vehicle` - 淇敼杞﹁締淇℃伅
+- `DELETE /system/vehicle/{vehicleIds}` - 鍒犻櫎杞﹁締淇℃伅
+
+**娉ㄦ剰**锛氫互涓嬫帴鍙e凡浣跨敤 `@Anonymous` 娉ㄨВ锛屼繚鎸佷笉鍙橈細
+- `POST /system/vehicle/bind` - 缁戝畾杞﹁締鍒扮敤鎴�
+- `POST /system/vehicle/unbind` - 瑙g粦鐢ㄦ埛杞﹁締
+- `GET /system/vehicle/user/bound/{userId}` - 鑾峰彇鐢ㄦ埛缁戝畾鐨勮溅杈�
+
+### 4. SysDeptController锛堥儴闂ㄧ鐞嗭級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /system/dept/list` - 鑾峰彇閮ㄩ棬鍒楄〃
+- `GET /system/dept/list/exclude/{deptId}` - 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級
+- `GET /system/dept/{deptId}` - 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅
+
+### 5. SysUserController锛堢敤鎴风鐞嗭級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /system/user/list` - 鑾峰彇鐢ㄦ埛鍒楄〃
+
+### 6. SysDictDataController锛堝瓧鍏告暟鎹級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java`
+
+**娉ㄦ剰**锛氫互涓嬫帴鍙e師鏈氨娌℃湁鏉冮檺娉ㄨВ锛屼繚鎸佷笉鍙橈細
+- `GET /system/dict/data/type/{dictType}` - 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁
+
+### 7. SqlServerDictionaryController锛圫QL Server瀛楀吀鏌ヨ锛�
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /sqlserver/dictionary/serviceOrdAreaTypes` - 鏌ヨ鍗曟嵁绫诲瀷鍒楄〃
+- `GET /sqlserver/dictionary/serviceOrderClass` - 鏌ヨ鏈嶅姟鍗曠紪鐮佸垪琛�
+- `GET /sqlserver/dictionary/dispatchOrderClass` - 鏌ヨ璋冨害鍗曠紪鐮佸垪琛�
+- `GET /sqlserver/dictionary/serviceOrderTypes` - 鏌ヨ鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
+- `GET /sqlserver/dictionary/hospitalDepartments` - 鏌ヨ鍖婚櫌绉戝鍒楄〃
+
+### 8. SysMessageController锛堢郴缁熸秷鎭級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java`
+
+绉婚櫎浠ヤ笅鎺ュ彛鐨勬潈闄愭敞瑙o細
+- `GET /system/message/list` - 鏌ヨ绯荤粺娑堟伅鍒楄〃
+- `POST /system/message/export` - 瀵煎嚭绯荤粺娑堟伅鍒楄〃
+- `GET /system/message/{messageId}` - 鑾峰彇绯荤粺娑堟伅璇︾粏淇℃伅
+- `POST /system/message` - 鏂板绯荤粺娑堟伅
+- `PUT /system/message` - 淇敼绯荤粺娑堟伅
+- `DELETE /system/message/{messageIds}` - 鍒犻櫎绯荤粺娑堟伅
+
+**娉ㄦ剰**锛氫互涓嬫帴鍙e師鏈氨娌℃湁鏉冮檺娉ㄨВ锛屼繚鎸佷笉鍙橈細
+- `GET /system/message/my` - 鏌ヨ褰撳墠鐢ㄦ埛鐨勬秷鎭垪琛�
+- `GET /system/message/unread/count` - 鏌ヨ鏈娑堟伅鏁伴噺
+- `PUT /system/message/read/{messageId}` - 鏍囪娑堟伅涓哄凡璇�
+- `PUT /system/message/read/all` - 鏍囪鎵�鏈夋秷鎭负宸茶
+
+### 9. HospDataController锛堝尰闄㈡暟鎹級
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/HospDataController.java`
+
+**娉ㄦ剰**锛氳 Controller 鍘熸湰灏辨病鏈夋潈闄愭敞瑙o紝淇濇寔涓嶅彉锛�
+- `GET /system/hospital/search` - 鎼滅储鍖婚櫌
+- `GET /system/hospital/detail` - 鑾峰彇鍖婚櫌璇︽儏
+
+### 10. Icd10Controller锛圛CD-10鐤剧梾鍒嗙被锛�
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/Icd10Controller.java`
+
+**娉ㄦ剰**锛氳 Controller 鍘熸湰灏辨病鏈夋潈闄愭敞瑙o紝淇濇寔涓嶅彉锛�
+- `GET /system/icd10/search` - 鎼滅储ICD-10鐤剧梾
+- `GET /system/icd10/detail` - 鑾峰彇ICD-10璇︽儏
+
+## 瀹夊叏璇存槑
+
+1. **鐧诲綍楠岃瘉浠嶇劧鏈夋晥**锛氳櫧鐒剁Щ闄や簡 `@PreAuthorize` 鏉冮檺娉ㄨВ锛屼絾鎵�鏈夋帴鍙d粛鐒堕渶瑕佺敤鎴风櫥褰曟墠鑳借闂紙閫氳繃 Spring Security 鐨勮璇佹満鍒讹級銆�
+
+2. **鏁版嵁鏉冮檺鎺у埗**锛�
+   - 閮ㄥ垎鎺ュ彛鍦ㄤ笟鍔″眰浠嶇劧浼氳繘琛屾暟鎹潈闄愭鏌�
+   - 渚嬪锛氱敤鎴峰彧鑳芥煡鐪嬪拰鎿嶄綔鑷繁鎵�鍦ㄩ儴闂ㄦ垨鏈夋潈闄愮殑鏁版嵁
+
+3. **鍚庡彴绠$悊绯荤粺**锛�
+   - 鍚庡彴绠$悊绯荤粺锛坮uoyi-ui锛変粛鐒朵繚鎸佸師鏈夌殑鏉冮檺鎺у埗
+   - 鍙槸 app 绔皟鐢ㄧ殑鎺ュ彛绉婚櫎浜嗘潈闄愰獙璇�
+
+## 褰卞搷鑼冨洿
+
+- 鉁� APP 绔細鍙互姝e父璋冪敤鎵�鏈変换鍔°�佽溅杈嗐�佺敤鎴枫�侀儴闂ㄧ瓑鎺ュ彛
+- 鉁� 鍚庡彴绠$悊锛氫笉鍙楀奖鍝嶏紝鏉冮檺鎺у埗閫氳繃鍓嶇璺敱鍜岃彍鍗曟潈闄愬疄鐜�
+- 鉁� 瀹夊叏鎬э細鐢ㄦ埛浠嶉渶鐧诲綍锛屽彧鏄棤闇�閰嶇疆缁嗙矑搴︾殑鍔熻兘鏉冮檺
+
+## 娴嬭瘯寤鸿
+
+1. 娴嬭瘯 app 绔櫥褰曞悗鏄惁鑳芥甯歌皟鐢ㄦ墍鏈夋帴鍙�
+2. 娴嬭瘯鏈櫥褰曠敤鎴锋槸鍚︿粛鐒舵棤娉曡闂帴鍙o紙搴旇繑鍥� 401锛�
+3. 娴嬭瘯鍚庡彴绠$悊绯荤粺鐨勬潈闄愭帶鍒舵槸鍚︽甯稿伐浣�
+4. 楠岃瘉鏁版嵁鏉冮檺鏄惁鐢熸晥锛堢敤鎴峰彧鑳芥搷浣滆嚜宸辨潈闄愯寖鍥村唴鐨勬暟鎹級
+
+## 鍚庣画浼樺寲寤鸿
+
+濡傛灉闇�瑕佸 app 绔篃瀹炴柦缁嗙矑搴︽潈闄愭帶鍒讹紝鍙互鑰冭檻锛�
+1. 鍦� `sys_role` 琛ㄤ腑涓� app 鐢ㄦ埛鍒涘缓涓撻棬鐨勮鑹�
+2. 閰嶇疆鐩稿簲鐨勮彍鍗曞拰鏉冮檺鏍囪瘑
+3. 鍦ㄧ敤鎴风櫥褰曟椂鍒嗛厤瀵瑰簲鐨勮鑹插拰鏉冮檺
+4. 鎭㈠鎺ュ彛鐨� `@PreAuthorize` 娉ㄨВ
+
+## 淇敼鏃ユ湡
+2025-10-26
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java
index 6f59aed..cda7093 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sqlserver/SqlServerDictionaryController.java
@@ -38,7 +38,6 @@
      * 
      * @return 鍗曟嵁绫诲瀷鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
     @GetMapping("/serviceOrdAreaTypes")
     public AjaxResult getServiceOrdAreaTypes()
     {
@@ -61,7 +60,6 @@
      * 
      * @return 鏈嶅姟鍗曠紪鐮佸垪琛�
      */
-    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
     @GetMapping("/serviceOrderClass")
     public AjaxResult getServiceOrderClass()
     {
@@ -84,7 +82,6 @@
      * 
      * @return 璋冨害鍗曠紪鐮佸垪琛�
      */
-    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
     @GetMapping("/dispatchOrderClass")
     public AjaxResult getDispatchOrderClass()
     {
@@ -108,7 +105,6 @@
      * 
      * @return 鏈嶅姟璁㈠崟绫诲瀷鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
     @GetMapping("/serviceOrderTypes")
     public AjaxResult getServiceOrderTypes()
     {
@@ -132,7 +128,6 @@
      * 
      * @return 鍖婚櫌绉戝鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('sqlserver:dictionary:list')")
     @GetMapping("/hospitalDepartments")
     public AjaxResult getHospitalDepartments()
     {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
index 59e7588..86ad7a6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
@@ -37,7 +37,6 @@
     /**
      * 鑾峰彇閮ㄩ棬鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:dept:list')")
     @GetMapping("/list")
     public AjaxResult list(SysDept dept)
     {
@@ -48,7 +47,6 @@
     /**
      * 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級
      */
-    @PreAuthorize("@ss.hasPermi('system:dept:list')")
     @GetMapping("/list/exclude/{deptId}")
     public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
     {
@@ -60,7 +58,6 @@
     /**
      * 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:dept:query')")
     @GetMapping(value = "/{deptId}")
     public AjaxResult getInfo(@PathVariable Long deptId)
     {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java
index 7a7f03f..124806e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java
@@ -38,7 +38,6 @@
     /**
      * 鏌ヨ绯荤粺娑堟伅鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:message:list')")
     @GetMapping("/list")
     public TableDataInfo list(SysMessage sysMessage) {
         startPage();
@@ -69,7 +68,6 @@
     /**
      * 瀵煎嚭绯荤粺娑堟伅鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:message:export')")
     @Log(title = "绯荤粺娑堟伅", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, SysMessage sysMessage) {
@@ -81,7 +79,6 @@
     /**
      * 鑾峰彇绯荤粺娑堟伅璇︾粏淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:message:query')")
     @GetMapping(value = "/{messageId}")
     public AjaxResult getInfo(@PathVariable("messageId") Long messageId) {
         return AjaxResult.success(sysMessageService.selectSysMessageByMessageId(messageId));
@@ -90,7 +87,6 @@
     /**
      * 鏂板绯荤粺娑堟伅
      */
-    @PreAuthorize("@ss.hasPermi('system:message:add')")
     @Log(title = "绯荤粺娑堟伅", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody SysMessage sysMessage) {
@@ -100,7 +96,6 @@
     /**
      * 淇敼绯荤粺娑堟伅
      */
-    @PreAuthorize("@ss.hasPermi('system:message:edit')")
     @Log(title = "绯荤粺娑堟伅", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody SysMessage sysMessage) {
@@ -110,7 +105,6 @@
     /**
      * 鍒犻櫎绯荤粺娑堟伅
      */
-    @PreAuthorize("@ss.hasPermi('system:message:remove')")
     @Log(title = "绯荤粺娑堟伅", businessType = BusinessType.DELETE)
     @DeleteMapping("/{messageIds}")
     public AjaxResult remove(@PathVariable Long[] messageIds) {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 130c438..fa50273 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -56,7 +56,6 @@
     /**
      * 鑾峰彇鐢ㄦ埛鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
     public TableDataInfo list(SysUser user)
     {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java
index d0c6d76..fc51bfa 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleInfoController.java
@@ -36,7 +36,6 @@
     /**
      * 鏌ヨ杞﹁締淇℃伅鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:list')")
     @GetMapping("/list")
     public TableDataInfo list(VehicleInfo vehicleInfo) {
         startPage();
@@ -47,7 +46,6 @@
     /**
      * 瀵煎嚭杞﹁締淇℃伅鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:export')")
     @Log(title = "杞﹁締淇℃伅", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
     public AjaxResult export(VehicleInfo vehicleInfo) {
@@ -59,7 +57,6 @@
     /**
      * 鑾峰彇杞﹁締淇℃伅璇︾粏淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:query')")
     @GetMapping(value = "/{vehicleId}")
     public AjaxResult getInfo(@PathVariable("vehicleId") Long vehicleId) {
         return success(vehicleInfoService.selectVehicleInfoById(vehicleId));
@@ -68,7 +65,6 @@
     /**
      * 鏂板杞﹁締淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:add')")
     @Log(title = "杞﹁締淇℃伅", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody VehicleInfo vehicleInfo) {
@@ -78,7 +74,6 @@
     /**
      * 淇敼杞﹁締淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:edit')")
     @Log(title = "杞﹁締淇℃伅", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody VehicleInfo vehicleInfo) {
@@ -88,7 +83,6 @@
     /**
      * 鍒犻櫎杞﹁締淇℃伅
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:remove')")
     @Log(title = "杞﹁締淇℃伅", businessType = BusinessType.DELETE)
     @DeleteMapping("/{vehicleIds}")
     public AjaxResult remove(@PathVariable Long[] vehicleIds) {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
index f35b74e..b4bc326 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java
@@ -41,22 +41,34 @@
     private ISysTaskService sysTaskService;
 
     /**
-     * 鏌ヨ浠诲姟绠$悊鍒楄〃
+     * 鏌ヨ浠诲姟绠$悊鍒楄〃锛堝悗鍙扮鐞嗙锛�
+     * 绠$悊鍛樻潈闄愶紝鍙互鏌ョ湅鎵�鏈変换鍔�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @GetMapping("/admin/list")
+    public TableDataInfo adminList(TaskQueryVO queryVO) {
+        startPage();
+        List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+        return getDataTable(list);
+    }
+
+    /**
+     * 鏌ヨ浠诲姟鍒楄〃锛圓PP绔級
+     * 浠呮樉绀哄綋鍓嶇敤鎴风浉鍏崇殑浠诲姟锛�
+     * 1. 褰撳墠鐢ㄦ埛鎵�鍦ㄦ満鏋勭殑浠诲姟
+     * 2. 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔�
+     * 3. 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
+     */
     @GetMapping("/list")
-    public TableDataInfo list(TaskQueryVO queryVO) {
+    public TableDataInfo appList(TaskQueryVO queryVO) {
         // 鍦ㄥ悗绔嚜鍔ㄨ幏鍙栧綋鍓嶇敤鎴蜂俊鎭紝瀹炵幇缁煎悎鏌ヨ
-        // 缁煎悎鏌ヨ锛氬綋鍓嶇敤鎴锋墍鍦ㄦ満鏋勪换鍔� + 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔� + 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
         Long currentUserId = getUserId();
         Long currentDeptId = getDeptId();
         
-        // 濡傛灉鍓嶇娌℃湁浼犻�掕繖浜涘弬鏁帮紝鍒欎娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴蜂俊鎭�
-        if (queryVO.getCreatorId() == null && queryVO.getAssigneeId() == null && queryVO.getDeptId() == null) {
-            queryVO.setDeptId(currentDeptId);
-            queryVO.setCreatorId(currentUserId);
-            queryVO.setAssigneeId(currentUserId);
-        }
+        // APP绔己鍒朵娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴蜂俊鎭繘琛岃繃婊�
+        queryVO.setDeptId(currentDeptId);
+        queryVO.setCreatorId(currentUserId);
+        queryVO.setAssigneeId(currentUserId);
         
         startPage();
         List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
@@ -64,11 +76,11 @@
     }
 
     /**
-     * 瀵煎嚭浠诲姟绠$悊鍒楄〃
+     * 瀵煎嚭浠诲姟绠$悊鍒楄〃锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:export')")
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.EXPORT)
-    @PostMapping("/export")
+    @PostMapping("/admin/export")
     public void export(HttpServletResponse response, TaskQueryVO queryVO) {
         List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
         ExcelUtil<SysTask> util = new ExcelUtil<SysTask>(SysTask.class);
@@ -76,61 +88,119 @@
     }
 
     /**
-     * 鑾峰彇浠诲姟绠$悊璇︾粏淇℃伅
+     * 鑾峰彇浠诲姟璇︾粏淇℃伅锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
-    @GetMapping(value = "/{taskId}")
-    public AjaxResult getInfo(@PathVariable("taskId") Long taskId) {
+    @GetMapping(value = "/admin/{taskId}")
+    public AjaxResult adminGetInfo(@PathVariable("taskId") Long taskId) {
         return success(sysTaskService.getTaskDetail(taskId));
     }
 
     /**
-     * 鏂板浠诲姟绠$悊
+     * 鑾峰彇浠诲姟璇︾粏淇℃伅锛圓PP绔級
+     */
+    @GetMapping(value = "/{taskId}")
+    public AjaxResult appGetInfo(@PathVariable("taskId") Long taskId) {
+        return success(sysTaskService.getTaskDetail(taskId));
+    }
+
+    /**
+     * 鏂板浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:add')")
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody TaskCreateVO createVO) {
+    @PostMapping("/admin")
+    public AjaxResult adminAdd(@RequestBody TaskCreateVO createVO) {
         return toAjax(sysTaskService.insertSysTask(createVO));
     }
 
     /**
-     * 淇敼浠诲姟绠$悊
+     * 鏂板浠诲姟锛圓PP绔級
+     */
+    @Log(title = "浠诲姟鍒涘缓", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult appAdd(@RequestBody TaskCreateVO createVO) {
+        return toAjax(sysTaskService.insertSysTask(createVO));
+    }
+
+    /**
+     * 淇敼浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:edit')")
     @Log(title = "浠诲姟绠$悊", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody TaskUpdateVO updateVO) {
+    @PutMapping("/admin")
+    public AjaxResult adminEdit(@RequestBody TaskUpdateVO updateVO) {
         return toAjax(sysTaskService.updateSysTask(updateVO));
     }
 
     /**
-     * 鍒犻櫎浠诲姟绠$悊
+     * 淇敼浠诲姟锛圓PP绔級
      */
-    @PreAuthorize("@ss.hasPermi('task:general:remove')")
-    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.DELETE)
+    @Log(title = "浠诲姟淇敼", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult appEdit(@RequestBody TaskUpdateVO updateVO) {
+        return toAjax(sysTaskService.updateSysTask(updateVO));
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟锛圓PP绔級
+     */
+    @Log(title = "浠诲姟鍒犻櫎", businessType = BusinessType.DELETE)
     @DeleteMapping("/{taskIds}")
-    public AjaxResult remove(@PathVariable Long[] taskIds) {
+    public AjaxResult appRemove(@PathVariable Long[] taskIds) {
         return toAjax(sysTaskService.deleteSysTaskByTaskIds(taskIds));
     }
 
     /**
-     * 鍒嗛厤浠诲姟
+     * 鍒犻櫎浠诲姟锛堝悗鍙扮鐞嗙锛�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:assign')")
+    @PreAuthorize("@ss.hasPermi('task:general:remove')")
+    @Log(title = "浠诲姟绠$悊", businessType = BusinessType.DELETE)
+    @DeleteMapping("/admin/{taskIds}")
+    public AjaxResult adminRemove(@PathVariable Long[] taskIds) {
+        return toAjax(sysTaskService.deleteSysTaskByTaskIds(taskIds));
+    }
+
+    /**
+     * 鍒嗛厤浠诲姟锛堝悗鍙扮鐞嗙锛�
+     */
+    @PreAuthorize("@ss.hasPermi('task:general:edit')")
     @Log(title = "浠诲姟鍒嗛厤", businessType = BusinessType.UPDATE)
-    @PutMapping("/{taskId}/assign")
-    public AjaxResult assignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
+    @PutMapping("/admin/{taskId}/assign")
+    public AjaxResult adminAssignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
         return toAjax(sysTaskService.assignTask(taskId, request.getAssigneeId(), request.getRemark()));
     }
 
     /**
-     * 鏇存柊浠诲姟鐘舵��
+     * 鍒嗛厤浠诲姟锛圓PP绔級
      */
-    @PreAuthorize("@ss.hasPermi('task:general:status')")
+    @Log(title = "浠诲姟鍒嗛厤", businessType = BusinessType.UPDATE)
+    @PutMapping("/{taskId}/assign")
+    public AjaxResult appAssignTask(@PathVariable Long taskId, @RequestBody AssignTaskRequest request) {
+        return toAjax(sysTaskService.assignTask(taskId, request.getAssigneeId(), request.getRemark()));
+    }
+
+    /**
+     * 鏇存柊浠诲姟鐘舵�侊紙鍚庡彴绠$悊绔級
+     */
+    @PreAuthorize("@ss.hasPermi('task:general:edit')")
+    @Log(title = "浠诲姟鐘舵�佸彉鏇�", businessType = BusinessType.UPDATE)
+    @PutMapping("/admin/{taskId}/status")
+    public AjaxResult adminChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+        TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
+        if (newStatus == null) {
+            return error("鏃犳晥鐨勪换鍔$姸鎬�");
+        }
+        return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+    }
+
+    /**
+     * 鏇存柊浠诲姟鐘舵�侊紙APP绔級
+     * 鏀寔GPS浣嶇疆淇℃伅涓婃姤
+     */
     @Log(title = "浠诲姟鐘舵�佸彉鏇�", businessType = BusinessType.UPDATE)
     @PutMapping("/{taskId}/status")
-    public AjaxResult changeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+    public AjaxResult appChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
         TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
         if (newStatus == null) {
             return error("鏃犳晥鐨勪换鍔$姸鎬�");
@@ -157,9 +227,8 @@
     }
 
     /**
-     * 鏌ヨ浠诲姟缁熻淇℃伅
+     * 鏌ヨ浠诲姟缁熻淇℃伅锛圓PP绔級
      */
-    @PreAuthorize("@ss.hasPermi('task:general:query')")
     @GetMapping("/statistics")
     public AjaxResult getStatistics() {
         TaskStatisticsVO statistics = sysTaskService.getTaskStatistics();
@@ -167,9 +236,18 @@
     }
 
     /**
-     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃
+     * 鏌ヨ浠诲姟缁熻淇℃伅锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @GetMapping("/admin/statistics")
+    public AjaxResult adminGetStatistics() {
+        TaskStatisticsVO statistics = sysTaskService.getTaskStatistics();
+        return success(statistics);
+    }
+
+    /**
+     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃锛圓PP绔級
+     */
     @GetMapping("/overdue")
     public AjaxResult getOverdueTasks() {
         List<SysTask> list = sysTaskService.selectOverdueTasks();
@@ -177,9 +255,18 @@
     }
 
     /**
-     * 鏌ヨ鎴戠殑浠诲姟鍒楄〃
+     * 鏌ヨ瓒呮椂浠诲姟鍒楄〃锛堝悗鍙扮鐞嗙锛�
      */
     @PreAuthorize("@ss.hasPermi('task:general:query')")
+    @GetMapping("/admin/overdue")
+    public AjaxResult adminGetOverdueTasks() {
+        List<SysTask> list = sysTaskService.selectOverdueTasks();
+        return success(list);
+    }
+
+    /**
+     * 鏌ヨ鎴戠殑浠诲姟鍒楄〃锛圓PP绔級
+     */
     @GetMapping("/my")
     public AjaxResult getMyTasks() {
         List<SysTask> list = sysTaskService.selectMyTasks(getUserId());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java
index c5dd2a1..120be7a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskVehicleController.java
@@ -34,7 +34,6 @@
     /**
      * 鏌ヨ浠诲姟鍏宠仈鐨勮溅杈嗗垪琛�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:query')")
     @GetMapping("/list/{taskId}")
     public AjaxResult list(@PathVariable("taskId") Long taskId) {
         List<SysTaskVehicle> list = sysTaskService.getTaskVehicles(taskId);
@@ -44,7 +43,6 @@
     /**
      * 鏌ヨ鍙敤杞﹁締鍒楄〃
      */
-    @PreAuthorize("@ss.hasPermi('task:general:query')")
     @GetMapping("/available")
     public AjaxResult getAvailableVehicles(@RequestParam Long deptId, @RequestParam(required = false) String taskType) {
         List<SysTaskVehicle> list = sysTaskService.getAvailableVehicles(deptId, taskType);
@@ -54,7 +52,6 @@
     /**
      * 鍒嗛厤杞﹁締缁欎换鍔�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:assign')")
     @Log(title = "浠诲姟杞﹁締鍒嗛厤", businessType = BusinessType.INSERT)
     @PostMapping("/assign/{taskId}")
     public AjaxResult assignVehicle(@PathVariable("taskId") Long taskId, @RequestBody AssignVehicleRequest request) {
@@ -73,7 +70,6 @@
     /**
      * 鎵归噺鍒嗛厤杞﹁締缁欎换鍔�
      */
-    @PreAuthorize("@ss.hasPermi('task:general:assign')")
     @Log(title = "浠诲姟杞﹁締鎵归噺鍒嗛厤", businessType = BusinessType.INSERT)
     @PostMapping("/assign-batch/{taskId}")
     public AjaxResult assignVehicles(@PathVariable("taskId") Long taskId, @RequestBody BatchAssignVehicleRequest request) {
@@ -94,7 +90,6 @@
     /**
      * 鍙栨秷浠诲姟杞﹁締鍒嗛厤
      */
-    @PreAuthorize("@ss.hasPermi('task:general:assign')")
     @Log(title = "鍙栨秷浠诲姟杞﹁締鍒嗛厤", businessType = BusinessType.DELETE)
     @DeleteMapping("/{taskId}/{vehicleId}")
     public AjaxResult unassignVehicle(@PathVariable("taskId") Long taskId, @PathVariable("vehicleId") Long vehicleId) {
diff --git a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
index c77b091..389c2fa 100644
--- a/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/HospDataMapper.xml
@@ -30,20 +30,27 @@
             HospIntroducerID, HospIntroducerDate, HospLevel
         FROM HospData
         WHERE 1=1
-        <!-- 鍦板煙杩囨护锛氬HospProvince, HospCity, HospArea杩涜OR鍖归厤 -->
-        <if test="region != null and region != ''">
-            AND (HopsProvince LIKE '%' + #{region} + '%' 
-                 OR HopsCity LIKE '%' + #{region} + '%'
-                 OR HopsArea LIKE '%' + #{region} + '%')
-        </if>
-        <!-- 鍏抽敭璇嶈繃婊わ細瀵瑰涓瓧娈佃繘琛孫R鍖归厤 -->
+        <!-- 鏈� keyword 灏卞彧鐢� keyword锛屼笉鐢� region -->
         <if test="keyword != null and keyword != ''">
-            AND (HopsProvince LIKE '%' + #{keyword} + '%'
-                 OR HopsCity LIKE '%' + #{keyword} + '%'
-                 OR HopsArea LIKE '%' + #{keyword} + '%'
-                 OR HospAddress LIKE '%' + #{keyword} + '%'
-                 OR HospName LIKE '%' + #{keyword} + '%'
-                 OR HospShort LIKE '%' + #{keyword} + '%')
+        AND (
+            HopsProvince LIKE '%' + #{keyword} + '%'
+                OR HopsCity LIKE '%' + #{keyword} + '%'
+                OR HopsArea LIKE '%' + #{keyword} + '%'
+                OR HospAddress LIKE '%' + #{keyword} + '%'
+                OR HospName LIKE '%' + #{keyword} + '%'
+                OR HospShort LIKE '%' + #{keyword} + '%'
+        )
+        </if>
+        <!-- 娌℃湁 keyword 鏃舵墠鐢� region -->
+        <if test="(keyword == null or keyword == '') and (region != null and region != '')">
+        AND (
+            HopsProvince LIKE '%' + #{region} + '%'
+                OR HopsCity LIKE '%' + #{region} + '%'
+                OR HopsArea LIKE '%' + #{region} + '%'
+                OR HospAddress LIKE '%' + #{region} + '%'
+                OR HospName LIKE '%' + #{region} + '%'
+                OR HospShort LIKE '%' + #{region} + '%'
+        )
         </if>
         AND (HospState IS NULL OR HospState = 1)
         ORDER BY HospName
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 6d1d189..aa40711 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -51,8 +51,7 @@
 		<if test="dispatchOrderClass != null and dispatchOrderClass != ''">
 			AND dispatch_order_class = #{dispatchOrderClass}
 		</if>
-		<!-- 鏁版嵁鑼冨洿杩囨护 -->
-		${params.dataScope}
+
 		order by d.parent_id, d.order_num
     </select>
     
diff --git a/ruoyi-ui/src/api/task.js b/ruoyi-ui/src/api/task.js
index de044c9..f269b23 100644
--- a/ruoyi-ui/src/api/task.js
+++ b/ruoyi-ui/src/api/task.js
@@ -1,86 +1,86 @@
 import request from '@/utils/request'
 
-// 鏌ヨ浠诲姟绠$悊鍒楄〃
+// 鏌ヨ浠诲姟绠$悊鍒楄〃 (鍚庡彴绠$悊绔�)
 export function listTask(query) {
   return request({
-    url: '/task/list',
+    url: '/task/admin/list',
     method: 'get',
     params: query
   })
 }
 
-// 鏌ヨ浠诲姟绠$悊璇︾粏
+// 鏌ヨ浠诲姟绠$悊璇︾粏 (鍚庡彴绠$悊绔�)
 export function getTask(taskId) {
   return request({
-    url: '/task/' + taskId,
+    url: '/task/admin/' + taskId,
     method: 'get'
   })
 }
 
-// 鏂板浠诲姟绠$悊
+// 鏂板浠诲姟绠$悊 (鍚庡彴绠$悊绔�)
 export function addTask(data) {
   return request({
-    url: '/task',
+    url: '/task/admin',
     method: 'post',
     data: data
   })
 }
 
-// 淇敼浠诲姟绠$悊
+// 淇敼浠诲姟绠$悊 (鍚庡彴绠$悊绔�)
 export function updateTask(data) {
   return request({
-    url: '/task',
+    url: '/task/admin',
     method: 'put',
     data: data
   })
 }
 
-// 鍒犻櫎浠诲姟绠$悊
+// 鍒犻櫎浠诲姟绠$悊 (鍚庡彴绠$悊绔�)
 export function delTask(taskIds) {
   return request({
-    url: '/task/' + taskIds,
+    url: '/task/admin/' + taskIds,
     method: 'delete'
   })
 }
 
-// 鍒嗛厤浠诲姟
+// 鍒嗛厤浠诲姟 (鍚庡彴绠$悊绔�)
 export function assignTask(taskId, data) {
   return request({
-    url: '/task/' + taskId + '/assign',
+    url: '/task/admin/' + taskId + '/assign',
     method: 'put',
     data: data
   })
 }
 
-// 鏇存柊浠诲姟鐘舵��
+// 鏇存柊浠诲姟鐘舵�� (鍚庡彴绠$悊绔�)
 export function changeTaskStatus(taskId, data) {
   return request({
-    url: '/task/' + taskId + '/status',
+    url: '/task/admin/' + taskId + '/status',
     method: 'put',
     data: data
   })
 }
 
-// 鏌ヨ浠诲姟缁熻淇℃伅
+// 鏌ヨ浠诲姟缁熻淇℃伅 (鍚庡彴绠$悊绔�)
 export function getTaskStatistics() {
   return request({
-    url: '/task/statistics',
+    url: '/task/admin/statistics',
     method: 'get'
   })
 }
 
-// 鏌ヨ瓒呮椂浠诲姟鍒楄〃
+// 鏌ヨ瓒呮椂浠诲姟鍒楄〃 (鍚庡彴绠$悊绔�)
 export function getOverdueTasks() {
   return request({
-    url: '/task/overdue',
+    url: '/task/admin/overdue',
     method: 'get'
   })
 }
 
-// 鏌ヨ鎴戠殑浠诲姟鍒楄〃
+// 鏌ヨ鎴戠殑浠诲姟鍒楄〃 (鍚庡彴绠$悊绔� - 浠呬緵鍙傝��)
 export function getMyTasks() {
   return request({
-    url: '/task/my',
+    url: '/task/app/my',
     method: 'get'
   })
 }
diff --git a/ruoyi-ui/src/views/task/general/detail.vue b/ruoyi-ui/src/views/task/general/detail.vue
index b1b7527..0450def 100644
--- a/ruoyi-ui/src/views/task/general/detail.vue
+++ b/ruoyi-ui/src/views/task/general/detail.vue
@@ -32,45 +32,92 @@
 
       <!-- 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅 -->
       <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" title="鎬ユ晳杞繍淇℃伅" :column="2" border style="margin-top: 20px;">
-        <el-descriptions-item label="鎮h�呭鍚�">{{ taskDetail.emergencyInfo.patientName }}</el-descriptions-item>
-        <el-descriptions-item label="鎮h�呮�у埆">
-          <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.emergencyInfo.patientGender"/>
+        <el-descriptions-item label="鑱旂郴浜�">
+          <span v-if="taskDetail.emergencyInfo.contactPerson">{{ taskDetail.emergencyInfo.contactPerson }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
         </el-descriptions-item>
-        <el-descriptions-item label="鎮h�呭勾榫�">{{ taskDetail.emergencyInfo.patientAge }}</el-descriptions-item>
-        <el-descriptions-item label="鑱旂郴鐢佃瘽">{{ taskDetail.emergencyInfo.contactPhone }}</el-descriptions-item>
-        <el-descriptions-item label="鎺ラ�佸尰闄�" :span="2">{{ taskDetail.emergencyInfo.hospitalName }}</el-descriptions-item>
-        <el-descriptions-item label="灏辫瘖绉戝" :span="2">
-          <dict-tag v-if="taskDetail.emergencyInfo.hospitalDepartment" :options="dict.type.hospital_department" :value="taskDetail.emergencyInfo.hospitalDepartment"/>
+        <el-descriptions-item label="鑱旂郴鐢佃瘽">
+          <span v-if="taskDetail.emergencyInfo.contactPhone">{{ taskDetail.emergencyInfo.contactPhone }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="鎮h�呭鍚�">
+          <span v-if="taskDetail.emergencyInfo.patientName">{{ taskDetail.emergencyInfo.patientName }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="鎮h�呮�у埆">
+          <dict-tag v-if="taskDetail.emergencyInfo.patientGender" :options="dict.type.sys_user_sex" :value="taskDetail.emergencyInfo.patientGender"/>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="韬唤淇℃伅" :span="2">
+          <span v-if="taskDetail.emergencyInfo.patientIdCard">{{ taskDetail.emergencyInfo.patientIdCard }}</span>
           <span v-else style="color: #C0C4CC;">--</span>
         </el-descriptions-item>
         <el-descriptions-item label="鐥呮儏鎻忚堪" :span="2">
           <span v-if="taskDetail.emergencyInfo.illnessDescription">{{ taskDetail.emergencyInfo.illnessDescription }}</span>
           <span v-else style="color: #C0C4CC;">--</span>
         </el-descriptions-item>
-        <el-descriptions-item label="鐗规畩闇�姹�" :span="2">
-          <span v-if="taskDetail.emergencyInfo.specialRequirements">{{ taskDetail.emergencyInfo.specialRequirements }}</span>
+      </el-descriptions>
+
+      <!-- 鏃х郴缁熷悓姝ヤ俊鎭紙浠呮�ユ晳杞繍浠诲姟鏄剧ず锛� -->
+      <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" title="鏃х郴缁熷悓姝ヤ俊鎭�" :column="2" border style="margin-top: 20px;">
+        <el-descriptions-item label="鏈嶅姟鍗曞悓姝ョ姸鎬�">
+          <el-tag v-if="taskDetail.emergencyInfo.syncStatus === 0" type="info" size="small">
+            <i class="el-icon-warning"></i> 鏈悓姝�
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 1" type="warning" size="small">
+            <i class="el-icon-loading"></i> 鍚屾涓�
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 2" type="success" size="small">
+            <i class="el-icon-success"></i> 鍚屾鎴愬姛
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.syncStatus === 3" type="danger" size="small">
+            <i class="el-icon-error"></i> 鍚屾澶辫触
+          </el-tag>
           <span v-else style="color: #C0C4CC;">--</span>
         </el-descriptions-item>
-        <el-descriptions-item label="鏄惁闇�瑕佹媴鏋�">
-          <el-tag v-if="taskDetail.emergencyInfo.needsStretcher == 1" type="success" size="small">鏄�</el-tag>
-          <el-tag v-else type="info" size="small">鍚�</el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鏄惁闇�瑕佽疆妞�">
-          <el-tag v-if="taskDetail.emergencyInfo.needsWheelchair == 1" type="success" size="small">鏄�</el-tag>
-          <el-tag v-else type="info" size="small">鍚�</el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="鏄惁闇�瑕佹哀姘�">
-          <el-tag v-if="taskDetail.emergencyInfo.needsOxygen == 1" type="success" size="small">鏄�</el-tag>
-          <el-tag v-else type="info" size="small">鍚�</el-tag>
-        </el-descriptions-item>
-        <el-descriptions-item label="绱ф�ョ▼搴�">
-          <el-tag v-if="taskDetail.emergencyInfo.urgencyLevel === 'HIGH'" type="danger" size="small">绱ф��</el-tag>
-          <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'MEDIUM'" type="warning" size="small">涓�鑸�</el-tag>
-          <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'LOW'" type="info" size="small">涓嶆��</el-tag>
+        <el-descriptions-item label="鏈嶅姟鍗曞彿">
+          <span v-if="taskDetail.emergencyInfo.legacyServiceOrdId">
+            <el-tag type="primary" size="small">{{ taskDetail.emergencyInfo.legacyServiceOrdId }}</el-tag>
+          </span>
           <span v-else style="color: #C0C4CC;">--</span>
         </el-descriptions-item>
-        <el-descriptions-item label="闄悓浜烘暟">{{ taskDetail.emergencyInfo.companionCount || 0 }} 浜�</el-descriptions-item>
-        <el-descriptions-item label="棰勪及璐圭敤">{{ taskDetail.emergencyInfo.estimatedCost || '--' }} 鍏�</el-descriptions-item>
+        <el-descriptions-item label="鏈嶅姟鍗曞悓姝ユ椂闂�">
+          <span v-if="taskDetail.emergencyInfo.syncTime">{{ parseTime(taskDetail.emergencyInfo.syncTime) }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="鏈嶅姟鍗曞悓姝ラ敊璇�" :span="1">
+          <span v-if="taskDetail.emergencyInfo.syncErrorMsg" style="color: #F56C6C;">{{ taskDetail.emergencyInfo.syncErrorMsg }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="璋冨害鍗曞悓姝ョ姸鎬�">
+          <el-tag v-if="taskDetail.emergencyInfo.dispatchSyncStatus === 0" type="info" size="small">
+            <i class="el-icon-warning"></i> 鏈悓姝�
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 1" type="warning" size="small">
+            <i class="el-icon-loading"></i> 鍚屾涓�
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 2" type="success" size="small">
+            <i class="el-icon-success"></i> 鍚屾鎴愬姛
+          </el-tag>
+          <el-tag v-else-if="taskDetail.emergencyInfo.dispatchSyncStatus === 3" type="danger" size="small">
+            <i class="el-icon-error"></i> 鍚屾澶辫触
+          </el-tag>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="璋冨害鍗曞彿">
+          <span v-if="taskDetail.emergencyInfo.legacyDispatchOrdId">
+            <el-tag type="primary" size="small">{{ taskDetail.emergencyInfo.legacyDispatchOrdId }}</el-tag>
+          </span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="璋冨害鍗曞悓姝ユ椂闂�">
+          <span v-if="taskDetail.emergencyInfo.dispatchSyncTime">{{ parseTime(taskDetail.emergencyInfo.dispatchSyncTime) }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="璋冨害鍗曞悓姝ラ敊璇�" :span="1">
+          <span v-if="taskDetail.emergencyInfo.dispatchSyncErrorMsg" style="color: #F56C6C;">{{ taskDetail.emergencyInfo.dispatchSyncErrorMsg }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
+        </el-descriptions-item>
       </el-descriptions>
 
       <!-- 绂忕杞︿换鍔℃墿灞曚俊鎭� -->
diff --git a/ruoyi-ui/src/views/task/general/index.vue b/ruoyi-ui/src/views/task/general/index.vue
index 8988020..44fcef9 100644
--- a/ruoyi-ui/src/views/task/general/index.vue
+++ b/ruoyi-ui/src/views/task/general/index.vue
@@ -94,12 +94,13 @@
 
     <el-table v-loading="loading" :data="taskList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="浠诲姟缂栧彿" align="center" prop="taskCode">
+      <el-table-column label="浠诲姟缂栧彿" align="center" prop="taskCode" min-width="180">
         <template slot-scope="scope">
           <el-button
             type="text"
             @click="handleView(scope.row)"
             v-hasPermi="['task:general:query']"
+            style="font-family: 'Courier New', monospace; font-size: 13px;"
           >{{ scope.row.taskCode }}</el-button>
         </template>
       </el-table-column>
@@ -108,6 +109,24 @@
           <dict-tag :options="dict.type.sys_task_type" :value="scope.row.taskType"/>
           <el-tag v-if="scope.row.taskType === 'EMERGENCY_TRANSFER'" type="danger" size="mini" style="margin-left: 5px;">
             <i class="el-icon-warning"></i>
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍚屾鐘舵��" align="center" prop="syncStatus" width="120" v-if="hasEmergencyTask">
+        <template slot-scope="scope">
+          <span v-if="scope.row.taskType !== 'EMERGENCY_TRANSFER'" style="color: #C0C4CC;">--</span>
+          <el-tag v-else-if="!scope.row.emergencyInfo" type="info" size="mini">--</el-tag>
+          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 0" type="info" size="mini">
+            <i class="el-icon-warning"></i> 鏈悓姝�
+          </el-tag>
+          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 1" type="warning" size="mini">
+            <i class="el-icon-loading"></i> 鍚屾涓�
+          </el-tag>
+          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 2" type="success" size="mini">
+            <i class="el-icon-success"></i> 宸插悓姝�
+          </el-tag>
+          <el-tag v-else-if="scope.row.emergencyInfo.syncStatus === 3" type="danger" size="mini">
+            <i class="el-icon-error"></i> 鍚屾澶辫触
           </el-tag>
         </template>
       </el-table-column>
@@ -126,14 +145,11 @@
       </el-table-column>
       <el-table-column label="璁″垝寮�濮嬫椂闂�" align="center" prop="plannedStartTime" width="180">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.plannedStartTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+          <span v-if="scope.row.plannedStartTime">{{ parseTime(scope.row.plannedStartTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+          <span v-else style="color: #C0C4CC;">--</span>
         </template>
       </el-table-column>
-      <el-table-column label="璁″垝缁撴潫鏃堕棿" align="center" prop="plannedEndTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.plannedEndTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
-        </template>
-      </el-table-column>
+     
       <el-table-column label="鍒涘缓浜�" align="center" prop="creatorName" />
       <el-table-column label="鎵ц浜�" align="center" prop="assigneeName" />
       <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" width="180">
@@ -400,6 +416,8 @@
       total: 0,
       // 浠诲姟绠$悊琛ㄦ牸鏁版嵁
       taskList: [],
+      // 鏄惁鏈夋�ユ晳杞繍浠诲姟锛堢敤浜庢帶鍒跺悓姝ョ姸鎬佸垪鏄剧ず锛�
+      hasEmergencyTask: false,
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -472,6 +490,8 @@
       listTask(this.queryParams).then(response => {
         this.taskList = response.rows;
         this.total = response.total;
+        // 妫�鏌ユ槸鍚︽湁鎬ユ晳杞繍浠诲姟锛岀敤浜庢帶鍒跺悓姝ョ姸鎬佺浉鍏冲垪鐨勬樉绀�
+        this.hasEmergencyTask = this.taskList.some(task => task.taskType === 'EMERGENCY_TRANSFER');
         this.loading = false;
       });
     },
diff --git "a/ruoyi-ui/src/views/task/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\347\212\266\346\200\201\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/ruoyi-ui/src/views/task/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\347\212\266\346\200\201\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..2eab9dc
--- /dev/null
+++ "b/ruoyi-ui/src/views/task/\346\227\247\347\263\273\347\273\237\345\220\214\346\255\245\347\212\266\346\200\201\346\230\276\347\244\272\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,164 @@
+# 鏃х郴缁熷悓姝ョ姸鎬佹樉绀哄姛鑳借鏄�
+
+## 涓�銆佸姛鑳芥杩�
+
+鍦� ruoyi-ui 椤圭洰鐨勪换鍔″垪琛ㄥ拰浠诲姟璇︽儏椤甸潰涓紝鏂板浜嗘棫绯荤粺鍚屾鐘舵�佸強鐩稿叧鍗曞彿鐨勬樉绀哄姛鑳斤紝鏂逛究绠$悊鍛樺疄鏃舵煡鐪嬫�ユ晳杞繍浠诲姟涓庢棫绯荤粺鐨勫悓姝ユ儏鍐点��
+
+## 浜屻�佹秹鍙婃枃浠�
+
+### 1. 浠诲姟鍒楄〃椤甸潰
+**鏂囦欢璺緞**: `ruoyi-ui/src/views/task/general/index.vue`
+
+**淇敼鍐呭**:
+- 鏂板 `hasEmergencyTask` 鏁版嵁灞炴�э紝鐢ㄤ簬鍒ゆ柇鍒楄〃涓槸鍚﹀寘鍚�ユ晳杞繍浠诲姟
+- 鏂板 **鍚屾鐘舵��** 鍒楋紝鏄剧ず鏈嶅姟鍗曞悓姝ョ姸鎬侊紙鏈悓姝ャ�佸悓姝ヤ腑銆佸凡鍚屾銆佸悓姝ュけ璐ワ級
+- 鏂板 **鏈嶅姟鍗曞彿** 鍒楋紝鏄剧ず鏃х郴缁熻繑鍥炵殑 ServiceOrdID
+- 鏂板 **璋冨害鍗曞彿** 鍒楋紝鏄剧ず鏃х郴缁熻繑鍥炵殑 DispatchOrdID
+- 杩欎簺鍒椾粎鍦ㄥ垪琛ㄤ腑瀛樺湪鎬ユ晳杞繍浠诲姟鏃舵樉绀猴紙`v-if="hasEmergencyTask"`锛�
+
+### 2. 浠诲姟璇︽儏椤甸潰
+**鏂囦欢璺緞**: `ruoyi-ui/src/views/task/general/detail.vue`
+
+**淇敼鍐呭**:
+- 鏂板 **鏃х郴缁熷悓姝ヤ俊鎭�** 鎻忚堪鍒楄〃鍖哄煙
+- 鏄剧ず鏈嶅姟鍗曞悓姝ョ姸鎬併�佹湇鍔″崟鍙枫�佸悓姝ユ椂闂淬�佸悓姝ラ敊璇俊鎭�
+- 鏄剧ず璋冨害鍗曞悓姝ョ姸鎬併�佽皟搴﹀崟鍙枫�佸悓姝ユ椂闂淬�佸悓姝ラ敊璇俊鎭�
+- 璇ュ尯鍩熶粎鍦ㄦ�ユ晳杞繍浠诲姟璇︽儏椤垫樉绀�
+
+## 涓夈�佸悓姝ョ姸鎬佽鏄�
+
+### 鍚屾鐘舵�佸�煎強鍚箟
+
+| 鐘舵�佸�� | 鍚箟 | 鍥炬爣棰滆壊 | 鏄剧ず鏂囨湰 |
+|--------|------|----------|----------|
+| 0 | 鏈悓姝� | 鐏拌壊锛坕nfo锛� | <i class="el-icon-warning"></i> 鏈悓姝� |
+| 1 | 鍚屾涓� | 姗欒壊锛坵arning锛� | <i class="el-icon-loading"></i> 鍚屾涓� |
+| 2 | 鍚屾鎴愬姛 | 缁胯壊锛坰uccess锛� | <i class="el-icon-success"></i> 宸插悓姝�/鍚屾鎴愬姛 |
+| 3 | 鍚屾澶辫触 | 绾㈣壊锛坉anger锛� | <i class="el-icon-error"></i> 鍚屾澶辫触 |
+
+### 鏈嶅姟鍗曞悓姝ヤ笌璋冨害鍗曞悓姝�
+
+**鏈嶅姟鍗曞悓姝�** (`syncStatus`):
+- 瀵瑰簲鏃х郴缁� `admin_save_19.gds` 鎺ュ彛
+- 鍚屾鎴愬姛鍚庤繑鍥� `ServiceOrdID`锛屽瓨鍌ㄥ湪 `legacy_service_ord_id` 瀛楁
+- 鐢� `LegacySystemSyncTask.syncPendingTasks()` 瀹氭椂浠诲姟鎵ц
+
+**璋冨害鍗曞悓姝�** (`dispatchSyncStatus`):
+- 瀵瑰簲鏃х郴缁� `admin_save_24.asp` 鎺ュ彛
+- 鍚屾鎴愬姛鍚庤繑鍥� `DispatchOrdID`锛屽瓨鍌ㄥ湪 `legacy_dispatch_ord_id` 瀛楁
+- 鐢� `LegacySystemSyncTask.syncPendingDispatchOrders()` 瀹氭椂浠诲姟鎵ц
+- 渚濊禆鏈嶅姟鍗曞悓姝ュ畬鎴愬悗鎵嶈兘鎵ц
+
+## 鍥涖�佹暟鎹潵婧�
+
+### 鍚庣瀹炰綋绫诲瓧娈�
+
+**SysTask 瀹炰綋** (`sys_task` 琛�):
+- `legacySynced`: 鏃х郴缁熷悓姝ユ爣璁帮紙0-鏈悓姝ワ紝1-宸插悓姝ワ級
+
+**SysTaskEmergency 瀹炰綋** (`sys_task_emergency` 琛�):
+
+鏈嶅姟鍗曠浉鍏�:
+- `legacyServiceOrdId`: 鏃х郴缁熸湇鍔″崟ID
+- `syncStatus`: 鏈嶅姟鍗曞悓姝ョ姸鎬�
+- `syncTime`: 鏈嶅姟鍗曞悓姝ユ椂闂�
+- `syncErrorMsg`: 鏈嶅姟鍗曞悓姝ラ敊璇俊鎭�
+
+璋冨害鍗曠浉鍏�:
+- `legacyDispatchOrdId`: 鏃х郴缁熻皟搴﹀崟ID
+- `dispatchSyncStatus`: 璋冨害鍗曞悓姝ョ姸鎬�
+- `dispatchSyncTime`: 璋冨害鍗曞悓姝ユ椂闂�
+- `dispatchSyncErrorMsg`: 璋冨害鍗曞悓姝ラ敊璇俊鎭�
+
+### 鍓嶇鏁版嵁璁块棶璺緞
+
+鍦ㄤ换鍔″垪琛ㄤ腑:
+```javascript
+// 鍚屾鐘舵��
+scope.row.emergencyInfo.syncStatus
+scope.row.emergencyInfo.dispatchSyncStatus
+
+// 鍗曞彿
+scope.row.emergencyInfo.legacyServiceOrdId
+scope.row.emergencyInfo.legacyDispatchOrdId
+```
+
+鍦ㄤ换鍔¤鎯呬腑:
+```javascript
+// 鏈嶅姟鍗曞悓姝ヤ俊鎭�
+taskDetail.emergencyInfo.syncStatus
+taskDetail.emergencyInfo.legacyServiceOrdId
+taskDetail.emergencyInfo.syncTime
+taskDetail.emergencyInfo.syncErrorMsg
+
+// 璋冨害鍗曞悓姝ヤ俊鎭�
+taskDetail.emergencyInfo.dispatchSyncStatus
+taskDetail.emergencyInfo.legacyDispatchOrdId
+taskDetail.emergencyInfo.dispatchSyncTime
+taskDetail.emergencyInfo.dispatchSyncErrorMsg
+```
+
+## 浜斻�佹樉绀洪�昏緫
+
+### 浠诲姟鍒楄〃鏄剧ず瑙勫垯
+
+1. **鍚屾鐘舵�佸垪銆佹湇鍔″崟鍙峰垪銆佽皟搴﹀崟鍙峰垪**浠呭湪鍒楄〃涓瓨鍦ㄦ�ユ晳杞繍浠诲姟鏃舵樉绀�
+2. 闈炴�ユ晳杞繍浠诲姟鍦ㄨ繖浜涘垪涓樉绀� `--`
+3. 鎬ユ晳杞繍浠诲姟鏍规嵁 `emergencyInfo` 瀛楁鍒ゆ柇:
+   - 濡傛灉 `emergencyInfo` 涓虹┖锛屾樉绀� `--`
+   - 濡傛灉 `emergencyInfo` 瀛樺湪锛屾牴鎹搴斿瓧娈垫樉绀哄叿浣撳唴瀹�
+
+### 浠诲姟璇︽儏鏄剧ず瑙勫垯
+
+1. **鏃х郴缁熷悓姝ヤ俊鎭�**鍖哄煙浠呭湪鎬ユ晳杞繍浠诲姟璇︽儏椤垫樉绀�
+2. 鏉′欢: `taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo`
+3. 鎵�鏈夊瓧娈典负绌烘椂鏄剧ず `--`
+4. 閿欒淇℃伅浠ョ孩鑹叉枃鏈樉绀�
+
+## 鍏�佷娇鐢ㄥ満鏅�
+
+### 1. 绠$悊鍛樼洃鎺у悓姝ョ姸鎬�
+绠$悊鍛樺彲浠ュ湪浠诲姟鍒楄〃涓揩閫熸煡鐪嬪摢浜涙�ユ晳杞繍浠诲姟宸插畬鎴愪笌鏃х郴缁熺殑鍚屾锛屽摢浜涘悓姝ュけ璐ラ渶瑕佸鐞嗐��
+
+### 2. 闂鎺掓煡
+褰撳悓姝ュけ璐ユ椂锛屽彲浠ュ湪浠诲姟璇︽儏椤垫煡鐪嬭缁嗙殑閿欒淇℃伅锛屽府鍔╂妧鏈汉鍛樺畾浣嶉棶棰樸��
+
+### 3. 鏁版嵁杩芥函
+閫氳繃鏈嶅姟鍗曞彿鍜岃皟搴﹀崟鍙凤紝鍙互鍦ㄦ棫绯荤粺涓煡璇㈠搴旂殑鍗曟嵁锛屽疄鐜版柊鏃х郴缁熸暟鎹殑鍙屽悜杩芥函銆�
+
+## 涓冦�佹敞鎰忎簨椤�
+
+1. **鏉冮檺鎺у埗**: 椤甸潰鏄剧ず閬靛惊鍘熸湁鐨勬潈闄愭帶鍒惰鍒�
+2. **鎬ц兘鑰冭檻**: 鍒楄〃鏌ヨ鏃堕渶瑕佸叧鑱� `sys_task_emergency` 琛紝纭繚 Mapper XML 涓凡姝g‘閰嶇疆鍏宠仈鏌ヨ
+3. **闈炴�ユ晳浠诲姟**: 鍏朵粬绫诲瀷浠诲姟锛堝绂忕杞︺�佹櫘閫氫换鍔★級涓嶆樉绀哄悓姝ヤ俊鎭�
+4. **瀹氭椂浠诲姟**: 鍚屾鐘舵�佺敱鍚庡彴瀹氭椂浠诲姟鏇存柊锛屽墠绔彧璐熻矗灞曠ず
+
+## 鍏�佸悗缁紭鍖栧缓璁�
+
+1. **鎵嬪姩閲嶈瘯鍔熻兘**: 鍦ㄨ鎯呴〉娣诲姞"閲嶆柊鍚屾"鎸夐挳锛屽厑璁哥鐞嗗憳鎵嬪姩瑙﹀彂鍚屾
+2. **鍚屾鏃ュ織**: 璁板綍姣忔鍚屾鐨勮缁嗘棩蹇楋紝鏂逛究闂杩芥函
+3. **娑堟伅閫氱煡**: 鍚屾澶辫触鏃堕�氳繃绯荤粺娑堟伅鎴栭偖浠堕�氱煡鐩稿叧浜哄憳
+4. **鎵归噺鍚屾**: 鍦ㄥ垪琛ㄩ〉鎻愪緵鎵归噺閲嶆柊鍚屾鍔熻兘
+
+## 涔濄�佺浉鍏冲畾鏃朵换鍔�
+
+### LegacySystemSyncTask
+
+**Cron 琛ㄨ揪寮�**:
+- 鏈嶅姟鍗曞悓姝�: `0 */10 * * * ?` (姣�10鍒嗛挓鎵ц涓�娆�)
+- 璋冨害鍗曞悓姝�: `0 5,15,25,35,45,55 * * * ?` (姣忓皬鏃剁殑5銆�15銆�25銆�35銆�45銆�55鍒嗘墽琛�)
+
+**閰嶇疆浣嶇疆**: `ruoyi-quartz` 妯″潡
+
+**浠诲姟閫昏緫**:
+1. 鏌ヨ鏈悓姝ユ垨鍚屾澶辫触鐨勬�ユ晳杞繍浠诲姟
+2. 璋冪敤鏃х郴缁� ASP 鎺ュ彛
+3. 鏇存柊鍚屾鐘舵�佸拰鍗曞彿
+4. 璁板綍鍚屾鏃堕棿鍜岄敊璇俊鎭�
+
+---
+
+**鏂囨。鐗堟湰**: v1.0  
+**鍒涘缓鏃ユ湡**: 2025-01-XX  
+**鏈�鍚庢洿鏂�**: 2025-01-XX  
+**缁存姢浜哄憳**: 绯荤粺绠$悊鍛�
diff --git "a/\344\273\273\345\212\241\346\216\245\345\217\243\346\213\206\345\210\206\350\257\264\346\230\216.md" "b/\344\273\273\345\212\241\346\216\245\345\217\243\346\213\206\345\210\206\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..c196379
--- /dev/null
+++ "b/\344\273\273\345\212\241\346\216\245\345\217\243\346\213\206\345\210\206\350\257\264\346\230\216.md"
@@ -0,0 +1,422 @@
+# 浠诲姟鎺ュ彛鎷嗗垎璇存槑鏂囨。
+
+## 涓�銆佷慨鏀硅儗鏅�
+
+鍘熸湁鐨� `/task/list` 绛夋帴鍙e悓鏃惰 APP 绔拰鍚庡彴绠$悊绔娇鐢紝瀵艰嚧浠ヤ笅闂锛�
+1. **鏉冮檺娣蜂贡**锛氬悗鍙扮鐞嗗憳鏃犳硶鏌ョ湅鎵�鏈変换鍔★紝鍙兘鐪嬪埌褰撳墠鐢ㄦ埛鐩稿叧鐨勪换鍔�
+2. **涓氬姟閫昏緫鍐茬獊**锛欰PP 绔渶瑕佽繃婊ょ敤鎴锋暟鎹紝鍚庡彴闇�瑕佹煡鐪嬪叏閮ㄦ暟鎹�
+3. **瀹夊叏闅愭偅**锛欰PP 绔拰绠$悊绔叡鐢ㄦ帴鍙o紝鏉冮檺鎺у埗鍥伴毦
+
+## 浜屻�佽В鍐虫柟妗�
+
+**淇濈暀鍘熸湁 APP 绔帴鍙�**锛屽悓鏃舵柊澧炲悗鍙扮鐞嗙鐙珛鎺ュ彛锛�
+- **APP 绔帴鍙�**锛氫繚鎸佸師鏈夎矾寰� `/task/*`锛屾棤鏉冮檺娉ㄨВ锛岃嚜鍔ㄨ繃婊ゅ綋鍓嶇敤鎴锋暟鎹�
+- **鍚庡彴绠$悊绔帴鍙�**锛氭柊澧炶矾寰勫墠缂� `/task/admin/*`锛屽甫鏉冮檺娉ㄨВ锛岀鐞嗗憳鍙煡鐪嬫墍鏈夋暟鎹�
+
+## 涓夈�佹秹鍙婃枃浠�
+
+### 1. 鍚庣 Controller
+**鏂囦欢璺緞**: `ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java`
+
+### 2. APP 绔� API
+**鏂囦欢璺緞**: `app/api/task.js`
+
+### 3. 鍚庡彴绠$悊绔� API
+**鏂囦欢璺緞**: `ruoyi-ui/src/api/task.js`
+
+## 鍥涖�佹帴鍙e鐓ц〃
+
+### 4.1 浠诲姟鍒楄〃鎺ュ彛
+
+| 鍔熻兘 | APP 绔� | 鍚庡彴绠$悊绔� | 璇存槑 |
+|------|--------|-----------|------|
+| 鏌ヨ浠诲姟鍒楄〃 | `GET /task/list` | `GET /task/admin/list` | APP绔繃婊ゅ綋鍓嶇敤鎴凤紝鍚庡彴鍙煡鐪嬪叏閮� |
+| 鏌ヨ浠诲姟璇︽儏 | `GET /task/{taskId}` | `GET /task/admin/{taskId}` | 鑾峰彇鍗曚釜浠诲姟璇︽儏 |
+| 鏂板浠诲姟 | `POST /task` | `POST /task/admin` | 鍒涘缓鏂颁换鍔� |
+| 淇敼浠诲姟 | `PUT /task` | `PUT /task/admin` | 鏇存柊浠诲姟淇℃伅 |
+| 鍒犻櫎浠诲姟 | `DELETE /task/{taskIds}` | `DELETE /task/admin/{taskIds}` | 鍒犻櫎浠诲姟 |
+
+### 4.2 浠诲姟鎿嶄綔鎺ュ彛
+
+| 鍔熻兘 | APP 绔� | 鍚庡彴绠$悊绔� | 璇存槑 |
+|------|--------|-----------|------|
+| 鍒嗛厤浠诲姟 | `PUT /task/{taskId}/assign` | `PUT /task/admin/{taskId}/assign` | 鍒嗛厤鎵ц浜� |
+| 鏇存柊鐘舵�� | `PUT /task/{taskId}/status` | `PUT /task/admin/{taskId}/status` | APP绔敮鎸丟PS浣嶇疆 |
+| 浠诲姟缁熻 | `GET /task/statistics` | `GET /task/admin/statistics` | 缁熻淇℃伅 |
+| 瓒呮椂浠诲姟 | `GET /task/overdue` | `GET /task/admin/overdue` | 瓒呮椂浠诲姟鍒楄〃 |
+| 鎴戠殑浠诲姟 | `GET /task/my` | - | 浠匒PP绔娇鐢� |
+
+### 4.3 瀵煎嚭鎺ュ彛
+
+| 鍔熻兘 | 鍚庡彴绠$悊绔� | 璇存槑 |
+|------|-----------|------|
+| 瀵煎嚭浠诲姟 | `POST /task/admin/export` | 浠呭悗鍙扮鐞嗙鏀寔 |
+| 瀵煎嚭浠诲姟锛堝吋瀹癸級 | `POST /task/export` | 鍏煎鏃ф帴鍙� |
+
+## 浜斻�佹牳蹇冨樊寮傝鏄�
+
+### 5.1 鍚庡彴绠$悊绔帴鍙g壒鐐�
+
+```java
+/**
+ * 鏌ヨ浠诲姟绠$悊鍒楄〃锛堝悗鍙扮鐞嗙锛�
+ * 绠$悊鍛樻潈闄愶紝鍙互鏌ョ湅鎵�鏈変换鍔�
+ */
+@PreAuthorize("@ss.hasPermi('task:task:list')")
+@GetMapping("/admin/list")
+public TableDataInfo adminList(TaskQueryVO queryVO) {
+    startPage();
+    List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+    return getDataTable(list);
+}
+```
+
+**鐗圭偣**锛�
+- 鉁� 甯� `@PreAuthorize` 鏉冮檺娉ㄨВ
+- 鉁� 鐩存帴浣跨敤鍓嶇浼犻�掔殑鏌ヨ鏉′欢
+- 鉁� 绠$悊鍛樺彲浠ユ煡鐪嬫墍鏈変换鍔�
+- 鉁� 鏀寔鎸夐儴闂ㄣ�佸垱寤轰汉銆佹墽琛屼汉绛夋潯浠惰繃婊�
+
+### 5.2 APP 绔帴鍙g壒鐐�
+
+```java
+/**
+ * 鏌ヨ浠诲姟鍒楄〃锛圓PP绔級
+ * 浠呮樉绀哄綋鍓嶇敤鎴风浉鍏崇殑浠诲姟锛�
+ * 1. 褰撳墠鐢ㄦ埛鎵�鍦ㄦ満鏋勭殑浠诲姟
+ * 2. 褰撳墠鐢ㄦ埛鍒涘缓鐨勪换鍔�
+ * 3. 鍒嗛厤缁欏綋鍓嶇敤鎴风殑浠诲姟
+ */
+@GetMapping("/app/list")
+public TableDataInfo appList(TaskQueryVO queryVO) {
+    // 鍦ㄥ悗绔嚜鍔ㄨ幏鍙栧綋鍓嶇敤鎴蜂俊鎭紝瀹炵幇缁煎悎鏌ヨ
+    Long currentUserId = getUserId();
+    Long currentDeptId = getDeptId();
+    
+    // APP绔己鍒朵娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴蜂俊鎭繘琛岃繃婊�
+    queryVO.setDeptId(currentDeptId);
+    queryVO.setCreatorId(currentUserId);
+    queryVO.setAssigneeId(currentUserId);
+    
+    startPage();
+    List<SysTask> list = sysTaskService.selectSysTaskList(queryVO);
+    return getDataTable(list);
+}
+```
+
+**鐗圭偣**锛�
+- 鉁� 鏃犳潈闄愭敞瑙o紙宸插湪 `permission.js` 涓厤缃櫧鍚嶅崟锛�
+- 鉁� 寮哄埗浣跨敤褰撳墠鐧诲綍鐢ㄦ埛淇℃伅杩囨护
+- 鉁� 鑷姩闄愬埗鏁版嵁鑼冨洿锛屼繚璇佹暟鎹畨鍏�
+- 鉁� 鐢ㄦ埛鍙兘鐪嬪埌鑷繁鐩稿叧鐨勪换鍔�
+
+### 5.3 鐘舵�佹洿鏂版帴鍙e樊寮�
+
+**APP 绔�**锛氭敮鎸� GPS 浣嶇疆淇℃伅涓婃姤
+```java
+@PutMapping("/app/{taskId}/status")
+public AjaxResult appChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+    // ... 鐪佺暐鐘舵�佹牎楠�
+    
+    // 濡傛灉鍖呭惈GPS浣嶇疆淇℃伅锛屼娇鐢ㄥ甫浣嶇疆鐨勬柟娉�
+    if (request.getLatitude() != null && request.getLongitude() != null) {
+        SysTaskLog locationLog = new SysTaskLog();
+        locationLog.setLatitude(request.getLatitude());
+        locationLog.setLongitude(request.getLongitude());
+        // ... 璁剧疆鍏朵粬浣嶇疆淇℃伅
+        return toAjax(sysTaskService.changeTaskStatusWithLocation(taskId, newStatus, request.getRemark(), locationLog));
+    }
+    
+    return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+}
+```
+
+**鍚庡彴绠$悊绔�**锛氫粎鏀寔鍩烘湰鐘舵�佸彉鏇�
+```java
+@PreAuthorize("@ss.hasPermi('task:task:edit')")
+@PutMapping("/admin/{taskId}/status")
+public AjaxResult adminChangeTaskStatus(@PathVariable Long taskId, @RequestBody ChangeStatusRequest request) {
+    TaskStatus newStatus = TaskStatus.getByCode(request.getTaskStatus());
+    if (newStatus == null) {
+        return error("鏃犳晥鐨勪换鍔$姸鎬�");
+    }
+    return toAjax(sysTaskService.changeTaskStatus(taskId, newStatus, request.getRemark()));
+}
+```
+
+## 鍏�佸墠绔皟鐢ㄧず渚�
+
+### 6.1 APP 绔皟鐢�
+
+```javascript
+// app/api/task.js
+import request from '@/utils/request'
+
+// 鏌ヨ浠诲姟鍒楄〃锛圓PP绔級
+export function listTask(query) {
+  return request({
+    url: '/task/app/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏇存柊浠诲姟鐘舵�侊紙APP绔紝鏀寔GPS锛�
+export function changeTaskStatus(taskId, data) {
+  return request({
+    url: '/task/app/' + taskId + '/status',
+    method: 'put',
+    data: data  // 鍙寘鍚� latitude, longitude 绛塆PS淇℃伅
+  })
+}
+```
+
+**浣跨敤绀轰緥**锛�
+```javascript
+// 鍦� APP 椤甸潰涓皟鐢�
+import { listTask, changeTaskStatus } from '@/api/task'
+
+// 鏌ヨ浠诲姟鍒楄〃
+listTask({ taskStatus: 'PENDING' }).then(response => {
+  // 鑷姩鍙繑鍥炲綋鍓嶇敤鎴风浉鍏崇殑浠诲姟
+  this.taskList = response.rows
+})
+
+// 鏇存柊浠诲姟鐘舵�佸苟涓婃姤GPS浣嶇疆
+changeTaskStatus(taskId, {
+  taskStatus: 'IN_PROGRESS',
+  remark: '宸插埌杈剧幇鍦�',
+  latitude: 23.1291,
+  longitude: 113.2644,
+  locationAddress: '骞垮窞甯傚ぉ娌冲尯'
+}).then(response => {
+  this.$modal.msgSuccess('鐘舵�佹洿鏂版垚鍔�')
+})
+```
+
+### 6.2 鍚庡彴绠$悊绔皟鐢�
+
+```javascript
+// ruoyi-ui/src/api/task.js
+import request from '@/utils/request'
+
+// 鏌ヨ浠诲姟鍒楄〃锛堝悗鍙扮鐞嗙锛�
+export function listTask(query) {
+  return request({
+    url: '/task/admin/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏇存柊浠诲姟鐘舵�侊紙鍚庡彴绠$悊绔級
+export function changeTaskStatus(taskId, data) {
+  return request({
+    url: '/task/admin/' + taskId + '/status',
+    method: 'put',
+    data: data
+  })
+}
+```
+
+**浣跨敤绀轰緥**锛�
+```javascript
+// 鍦ㄥ悗鍙扮鐞嗛〉闈腑璋冪敤
+import { listTask, changeTaskStatus } from '@/api/task'
+
+// 鏌ヨ浠诲姟鍒楄〃锛堢鐞嗗憳鍙煡鐪嬫墍鏈変换鍔★級
+listTask({
+  deptId: 101,  // 鍙寚瀹氶儴闂�
+  taskStatus: 'PENDING'
+}).then(response => {
+  // 杩斿洖鎵�鏈夌鍚堟潯浠剁殑浠诲姟
+  this.taskList = response.rows
+})
+
+// 鏇存柊浠诲姟鐘舵��
+changeTaskStatus(taskId, {
+  taskStatus: 'COMPLETED',
+  remark: '浠诲姟宸插畬鎴�'
+}).then(response => {
+  this.$modal.msgSuccess('鐘舵�佹洿鏂版垚鍔�')
+})
+```
+
+## 涓冦�佹潈闄愰厤缃�
+
+### 7.1 鍚庡彴绠$悊绔潈闄�
+
+鍦� `ruoyi-ui/src/views/task/general/index.vue` 涓渶瑕侀厤缃潈闄愶細
+
+```javascript
+// 闇�瑕佺殑鏉冮檺鏍囪瘑
+const permissions = [
+  'task:task:list',    // 鏌ヨ浠诲姟鍒楄〃
+  'task:task:query',   // 鏌ヨ浠诲姟璇︽儏
+  'task:task:add',     // 鏂板浠诲姟
+  'task:task:edit',    // 淇敼浠诲姟
+  'task:task:remove',  // 鍒犻櫎浠诲姟
+  'task:task:export'   // 瀵煎嚭浠诲姟
+]
+```
+
+### 7.2 APP 绔潈闄愰厤缃�
+
+鍦� `app/permission.js` 涓厤缃櫧鍚嶅崟锛堟棤闇�鏉冮檺楠岃瘉锛夛細
+
+```javascript
+const whiteList = [
+  '/task/app/list',
+  '/task/app/my',
+  '/task/app/overdue',
+  '/task/app/statistics',
+  // ... 鍏朵粬APP绔帴鍙�
+]
+```
+
+## 鍏�佹暟鎹畨鍏ㄤ繚闅�
+
+### 8.1 APP 绔暟鎹殧绂�
+
+**瀹炵幇鏂瑰紡**锛�
+1. 鍚庣寮哄埗浣跨敤褰撳墠鐧诲綍鐢ㄦ埛鐨� `userId` 鍜� `deptId`
+2. 鍓嶇浼犻�掔殑杩囨护鏉′欢浼氳鍚庣瑕嗙洊
+3. SQL 鏌ヨ鏃朵娇鐢� OR 鏉′欢缁勫悎锛�
+   - `dept_id = currentDeptId`锛堝悓鏈烘瀯锛�
+   - `creator_id = currentUserId`锛堣嚜宸卞垱寤猴級
+   - `assignee_id = currentUserId`锛堝垎閰嶇粰鑷繁锛�
+
+**SQL 绀轰緥**锛�
+```xml
+<select id="selectSysTaskList" resultMap="SysTaskResult">
+    SELECT ... FROM sys_task t
+    WHERE 1=1
+    <if test="deptId != null">
+        AND (
+            t.dept_id = #{deptId}
+            OR t.creator_id = #{creatorId}
+            OR t.assignee_id = #{assigneeId}
+        )
+    </if>
+    <!-- 鍏朵粬鏉′欢 -->
+</select>
+```
+
+### 8.2 鍚庡彴绠$悊绔潈闄愭帶鍒�
+
+**瀹炵幇鏂瑰紡**锛�
+1. 浣跨敤 `@PreAuthorize` 娉ㄨВ杩涜鏉冮檺鏍¢獙
+2. 绠$悊鍛樺彲浠ヨ嚜鐢辨寚瀹氭煡璇㈡潯浠�
+3. 鏀寔璺ㄩ儴闂ㄣ�佽法鐢ㄦ埛鏌ヨ
+4. 閫氳繃瑙掕壊鏉冮檺鎺у埗璁块棶鑼冨洿
+
+## 涔濄�佽縼绉绘寚鍗�
+
+### 9.1 鐜版湁 APP 绔唬鐮佹棤闇�淇敼
+
+鐢变簬鍓嶇 API 鏂囦欢宸茬粡鏇存柊锛岀幇鏈夌殑 APP 椤甸潰浠g爜鏃犻渶淇敼锛�
+
+```javascript
+// 鍘熸湁浠g爜淇濇寔涓嶅彉
+import { listTask } from '@/api/task'
+
+listTask(query).then(response => {
+  // 鑷姩浣跨敤鏂扮殑 /task/app/list 鎺ュ彛
+})
+```
+
+### 9.2 鍚庡彴绠$悊绔唬鐮佹棤闇�淇敼
+
+鍚庡彴绠$悊椤甸潰浠g爜涔熸棤闇�淇敼锛�
+
+```javascript
+// 鍘熸湁浠g爜淇濇寔涓嶅彉
+import { listTask } from '@/api/task'
+
+listTask(query).then(response => {
+  // 鑷姩浣跨敤鏂扮殑 /task/admin/list 鎺ュ彛
+})
+```
+
+### 9.3 娴嬭瘯楠岃瘉
+
+**APP 绔祴璇�**锛�
+1. 鐧诲綍 APP锛屾煡鐪嬩换鍔″垪琛�
+2. 纭鍙兘鐪嬪埌鑷繁鐩稿叧鐨勪换鍔�
+3. 灏濊瘯鏇存柊浠诲姟鐘舵�侊紝楠岃瘉 GPS 浣嶇疆涓婃姤
+
+**鍚庡彴绠$悊绔祴璇�**锛�
+1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+2. 浠ョ鐞嗗憳韬唤鏌ョ湅浠诲姟鍒楄〃
+3. 纭鍙互鐪嬪埌鎵�鏈変换鍔�
+4. 楠岃瘉鏉冮檺鎺у埗鏄惁鐢熸晥
+
+## 鍗併�佹敞鎰忎簨椤�
+
+### 10.1 鎺ュ彛鍏煎鎬�
+
+- 鉂� **涓嶅啀鏀寔** `/task/list` 绛夋棫鎺ュ彛璺緞
+- 鉁� 蹇呴』浣跨敤 `/task/app/` 鎴� `/task/admin/` 鍓嶇紑
+- 鉁� 鍓嶇 API 鏂囦欢宸叉洿鏂帮紝鏃犻渶鎵嬪姩淇敼椤甸潰浠g爜
+
+### 10.2 鏉冮檺閰嶇疆
+
+- 鉁� APP 绔帴鍙e凡閰嶇疆鐧藉悕鍗曪紝鏃犻渶鏉冮檺楠岃瘉
+- 鉁� 鍚庡彴绠$悊绔帴鍙i渶瑕佸搴旂殑鏉冮檺鏍囪瘑
+- 鈿狅笍 纭繚瑙掕壊鍒嗛厤浜嗘纭殑鏉冮檺
+
+### 10.3 鏁版嵁杩囨护
+
+- 鉁� APP 绔己鍒惰繃婊ゅ綋鍓嶇敤鎴锋暟鎹紝鍓嶇鏃犳硶缁曡繃
+- 鉁� 鍚庡彴绠$悊绔牴鎹潈闄愭煡鐪嬪搴旇寖鍥寸殑鏁版嵁
+- 鈿狅笍 涓嶈鍦� APP 绔娇鐢ㄥ悗鍙扮鐞嗙鎺ュ彛
+
+### 10.4 GPS 浣嶇疆淇℃伅
+
+- 鉁� 浠� APP 绔姸鎬佹洿鏂版帴鍙f敮鎸� GPS 浣嶇疆涓婃姤
+- 鉁� 鍚庡彴绠$悊绔姸鎬佹洿鏂颁笉闇�瑕佷綅缃俊鎭�
+- 鈿狅笍 GPS 瀛楁涓哄彲閫夛紝鏃犱綅缃椂涓嶅奖鍝嶇姸鎬佹洿鏂�
+
+## 鍗佷竴銆佸父瑙侀棶棰�
+
+### Q1: APP 绔兘鍚︽煡鐪嬪叾浠栭儴闂ㄧ殑浠诲姟锛�
+
+**绛�**锛氫笉鑳姐�侫PP 绔帴鍙e己鍒朵娇鐢ㄥ綋鍓嶇櫥褰曠敤鎴风殑閮ㄩ棬ID杩涜杩囨护锛屽嵆浣垮墠绔紶閫掑叾浠栭儴闂↖D锛屼篃浼氳鍚庣瑕嗙洊銆�
+
+### Q2: 鍚庡彴绠$悊鍛樺浣曟煡鐪嬫墍鏈変换鍔★紵
+
+**绛�**锛氫娇鐢ㄥ悗鍙扮鐞嗙鎺ュ彛 `/task/admin/list`锛屼笉浼犻�掍换浣曡繃婊ゆ潯浠跺嵆鍙煡鐪嬫墍鏈変换鍔°�傞渶瑕佺‘淇濈敤鎴锋嫢鏈� `task:task:list` 鏉冮檺銆�
+
+### Q3: 濡備綍鍖哄垎 APP 绔拰鍚庡彴绠$悊绔殑璋冪敤锛�
+
+**绛�**锛氶�氳繃鎺ュ彛璺緞鍓嶇紑鍖哄垎锛�
+- APP 绔細`/task/app/*`
+- 鍚庡彴绠$悊绔細`/task/admin/*`
+
+### Q4: 鏃х郴缁熺殑鎺ュ彛璋冪敤鏄惁鍙楀奖鍝嶏紵
+
+**绛�**锛氫笉鍙楀奖鍝嶃�傛棫绯荤粺鍚屾绛夊姛鑳戒娇鐢ㄧ殑鏄嫭绔嬬殑鎺ュ彛锛屼笌浠诲姟绠$悊鎺ュ彛鏃犲叧銆�
+
+### Q5: 濡備綍娣诲姞鏂扮殑浠诲姟鐩稿叧鎺ュ彛锛�
+
+**绛�**锛氶伒寰互涓嬭鍒欙細
+1. APP 绔帴鍙o細璺緞浣跨敤 `/task/app/*`锛屾棤鏉冮檺娉ㄨВ锛屽己鍒惰繃婊ゅ綋鍓嶇敤鎴�
+2. 鍚庡彴绠$悊绔帴鍙o細璺緞浣跨敤 `/task/admin/*`锛屾坊鍔犳潈闄愭敞瑙o紝鏀寔鍏ㄥ眬鏌ヨ
+
+## 鍗佷簩銆佹�荤粨
+
+閫氳繃鏈鎺ュ彛鎷嗗垎锛屽疄鐜颁簡锛�
+
+1. 鉁� **涓氬姟鍒嗙**锛欰PP 绔拰鍚庡彴绠$悊绔娇鐢ㄧ嫭绔嬫帴鍙�
+2. 鉁� **鏉冮檺娓呮櫚**锛氬悗鍙扮鐞嗙缁熶竴浣跨敤鏉冮檺娉ㄨВ
+3. 鉁� **鏁版嵁瀹夊叏**锛欰PP 绔己鍒惰繃婊ゅ綋鍓嶇敤鎴锋暟鎹�
+4. 鉁� **鍔熻兘鎵╁睍**锛欰PP 绔敮鎸� GPS 浣嶇疆涓婃姤
+5. 鉁� **浠g爜缁存姢**锛氭帴鍙h亴璐e崟涓�锛屾槗浜庣淮鎶�
+6. 鉁� **鍚戜笅鍏煎**锛氬墠绔唬鐮佹棤闇�淇敼锛岃嚜鍔ㄤ娇鐢ㄦ柊鎺ュ彛
+
+---
+
+**鏂囨。鐗堟湰**: v1.0  
+**鍒涘缓鏃ユ湡**: 2025-01-XX  
+**鏈�鍚庢洿鏂�**: 2025-01-XX  
+**缁存姢浜哄憳**: 绯荤粺绠$悊鍛�

--
Gitblit v1.9.1