From 5c5cddb1c2ee0d19adddebaf3a3a10a6d93fd2ad Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 26 十月 2025 10:52:18 +0800
Subject: [PATCH] feat:优化微信小程序可以运行
---
app/pages/mine/user-agreement/index.vue | 384 ++++
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java | 9
app/pages/mine/privacy-policy/index.vue | 439 ++++
app/pages.json | 10
app/manifest.json | 2
app/pages/mine/index.vue | 18
app/小程序本地调试配置指南.md | 598 ++++++
app/permission.js | 6
ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml | 26
prd/uni-app模板语法修复-class绑定.md | 279 ++
app/快速配置清单.md | 266 ++
prd/部门分公司ID获取方法说明.md | 231 ++
prd/隐私政策和用户协议匿名访问配置.md | 449 ++++
app/components/map-selector.vue | 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java | 18
prd/用户协议与隐私政策说明.md | 332 +++
app/pages/task/detail.vue | 2
prd/绑定车辆部门过滤-已实现.md | 327 +++
prd/登录注册协议链接优化说明.md | 407 ++++
app/pages/index.vue | 2
app/pages/register.vue | 63
ruoyi-ui/src/views/task/general/detail.vue | 70
prd/车辆同步部门查询修复说明.md | 273 ++
app/pages/task/index.vue | 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java | 1
prd/车辆查询部门自动匹配功能说明.md | 347 +++
app/config.js | 51
app/pages/login.vue | 43
ruoyi-ui/src/views/task/general/index.vue | 5
prd/后台任务管理-急救转运扩展显示.md | 387 ++++
ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml | 20
prd/用户协议与隐私政策完善说明.md | 552 +++++
32 files changed, 5,589 insertions(+), 32 deletions(-)
diff --git a/app/components/map-selector.vue b/app/components/map-selector.vue
index 6c5e540..7203b61 100644
--- a/app/components/map-selector.vue
+++ b/app/components/map-selector.vue
@@ -38,7 +38,7 @@
<view
class="address-item"
v-for="(item, index) in searchResults"
- :key="'search-' + index"
+ :key="index"
@click="selectAddress(item)"
>
<!-- 纭繚浣跨敤鎻掑�艰娉� -->
diff --git a/app/config.js b/app/config.js
index a1d9202..4ca54be 100644
--- a/app/config.js
+++ b/app/config.js
@@ -1,25 +1,62 @@
// 搴旂敤鍏ㄥ眬閰嶇疆
+
+// 鈿狅笍 閲嶈锛氭湰鍦板紑鍙戞椂锛岃淇敼姝ゅ鐨凩OCAL_IP涓轰綘鐨勭數鑴戝唴缃慖P
+// Windows鏌ョ湅: cmd鎵ц ipconfig
+// Mac/Linux鏌ョ湅: 缁堢鎵ц ifconfig 鎴� ip addr
+const LOCAL_IP = 'localhost' // 淇敼涓轰綘鐨処P锛屽: '192.168.1.100'
+
+// 鐜閰嶇疆
+const ENV_CONFIG = {
+ // 鏈湴寮�鍙戠幆澧�
+ development: {
+ baseUrl: `http://${LOCAL_IP}:8080`,
+ description: '鏈湴寮�鍙戠幆澧�'
+ },
+ // 娴嬭瘯鐜
+ test: {
+ baseUrl: 'http://test.yourdomain.com',
+ description: '娴嬭瘯鐜'
+ },
+ // 鐢熶骇鐜
+ production: {
+ baseUrl: 'https://api.yourdomain.com',
+ description: '鐢熶骇鐜'
+ }
+}
+
+// 褰撳墠浣跨敤鐨勭幆澧冿紙鎵嬪姩鍒囨崲锛�
+// 鍙�夊��: 'development', 'test', 'production'
+const CURRENT_ENV = 'development'
+
module.exports = {
- // baseUrl: 'https://vue.ruoyi.vip/prod-api',
- baseUrl: 'http://localhost:8080',
+ // API鍩虹鍦板潃
+ baseUrl: ENV_CONFIG[CURRENT_ENV].baseUrl,
+
// 搴旂敤淇℃伅
appInfo: {
// 搴旂敤鍚嶇О
- name: "ruoyi-app",
+ name: "姘戣埅璋冨害绯荤粺",
// 搴旂敤鐗堟湰
version: "1.1.0",
// 搴旂敤logo
logo: "/static/logo.png",
// 瀹樻柟缃戠珯
site_url: "http://ruoyi.vip",
- // 鏀跨瓥鍗忚
- agreements: [{
+
+ // 褰撳墠鐜淇℃伅锛堜粎寮�鍙戞椂鏄剧ず锛�
+ env: CURRENT_ENV,
+ envDescription: ENV_CONFIG[CURRENT_ENV].description,
+ showEnv: CURRENT_ENV === 'development', // 鏄惁鏄剧ず鐜淇℃伅
+
+ // 鏀跨瓥鍗忚锛堜娇鐢ㄦ湰鍦伴〉闈級
+ agreements: [
+ {
title: "闅愮鏀跨瓥",
- url: "https://ruoyi.vip/protocol.html"
+ url: "/pages/mine/privacy-policy/index"
},
{
title: "鐢ㄦ埛鏈嶅姟鍗忚",
- url: "https://ruoyi.vip/protocol.html"
+ url: "/pages/mine/user-agreement/index"
}
]
}
diff --git a/app/manifest.json b/app/manifest.json
index 9af21ee..b02e2fa 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -41,7 +41,7 @@
},
"quickapp" : {},
"mp-weixin" : {
- "appid" : "wxccd7e2a0911b3397",
+ "appid" : "wx40692cc44953a8cb",
"setting" : {
"urlCheck" : false,
"es6" : false,
diff --git a/app/pages.json b/app/pages.json
index 222db46..3b256bc 100644
--- a/app/pages.json
+++ b/app/pages.json
@@ -71,6 +71,16 @@
"navigationBarTitleText": "鍏充簬鎴戜滑"
}
}, {
+ "path": "pages/mine/user-agreement/index",
+ "style": {
+ "navigationBarTitleText": "鐢ㄦ埛鏈嶅姟鍗忚"
+ }
+ }, {
+ "path": "pages/mine/privacy-policy/index",
+ "style": {
+ "navigationBarTitleText": "闅愮鏀跨瓥"
+ }
+ }, {
"path": "pages/common/webview/index",
"style": {
"navigationBarTitleText": "娴忚缃戦〉"
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 14fc8f5..62a019b 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -55,7 +55,7 @@
<!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
<view class="task-header">
<view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
- <view class="task-status" :class="getStatusClass(task.taskStatus)">
+ <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
{{ getStatusText(task.status) }}
</view>
</view>
diff --git a/app/pages/login.vue b/app/pages/login.vue
index bcfc7d1..4aef7f9 100644
--- a/app/pages/login.vue
+++ b/app/pages/login.vue
@@ -30,14 +30,12 @@
<text class="wechat-text">寰俊涓�閿櫥褰�</text>
</view>
</view>
- <view class="reg text-center" v-if="register">
- <text class="text-grey1">娌℃湁璐﹀彿锛�</text>
- <text @click="handleUserRegister" class="text-blue">绔嬪嵆娉ㄥ唽</text>
- </view>
+
<view class="xieyi text-center">
<text class="text-grey1">鐧诲綍鍗充唬琛ㄥ悓鎰�</text>
- <text @click="handleUserAgrement" class="text-blue">銆婄敤鎴峰崗璁��</text>
- <text @click="handlePrivacy" class="text-blue">銆婇殣绉佸崗璁��</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>
@@ -55,8 +53,8 @@
register: false,
globalConfig: getApp().globalData.config,
loginForm: {
- username: "admin",
- password: "admin123",
+ username: "",
+ password: "",
code: "",
uuid: ''
}
@@ -72,13 +70,11 @@
},
// 闅愮鍗忚
handlePrivacy() {
- let site = this.globalConfig.appInfo.agreements[0]
- this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
},
// 鐢ㄦ埛鍗忚
handleUserAgrement() {
- let site = this.globalConfig.appInfo.agreements[1]
- this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
},
// 鑾峰彇鍥惧舰楠岃瘉鐮�
getCode() {
@@ -297,7 +293,7 @@
}
}
- .reg, .xieyi {
+ .reg {
margin: 20rpx 0;
.text-grey1 {
@@ -309,6 +305,27 @@
color: #007AFF;
}
}
+
+ .xieyi {
+ margin: 50rpx 0 30rpx 0;
+ padding: 20rpx 0;
+ line-height: 2;
+
+ .text-grey1 {
+ color: #888;
+ font-size: 24rpx;
+ }
+
+ .agreement-link {
+ color: #007AFF;
+ font-size: 24rpx;
+ padding: 10rpx 8rpx;
+ margin: 0 5rpx;
+ display: inline-block;
+ position: relative;
+ z-index: 10;
+ }
+ }
}
}
</style>
\ No newline at end of file
diff --git a/app/pages/mine/index.vue b/app/pages/mine/index.vue
index a4d3aba..48b20a6 100644
--- a/app/pages/mine/index.vue
+++ b/app/pages/mine/index.vue
@@ -80,6 +80,18 @@
<view>缂栬緫璧勬枡</view>
</view>
</view>
+ <view class="list-cell list-cell-arrow" @click="handleUserAgreement">
+ <view class="menu-item-box">
+ <view class="iconfont icon-text menu-icon"></view>
+ <view>鐢ㄦ埛鏈嶅姟鍗忚</view>
+ </view>
+ </view>
+ <view class="list-cell list-cell-arrow" @click="handlePrivacyPolicy">
+ <view class="menu-item-box">
+ <view class="iconfont icon-safe menu-icon"></view>
+ <view>闅愮鏀跨瓥</view>
+ </view>
+ </view>
<view class="list-cell list-cell-arrow" @click="handleHelp">
<view class="menu-item-box">
<view class="iconfont icon-help menu-icon"></view>
@@ -227,6 +239,12 @@
handleAbout() {
this.$tab.navigateTo('/pages/mine/about/index')
},
+ handleUserAgreement() {
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+ },
+ handlePrivacyPolicy() {
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+ },
handleJiaoLiuQun() {
this.$modal.showToast('QQ缇わ細鈶�133713780(婊�)銆佲憽146013835(婊�)銆佲憿189091635')
},
diff --git a/app/pages/mine/privacy-policy/index.vue b/app/pages/mine/privacy-policy/index.vue
new file mode 100644
index 0000000..cd90520
--- /dev/null
+++ b/app/pages/mine/privacy-policy/index.vue
@@ -0,0 +1,439 @@
+<template>
+ <view class="privacy-container">
+ <view class="header">
+ <view class="back-btn" @click="goBack">
+ <uni-icons type="arrowleft" size="20"></uni-icons>
+ </view>
+ <view class="title">闅愮鏀跨瓥</view>
+ </view>
+
+ <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="section">
+ <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-text">
+ 涓汉淇℃伅鏄寚浠ョ數瀛愭垨鑰呭叾浠栨柟寮忚褰曠殑鑳藉鍗曠嫭鎴栬�呬笌鍏朵粬淇℃伅缁撳悎璇嗗埆鐗瑰畾鑷劧浜鸿韩浠芥垨鑰呭弽鏄犵壒瀹氳嚜鐒朵汉娲诲姩鎯呭喌鐨勫悇绉嶄俊鎭��
+ </text>
+ <text class="section-text">
+ 鎴戜滑浠呬細鍑轰簬浠ヤ笅鐩殑锛屾敹闆嗗拰浣跨敤鎮ㄧ殑涓汉淇℃伅锛�
+ </text>
+
+ <text class="subsection-title">1.1 璐﹀彿娉ㄥ唽涓庣櫥褰�</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>
+ <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-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-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>
+ </view>
+
+ <view class="footer">
+ <text class="footer-text">鎰熻阿鎮ㄤ俊浠诲苟浣跨敤鎬ユ晳杞繍璋冨害绯荤粺锛�</text>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {}
+ },
+ methods: {
+ goBack() {
+ uni.navigateBack()
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ .privacy-container {
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ background-color: #f5f5f5;
+
+ .header {
+ display: flex;
+ align-items: center;
+ padding: 20rpx;
+ background-color: white;
+ border-bottom: 1rpx solid #f0f0f0;
+
+ .back-btn {
+ width: 60rpx;
+ height: 60rpx;
+ border-radius: 50%;
+ background-color: #f0f0f0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 20rpx;
+ }
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+ }
+ }
+
+ .content {
+ flex: 1;
+ padding: 30rpx;
+ }
+
+ .privacy-content {
+ background-color: white;
+ border-radius: 15rpx;
+ padding: 40rpx 30rpx;
+
+ .update-time,
+ .effect-time {
+ font-size: 24rpx;
+ color: #999;
+ margin-bottom: 10rpx;
+ }
+
+ .section {
+ margin-top: 40rpx;
+
+ &:first-child {
+ margin-top: 30rpx;
+ }
+
+ .section-title {
+ display: block;
+ font-size: 32rpx;
+ 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;
+ }
+
+ .section-text {
+ display: block;
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.8;
+ margin-bottom: 15rpx;
+ text-align: justify;
+
+ &.highlight {
+ background-color: #fff8e6;
+ padding: 20rpx;
+ border-left: 4rpx solid #ff9500;
+ border-radius: 8rpx;
+ 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%;
+ }
+ }
+ }
+ }
+
+ .footer {
+ margin-top: 60rpx;
+ padding-top: 40rpx;
+ border-top: 1rpx solid #f0f0f0;
+ text-align: center;
+
+ .footer-text {
+ font-size: 28rpx;
+ color: #007AFF;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+</style>
diff --git a/app/pages/mine/user-agreement/index.vue b/app/pages/mine/user-agreement/index.vue
new file mode 100644
index 0000000..a3d97e7
--- /dev/null
+++ b/app/pages/mine/user-agreement/index.vue
@@ -0,0 +1,384 @@
+<template>
+ <view class="agreement-container">
+ <view class="header">
+ <view class="back-btn" @click="goBack">
+ <uni-icons type="arrowleft" size="20"></uni-icons>
+ </view>
+ <view class="title">鐢ㄦ埛鏈嶅姟鍗忚</view>
+ </view>
+
+ <scroll-view class="content" scroll-y="true">
+ <view class="agreement-content">
+ <view class="update-time">鏇存柊鏃ユ湡锛�2025骞�1鏈�25鏃�</view>
+ <view class="effect-time">鐢熸晥鏃ユ湡锛�2025骞�1鏈�25鏃�</view>
+
+ <view class="section">
+ <text class="section-title">娆㈣繋浣跨敤鎬ユ晳杞繍璋冨害绯荤粺锛�</text>
+ <text class="section-text">
+ 鍦ㄦ偍浣跨敤鎬ユ晳杞繍璋冨害绯荤粺锛堜互涓嬬畝绉�"鏈郴缁�"鎴�"鏈湇鍔�"锛変箣鍓嶏紝璇锋偍浠旂粏闃呰骞跺厖鍒嗙悊瑙f湰銆婄敤鎴锋湇鍔″崗璁�嬶紙浠ヤ笅绠�绉�"鏈崗璁�"锛夈��
+ </text>
+ <text class="section-text">
+ 鏈崗璁槸鎮ㄤ笌鏈郴缁熻繍钀ユ柟锛堜互涓嬬畝绉�"鎴戜滑"锛変箣闂村氨浣跨敤鏈郴缁熸墍璁㈢珛鐨勫崗璁�傞�氳繃娉ㄥ唽銆佺櫥褰曟垨浣跨敤鏈郴缁燂紝鍗宠〃绀烘偍宸查槄璇汇�佺悊瑙e苟鍚屾剰鎺ュ彈鏈崗璁殑鍏ㄩ儴鍐呭銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">涓�銆佹湇鍔¤鏄�</text>
+ <text class="section-text">
+ 1.1 鏈郴缁熸槸涓�涓笓涓氱殑鎬ユ晳杞繍璋冨害绠$悊骞冲彴锛屼负鍖荤枟鏈烘瀯銆佹�ユ晳涓績鍙婄浉鍏冲伐浣滀汉鍛樻彁渚涗换鍔¤皟搴︺�佽溅杈嗙鐞嗐�佷汉鍛樺崗璋冪瓑鏈嶅姟銆�
+ </text>
+ <text class="section-text">
+ 1.2 鏈郴缁熸敮鎸佺殑鍔熻兘鍖呮嫭浣嗕笉闄愪簬锛�
+ </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 indent">
+ 路 浠诲姟鐘舵�佸疄鏃舵洿鏂�
+ </text>
+ <text class="section-text indent">
+ 路 娑堟伅閫氱煡涓庢彁閱�
+ </text>
+ <text class="section-text">
+ 1.3 鎴戜滑灏嗘牴鎹笟鍔″彂灞曢渶瑕侊紝涓嶅畾鏈熷湴瀵规湰绯荤粺鍙婄浉鍏冲姛鑳借繘琛岃皟鏁淬�佸崌绾ф垨浼樺寲銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">浜屻�佽处鍙锋敞鍐屼笌浣跨敤</text>
+ <text class="section-text">
+ 2.1 鎮ㄩ渶瑕侀�氳繃鍚堟硶閫斿緞娉ㄥ唽骞惰幏寰楁湰绯荤粺璐﹀彿锛岃处鍙风敱绯荤粺绠$悊鍛樼粺涓�鍒嗛厤鍜岀鐞嗐��
+ </text>
+ <text class="section-text">
+ 2.2 鎮ㄥ簲褰撳Ε鍠勪繚绠¤处鍙峰強瀵嗙爜锛屼笉寰楀皢璐﹀彿杞銆佸嚭鍊熸垨浠ュ叾浠栨柟寮忔彁渚涚粰浠栦汉浣跨敤銆傚洜鎮ㄤ繚绠′笉鍠勫鑷寸殑璐﹀彿琚洍鐢ㄧ瓑鎹熷け鐢辨偍鑷鎵挎媴銆�
+ </text>
+ <text class="section-text">
+ 2.3 鎮ㄦ壙璇烘彁渚涚殑娉ㄥ唽淇℃伅鐪熷疄銆佸噯纭�佸畬鏁达紝骞跺強鏃舵洿鏂扮浉鍏充俊鎭�傚鍥犳彁渚涜櫄鍋囦俊鎭�犳垚鐨勪竴鍒囧悗鏋滅敱鎮ㄨ嚜琛屾壙鎷呫��
+ </text>
+ <text class="section-text">
+ 2.4 鎮ㄧ悊瑙e苟鍚屾剰锛屾偍鐨勮处鍙蜂粎闄愭湰浜轰娇鐢紝绂佹璧犱笌銆佸�熺敤銆佺鐢ㄣ�佽浆璁╂垨鍞崠銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">涓夈�佺敤鎴疯涓鸿鑼�</text>
+ <text class="section-text">
+ 3.1 鎮ㄥ湪浣跨敤鏈郴缁熸椂锛屽簲褰撻伒瀹堜腑鍗庝汉姘戝叡鍜屽浗鐩稿叧娉曞緥娉曡锛屼笉寰楀埄鐢ㄦ湰绯荤粺浠庝簨杩濇硶杩濊娲诲姩銆�
+ </text>
+ <text class="section-text">
+ 3.2 鎮ㄤ笉寰楄繘琛屼互涓嬭涓猴細
+ </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 indent">
+ 路 鍒╃敤绯荤粺婕忔礊璋嬪彇涓嶆褰撳埄鐩�
+ </text>
+ <text class="section-text indent">
+ 路 骞叉壈绯荤粺姝e父杩愯
+ </text>
+ <text class="section-text indent">
+ 路 褰曚换鎰忕紪閫犮�佹崗閫犺櫄鍋囦换鍔′俊鎭�
+ </text>
+ <text class="section-text">
+ 3.3 鎮ㄥ簲褰撴寜鐓х湡瀹炴儏鍐靛~鍐欎换鍔′俊鎭紝纭繚鎮h�呬俊鎭�佸湴鍧�淇℃伅绛夊噯纭棤璇紝浠ヤ繚闅滄�ユ晳鏈嶅姟鐨勫強鏃舵�у拰鏈夋晥鎬с��
+ </text>
+ <text class="section-text">
+ 3.4 浣滀负鎬ユ晳杞繍宸ヤ綔浜哄憳锛屾偍搴斿綋锛�
+ </text>
+ <text class="section-text indent">
+ 路 鍙婃椂鍝嶅簲浠诲姟鍒嗛厤
+ </text>
+ <text class="section-text indent">
+ 路 鍑嗙‘鏇存柊浠诲姟鐘舵��
+ </text>
+ <text class="section-text indent">
+ 路 閬靛畧鑱屼笟閬撳痉鍜屾搷浣滆鑼�
+ </text>
+ <text class="section-text indent">
+ 路 淇濇姢鎮h�呴殣绉佸拰涓汉淇℃伅
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">鍥涖�侀殣绉佷繚鎶�</text>
+ <text class="section-text">
+ 4.1 鎴戜滑闈炲父閲嶈鐢ㄦ埛闅愮淇濇姢锛屽皢鎸夌収銆婇殣绉佹斂绛栥�嬬殑绾﹀畾鏀堕泦銆佷娇鐢ㄣ�佸瓨鍌ㄥ拰淇濇姢鎮ㄧ殑涓汉淇℃伅銆�
+ </text>
+ <text class="section-text">
+ 4.2 鍦ㄤ娇鐢ㄦ湰绯荤粺杩囩▼涓紝鎴戜滑鍙兘闇�瑕佹敹闆嗕互涓嬩俊鎭細
+ </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.3 鏈粡鎮ㄥ悓鎰忥紝鎴戜滑涓嶄細鍚戠涓夋柟鎻愪緵銆佸嚭鍞�佸嚭绉熴�佸垎浜垨浜ゆ槗鎮ㄧ殑涓汉淇℃伅銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">浜斻�佺煡璇嗕骇鏉�</text>
+ <text class="section-text">
+ 5.1 鏈郴缁熷強鍏跺寘鍚殑鎵�鏈夊唴瀹癸紙鍖呮嫭浣嗕笉闄愪簬鏂囧瓧銆佸浘鐗囥�佽蒋浠躲�佺▼搴忋�佹暟鎹瓑锛夌殑鐭ヨ瘑浜ф潈鍧囧綊鎴戜滑鎵�鏈夋垨宸茶幏寰楀悎娉曟巿鏉冦��
+ </text>
+ <text class="section-text">
+ 5.2 鏈粡鎴戜滑涔﹂潰璁稿彲锛屾偍涓嶅緱浠ヤ换浣曞舰寮忓鍒躲�佷紶鎾�佸睍绀恒�侀暅鍍忋�佷笂浼犮�佷笅杞芥湰绯荤粺鐨勪换浣曞唴瀹广��
+ </text>
+ <text class="section-text">
+ 5.3 鎮ㄥ湪浣跨敤鏈郴缁熻繃绋嬩腑鍒涘缓鐨勪换鍔℃暟鎹�佹搷浣滆褰曠瓑锛屽叾浣跨敤鏉冨綊鎮ㄦ墍鏈夛紝浣嗘垜浠湁鏉冨皢鍏剁敤浜庣粺璁″垎鏋愩�佹湇鍔℃敼杩涚瓑鐩殑銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">鍏�佹湇鍔′腑鏂垨缁堟</text>
+ <text class="section-text">
+ 6.1 鍦ㄤ互涓嬫儏鍐典笅锛屾垜浠湁鏉冧腑鏂垨缁堟鍚戞偍鎻愪緵鏈嶅姟锛�
+ </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">
+ 6.2 鍥犵郴缁熺淮鎶ゆ垨鍗囩骇绛夊師鍥犻渶瑕佹殏鍋滄湇鍔$殑锛屾垜浠皢灏藉彲鑳戒簨鍏堥�氱煡鎮ㄣ��
+ </text>
+ <text class="section-text">
+ 6.3 濡傛灉鎮ㄤ笉鍐嶄娇鐢ㄦ湰绯荤粺锛屽彲浠ョ敵璇锋敞閿�璐﹀彿銆傝处鍙锋敞閿�鍚庯紝鎮ㄥ皢鏃犳硶鍐嶄娇鐢ㄨ璐﹀彿锛屼笖鏃犳硶鎭㈠鐩稿叧鏁版嵁銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">涓冦�佸厤璐e0鏄�</text>
+ <text class="section-text">
+ 7.1 鏈郴缁熶粎浣滀负鎬ユ晳杞繍璋冨害绠$悊宸ュ叿锛屾垜浠浠ヤ笅鎯呭喌涓嶆壙鎷呰矗浠伙細
+ </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">
+ 7.2 鏈郴缁熸彁渚涚殑瀹氫綅銆佸鑸瓑鍔熻兘浠呬緵鍙傝�冿紝瀹為檯鎵ц浠诲姟鏃惰浠ョ幇鍦哄疄闄呮儏鍐典负鍑嗐��
+ </text>
+ <text class="section-text">
+ 7.3 鎴戜滑瀵规湰绯荤粺涓涓夋柟鎻愪緵鐨勬湇鍔℃垨鍐呭涓嶆壙鎷呰矗浠汇��
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">鍏�佸崗璁彉鏇�</text>
+ <text class="section-text">
+ 8.1 鎴戜滑鏈夋潈鏍规嵁闇�瑕佷慨鏀规湰鍗忚鐨勫唴瀹癸紝淇敼鍚庣殑鍗忚灏嗗湪绯荤粺鍐呭叕甯冦��
+ </text>
+ <text class="section-text">
+ 8.2 濡傛灉鎮ㄤ笉鍚屾剰淇敼鍚庣殑鍗忚鍐呭锛屾偍鏈夋潈鍋滄浣跨敤鏈郴缁熴�傚鏋滄偍缁х画浣跨敤鏈郴缁燂紝鍒欒涓烘偍鎺ュ彈淇敼鍚庣殑鍗忚銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">涔濄�佷簤璁В鍐�</text>
+ <text class="section-text">
+ 9.1 鏈崗璁殑璁㈢珛銆佹墽琛屽拰瑙i噴鍙婁簤璁殑瑙e喅鍧囧簲閫傜敤涓崕浜烘皯鍏卞拰鍥芥硶寰嬨��
+ </text>
+ <text class="section-text">
+ 9.2 濡傚弻鏂瑰氨鏈崗璁唴瀹规垨鍏舵墽琛屽彂鐢熶换浣曚簤璁紝鍙屾柟搴斿敖閲忓弸濂藉崗鍟嗚В鍐筹紱鍗忓晢涓嶆垚鏃讹紝浠讳綍涓�鏂瑰潎鍙悜鎴戜滑鎵�鍦ㄥ湴浜烘皯娉曢櫌鎻愯捣璇夎銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">鍗併�佸叾浠�</text>
+ <text class="section-text">
+ 10.1 鏈崗璁瀯鎴愭偍涓庢垜浠箣闂村叧浜庝娇鐢ㄦ湰绯荤粺鐨勫畬鏁村崗璁紝鍙栦唬鍙屾柟涔嬪墠灏辩浉鍚屼簨椤硅揪鎴愮殑浠讳綍鍙eご鎴栦功闈㈠崗璁��
+ </text>
+ <text class="section-text">
+ 10.2 濡傛湰鍗忚鐨勪换浣曟潯娆捐瑙嗕负鏃犳晥鎴栨棤娉曟墽琛岋紝璇ユ潯娆惧簲浜堜互鍒犻櫎锛屽叾浣欐潯娆剧户缁湁鏁堛��
+ </text>
+ <text class="section-text">
+ 10.3 鎴戜滑瀵规湰鍗忚鎷ユ湁鏈�缁堣В閲婃潈銆�
+ </text>
+ </view>
+
+ <view class="section">
+ <text class="section-title">鍗佷竴銆佽仈绯绘垜浠�</text>
+ <text class="section-text">
+ 濡傛偍瀵规湰鍗忚鏈変换浣曠枒闂�佹剰瑙佹垨寤鸿锛岃閫氳繃浠ヤ笅鏂瑰紡鑱旂郴鎴戜滑锛�
+ </text>
+ <text class="section-text">
+ 鐢靛瓙閭锛歸anglizhong@966129.com.cn
+ </text>
+ <text class="section-text">
+ 瀹㈡湇鐢佃瘽锛�966120
+ </text>
+ <text class="section-text">
+ 宸ヤ綔鏃堕棿锛氬懆涓�鑷冲懆鏃� 24灏忔椂
+ </text>
+ </view>
+
+ <view class="footer">
+ <text class="footer-text">鍐嶆鎰熻阿鎮ㄩ�夋嫨浣跨敤骞夸笢姘戣埅璋冨害绯荤粺锛�</text>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+</template>
+
+<script>
+ export default {
+ data() {
+ return {}
+ },
+ methods: {
+ goBack() {
+ uni.navigateBack()
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ .agreement-container {
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ background-color: #f5f5f5;
+
+ .header {
+ display: flex;
+ align-items: center;
+ padding: 20rpx;
+ background-color: white;
+ border-bottom: 1rpx solid #f0f0f0;
+
+ .back-btn {
+ width: 60rpx;
+ height: 60rpx;
+ border-radius: 50%;
+ background-color: #f0f0f0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 20rpx;
+ }
+
+ .title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+ }
+ }
+
+ .content {
+ flex: 1;
+ padding: 30rpx;
+ }
+
+ .agreement-content {
+ background-color: white;
+ border-radius: 15rpx;
+ padding: 40rpx 30rpx;
+
+ .update-time,
+ .effect-time {
+ font-size: 24rpx;
+ color: #999;
+ margin-bottom: 10rpx;
+ }
+
+ .section {
+ margin-top: 40rpx;
+
+ &:first-child {
+ margin-top: 30rpx;
+ }
+
+ .section-title {
+ display: block;
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 20rpx;
+ line-height: 1.5;
+ }
+
+ .section-text {
+ display: block;
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.8;
+ margin-bottom: 15rpx;
+ text-align: justify;
+
+ &.indent {
+ padding-left: 40rpx;
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: 20rpx;
+ top: 18rpx;
+ width: 8rpx;
+ height: 8rpx;
+ background-color: #666;
+ border-radius: 50%;
+ }
+ }
+ }
+ }
+
+ .footer {
+ margin-top: 60rpx;
+ padding-top: 40rpx;
+ border-top: 1rpx solid #f0f0f0;
+ text-align: center;
+
+ .footer-text {
+ font-size: 28rpx;
+ color: #007AFF;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+</style>
diff --git a/app/pages/register.vue b/app/pages/register.vue
index 61e6d5c..c1bf188 100644
--- a/app/pages/register.vue
+++ b/app/pages/register.vue
@@ -25,6 +25,22 @@
<image :src="codeUrl" @click="getCode" class="login-code-img"></image>
</view>
</view>
+
+ <!-- 鍗忚鍚屾剰 -->
+ <view class="agreement-section">
+ <checkbox-group @change="handleAgreementChange">
+ <label class="agreement-label">
+ <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" />
+ <text class="agreement-text">
+ 鎴戝凡闃呰骞跺悓鎰�
+ <text class="agreement-link" @click.stop="handleUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
+ 鍜�
+ <text class="agreement-link" @click.stop="handlePrivacy">銆婇殣绉佹斂绛栥��</text>
+ </text>
+ </label>
+ </checkbox-group>
+ </view>
+
<view class="action-btn">
<button @click="handleRegister()" class="register-btn cu-btn block bg-blue lg round">娉ㄥ唽</button>
</view>
@@ -43,6 +59,7 @@
return {
codeUrl: "",
captchaEnabled: true,
+ agreedToTerms: false,
globalConfig: getApp().globalData.config,
registerForm: {
username: "",
@@ -60,6 +77,18 @@
// 鐢ㄦ埛鐧诲綍
handleUserLogin() {
this.$tab.navigateTo(`/pages/login`)
+ },
+ // 鍗忚閫夋嫨鍙樻洿
+ handleAgreementChange(e) {
+ this.agreedToTerms = e.detail.value.length > 0
+ },
+ // 鐢ㄦ埛鍗忚
+ handleUserAgreement() {
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+ },
+ // 闅愮鏀跨瓥
+ handlePrivacy() {
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
},
// 鑾峰彇鍥惧舰楠岃瘉鐮�
getCode() {
@@ -83,6 +112,8 @@
this.$modal.msgError("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�")
} else if (this.registerForm.code === "" && this.captchaEnabled) {
this.$modal.msgError("璇疯緭鍏ラ獙璇佺爜")
+ } else if (!this.agreedToTerms) {
+ this.$modal.msgError("璇峰厛闃呰骞跺悓鎰忕敤鎴锋湇鍔″崗璁拰闅愮鏀跨瓥")
} else {
this.$modal.loading("娉ㄥ唽涓紝璇疯�愬績绛夊緟...")
this.register()
@@ -179,6 +210,38 @@
margin-top: 20px;
}
+ .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;
+ padding: 8rpx 5rpx;
+ display: inline-block;
+ position: relative;
+ z-index: 10;
+ }
+ }
+ }
+ }
+
.login-code {
height: 38px;
float: right;
diff --git a/app/pages/task/detail.vue b/app/pages/task/detail.vue
index 425a13a..f58d624 100644
--- a/app/pages/task/detail.vue
+++ b/app/pages/task/detail.vue
@@ -20,7 +20,7 @@
</view>
<view class="info-item">
<view class="label">浠诲姟鐘舵��</view>
- <view class="value status" :class="taskDetail.taskStatus.toLowerCase()">
+ <view class="value status" :class="taskDetail.taskStatus === 'PENDING' ? 'pending' : taskDetail.taskStatus === 'DEPARTING' ? 'in_progress' : taskDetail.taskStatus === 'ARRIVED' ? 'in_progress' : taskDetail.taskStatus === 'RETURNING' ? 'in_progress' : taskDetail.taskStatus === 'IN_PROGRESS' ? 'in_progress' : taskDetail.taskStatus === 'COMPLETED' ? 'completed' : taskDetail.taskStatus === 'CANCELLED' ? 'cancelled' : ''">
{{ getStatusText(taskDetail.taskStatus) }}
</view>
</view>
diff --git a/app/pages/task/index.vue b/app/pages/task/index.vue
index d5b0655..6fa2349 100644
--- a/app/pages/task/index.vue
+++ b/app/pages/task/index.vue
@@ -113,7 +113,7 @@
<!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
<view class="task-header">
<view class="task-title">{{ getTaskTypeText(task.taskType) }} - {{ task.vehicle }}</view>
- <view class="task-status" :class="getStatusClass(task.taskStatus)">
+ <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
{{ getStatusText(task.taskStatus) }}
</view>
</view>
diff --git a/app/permission.js b/app/permission.js
index cbaec53..43daf70 100644
--- a/app/permission.js
+++ b/app/permission.js
@@ -5,7 +5,11 @@
// 椤甸潰鐧藉悕鍗�
const whiteList = [
- '/pages/login', '/pages/register', '/pages/common/webview/index'
+ '/pages/login',
+ '/pages/register',
+ '/pages/common/webview/index',
+ '/pages/mine/privacy-policy/index', // 闅愮鏀跨瓥锛堝尶鍚嶈闂級
+ '/pages/mine/user-agreement/index' // 鐢ㄦ埛鍗忚锛堝尶鍚嶈闂級
]
// 妫�鏌ュ湴鍧�鐧藉悕鍗�
diff --git "a/app/\345\260\217\347\250\213\345\272\217\346\234\254\345\234\260\350\260\203\350\257\225\351\205\215\347\275\256\346\214\207\345\215\227.md" "b/app/\345\260\217\347\250\213\345\272\217\346\234\254\345\234\260\350\260\203\350\257\225\351\205\215\347\275\256\346\214\207\345\215\227.md"
new file mode 100644
index 0000000..2e7331f
--- /dev/null
+++ "b/app/\345\260\217\347\250\213\345\272\217\346\234\254\345\234\260\350\260\203\350\257\225\351\205\215\347\275\256\346\214\207\345\215\227.md"
@@ -0,0 +1,598 @@
+# 寰俊灏忕▼搴忔湰鍦版帴鍙h皟璇曢厤缃寚鍗�
+
+## 涓�銆佸綋鍓嶉厤缃姸鎬�
+
+### 1.1 鍚庣鎺ュ彛鍦板潃閰嶇疆
+
+**鏂囦欢浣嶇疆**: `app/config.js`
+
+```javascript
+module.exports = {
+ baseUrl: 'http://localhost:8080', // 鉁� 宸查厤缃负鏈湴鎺ュ彛
+ // ...鍏朵粬閰嶇疆
+}
+```
+
+### 1.2 闂璇存槑
+
+寰俊灏忕▼搴忛粯璁�**涓嶅厑璁歌闂湰鍦版帴鍙�**锛坙ocalhost 鎴� 127.0.0.1锛夛紝浼氭姤浠ヤ笅閿欒锛�
+
+```
+request:fail url not in domain list
+// 鎴�
+request:fail -104:net::ERR_CONNECTION_FAILED
+```
+
+## 浜屻�佽В鍐虫柟妗堬紙3绉嶆柟娉曪級
+
+### 鏂规1锛氬紑鍙戣�呭伐鍏蜂腑鍏抽棴鍩熷悕鏍¢獙锛堟帹鑽愮敤浜庡紑鍙戣皟璇曪級
+
+杩欐槸鏈�绠�鍗曞揩閫熺殑鏂规硶锛岄�傚悎鏈湴寮�鍙戣皟璇曘��
+
+#### 姝ラ锛�
+
+1. **鎵撳紑寰俊寮�鍙戣�呭伐鍏�**
+ - 纭繚宸插畨瑁呭井淇″紑鍙戣�呭伐鍏�
+ - 瀵煎叆椤圭洰锛氶�夋嫨 `app` 鐩綍
+
+2. **鍏抽棴鍩熷悕鏍¢獙**
+ - 鐐瑰嚮鍙充笂瑙�"璇︽儏"鎸夐挳
+ - 鍒囨崲鍒�"鏈湴璁剧疆"閫夐」鍗�
+ - 鍕鹃�� 鉁� **涓嶆牎楠屽悎娉曞煙鍚嶃�亀eb-view锛堜笟鍔″煙鍚嶏級銆乀LS 鐗堟湰浠ュ強 HTTPS 璇佷功**
+
+3. **纭閰嶇疆鐢熸晥**
+ ```javascript
+ // app/config.js 淇濇寔
+ baseUrl: 'http://localhost:8080'
+ ```
+
+4. **閲嶆柊缂栬瘧**
+ - 鐐瑰嚮"缂栬瘧"鎸夐挳
+ - 鏌ョ湅鎺у埗鍙版槸鍚︽湁缃戠粶璇锋眰
+
+#### 浼樼偣锛�
+- 鉁� 閰嶇疆绠�鍗曪紝绔嬪嵆鐢熸晥
+- 鉁� 閫傚悎寮�鍙戣皟璇�
+- 鉁� 涓嶉渶瑕佷慨鏀逛唬鐮�
+
+#### 缂虹偣锛�
+- 鉂� 浠呭湪寮�鍙戣�呭伐鍏蜂腑鏈夋晥
+- 鉂� 鐪熸満棰勮鏃舵棤鏁�
+- 鉂� 姝e紡鐗堟湰蹇呴』閰嶇疆鍚堟硶鍩熷悕
+
+---
+
+### 鏂规2锛氫娇鐢ㄥ唴缃慖P鍦板潃锛堟帹鑽愮敤浜庣湡鏈鸿皟璇曪級
+
+浣跨敤鐢佃剳鐨勫唴缃慖P鍦板潃鏇夸唬localhost锛屽彲浠ヨ鎵嬫満璁块棶鐢佃剳涓婄殑鍚庣鏈嶅姟銆�
+
+#### 姝ラ锛�
+
+1. **鏌ユ壘鐢佃剳鍐呯綉IP**
+
+ **Windows绯荤粺**锛�
+ ```bash
+ # 鍛戒护琛屾墽琛�
+ ipconfig
+
+ # 鏌ユ壘绫讳技杩欐牱鐨勫湴鍧�
+ IPv4 鍦板潃 . . . . . . . . . . . . : 192.168.1.100
+ ```
+
+ **Mac/Linux绯荤粺**锛�
+ ```bash
+ # 缁堢鎵ц
+ ifconfig
+
+ # 鎴�
+ ip addr show
+
+ # 鏌ユ壘浠� 192.168.x.x 鎴� 10.x.x.x 寮�澶寸殑鍦板潃
+ ```
+
+2. **淇敼閰嶇疆鏂囦欢**
+
+ **鏂规硶A锛氱洿鎺ヤ慨鏀筩onfig.js锛堢畝鍗曚絾涓嶇伒娲伙級**
+ ```javascript
+ // app/config.js
+ module.exports = {
+ baseUrl: 'http://192.168.1.100:8080', // 鏀逛负浣犵殑鍐呯綉IP
+ // ...
+ }
+ ```
+
+ **鏂规硶B锛氱幆澧冨彉閲忛厤缃紙鎺ㄨ崘锛�**
+ ```javascript
+ // app/config.js
+ module.exports = {
+ // 鏍规嵁杩愯鐜鑷姩閫夋嫨
+ baseUrl: process.env.NODE_ENV === 'development'
+ ? 'http://192.168.1.100:8080' // 寮�鍙戠幆澧冿細鍐呯綉IP
+ : 'https://api.yourdomain.com', // 鐢熶骇鐜锛氱嚎涓婂煙鍚�
+ // ...
+ }
+ ```
+
+3. **纭繚鍚庣鍏佽璺ㄥ煙璁块棶**
+
+ 妫�鏌ュ悗绔厤缃紙RuoYi妗嗘灦榛樿宸查厤缃級锛�
+ ```java
+ // ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**")
+ .allowedOriginPatterns("*") // 鍏佽鎵�鏈夋潵婧�
+ .allowCredentials(true)
+ .allowedMethods("GET", "POST", "PUT", "DELETE")
+ .maxAge(3600);
+ }
+ ```
+
+4. **纭繚鐢佃剳闃茬伀澧欏厑璁歌闂�**
+
+ **Windows闃茬伀澧�**锛�
+ - 鎺у埗闈㈡澘 鈫� Windows Defender 闃茬伀澧� 鈫� 楂樼骇璁剧疆
+ - 鍏ョ珯瑙勫垯 鈫� 鏂板缓瑙勫垯 鈫� 绔彛 鈫� TCP 鈫� 鐗瑰畾绔彛 8080
+ - 鍏佽杩炴帴
+
+ **涓存椂鍏抽棴闃茬伀澧欐祴璇�**锛�
+ ```bash
+ # Windows锛堢鐞嗗憳鏉冮檺锛�
+ netsh advfirewall set allprofiles state off
+
+ # 娴嬭瘯瀹屾垚鍚庤寰楁墦寮�
+ netsh advfirewall set allprofiles state on
+ ```
+
+5. **鎵嬫満鍜岀數鑴戣繛鎺ュ悓涓�WiFi**
+ - 纭繚鎵嬫満鍜岀數鑴戝湪鍚屼竴灞�鍩熺綉
+ - 鎵撳紑寰俊寮�鍙戣�呭伐鍏� 鈫� 棰勮 鈫� 鎵爜鐪熸満璋冭瘯
+
+#### 浼樼偣锛�
+- 鉁� 鍙互鐪熸満璋冭瘯
+- 鉁� 鍥㈤槦鎴愬憳鍙互鍏变韩璋冭瘯
+- 鉁� 鎺ヨ繎鐪熷疄鐜
+
+#### 缂虹偣锛�
+- 鉂� IP鍦板潃鍙兘浼氬彉鍖�
+- 鉂� 闇�瑕侀厤缃槻鐏
+- 鉂� 浠呴檺鍚屼竴灞�鍩熺綉
+
+---
+
+### 鏂规3锛氫娇鐢ㄥ唴缃戠┛閫忓伐鍏凤紙鎺ㄨ崘鐢ㄤ簬杩滅▼璋冭瘯锛�
+
+浣跨敤鍐呯綉绌块�忓伐鍏凤紙濡傝姳鐢熷3銆乶grok銆丗RP锛夊皢鏈湴鏈嶅姟鏄犲皠鍒板叕缃戝煙鍚嶃��
+
+#### 3.1 浣跨敤 ngrok锛堝厤璐逛笖绠�鍗曪級
+
+1. **涓嬭浇瀹夎 ngrok**
+ - 瀹樼綉锛歨ttps://ngrok.com/
+ - 涓嬭浇瀵瑰簲绯荤粺鐗堟湰
+ - 娉ㄥ唽璐﹀彿鑾峰彇authtoken
+
+2. **鍚姩鍚庣鏈嶅姟**
+ ```bash
+ # 纭繚鍚庣杩愯鍦�8080绔彛
+ cd RuoYi-Vue-master
+ java -jar ruoyi-admin.jar
+ ```
+
+3. **鍚姩 ngrok**
+ ```bash
+ # Windows
+ ngrok.exe http 8080
+
+ # Mac/Linux
+ ./ngrok http 8080
+ ```
+
+4. **鑾峰彇鍏綉鍦板潃**
+ ```
+ Session Status online
+ Forwarding https://abc123.ngrok.io -> http://localhost:8080
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ 杩欏氨鏄綘鐨勫叕缃戝湴鍧�
+ ```
+
+5. **淇敼閰嶇疆**
+ ```javascript
+ // app/config.js
+ module.exports = {
+ baseUrl: 'https://abc123.ngrok.io', // ngrok鎻愪緵鐨勫湴鍧�
+ // ...
+ }
+ ```
+
+6. **鍦ㄥ井淇″皬绋嬪簭鍚庡彴閰嶇疆鍩熷悕**
+ - 鐧诲綍寰俊鍏紬骞冲彴锛歨ttps://mp.weixin.qq.com
+ - 寮�鍙� 鈫� 寮�鍙戠鐞� 鈫� 寮�鍙戣缃� 鈫� 鏈嶅姟鍣ㄥ煙鍚�
+ - 閰嶇疆 request鍚堟硶鍩熷悕锛歚https://abc123.ngrok.io`
+
+#### 3.2 浣跨敤鑺辩敓澹筹紙鍥藉唴绋冲畾锛�
+
+1. **涓嬭浇瀹夎鑺辩敓澹�**
+ - 瀹樼綉锛歨ttps://hsk.oray.com/
+ - 娉ㄥ唽璐﹀彿
+
+2. **鍒涘缓鍐呯綉绌块�忔槧灏�**
+ - 鍐呯綉涓绘満锛歭ocalhost
+ - 鍐呯綉绔彛锛�8080
+ - 澶栫綉鍩熷悕锛氱郴缁熷垎閰嶏紙濡� xxx.vicp.fun锛�
+
+3. **淇敼閰嶇疆**
+ ```javascript
+ // app/config.js
+ module.exports = {
+ baseUrl: 'http://xxx.vicp.fun', // 鑺辩敓澹虫彁渚涚殑鍩熷悕
+ // ...
+ }
+ ```
+
+#### 浼樼偣锛�
+- 鉁� 鍙互杩滅▼璁块棶
+- 鉁� 绋冲畾鐨勫煙鍚�
+- 鉁� 鏀寔HTTPS
+
+#### 缂虹偣锛�
+- 鉂� 闇�瑕佺涓夋柟鏈嶅姟
+- 鉂� 鍏嶈垂鐗堟湁闄愬埗
+- 鉂� 鍙兘鏈夊欢杩�
+
+---
+
+## 涓夈�佹帹鑽愰厤缃柟妗�
+
+### 3.1 澶氱幆澧冮厤缃紙鏈�浣冲疄璺碉級
+
+淇敼 `app/config.js`锛屾敮鎸佸鐜鑷姩鍒囨崲锛�
+
+```javascript
+// app/config.js
+
+// 鐜閰嶇疆
+const ENV_CONFIG = {
+ // 寮�鍙戠幆澧�
+ development: {
+ baseUrl: 'http://192.168.1.100:8080', // 淇敼涓轰綘鐨勫唴缃慖P
+ description: '寮�鍙戠幆澧�'
+ },
+ // 娴嬭瘯鐜
+ test: {
+ baseUrl: 'http://test.yourdomain.com',
+ description: '娴嬭瘯鐜'
+ },
+ // 鐢熶骇鐜
+ production: {
+ baseUrl: 'https://api.yourdomain.com',
+ description: '鐢熶骇鐜'
+ }
+}
+
+// 褰撳墠鐜锛堟墜鍔ㄥ垏鎹級
+const CURRENT_ENV = 'development' // 鍙��: development, test, production
+
+// 瀵煎嚭閰嶇疆
+module.exports = {
+ baseUrl: ENV_CONFIG[CURRENT_ENV].baseUrl,
+
+ // 搴旂敤淇℃伅
+ appInfo: {
+ name: "姘戣埅璋冨害绯荤粺",
+ version: "1.1.0",
+ logo: "/static/logo.png",
+ site_url: "http://ruoyi.vip",
+
+ // 鐜淇℃伅锛堢敤浜庤皟璇曪級
+ env: CURRENT_ENV,
+ envDescription: ENV_CONFIG[CURRENT_ENV].description,
+
+ // 鍗忚锛堜娇鐢ㄦ湰鍦伴〉闈級
+ agreements: [
+ {
+ title: "闅愮鏀跨瓥",
+ url: "/pages/mine/privacy-policy/index"
+ },
+ {
+ title: "鐢ㄦ埛鏈嶅姟鍗忚",
+ url: "/pages/mine/user-agreement/index"
+ }
+ ]
+ }
+}
+```
+
+### 3.2 鏄剧ず褰撳墠鐜淇℃伅锛堣皟璇曠敤锛�
+
+鍦ㄩ椤垫樉绀哄綋鍓嶄娇鐢ㄧ殑鎺ュ彛鍦板潃锛�
+
+```vue
+<!-- app/pages/index.vue -->
+<template>
+ <view>
+ <!-- 寮�鍙戠幆澧冩彁绀� -->
+ <view v-if="isDev" class="dev-info">
+ <text>{{ envInfo }}</text>
+ </view>
+
+ <!-- ...鍏朵粬鍐呭 -->
+ </view>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ isDev: process.env.NODE_ENV === 'development',
+ envInfo: ''
+ }
+ },
+ onLoad() {
+ const config = getApp().globalData.config
+ this.envInfo = `鐜锛�${config.appInfo.envDescription}\n鎺ュ彛锛�${config.baseUrl}`
+ }
+}
+</script>
+
+<style>
+.dev-info {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: rgba(255, 0, 0, 0.8);
+ color: white;
+ padding: 10rpx;
+ font-size: 20rpx;
+ text-align: center;
+ z-index: 9999;
+}
+</style>
+```
+
+---
+
+## 鍥涖�佸畬鏁撮厤缃楠わ紙鎺ㄨ崘娴佺▼锛�
+
+### 姝ラ1: 鍚姩鍚庣鏈嶅姟
+
+```bash
+# 杩涘叆鍚庣椤圭洰鐩綍
+cd d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master
+
+# 鍚姩鍚庣锛堢‘淇濈鍙�8080锛�
+# 鏂规硶1: IDEA鐩存帴杩愯 RuoYiApplication.java
+# 鏂规硶2: 鍛戒护琛岃繍琛�
+mvn spring-boot:run
+```
+
+### 姝ラ2: 鏌ユ壘鐢佃剳鍐呯綉IP
+
+```bash
+# Windows
+ipconfig
+
+# 鎵惧埌绫讳技杩欐牱鐨勫湴鍧�
+浠ュお缃戦�傞厤鍣� 浠ュお缃�:
+ IPv4 鍦板潃 . . . . . . . . . . . . : 192.168.1.100
+```
+
+### 姝ラ3: 淇敼閰嶇疆鏂囦欢
+
+```javascript
+// app/config.js
+module.exports = {
+ baseUrl: 'http://192.168.1.100:8080', // 鏀逛负浣犵殑IP
+ // ...
+}
+```
+
+### 姝ラ4: 寰俊寮�鍙戣�呭伐鍏烽厤缃�
+
+1. **鎵撳紑椤圭洰**
+ - HBuilderX 鈫� 杩愯 鈫� 杩愯鍒板皬绋嬪簭妯℃嫙鍣� 鈫� 寰俊寮�鍙戣�呭伐鍏�
+ - 鎴栫洿鎺ュ湪寰俊寮�鍙戣�呭伐鍏蜂腑瀵煎叆 `app` 鐩綍
+
+2. **鍏抽棴鍩熷悕鏍¢獙**
+ - 璇︽儏 鈫� 鏈湴璁剧疆
+ - 鉁� 鍕鹃��"涓嶆牎楠屽悎娉曞煙鍚�..."
+
+3. **娓呴櫎缂撳瓨閲嶆柊缂栬瘧**
+ - 宸ュ叿 鈫� 娓呴櫎缂撳瓨 鈫� 娓呴櫎鎵�鏈夌紦瀛�
+ - 鐐瑰嚮"缂栬瘧"
+
+### 姝ラ5: 楠岃瘉閰嶇疆
+
+1. **妫�鏌ョ綉缁滆姹�**
+ - 鎵撳紑璋冭瘯鍣� 鈫� Network
+ - 鐧诲綍绯荤粺锛屾煡鐪嬭姹傚湴鍧�鏄惁姝g‘
+
+2. **娴嬭瘯鎺ュ彛**
+ ```javascript
+ // 鍦ㄦ帶鍒跺彴鎵ц
+ console.log(getApp().globalData.config.baseUrl)
+ // 搴旇杈撳嚭: http://192.168.1.100:8080
+ ```
+
+---
+
+## 浜斻�佸父瑙侀棶棰樻帓鏌�
+
+### 闂1: request:fail url not in domain list
+
+**鍘熷洜**: 鍩熷悕鏍¢獙鏈叧闂�
+
+**瑙e喅**:
+- 寰俊寮�鍙戣�呭伐鍏� 鈫� 璇︽儏 鈫� 鏈湴璁剧疆
+- 鉁� 鍕鹃��"涓嶆牎楠屽悎娉曞煙鍚�..."
+
+---
+
+### 闂2: request:fail -104:net::ERR_CONNECTION_FAILED
+
+**鍘熷洜**:
+1. 鍚庣鏈嶅姟鏈惎鍔�
+2. IP鍦板潃閿欒
+3. 闃茬伀澧欓樆姝�
+
+**瑙e喅**:
+```bash
+# 1. 妫�鏌ュ悗绔槸鍚﹀惎鍔�
+netstat -ano | findstr 8080
+
+# 2. 妫�鏌P鏄惁姝g‘
+ipconfig
+
+# 3. 娴嬭瘯鍚庣鏄惁鍙闂�
+# 娴忚鍣ㄦ墦寮�: http://192.168.1.100:8080
+```
+
+---
+
+### 闂3: 鐪熸満璋冭瘯鏃犳硶璁块棶
+
+**鍘熷洜**: 鎵嬫満鍜岀數鑴戜笉鍦ㄥ悓涓�WiFi
+
+**瑙e喅**:
+1. 纭繚鎵嬫満鍜岀數鑴戣繛鎺ュ悓涓�WiFi
+2. 浣跨敤鍐呯綉IP鑰岄潪localhost
+3. 妫�鏌ラ槻鐏璁剧疆
+
+---
+
+### 闂4: 璺ㄥ煙閿欒
+
+**鍘熷洜**: 鍚庣鏈厤缃法鍩�
+
+**瑙e喅**:
+```java
+// ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java
+// 纭繚宸查厤缃瓹ORS
+```
+
+---
+
+## 鍏�佷笉鍚屽紑鍙戝伐鍏风殑閰嶇疆
+
+### 6.1 HBuilderX
+
+1. **杩愯鍒板井淇″皬绋嬪簭**
+ - 鑿滃崟 鈫� 杩愯 鈫� 杩愯鍒板皬绋嬪簭妯℃嫙鍣� 鈫� 寰俊寮�鍙戣�呭伐鍏�
+
+2. **閰嶇疆寰俊寮�鍙戣�呭伐鍏疯矾寰�**
+ - 宸ュ叿 鈫� 璁剧疆 鈫� 杩愯閰嶇疆
+ - 閰嶇疆"寰俊寮�鍙戣�呭伐鍏疯矾寰�"
+
+3. **manifest.json閰嶇疆**
+ - 婧愮爜瑙嗗浘 鈫� mp-weixin 鈫� appid
+ - 濉啓浣犵殑灏忕▼搴廇ppID
+
+### 6.2 鐩存帴浣跨敤寰俊寮�鍙戣�呭伐鍏�
+
+1. **瀵煎叆椤圭洰**
+ - 鎵撳紑寰俊寮�鍙戣�呭伐鍏�
+ - 閫夋嫨"瀵煎叆椤圭洰"
+ - 椤圭洰鐩綍锛歚app`
+ - AppID锛氫娇鐢ㄦ祴璇曞彿鎴栦綘鐨凙ppID
+
+2. **閰嶇疆**
+ - 璇︽儏 鈫� 鏈湴璁剧疆 鈫� 涓嶆牎楠屽煙鍚�
+
+---
+
+## 涓冦�佹帹鑽愰厤缃紙鏈�缁堢増鏈級
+
+```javascript
+// app/config.js - 瀹屾暣閰嶇疆绀轰緥
+
+// 鑷姩妫�娴嬭繍琛岀幆澧�
+const isDev = process.env.NODE_ENV === 'development'
+const isMP = process.env.VUE_APP_PLATFORM === 'mp-weixin'
+
+// 鑾峰彇鏈湴IP锛堥渶瑕佹墜鍔ㄩ厤缃級
+const LOCAL_IP = '192.168.1.100' // 鈿狅笍 淇敼涓轰綘鐨勭數鑴慖P
+
+// 鐜閰嶇疆
+const ENV_CONFIG = {
+ // 鏈湴寮�鍙�
+ local: `http://${LOCAL_IP}:8080`,
+
+ // 娴嬭瘯鐜
+ test: 'http://test.yourdomain.com',
+
+ // 鐢熶骇鐜
+ prod: 'https://api.yourdomain.com'
+}
+
+// 鑷姩閫夋嫨鐜
+let baseUrl = ENV_CONFIG.local // 榛樿鏈湴寮�鍙�
+
+// 鏍规嵁涓嶅悓鏉′欢閫夋嫨鐜
+if (process.env.UNI_PLATFORM === 'h5' && !isDev) {
+ // H5鐢熶骇鐜
+ baseUrl = ENV_CONFIG.prod
+}
+
+module.exports = {
+ baseUrl: baseUrl,
+
+ appInfo: {
+ name: "姘戣埅璋冨害绯荤粺",
+ version: "1.1.0",
+ logo: "/static/logo.png",
+ site_url: "http://ruoyi.vip",
+
+ // 鏄剧ず褰撳墠鐜锛堝紑鍙戞椂鍙锛�
+ showEnv: isDev,
+ currentEnv: baseUrl,
+
+ agreements: [
+ {
+ title: "闅愮鏀跨瓥",
+ url: "/pages/mine/privacy-policy/index"
+ },
+ {
+ title: "鐢ㄦ埛鏈嶅姟鍗忚",
+ url: "/pages/mine/user-agreement/index"
+ }
+ ]
+ }
+}
+```
+
+---
+
+## 鍏�佹�荤粨
+
+### 寮�鍙戦樁娈垫帹鑽愭柟妗�
+
+| 鍦烘櫙 | 鎺ㄨ崘鏂规 | 閰嶇疆澶嶆潅搴� |
+|------|----------|-----------|
+| 寰俊寮�鍙戣�呭伐鍏疯皟璇� | 鏂规1 + localhost | 猸� 绠�鍗� |
+| 鐪熸満璋冭瘯 | 鏂规2 + 鍐呯綉IP | 猸愨瓙 涓瓑 |
+| 杩滅▼璋冭瘯/婕旂ず | 鏂规3 + 鍐呯綉绌块�� | 猸愨瓙猸� 澶嶆潅 |
+
+### 蹇�熷紑濮嬶紙鏈�绠�鍗曟柟寮忥級
+
+1. **鍚姩鍚庣**: 杩愯 RuoYiApplication.java
+2. **閰嶇疆鍓嶇**: `config.js` 涓� `baseUrl: 'http://localhost:8080'`
+3. **寰俊宸ュ叿**: 鍕鹃��"涓嶆牎楠屽悎娉曞煙鍚�"
+4. **寮�濮嬭皟璇�**: 鐐瑰嚮"缂栬瘧"
+
+### 娉ㄦ剰浜嬮」
+
+鈿狅笍 **瀹夊叏鎻愰啋**锛�
+- 鐢熶骇鐜蹇呴』浣跨敤HTTPS鍩熷悕
+- 涓嶈灏嗘祴璇曢厤缃彁浜ゅ埌浠g爜浠撳簱
+- 浣跨敤 `.env` 鏂囦欢绠$悊鏁忔劅閰嶇疆
+
+鈿狅笍 **鎬ц兘鎻愰啋**锛�
+- 鍐呯綉绌块�忎細澧炲姞寤惰繜
+- 寤鸿浼樺厛浣跨敤灞�鍩熺綉璋冭瘯
+- 澶ф枃浠朵笂浼犲缓璁娇鐢ㄧ洿杩�
+
+---
+
+濡傛湁鍏朵粬闂锛岃鍙傝�冿細
+- 寰俊灏忕▼搴忓畼鏂规枃妗o細https://developers.weixin.qq.com/miniprogram/dev/
+- uni-app瀹樻柟鏂囨。锛歨ttps://uniapp.dcloud.io/
diff --git "a/app/\345\277\253\351\200\237\351\205\215\347\275\256\346\270\205\345\215\225.md" "b/app/\345\277\253\351\200\237\351\205\215\347\275\256\346\270\205\345\215\225.md"
new file mode 100644
index 0000000..e4ec4de
--- /dev/null
+++ "b/app/\345\277\253\351\200\237\351\205\215\347\275\256\346\270\205\345\215\225.md"
@@ -0,0 +1,266 @@
+# 寰俊灏忕▼搴忔湰鍦拌皟璇� - 蹇�熼厤缃竻鍗�
+
+## 鉁� 閰嶇疆姝ラ锛�5鍒嗛挓瀹屾垚锛�
+
+### 绗�1姝ワ細鏌ユ壘鐢佃剳IP鍦板潃锛�1鍒嗛挓锛�
+
+**Windows绯荤粺**锛�
+```bash
+# 鎵撳紑鍛戒护鎻愮ず绗︼紙Win+R锛岃緭鍏md锛�
+ipconfig
+
+# 鎵惧埌杩欎竴琛岋細
+IPv4 鍦板潃 . . . . . . . . . . . . : 192.168.1.100
+ 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
+ 璁颁笅杩欎釜IP鍦板潃
+```
+
+**Mac绯荤粺**锛�
+```bash
+# 鎵撳紑缁堢
+ifconfig
+
+# 鎵惧埌 en0 鎴� en1 涓嬬殑 inet 鍦板潃
+inet 192.168.1.100
+ 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
+ 璁颁笅杩欎釜IP鍦板潃
+```
+
+---
+
+### 绗�2姝ワ細淇敼閰嶇疆鏂囦欢锛�30绉掞級
+
+鎵撳紑鏂囦欢锛歚app/config.js`
+
+鎵惧埌绗�6琛岋紝淇敼涓轰綘鐨処P锛�
+
+```javascript
+// 淇敼鍓�
+const LOCAL_IP = 'localhost'
+
+// 淇敼鍚庯紙濉叆浣犲垰鎵嶈涓嬬殑IP锛�
+const LOCAL_IP = '192.168.1.100' // 鈿狅笍 鏀规垚浣犵殑IP
+```
+
+淇濆瓨鏂囦欢銆�
+
+---
+
+### 绗�3姝ワ細鍚姩鍚庣鏈嶅姟锛�1鍒嗛挓锛�
+
+**鏂规硶1锛氫娇鐢↖DEA**
+- 鎵撳紑椤圭洰 `RuoYi-Vue-master`
+- 鎵惧埌 `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java`
+- 鐐瑰嚮杩愯鎸夐挳 鈻讹笍
+- 绛夊緟鍚姩瀹屾垚锛岀湅鍒� `Application Run Successfully`
+
+**鏂规硶2锛氬懡浠よ**
+```bash
+cd d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master
+mvn spring-boot:run
+```
+
+**楠岃瘉鍚庣鏄惁鍚姩**锛�
+- 娴忚鍣ㄦ墦寮�锛歨ttp://localhost:8080
+- 搴旇鐪嬪埌鑻ヤ緷绯荤粺鐨勭櫥褰曢〉闈�
+
+---
+
+### 绗�4姝ワ細閰嶇疆寰俊寮�鍙戣�呭伐鍏凤紙2鍒嗛挓锛�
+
+1. **鎵撳紑寰俊寮�鍙戣�呭伐鍏�**
+ - 濡傛灉娌℃湁瀹夎锛屼笅杞藉湴鍧�锛歨ttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
+
+2. **瀵煎叆椤圭洰**
+ - 鐐瑰嚮"+"鍙� 鈫� 瀵煎叆椤圭洰
+ - 鐩綍锛歚d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\app`
+ - AppID锛氫娇鐢ㄦ祴璇曞彿锛堟垨濉叆浣犵殑AppID锛�
+ - 椤圭洰鍚嶇О锛氭�ユ晳杞繍璋冨害绯荤粺
+
+3. **鍏抽棴鍩熷悕鏍¢獙**锛堥噸瑕侊紒锛�
+ - 鐐瑰嚮鍙充笂瑙�"璇︽儏"
+ - 鍒囨崲鍒�"鏈湴璁剧疆"鏍囩
+ - 鉁� 鍕鹃��"涓嶆牎楠屽悎娉曞煙鍚嶃�亀eb-view锛堜笟鍔″煙鍚嶏級銆乀LS鐗堟湰浠ュ強HTTPS璇佷功"
+
+4. **缂栬瘧杩愯**
+ - 鐐瑰嚮"缂栬瘧"鎸夐挳
+ - 绛夊緟缂栬瘧瀹屾垚
+
+---
+
+### 绗�5姝ワ細娴嬭瘯楠岃瘉锛�1鍒嗛挓锛�
+
+1. **娴嬭瘯鐧诲綍**
+ - 鍦ㄥ皬绋嬪簭妯℃嫙鍣ㄤ腑杈撳叆璐﹀彿瀵嗙爜
+ - 璐﹀彿锛歚admin`
+ - 瀵嗙爜锛歚admin123`
+ - 鐐瑰嚮鐧诲綍
+
+2. **妫�鏌ョ綉缁滆姹�**
+ - 鎵撳紑璋冭瘯鍣� 鈫� Network 鏍囩
+ - 搴旇鑳界湅鍒拌姹傚彂閫佸埌锛歚http://192.168.1.100:8080/...`
+
+3. **濡傛灉鐧诲綍鎴愬姛**
+ - 鉁� 閰嶇疆瀹屾垚锛�
+
+---
+
+## 鉂� 甯歌闂蹇�熻В鍐�
+
+### 闂1锛歳equest:fail -104
+
+**鍘熷洜**锛氬悗绔病鏈夊惎鍔ㄦ垨IP閿欒
+
+**瑙e喅**锛�
+```bash
+# 1. 妫�鏌ュ悗绔槸鍚﹁繍琛�
+娴忚鍣ㄦ墦寮�: http://192.168.1.100:8080
+
+# 2. 濡傛灉鎵撲笉寮�锛屾鏌P鏄惁姝g‘
+鍐嶆鎵ц: ipconfig
+
+# 3. 纭繚绔彛8080娌℃湁琚崰鐢�
+netstat -ano | findstr 8080
+```
+
+---
+
+### 闂2锛歳equest:fail url not in domain list
+
+**鍘熷洜**锛氭病鏈夊叧闂煙鍚嶆牎楠�
+
+**瑙e喅**锛�
+- 寰俊寮�鍙戣�呭伐鍏� 鈫� 璇︽儏 鈫� 鏈湴璁剧疆
+- 鉁� 鍕鹃��"涓嶆牎楠屽悎娉曞煙鍚�..."
+
+---
+
+### 闂3锛氱湡鏈鸿皟璇曟棤娉曡闂�
+
+**鍘熷洜**锛氭墜鏈哄拰鐢佃剳涓嶅湪鍚屼竴WiFi
+
+**瑙e喅**锛�
+1. 纭繚鎵嬫満鍜岀數鑴戣繛鎺ュ悓涓�WiFi
+2. 妫�鏌ョ數鑴戦槻鐏鏄惁闃绘浜�8080绔彛
+3. 涓存椂鍏抽棴闃茬伀澧欐祴璇曪細
+ ```bash
+ # Windows锛堢鐞嗗憳鏉冮檺锛�
+ netsh advfirewall set allprofiles state off
+
+ # 娴嬭瘯瀹屾垚鍚庤寰楁墦寮�
+ netsh advfirewall set allprofiles state on
+ ```
+
+---
+
+## 馃摫 鐪熸満璋冭瘯閰嶇疆
+
+### 鐪熸満棰勮
+
+1. **寰俊寮�鍙戣�呭伐鍏蜂腑**
+ - 鐐瑰嚮"棰勮"鎸夐挳
+ - 鎵弿浜岀淮鐮�
+
+2. **鎵嬫満杩炴帴鍚屼竴WiFi**
+ - 纭繚鎵嬫満鍜岀數鑴戝湪鍚屼竴缃戠粶
+
+3. **濡傛灉鏃犳硶璁块棶**
+ - 妫�鏌ラ槻鐏璁剧疆
+ - 灏濊瘯涓存椂鍏抽棴闃茬伀澧�
+
+---
+
+## 馃敡 鐜鍒囨崲
+
+### 寮�鍙戠幆澧冿紙鏈湴璋冭瘯锛�
+
+```javascript
+// app/config.js
+const CURRENT_ENV = 'development' // 浣跨敤鏈湴IP
+```
+
+### 娴嬭瘯鐜
+
+```javascript
+// app/config.js
+const CURRENT_ENV = 'test' // 浣跨敤娴嬭瘯鏈嶅姟鍣�
+```
+
+闇�瑕佸厛鍦ㄧ13-16琛岄厤缃祴璇曟湇鍔″櫒鍦板潃锛�
+```javascript
+test: {
+ baseUrl: 'http://test.yourdomain.com', // 鏀逛负瀹為檯鍦板潃
+ description: '娴嬭瘯鐜'
+}
+```
+
+### 鐢熶骇鐜
+
+```javascript
+// app/config.js
+const CURRENT_ENV = 'production' // 浣跨敤绾夸笂鏈嶅姟鍣�
+```
+
+闇�瑕佸厛鍦ㄧ17-20琛岄厤缃敓浜ф湇鍔″櫒鍦板潃锛�
+```javascript
+production: {
+ baseUrl: 'https://api.yourdomain.com', // 鏀逛负瀹為檯鍦板潃
+ description: '鐢熶骇鐜'
+}
+```
+
+---
+
+## 馃搵 閰嶇疆妫�鏌ユ竻鍗�
+
+寮�濮嬭皟璇曞墠锛岃纭锛�
+
+- [ ] 鍚庣鏈嶅姟宸插惎鍔紙http://localhost:8080 鍙互璁块棶锛�
+- [ ] 宸叉煡鍒扮數鑴慖P鍦板潃
+- [ ] config.js 涓凡濉啓姝g‘鐨処P鍦板潃
+- [ ] 寰俊寮�鍙戣�呭伐鍏峰凡瀹夎
+- [ ] 宸插叧闂煙鍚嶆牎楠�
+- [ ] 鎵嬫満鍜岀數鑴戝湪鍚屼竴WiFi锛堢湡鏈鸿皟璇曟椂锛�
+
+---
+
+## 馃挕 鎻愮ず
+
+### 鏌ョ湅褰撳墠閰嶇疆
+
+鍦ㄥ皬绋嬪簭涓墦寮�鎺у埗鍙帮紙Console锛夛紝鎵ц锛�
+
+```javascript
+console.log(getApp().globalData.config.baseUrl)
+// 搴旇杈撳嚭: http://192.168.1.100:8080
+```
+
+### 鏌ョ湅褰撳墠鐜
+
+```javascript
+const config = getApp().globalData.config
+console.log('鐜:', config.appInfo.envDescription)
+console.log('鎺ュ彛:', config.baseUrl)
+```
+
+---
+
+## 馃摓 闇�瑕佸府鍔╋紵
+
+濡傛灉鎸夌収浠ヤ笂姝ラ浠嶆棤娉曡В鍐筹紝璇锋彁渚涳細
+
+1. 閿欒鎴浘锛堟帶鍒跺彴 Console 鍜� Network锛�
+2. 閰嶇疆鏂囦欢鍐呭锛坈onfig.js锛�
+3. 鍚庣鍚姩鏃ュ織
+4. 鐢佃剳IP鍦板潃
+
+---
+
+## 鉁� 閰嶇疆鎴愬姛鏍囧織
+
+褰撲綘鐪嬪埌锛�
+- 鉁� 灏忕▼搴忚兘姝e父鐧诲綍
+- 鉁� Network涓兘鐪嬪埌璇锋眰鍙戦�佸埌浣犵殑IP鍦板潃
+- 鉁� 鍚庣鑳芥敹鍒拌姹傚苟杩斿洖鏁版嵁
+
+鎭枩浣狅紝閰嶇疆鎴愬姛锛侌煄�
diff --git "a/prd/uni-app\346\250\241\346\235\277\350\257\255\346\263\225\344\277\256\345\244\215-class\347\273\221\345\256\232.md" "b/prd/uni-app\346\250\241\346\235\277\350\257\255\346\263\225\344\277\256\345\244\215-class\347\273\221\345\256\232.md"
new file mode 100644
index 0000000..fe6f0f7
--- /dev/null
+++ "b/prd/uni-app\346\250\241\346\235\277\350\257\255\346\263\225\344\277\256\345\244\215-class\347\273\221\345\256\232.md"
@@ -0,0 +1,279 @@
+# uni-app 妯℃澘璇硶淇 - :class 鏂规硶璋冪敤闂
+
+## 闂鎻忚堪
+
+缂栬瘧鏃堕亣鍒颁互涓嬮敊璇細
+
+```
+Module Error (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js):
+(Emitted value instead of an instance of Error)
+ Errors compiling template:
+ :class涓嶆敮鎸� getStatusClass(task.taskStatus) 璇硶
+```
+
+## 闂鍘熷洜
+
+鍦� uni-app 鐨勬ā鏉夸腑锛宍:class` 涓嶆敮鎸佺洿鎺ヨ皟鐢ㄦ柟娉曪紝渚嬪锛�
+
+```vue
+<!-- 鉂� 閿欒鍐欐硶 -->
+<view class="task-status" :class="getStatusClass(task.taskStatus)">
+```
+
+杩欐槸 uni-app 鐨勮娉曢檺鍒讹紝涓庢爣鍑� Vue.js 涓嶅悓銆�
+
+## 瑙e喅鏂规
+
+灏嗘柟娉曡皟鐢ㄦ敼涓鸿〃杈惧紡鎷兼帴瀛楃涓茬殑褰㈠紡锛屼娇鐢ㄤ笁鍏冭繍绠楃锛堟潯浠惰〃杈惧紡锛夋潵瀹炵幇锛�
+
+```vue
+<!-- 鉁� 姝g‘鍐欐硶 -->
+<view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
+```
+
+## 淇敼鏂囦欢
+
+### 1. app/pages/index.vue
+
+**淇敼鍓嶏細**
+```vue
+<view class="task-status" :class="getStatusClass(task.taskStatus)">
+ {{ getStatusText(task.status) }}
+</view>
+```
+
+**淇敼鍚庯細**
+```vue
+<view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
+ {{ getStatusText(task.status) }}
+</view>
+```
+
+### 2. app/pages/task/index.vue
+
+**淇敼鍓嶏細**
+```vue
+<view class="task-status" :class="getStatusClass(task.taskStatus)">
+ {{ getStatusText(task.taskStatus) }}
+</view>
+```
+
+**淇敼鍚庯細**
+```vue
+<view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'">
+ {{ getStatusText(task.taskStatus) }}
+</view>
+```
+
+### 3. app/pages/task/detail.vue
+
+**淇敼鍓嶏細**
+```vue
+<view class="value status" :class="taskDetail.taskStatus.toLowerCase()">
+ {{ getStatusText(taskDetail.taskStatus) }}
+</view>
+```
+
+**淇敼鍚庯細**
+```vue
+<view class="value status" :class="taskDetail.taskStatus === 'PENDING' ? 'pending' : taskDetail.taskStatus === 'DEPARTING' ? 'in_progress' : taskDetail.taskStatus === 'ARRIVED' ? 'in_progress' : taskDetail.taskStatus === 'RETURNING' ? 'in_progress' : taskDetail.taskStatus === 'IN_PROGRESS' ? 'in_progress' : taskDetail.taskStatus === 'COMPLETED' ? 'completed' : taskDetail.taskStatus === 'CANCELLED' ? 'cancelled' : ''">
+ {{ getStatusText(taskDetail.taskStatus) }}
+</view>
+```
+
+**璇存槑锛�**
+- `detail.vue` 涓娇鐢ㄧ殑鏄皬鍐欑殑鐘舵�佺被鍚嶏紙`pending`, `in_progress`, `completed`, `cancelled`锛�
+- 灏嗗涓繘琛屼腑鐨勭姸鎬侊紙`DEPARTING`, `ARRIVED`, `RETURNING`, `IN_PROGRESS`锛夐兘鏄犲皠涓� `in_progress` 绫�
+
+## 鐘舵�佺被鍚嶆槧灏�
+
+鍘� `getStatusClass` 鏂规硶鐨勬槧灏勯�昏緫锛�
+
+```javascript
+getStatusClass(status) {
+ const statusClassMap = {
+ 'PENDING': 'status-pending', // 寰呭鐞�
+ 'DEPARTING': 'status-departing', // 鍑哄彂涓�
+ 'ARRIVED': 'status-arrived', // 宸插埌杈�
+ 'RETURNING': 'status-returning', // 杩旂▼涓�
+ 'COMPLETED': 'status-completed', // 宸插畬鎴�
+ 'CANCELLED': 'status-cancelled', // 宸插彇娑�
+ 'IN_PROGRESS': 'status-in-progress' // 澶勭悊涓�
+ }
+ return statusClassMap[status] || 'status-default'
+}
+```
+
+鐜板湪鐩存帴鍦ㄦā鏉夸腑浣跨敤涓夊厓琛ㄨ揪寮忓疄鐜扮浉鍚岀殑鏄犲皠閫昏緫銆�
+
+## uni-app 妯℃澘璇硶闄愬埗
+
+### 涓嶆敮鎸佺殑璇硶
+
+1. **鏂规硶璋冪敤** 鉂�
+ ```vue
+ :class="getStatusClass(task.taskStatus)"
+ ```
+
+2. **澶嶆潅琛ㄨ揪寮�** 鉂�
+ ```vue
+ :style="{ color: getColor(item.type) }"
+ ```
+
+### 鏀寔鐨勮娉�
+
+1. **绠�鍗曞睘鎬ц闂�** 鉁�
+ ```vue
+ :class="task.statusClass"
+ ```
+
+2. **涓夊厓杩愮畻绗�** 鉁�
+ ```vue
+ :class="task.status === 'PENDING' ? 'status-pending' : 'status-default'"
+ ```
+
+3. **鏁扮粍/瀵硅薄瀛楅潰閲�** 鉁�
+ ```vue
+ :class="[task.baseClass, task.statusClass]"
+ :class="{ 'active': task.isActive, 'disabled': task.isDisabled }"
+ ```
+
+4. **璁$畻灞炴��** 鉁�
+ ```vue
+ :class="taskStatusClass"
+
+ // 鍦� computed 涓畾涔�
+ computed: {
+ taskStatusClass() {
+ return this.getStatusClass(this.task.taskStatus)
+ }
+ }
+ ```
+
+## 鏇夸唬鏂规姣旇緝
+
+### 鏂规1锛氫笁鍏冭繍绠楃锛堝凡閲囩敤锛�
+
+**浼樼偣锛�**
+- 鏃犻渶淇敼 script 閮ㄥ垎
+- 閫昏緫鐩磋锛屽湪妯℃澘涓彲瑙�
+
+**缂虹偣锛�**
+- 琛ㄨ揪寮忚緝闀匡紝浠g爜鍐椾綑
+- 澶氫釜鐘舵�佹椂鍙鎬х◢宸�
+
+### 鏂规2锛氳绠楀睘鎬�
+
+```vue
+<template>
+ <view class="task-status" :class="statusClass">
+</template>
+
+<script>
+export default {
+ computed: {
+ statusClass() {
+ return this.getStatusClass(this.task.taskStatus)
+ }
+ }
+}
+</script>
+```
+
+**浼樼偣锛�**
+- 妯℃澘鏇寸畝娲�
+- 閫昏緫灏佽鍦� script 涓�
+
+**缂虹偣锛�**
+- 闇�瑕佷负鍒楄〃涓瘡涓」鐩畾涔夎绠楀睘鎬�
+- 鍦� `v-for` 涓娇鐢ㄦ椂澶嶆潅搴﹁緝楂�
+
+### 鏂规3锛氶澶勭悊鏁版嵁
+
+```javascript
+loadTasks() {
+ listTask(this.queryParams).then(response => {
+ this.taskList = response.rows.map(task => ({
+ ...task,
+ statusClass: this.getStatusClass(task.taskStatus)
+ }))
+ })
+}
+```
+
+**浼樼偣锛�**
+- 妯℃澘鏈�绠�娲�
+- 鎬ц兘鏈�濂斤紙棰勮绠椾竴娆★級
+
+**缂虹偣锛�**
+- 闇�瑕佸湪鏁版嵁鍔犺浇鏃跺鐞�
+- 澧炲姞浜嗘暟鎹璞$殑瀛楁
+
+## 鏈�浣冲疄璺�
+
+### 瀵逛簬鍒楄〃娓叉煋锛堟帹鑽愭柟妗�1鎴�3锛�
+
+```vue
+<!-- 鏂规1锛氫笁鍏冭繍绠楃 -->
+<view v-for="task in taskList" :key="task.id">
+ <view :class="task.status === 'PENDING' ? 'status-pending' : 'status-default'">
+ </view>
+</view>
+
+<!-- 鏂规3锛氶澶勭悊鏁版嵁 -->
+<view v-for="task in taskList" :key="task.id">
+ <view :class="task.statusClass">
+ </view>
+</view>
+```
+
+### 瀵逛簬鍗曚釜鍏冪礌锛堟帹鑽愭柟妗�2锛�
+
+```vue
+<!-- 鏂规2锛氳绠楀睘鎬� -->
+<template>
+ <view :class="taskStatusClass">
+</template>
+
+<script>
+export default {
+ computed: {
+ taskStatusClass() {
+ return this.getStatusClass(this.currentTask.taskStatus)
+ }
+ }
+}
+</script>
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **淇濈暀鏂规硶瀹氫箟**
+ - 铏界劧妯℃澘涓笉鑳界洿鎺ヨ皟鐢� `getStatusClass` 鏂规硶
+ - 浣嗚鏂规硶浠嶅彲鐢ㄤ簬鍏朵粬鍦烘櫙锛堝棰勫鐞嗘暟鎹級
+ - 寤鸿淇濈暀鍦ㄤ唬鐮佷腑
+
+2. **琛ㄨ揪寮忛暱搴�**
+ - uni-app 瀵规ā鏉胯〃杈惧紡鏈夐暱搴﹂檺鍒�
+ - 杩囬暱鐨勮〃杈惧紡鍙兘瀵艰嚧缂栬瘧璀﹀憡
+ - 寤鸿浣跨敤棰勫鐞嗘暟鎹柟妗�
+
+3. **鎬ц兘鑰冭檻**
+ - 涓夊厓杩愮畻绗﹀湪姣忔娓叉煋鏃堕兘浼氳绠�
+ - 澶у垪琛ㄥ缓璁娇鐢ㄩ澶勭悊鏂规
+ - 璁$畻灞炴�т細缂撳瓨缁撴灉
+
+## 鐩稿叧鏂囨。
+
+- [uni-app 妯℃澘璇硶闄愬埗](https://uniapp.dcloud.net.cn/tutorial/vue-api.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95)
+- [Vue 鏉′欢娓叉煋](https://cn.vuejs.org/guide/essentials/conditional.html)
+- [Vue Class 涓� Style 缁戝畾](https://cn.vuejs.org/guide/essentials/class-and-style.html)
+
+## 鏇存柊鏃ュ織
+
+- **2025-01-25**: 淇 `:class` 鏂规硶璋冪敤璇硶閿欒
+ - 鏂囦欢: `app/pages/index.vue` (绗�57琛�)
+ - 鏂囦欢: `app/pages/task/index.vue` (绗�115琛�)
+ - 鏂囦欢: `app/pages/task/detail.vue` (绗�22琛�)
+ - 鏂规硶: 灏嗘柟娉曡皟鐢ㄦ敼涓轰笁鍏冭〃杈惧紡
+ - 鍘熷洜: uni-app 妯℃澘涓嶆敮鎸佹柟娉曡皟鐢ㄥ拰 `.toLowerCase()` 绛夊瓧绗︿覆鏂规硶
diff --git "a/prd/\345\220\216\345\217\260\344\273\273\345\212\241\347\256\241\347\220\206-\346\200\245\346\225\221\350\275\254\350\277\220\346\211\251\345\261\225\346\230\276\347\244\272.md" "b/prd/\345\220\216\345\217\260\344\273\273\345\212\241\347\256\241\347\220\206-\346\200\245\346\225\221\350\275\254\350\277\220\346\211\251\345\261\225\346\230\276\347\244\272.md"
new file mode 100644
index 0000000..feaea69
--- /dev/null
+++ "b/prd/\345\220\216\345\217\260\344\273\273\345\212\241\347\256\241\347\220\206-\346\200\245\346\225\221\350\275\254\350\277\220\346\211\251\345\261\225\346\230\276\347\244\272.md"
@@ -0,0 +1,387 @@
+# 鍚庡彴浠诲姟绠$悊 - 鎬ユ晳杞繍鎵╁睍淇℃伅鏄剧ず
+
+## 姒傝堪
+
+鍦ㄥ悗鍙扮鐞嗙晫闈㈢殑浠诲姟绠$悊鍔熻兘涓紝鏂板瀵规�ユ晳杞繍浠诲姟鍙婄绁夎溅浠诲姟鎵╁睍淇℃伅鐨勫睍绀烘敮鎸侊紝浣跨鐞嗗憳鑳藉鏌ョ湅瀹屾暣鐨勪换鍔¤鎯呫��
+
+## 淇敼鍐呭
+
+### 1. 浠诲姟璇︽儏椤甸潰澧炲己 (detail.vue)
+
+**鏂囦欢**: `ruoyi-ui/src/views/task/general/detail.vue`
+
+#### 1.1 娣诲姞鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅灞曠ず
+
+鍦ㄥ熀鏈俊鎭箣鍚庯紝鏍规嵁浠诲姟绫诲瀷鍔ㄦ�佹樉绀烘墿灞曚俊鎭細
+
+```vue
+<!-- 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅 -->
+<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>
+ <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"/>
+ <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>
+ <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>
+ <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>
+```
+
+#### 1.2 娣诲姞绂忕杞︿换鍔℃墿灞曚俊鎭睍绀�
+
+```vue
+<!-- 绂忕杞︿换鍔℃墿灞曚俊鎭� -->
+<el-descriptions v-if="taskDetail.taskType === 'WELFARE' && taskDetail.welfareInfo"
+ title="绂忕杞︽湇鍔′俊鎭�" :column="2" border style="margin-top: 20px;">
+ <el-descriptions-item label="涔樺濮撳悕">{{ taskDetail.welfareInfo.passengerName }}</el-descriptions-item>
+ <el-descriptions-item label="涔樺鎬у埆">
+ <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.welfareInfo.passengerGender"/>
+ </el-descriptions-item>
+ <el-descriptions-item label="涔樺骞撮緞">{{ taskDetail.welfareInfo.passengerAge }}</el-descriptions-item>
+ <el-descriptions-item label="鑱旂郴鐢佃瘽">{{ taskDetail.welfareInfo.contactPhone }}</el-descriptions-item>
+ <el-descriptions-item label="鏈嶅姟绫诲瀷" :span="2">
+ <span v-if="taskDetail.welfareInfo.serviceType">{{ taskDetail.welfareInfo.serviceType }}</span>
+ <span v-else style="color: #C0C4CC;">--</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐗规畩闇�姹�" :span="2">
+ <span v-if="taskDetail.welfareInfo.specialRequirements">{{ taskDetail.welfareInfo.specialRequirements }}</span>
+ <span v-else style="color: #C0C4CC;">--</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鏄惁闇�瑕佽疆妞�">
+ <el-tag v-if="taskDetail.welfareInfo.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="闄悓浜烘暟">{{ taskDetail.welfareInfo.companionCount || 0 }} 浜�</el-descriptions-item>
+ <el-descriptions-item label="棰勪及璐圭敤">{{ taskDetail.welfareInfo.estimatedCost || '--' }} 鍏�</el-descriptions-item>
+ <el-descriptions-item label="瀹為檯璐圭敤">{{ taskDetail.welfareInfo.actualCost || '--' }} 鍏�</el-descriptions-item>
+</el-descriptions>
+```
+
+#### 1.3 鏇存柊瀛楀吀绫诲瀷
+
+```javascript
+dicts: [
+ 'sys_task_type',
+ 'sys_task_status',
+ 'sys_vehicle_type',
+ 'sys_task_vehicle_status',
+ 'sys_user_sex', // 鉁� 鏂板锛氭�у埆瀛楀吀
+ 'hospital_department' // 鉁� 鏂板锛氬尰闄㈢瀹ゅ瓧鍏�
+]
+```
+
+### 2. 浠诲姟鍒楄〃椤甸潰浼樺寲 (index.vue)
+
+**鏂囦欢**: `ruoyi-ui/src/views/task/general/index.vue`
+
+#### 2.1 娣诲姞鎬ユ晳杞繍浠诲姟鏍囪瘑
+
+鍦ㄤ换鍔$被鍨嬪垪鏄剧ず鐗规畩鍥炬爣鏍囪瘑鎬ユ晳杞繍浠诲姟锛�
+
+```vue
+<el-table-column label="浠诲姟绫诲瀷" align="center" prop="taskType" width="120">
+ <template slot-scope="scope">
+ <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>
+```
+
+### 3. 鍚庣鏁版嵁鍔犺浇锛堝凡瀹屾垚锛�
+
+**鏂囦欢**: `SysTaskServiceImpl.java`
+
+鍚庣鐨� `getTaskDetail` 鏂规硶宸叉纭疄鐜版墿灞曚俊鎭姞杞斤細
+
+```java
+@Override
+public SysTask getTaskDetail(Long taskId) {
+ SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId);
+ if (task != null) {
+ // 鏌ヨ鍏宠仈杞﹁締
+ task.setAssignedVehicles(sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId));
+ // 鏌ヨ闄勪欢
+ task.setAttachments(sysTaskAttachmentMapper.selectSysTaskAttachmentByTaskId(taskId));
+ // 鏌ヨ鎿嶄綔鏃ュ織
+ task.setOperationLogs(sysTaskLogMapper.selectSysTaskLogByTaskId(taskId));
+
+ // 鉁� 鍔犺浇鎬ユ晳杞繍鎵╁睍淇℃伅
+ if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) {
+ SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
+ task.setEmergencyInfo(emergencyInfo);
+ }
+ // 鉁� 鍔犺浇绂忕杞︽墿灞曚俊鎭�
+ else if ("WELFARE".equals(task.getTaskType())) {
+ SysTaskWelfare welfareInfo = sysTaskWelfareMapper.selectSysTaskWelfareByTaskId(taskId);
+ task.setWelfareInfo(welfareInfo);
+ }
+ }
+ return task;
+}
+```
+
+## 鍔熻兘灞曠ず
+
+### 鎬ユ晳杞繍浠诲姟璇︽儏椤甸潰
+
+鏄剧ず鍐呭鍖呮嫭锛�
+
+**鍩烘湰淇℃伅**
+- 浠诲姟缂栧彿銆佺被鍨嬨�佺姸鎬�
+- 鍒涘缓浜恒�佹墽琛屼汉銆侀儴闂�
+- 鍑哄彂鍦板潃銆佺洰鐨勫湴鍧�
+- 璁″垝鏃堕棿銆佸疄闄呮椂闂�
+
+**鎬ユ晳杞繍淇℃伅**锛堜粎 EMERGENCY_TRANSFER 绫诲瀷鏄剧ず锛�
+- 鎮h�呬俊鎭細濮撳悕銆佹�у埆銆佸勾榫勩�佽仈绯荤數璇�
+- 鍖荤枟淇℃伅锛氭帴閫佸尰闄€�佸氨璇婄瀹ゃ�佺梾鎯呮弿杩�
+- 鐗规畩闇�姹傦細鎷呮灦銆佽疆妞呫�佹哀姘�
+- 绱ф�ョ▼搴︼細楂�/涓�/浣�
+- 闄悓浜烘暟銆侀浼拌垂鐢�
+
+**绂忕杞︽湇鍔′俊鎭�**锛堜粎 WELFARE 绫诲瀷鏄剧ず锛�
+- 涔樺淇℃伅锛氬鍚嶃�佹�у埆銆佸勾榫勩�佽仈绯荤數璇�
+- 鏈嶅姟淇℃伅锛氭湇鍔$被鍨嬨�佺壒娈婇渶姹�
+- 杈呭姪璁惧锛氳疆妞呴渶姹�
+- 璐圭敤淇℃伅锛氶浼拌垂鐢ㄣ�佸疄闄呰垂鐢ㄣ�侀櫔鍚屼汉鏁�
+
+**鍏宠仈杞﹁締**
+- 杞︾墝鍙枫�佽溅杈嗙被鍨嬨�佸搧鐗屽瀷鍙�
+- 鍒嗛厤鏃堕棿銆佸垎閰嶄汉銆佺姸鎬�
+
+**浠诲姟闄勪欢**
+- 鏂囦欢鍒楄〃鍙婁笅杞�
+
+**鎿嶄綔鏃ュ織**
+- 鏃堕棿绾垮舰寮忓睍绀烘搷浣滆褰�
+
+### 浠诲姟鍒楄〃椤甸潰
+
+- 浠诲姟鍒楄〃灞曠ず鍩烘湰淇℃伅
+- 鎬ユ晳杞繍浠诲姟甯︽湁绾㈣壊璀﹀憡鍥炬爣鏍囪瘑
+- 鏀寔鎸変换鍔$被鍨嬨�佺姸鎬佺瓫閫�
+- 鐐瑰嚮浠诲姟缂栧彿鏌ョ湅璇︽儏
+
+## 浣跨敤鍦烘櫙
+
+### 鍦烘櫙1锛氭煡鐪嬫�ユ晳杞繍浠诲姟璇︽儏
+
+```
+1. 杩涘叆鍚庡彴绠$悊 鈫� 浠诲姟绠$悊
+2. 鍦ㄥ垪琛ㄤ腑鎵惧埌鎬ユ晳杞繍浠诲姟锛堝甫绾㈣壊璀﹀憡鍥炬爣锛�
+3. 鐐瑰嚮浠诲姟缂栧彿鎴�"鏌ョ湅"鎸夐挳
+4. 鏌ョ湅瀹屾暣鐨勪换鍔′俊鎭紝鍖呮嫭锛�
+ - 鍩烘湰浠诲姟淇℃伅
+ - 鎮h�呰缁嗕俊鎭�
+ - 鍖荤枟鐩稿叧淇℃伅
+ - 鐗规畩闇�姹傞厤缃�
+ - 鍏宠仈杞﹁締鍜屾墽琛屼汉鍛�
+ - 鎿嶄綔鍘嗗彶璁板綍
+```
+
+### 鍦烘櫙2锛氱瓫閫夌壒瀹氱被鍨嬩换鍔�
+
+```
+1. 鍦ㄤ换鍔$鐞嗛〉闈�
+2. 浣跨敤"浠诲姟绫诲瀷"绛涢�夊櫒
+3. 閫夋嫨"鎬ユ晳杞繍"
+4. 鏌ョ湅鎵�鏈夋�ユ晳杞繍浠诲姟鍒楄〃
+```
+
+### 鍦烘櫙3锛氱洃鎺х揣鎬ヤ换鍔�
+
+```
+1. 鍦ㄤ换鍔″垪琛ㄤ腑璇嗗埆鎬ユ晳杞繍浠诲姟锛堢孩鑹茶鍛婂浘鏍囷級
+2. 鐐瑰嚮鏌ョ湅璇︽儏
+3. 鏌ョ湅"绱ф�ョ▼搴�"瀛楁锛�
+ - 绾㈣壊"绱ф��"鏍囩 鈫� 楂樹紭鍏堢骇澶勭悊
+ - 榛勮壊"涓�鑸�"鏍囩 鈫� 姝e父澶勭悊
+ - 鐏拌壊"涓嶆��"鏍囩 鈫� 甯歌澶勭悊
+4. 鏍规嵁绱ф�ョ▼搴﹁皟搴﹁祫婧�
+```
+
+## 鏄剧ず鏁堟灉
+
+### 鎬ユ晳杞繍浠诲姟鏍囪瘑
+
+- **鍒楄〃**: 浠诲姟绫诲瀷鏃佽竟鏄剧ず `绾㈣壊璀﹀憡鍥炬爣`
+- **璇︽儏**: 鐙珛鐨�"鎬ユ晳杞繍淇℃伅"鍗$墖
+
+### 瀛楁鏄剧ず瑙勫垯
+
+1. **蹇呭~瀛楁**: 鐩存帴鏄剧ず鍊�
+2. **鍙�夊瓧娈典负绌�**: 鏄剧ず `--` (鐏拌壊)
+3. **甯冨皵瀛楁**: 浣跨敤鏍囩鏄剧ず
+ - `鏄痐 鈫� 缁胯壊鏍囩
+ - `鍚 鈫� 鐏拌壊鏍囩
+4. **鏋氫妇瀛楁**: 浣跨敤瀛楀吀鏍囩
+ - 鎬у埆: 鐢�/濂�
+ - 绉戝: 浣跨敤鍖婚櫌绉戝瀛楀吀
+ - 绱ф�ョ▼搴�:
+ - HIGH 鈫� 绾㈣壊"绱ф��"
+ - MEDIUM 鈫� 榛勮壊"涓�鑸�"
+ - LOW 鈫� 鐏拌壊"涓嶆��"
+
+## 鏁版嵁娴佺▼
+
+```
+鍓嶇椤甸潰鍔犺浇
+ 鈫�
+璋冪敤 getTask(taskId) API
+ 鈫�
+鍚庣 SysTaskServiceImpl.getTaskDetail()
+ 鈫�
+鏌ヨ鍩烘湰浠诲姟淇℃伅 (sys_task)
+ 鈫�
+鏍规嵁 task_type 鍒ゆ柇
+ 鈹溾攢 EMERGENCY_TRANSFER 鈫� 鏌ヨ sys_task_emergency
+ 鈹斺攢 WELFARE 鈫� 鏌ヨ sys_task_welfare
+ 鈫�
+杩斿洖瀹屾暣浠诲姟瀵硅薄
+ 鈫�
+鍓嶇鏍规嵁 taskType 鏉′欢娓叉煋鎵╁睍淇℃伅
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 鏁版嵁瀹屾暣鎬�
+
+纭繚鎵╁睍淇℃伅琛ㄤ腑鐨勬暟鎹笌涓讳换鍔¤〃姝g‘鍏宠仈锛�
+- `sys_task_emergency.task_id` = `sys_task.task_id`
+- `sys_task_welfare.task_id` = `sys_task.task_id`
+
+### 2. 瀛楀吀鏁版嵁閰嶇疆
+
+闇�瑕佺‘淇濅互涓嬪瓧鍏哥被鍨嬪凡姝g‘閰嶇疆锛�
+- `sys_user_sex`: 鎬у埆瀛楀吀锛堢敺/濂筹級
+- `hospital_department`: 鍖婚櫌绉戝瀛楀吀锛堟�ヨ瘖绉戙�佸績鍐呯绛夛級
+
+### 3. 鏉冮檺鎺у埗
+
+鍚庡彴绠$悊鐣岄潰宸叉湁鏉冮檺鎺у埗锛�
+```javascript
+v-hasPermi="['task:general:query']" // 鏌ョ湅鏉冮檺
+v-hasPermi="['task:general:edit']" // 缂栬緫鏉冮檺
+v-hasPermi="['task:general:assign']" // 鍒嗛厤鏉冮檺
+```
+
+### 4. 绌哄�煎鐞�
+
+鎵�鏈夊彲閫夊瓧娈甸兘鍋氫簡绌哄�煎垽鏂紝閬垮厤鏄剧ず `undefined` 鎴� `null`锛�
+```vue
+<span v-if="taskDetail.emergencyInfo.illnessDescription">
+ {{ taskDetail.emergencyInfo.illnessDescription }}
+</span>
+<span v-else style="color: #C0C4CC;">--</span>
+```
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇鏂囦欢
+- `/ruoyi-ui/src/views/task/general/index.vue` - 浠诲姟鍒楄〃椤甸潰
+- `/ruoyi-ui/src/views/task/general/detail.vue` - 浠诲姟璇︽儏椤甸潰
+
+### 鍚庣鏂囦欢
+- `/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java` - 浠诲姟鎺у埗鍣�
+- `/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 浠诲姟鏈嶅姟瀹炵幇
+- `/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml` - 浠诲姟Mapper
+- `/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml` - 鎬ユ晳杞繍Mapper
+- `/ruoyi-system/src/main/resources/mapper/system/SysTaskWelfareMapper.xml` - 绂忕杞apper
+
+### 瀹炰綋绫�
+- `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java` - 浠诲姟瀹炰綋
+- `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java` - 鎬ユ晳杞繍鎵╁睍瀹炰綋
+- `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskWelfare.java` - 绂忕杞︽墿灞曞疄浣�
+
+## 娴嬭瘯寤鸿
+
+### 娴嬭瘯鐢ㄤ緥1锛氭煡鐪嬫�ユ晳杞繍浠诲姟璇︽儏
+
+```
+鍓嶇疆鏉′欢锛氱郴缁熶腑瀛樺湪鎬ユ晳杞繍浠诲姟
+姝ラ锛�
+1. 鐧诲綍鍚庡彴绠$悊绯荤粺
+2. 杩涘叆浠诲姟绠$悊椤甸潰
+3. 鎵惧埌涓�鏉℃�ユ晳杞繍浠诲姟锛堟湁绾㈣壊璀﹀憡鍥炬爣锛�
+4. 鐐瑰嚮浠诲姟缂栧彿鏌ョ湅璇︽儏
+楠岃瘉锛�
+- 鏄剧ず鍩烘湰浠诲姟淇℃伅
+- 鏄剧ず"鎬ユ晳杞繍淇℃伅"鍗$墖
+- 鎵�鏈夋偅鑰呬俊鎭纭樉绀�
+- 鍖婚櫌銆佺瀹や俊鎭纭樉绀�
+- 鐗规畩闇�姹傛爣绛炬纭樉绀�
+- 绱ф�ョ▼搴︽爣绛鹃鑹叉纭�
+```
+
+### 娴嬭瘯鐢ㄤ緥2锛氭煡鐪嬬绁夎溅浠诲姟璇︽儏
+
+```
+鍓嶇疆鏉′欢锛氱郴缁熶腑瀛樺湪绂忕杞︿换鍔�
+姝ラ锛�
+1. 杩涘叆浠诲姟绠$悊椤甸潰
+2. 鎵惧埌涓�鏉$绁夎溅浠诲姟
+3. 鐐瑰嚮鏌ョ湅璇︽儏
+楠岃瘉锛�
+- 鏄剧ず鍩烘湰浠诲姟淇℃伅
+- 鏄剧ず"绂忕杞︽湇鍔′俊鎭�"鍗$墖
+- 涔樺淇℃伅姝g‘鏄剧ず
+- 鏈嶅姟绫诲瀷銆佽垂鐢ㄤ俊鎭纭樉绀�
+```
+
+### 娴嬭瘯鐢ㄤ緥3锛氱┖鍊兼樉绀�
+
+```
+鍓嶇疆鏉′欢锛氬垱寤轰竴鏉″彧濉繀濉瓧娈电殑鎬ユ晳杞繍浠诲姟
+姝ラ锛�
+1. 鏌ョ湅浠诲姟璇︽儏
+楠岃瘉锛�
+- 鍙�夊瓧娈垫樉绀� "--"锛堢伆鑹诧級
+- 涓嶅嚭鐜� undefined 鎴� null
+- 椤甸潰甯冨眬姝e父
+```
+
+## 鏇存柊鏃ュ織
+
+- **2025-01-25**: 鍒濆鐗堟湰
+ - 鍚庡彴浠诲姟璇︽儏椤甸潰鏀寔鎬ユ晳杞繍鎵╁睍淇℃伅鏄剧ず
+ - 鍚庡彴浠诲姟璇︽儏椤甸潰鏀寔绂忕杞︽墿灞曚俊鎭樉绀�
+ - 浠诲姟鍒楄〃椤甸潰娣诲姞鎬ユ晳杞繍浠诲姟鍥炬爣鏍囪瘑
+ - 鏂板鎬у埆鍜屽尰闄㈢瀹ゅ瓧鍏告敮鎸�
diff --git "a/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\345\256\214\345\226\204\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\345\256\214\345\226\204\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..f6581ae
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\345\256\214\345\226\204\350\257\264\346\230\216.md"
@@ -0,0 +1,552 @@
+# 鐢ㄦ埛鍗忚涓庨殣绉佹斂绛栧畬鍠勮鏄�
+
+## 涓�銆佸姛鑳芥杩�
+
+涓烘�ユ晳杞繍璋冨害绯荤粺瀹屽杽浜嗙敤鎴峰崗璁拰闅愮鏀跨瓥鍔熻兘锛岀鍚堜腑鍥芥硶寰嬫硶瑙勮姹傦紙銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬨�併�婄綉缁滃畨鍏ㄦ硶銆嬨�併�婃皯娉曞吀銆嬬瓑锛夛紝鎻愬崌鐢ㄦ埛浣撻獙鍜屾硶寰嬪悎瑙勬�с��
+
+## 浜屻�佸疄鐜板唴瀹�
+
+### 2.1 鏂板椤甸潰
+
+#### 1. 鐢ㄦ埛鏈嶅姟鍗忚椤甸潰
+- **鏂囦欢璺緞**: `app/pages/mine/user-agreement/index.vue`
+- **璺敱璺緞**: `/pages/mine/user-agreement/index`
+- **椤甸潰鏍囬**: 鐢ㄦ埛鏈嶅姟鍗忚
+
+**鍗忚鍐呭绔犺妭**:
+1. 娆㈣繋浣跨敤鎬ユ晳杞繍璋冨害绯荤粺
+2. 鏈嶅姟璇存槑锛堢郴缁熷姛鑳姐�佹湇鍔¤寖鍥达級
+3. 璐﹀彿娉ㄥ唽涓庝娇鐢紙璐﹀彿绠$悊銆佷俊鎭湡瀹炴�э級
+4. 鐢ㄦ埛琛屼负瑙勮寖锛堟硶寰嬪悎瑙勩�佺姝㈣涓恒�佽亴涓氭搷浣滐級
+5. 闅愮淇濇姢锛堜俊鎭敹闆嗐�佷娇鐢ㄣ�佷繚鎶わ級
+6. 鐭ヨ瘑浜ф潈锛堝唴瀹规墍鏈夋潈銆佷娇鐢ㄩ檺鍒讹級
+7. 鏈嶅姟涓柇鎴栫粓姝紙涓柇鎯呭舰銆侀�氱煡鏈哄埗銆佽处鍙锋敞閿�锛�
+8. 鍏嶈矗澹版槑锛堣矗浠荤晫瀹氥�侀闄╂彁绀猴級
+9. 鍗忚鍙樻洿锛堜慨鏀规満鍒躲�佺敓鏁堟柟寮忥級
+10. 浜夎瑙e喅锛堟硶寰嬮�傜敤銆佺杈栨硶闄級
+11. 鍏朵粬锛堝畬鏁存�с�佸彲鍒嗗壊鎬с�佽В閲婃潈锛�
+12. 鑱旂郴鎴戜滑锛堥偖绠便�佺數璇濄�佸伐浣滄椂闂达級
+
+**椤甸潰鐗圭偣**:
+- 绉诲姩绔紭鍖栫殑UI璁捐
+- 娓呮櫚鐨勫眰绾х粨鏋�
+- 鏄撹鐨勬帓鐗堟牱寮�
+- 杩斿洖鎸夐挳瀵艰埅
+- 婊氬姩鏌ョ湅瀹屾暣鍐呭
+
+#### 2. 闅愮鏀跨瓥椤甸潰
+- **鏂囦欢璺緞**: `app/pages/mine/privacy-policy/index.vue`
+- **璺敱璺緞**: `/pages/mine/privacy-policy/index`
+- **椤甸潰鏍囬**: 闅愮鏀跨瓥
+
+**鏀跨瓥鍐呭绔犺妭**:
+1. 寮曡█锛堟硶寰嬪悎瑙勩�佹斂绛栫洰鐨勶級
+2. 淇℃伅鏀堕泦涓庝娇鐢�
+ - 璐﹀彿娉ㄥ唽涓庣櫥褰曪紙鎵嬫満鍙枫�佸鍚嶃�侀儴闂ㄣ�佽亴浣嶏級
+ - 浠诲姟璋冨害鏈嶅姟锛堜綅缃俊鎭�佷换鍔′俊鎭�佽溅杈嗕俊鎭級
+ - 娑堟伅鎺ㄩ�佹湇鍔★紙璁惧淇℃伅銆佹帹閫乼oken锛�
+ - 绯荤粺瀹夊叏涓庝紭鍖栵紙鏃ュ織銆佺綉缁溿�佷娇鐢ㄦ儏鍐碉級
+3. Cookie鍜屽悓绫绘妧鏈紙鐢ㄩ�斻�佺鐞嗘柟寮忥級
+4. 淇℃伅鍏变韩銆佽浆璁┿�佸叕寮�鎶湶锛堝師鍒欍�佷緥澶栨儏褰級
+5. 淇℃伅瀹夊叏淇濇姢鎺柦锛堝姞瀵嗐�佽闂帶鍒躲�佸璁°�佸簲鎬ュ搷搴旓級
+6. 鐢ㄦ埛鏉冨埄绠$悊锛堣闂�佹洿姝c�佸垹闄ゃ�佹敞閿�銆佹挙鍥炲悓鎰忥級
+7. 鏈垚骞翠汉淇濇姢锛堟湇鍔¢檺鍒躲�佺洃鎶や汉鍚屾剰锛�
+8. 璺ㄥ浼犺緭锛堝鍐呭瓨鍌級
+9. 鏀跨瓥鏇存柊锛堝彉鏇撮�氱煡銆佺敓鏁堟柟寮忥級
+10. 鑱旂郴鎴戜滑锛堥偖绠便�佺數璇濄�佸搷搴旀椂闂达級
+11. 瀹氫箟锛堜釜浜轰俊鎭�佹晱鎰熶釜浜轰俊鎭�佸垹闄わ級
+
+**椤甸潰鐗圭偣**:
+- 绗﹀悎銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬭姹�
+- 鏁忔劅淇℃伅楂樹寒鏄剧ず锛堥粍鑹茶儗鏅� + 姗欒壊杈规锛�
+- 璇︾粏鐨勫垎绫昏鏄�
+- 鏄庣‘鐨勭敤鎴锋潈鍒�
+- 涓撲笟鐨勬硶寰嬫湳璇�
+
+### 2.2 淇敼椤甸潰
+
+#### 1. 鐧诲綍椤甸潰 (`app/pages/login.vue`)
+
+**淇敼鍐呭**:
+- 灏嗗崗璁摼鎺ヤ粠澶栭儴URL鏀逛负鏈湴椤甸潰
+- `handlePrivacy()` 鏂规硶锛氳烦杞埌 `/pages/mine/privacy-policy/index`
+- `handleUserAgrement()` 鏂规硶锛氳烦杞埌 `/pages/mine/user-agreement/index`
+
+**淇敼鍓�**:
+```javascript
+handlePrivacy() {
+ let site = this.globalConfig.appInfo.agreements[0]
+ this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
+}
+```
+
+**淇敼鍚�**:
+```javascript
+handlePrivacy() {
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+}
+```
+
+#### 2. 娉ㄥ唽椤甸潰 (`app/pages/register.vue`)
+
+**鏂板鍔熻兘**:
+
+1. **鍗忚鍚屾剰checkbox**
+```vue
+<view class="agreement-section">
+ <checkbox-group @change="handleAgreementChange">
+ <label class="agreement-label">
+ <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" />
+ <text class="agreement-text">
+ 鎴戝凡闃呰骞跺悓鎰�
+ <text class="agreement-link" @click.stop="handleUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
+ 鍜�
+ <text class="agreement-link" @click.stop="handlePrivacy">銆婇殣绉佹斂绛栥��</text>
+ </text>
+ </label>
+ </checkbox-group>
+</view>
+```
+
+2. **鏁版嵁瀛楁**
+```javascript
+data() {
+ return {
+ agreedToTerms: false, // 鏄惁鍚屾剰鍗忚
+ // ... 鍏朵粬瀛楁
+ }
+}
+```
+
+3. **楠岃瘉閫昏緫**
+```javascript
+async handleRegister() {
+ // ... 鍏朵粬楠岃瘉
+ if (!this.agreedToTerms) {
+ this.$modal.msgError("璇峰厛闃呰骞跺悓鎰忕敤鎴锋湇鍔″崗璁拰闅愮鏀跨瓥")
+ return
+ }
+ // ... 娉ㄥ唽閫昏緫
+}
+```
+
+4. **鏂板鏂规硶**
+```javascript
+// 鍗忚閫夋嫨鍙樻洿
+handleAgreementChange(e) {
+ this.agreedToTerms = e.detail.value.length > 0
+},
+// 鐢ㄦ埛鍗忚
+handleUserAgreement() {
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+},
+// 闅愮鏀跨瓥
+handlePrivacy() {
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+}
+```
+
+5. **鏍峰紡璋冩暣**
+```scss
+.agreement-section {
+ margin: 30rpx 0;
+
+ .agreement-label {
+ display: flex;
+ align-items: flex-start;
+
+ checkbox {
+ margin-right: 15rpx;
+ transform: scale(0.9);
+ }
+
+ .agreement-text {
+ flex: 1;
+ font-size: 24rpx;
+ color: #666;
+ line-height: 1.6;
+ text-align: left;
+
+ .agreement-link {
+ color: #007AFF;
+ text-decoration: underline;
+ }
+ }
+ }
+}
+```
+
+#### 3. "鎴戠殑"椤甸潰 (`app/pages/mine/index.vue`)
+
+**鏂板鑿滃崟椤�**:
+
+鍦�"缂栬緫璧勬枡"鍜�"甯歌闂"涔嬮棿鎻掑叆涓や釜鑿滃崟椤癸細
+
+```vue
+<view class="list-cell list-cell-arrow" @click="handleUserAgreement">
+ <view class="menu-item-box">
+ <view class="iconfont icon-text menu-icon"></view>
+ <view>鐢ㄦ埛鏈嶅姟鍗忚</view>
+ </view>
+</view>
+<view class="list-cell list-cell-arrow" @click="handlePrivacyPolicy">
+ <view class="menu-item-box">
+ <view class="iconfont icon-safe menu-icon"></view>
+ <view>闅愮鏀跨瓥</view>
+ </view>
+</view>
+```
+
+**鏂板鏂规硶**:
+```javascript
+handleUserAgreement() {
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+},
+handlePrivacyPolicy() {
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+}
+```
+
+### 2.3 璺敱閰嶇疆
+
+鍦� `app/pages.json` 涓凡娣诲姞璺敱閰嶇疆锛�
+
+```json
+{
+ "path": "pages/mine/user-agreement/index",
+ "style": {
+ "navigationBarTitleText": "鐢ㄦ埛鏈嶅姟鍗忚"
+ }
+},
+{
+ "path": "pages/mine/privacy-policy/index",
+ "style": {
+ "navigationBarTitleText": "闅愮鏀跨瓥"
+ }
+}
+```
+
+## 涓夈�佹硶寰嬪悎瑙勮鐐�
+
+### 3.1 绗﹀悎鐨勬硶寰嬫硶瑙�
+
+1. **銆婁腑鍗庝汉姘戝叡鍜屽浗涓汉淇℃伅淇濇姢娉曘��**
+ - 鏄庣‘鍛婄煡鏀堕泦鐨勪釜浜轰俊鎭被鍨�
+ - 璇存槑涓汉淇℃伅鐨勪娇鐢ㄧ洰鐨�
+ - 鏍囨敞鏁忔劅涓汉淇℃伅锛堜綅缃俊鎭級
+ - 鏄庣‘鐢ㄦ埛鐨勫悇椤规潈鍒�
+
+2. **銆婁腑鍗庝汉姘戝叡鍜屽浗缃戠粶瀹夊叏娉曘��**
+ - 淇℃伅瀹夊叏淇濇姢鎺柦
+ - 鏁版嵁瀛樺偍鍦ㄥ鍐�
+ - 瀹夊叏浜嬩欢搴旀�ュ搷搴�
+
+3. **銆婁腑鍗庝汉姘戝叡鍜屽浗姘戞硶鍏搞��**
+ - 鍚堝悓鏉℃瑙勮寖
+ - 浜夎瑙e喅鏈哄埗
+ - 鐢ㄦ埛鏉冪泭淇濇姢
+
+### 3.2 鍏抽敭鍚堣鍐呭
+
+#### 淇℃伅鏀堕泦鍛婄煡
+- 鉁� 鏄庣‘鍒楀嚭鏀堕泦鐨勪俊鎭被鍨�
+- 鉁� 璇存槑姣忕淇℃伅鐨勭敤閫�
+- 鉁� 鏍囨敞鏁忔劅淇℃伅锛堜綅缃�佸尰鐤楀仴搴凤級
+- 鉁� 鎻愪緵鎷掔粷鎺堟潈鐨勫奖鍝嶈鏄�
+
+#### 鐢ㄦ埛鏉冨埄
+- 鉁� 璁块棶鍜屾洿姝d釜浜轰俊鎭殑鏉冨埄
+- 鉁� 鍒犻櫎涓汉淇℃伅鐨勬潈鍒�
+- 鉁� 娉ㄩ攢璐﹀彿鐨勬潈鍒�
+- 鉁� 鎾ゅ洖鍚屾剰鐨勬潈鍒�
+
+#### 淇℃伅瀹夊叏
+- 鉁� 鏁版嵁鍔犲瘑浼犺緭鍜屽瓨鍌�
+- 鉁� 璁块棶鎺у埗鍜屾潈闄愮鐞�
+- 鉁� 瀹夊叏瀹¤鏈哄埗
+- 鉁� 瀹夊叏浜嬩欢搴旀�ュ搷搴�
+
+#### 鐢ㄦ埛鍚屾剰
+- 鉁� 娉ㄥ唽鏃跺繀椤诲嬀閫夊悓鎰忓崗璁�
+- 鉁� 鍗忚鍙殢鏃舵煡鐪�
+- 鉁� 鍗忚鍙樻洿鏃堕�氱煡鐢ㄦ埛
+
+## 鍥涖�佷娇鐢ㄦ柟寮�
+
+### 4.1 鐢ㄦ埛璁块棶璺緞
+
+1. **鐧诲綍椤甸潰**
+ - 鐐瑰嚮"銆婄敤鎴峰崗璁��"鎴�"銆婇殣绉佸崗璁��"閾炬帴
+ - 鐩存帴璺宠浆鍒板搴旈〉闈�
+
+2. **娉ㄥ唽椤甸潰**
+ - 蹇呴』鍕鹃�夊崗璁悓鎰廲heckbox鎵嶈兘娉ㄥ唽
+ - 鐐瑰嚮鍗忚閾炬帴鍙煡鐪嬭缁嗗唴瀹�
+ - 浣跨敤 `@click.stop` 闃叉浜嬩欢鍐掓场
+
+3. **"鎴戠殑"椤甸潰**
+ - 閫氳繃鑿滃崟椤�"鐢ㄦ埛鏈嶅姟鍗忚"璁块棶
+ - 閫氳繃鑿滃崟椤�"闅愮鏀跨瓥"璁块棶
+
+### 4.2 寮�鍙戦泦鎴�
+
+濡傞渶鍦ㄥ叾浠栭〉闈㈠紩鐢ㄥ崗璁紝浣跨敤浠ヤ笅浠g爜锛�
+
+```javascript
+// 璺宠浆鍒扮敤鎴峰崗璁�
+this.$tab.navigateTo('/pages/mine/user-agreement/index')
+
+// 璺宠浆鍒伴殣绉佹斂绛�
+this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+```
+
+## 浜斻�佸畾鍒跺寲寤鸿
+
+### 5.1 蹇呴』淇敼鐨勫唴瀹�
+
+鍦ㄥ疄闄呴儴缃插墠锛岃鍔″繀淇敼浠ヤ笅鍐呭锛�
+
+1. **鑱旂郴鏂瑰紡**锛堜袱涓枃浠堕兘闇�瑕佷慨鏀癸級
+ ```vue
+ <!-- 鐢ㄦ埛鏈嶅姟鍗忚 -->
+ <text class="section-text">
+ 鐢靛瓙閭锛歴upport@example.com <!-- 鏀逛负瀹為檯閭 -->
+ </text>
+ <text class="section-text">
+ 瀹㈡湇鐢佃瘽锛�400-XXX-XXXX <!-- 鏀逛负瀹為檯鐢佃瘽 -->
+ </text>
+
+ <!-- 闅愮鏀跨瓥 -->
+ <text class="section-text">
+ 鐢靛瓙閭锛歱rivacy@example.com <!-- 鏀逛负瀹為檯閭 -->
+ </text>
+ <text class="section-text">
+ 瀹㈡湇鐢佃瘽锛�400-XXX-XXXX <!-- 鏀逛负瀹為檯鐢佃瘽 -->
+ </text>
+ ```
+
+2. **鏇存柊鏃ユ湡鍜岀敓鏁堟棩鏈�**
+ ```vue
+ <view class="update-time">鏇存柊鏃ユ湡锛�2025骞�1鏈�25鏃�</view> <!-- 鏀逛负瀹為檯鏃ユ湡 -->
+ <view class="effect-time">鐢熸晥鏃ユ湡锛�2025骞�1鏈�25鏃�</view> <!-- 鏀逛负瀹為檯鏃ユ湡 -->
+ ```
+
+3. **杩愯惀涓讳綋淇℃伅**
+ - 濡傛灉鏈夋寮忕殑鍏徃鍚嶇О锛岃鍦ㄥ崗璁腑娣诲姞
+ - 濡傛灉鏈夎惀涓氭墽鐓т俊鎭紝寤鸿鍦�"鍏充簬鎴戜滑"涓ˉ鍏�
+
+### 5.2 鍙�変紭鍖栧唴瀹�
+
+1. **娣诲姞鐗堟湰鍙风鐞�**
+ - 鍦ㄥ崗璁《閮ㄦ樉绀虹増鏈彿锛堝 v1.0锛�
+ - 璁板綍鍘嗗彶鐗堟湰鍙樻洿
+
+2. **娣诲姞涓嬭浇鍔熻兘**
+ - 鍏佽鐢ㄦ埛涓嬭浇PDF鐗堟湰鐨勫崗璁�
+ - 鏂逛究鐢ㄦ埛淇濆瓨鍜屾煡闃�
+
+3. **娣诲姞鎼滅储鍔熻兘**
+ - 瀵逛簬鍐呭杈冮暱鐨勫崗璁紝鎻愪緵鍏抽敭璇嶆悳绱�
+ - 蹇�熷畾浣嶅埌鐩稿叧绔犺妭
+
+4. **鍥介檯鍖栨敮鎸�**
+ - 濡傞渶鏀寔澶氳瑷�锛屽彲娣诲姞璇█鍒囨崲鍔熻兘
+ - 鍑嗗鑻辨枃鐗堟湰鐨勫崗璁�
+
+### 5.3 娉曞緥瀹℃牳寤鸿
+
+**閲嶈鎻愮ず**: 铏界劧鎴戜滑鐨勫崗璁唴瀹瑰凡灏藉彲鑳界鍚堟硶寰嬭姹傦紝浣嗕粛寤鸿锛�
+
+1. **涓撲笟瀹℃牳**
+ - 璇疯吹鍏徃鐨勬硶寰嬮【闂鏍稿崗璁唴瀹�
+ - 鏍规嵁瀹為檯涓氬姟鎯呭喌璋冩暣鏉℃
+
+2. **琛屼笟鐗规畩瑕佹眰**
+ - 鍖荤枟鎬ユ晳琛屼笟鍙兘鏈夌壒娈婄殑娉曞緥瑕佹眰
+ - 璇峰挩璇㈠尰鐤楁硶寰嬩笓瀹�
+
+3. **瀹氭湡鏇存柊**
+ - 闅忕潃娉曞緥娉曡鐨勫彉鍖栵紝瀹氭湡鏇存柊鍗忚鍐呭
+ - 鐗瑰埆鍏虫敞銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬬殑瀹炴柦缁嗗垯
+
+## 鍏�佹妧鏈疄鐜扮粏鑺�
+
+### 6.1 椤甸潰缁撴瀯
+
+```
+鍗忚椤甸潰
+鈹溾攢鈹� Header锛堥《閮ㄥ鑸爮锛�
+鈹� 鈹溾攢鈹� 杩斿洖鎸夐挳
+鈹� 鈹斺攢鈹� 椤甸潰鏍囬
+鈹斺攢鈹� Content锛堝唴瀹瑰尯鍩燂級
+ 鈹溾攢鈹� ScrollView锛堝彲婊氬姩瀹瑰櫒锛�
+ 鈹斺攢鈹� 鍗忚鍐呭
+ 鈹溾攢鈹� 鏇存柊鏃ユ湡
+ 鈹溾攢鈹� 鐢熸晥鏃ユ湡
+ 鈹溾攢鈹� 绔犺妭鍐呭
+ 鈹� 鈹溾攢鈹� 绔犺妭鏍囬
+ 鈹� 鈹溾攢鈹� 灏忚妭鏍囬
+ 鈹� 鈹溾攢鈹� 姝f枃
+ 鈹� 鈹斺攢鈹� 鍒楄〃椤�
+ 鈹斺攢鈹� 椤佃剼
+```
+
+### 6.2 鏍峰紡绯荤粺
+
+**鍝嶅簲寮忚璁�**:
+- 浣跨敤 `rpx` 鍗曚綅锛岃嚜鍔ㄩ�傞厤涓嶅悓灞忓箷灏哄
+- 鏈�灏忓瓧浣� `24rpx`锛屾鏂囧瓧浣� `28rpx`锛屾爣棰樺瓧浣� `32rpx`
+
+**棰滆壊鏂规**:
+- 涓昏壊璋冿細`#333`锛堟繁鐏帮級
+- 娆¤鏂囧瓧锛歚#666`锛堜腑鐏帮級
+- 鎻愮ず鏂囧瓧锛歚#999`锛堟祬鐏帮級
+- 楂樹寒鑹诧細`#007AFF`锛堣摑鑹诧級
+- 鏁忔劅淇℃伅鑳屾櫙锛歚#fff8e6`锛堟贰榛勶級
+- 鏁忔劅淇℃伅杈规锛歚#ff9500`锛堟鑹诧級
+
+**甯冨眬鐗圭偣**:
+- 鍐呭鍖哄煙锛氱櫧鑹茶儗鏅紝鍦嗚鍗$墖
+- 琛岄珮锛歚1.8`锛屽寮哄彲璇绘��
+- 娈佃惤闂磋窛锛歚15rpx`锛屾竻鏅板垎闅�
+- 鍒楄〃缂╄繘锛歚40rpx`锛屽眰绾ф槑鏄�
+
+### 6.3 浜や簰璁捐
+
+1. **杩斿洖瀵艰埅**
+ ```javascript
+ goBack() {
+ uni.navigateBack()
+ }
+ ```
+
+2. **婊氬姩鏌ョ湅**
+ - 浣跨敤 `scroll-view` 缁勪欢
+ - 鏀寔鍨傜洿婊氬姩
+ - 鑷姩闅愯棌婊氬姩鏉★紙淇濇寔缇庤锛�
+
+3. **閾炬帴鐐瑰嚮**
+ - 鍗忚涓殑閾炬帴浣跨敤钃濊壊鏍囪瘑
+ - 鐐瑰嚮鍙烦杞埌瀵瑰簲椤甸潰
+ - 浣跨敤 `@click.stop` 闃叉浜嬩欢鍐掓场
+
+## 涓冦�佺淮鎶ゅ拰鏇存柊
+
+### 7.1 鍗忚鏇存柊娴佺▼
+
+褰撻渶瑕佹洿鏂板崗璁唴瀹规椂锛�
+
+1. **淇敼鍐呭**
+ - 鍦ㄥ搴旂殑 `.vue` 鏂囦欢涓慨鏀瑰崗璁枃鏈�
+ - 鏇存柊"鏇存柊鏃ユ湡"鍜�"鐢熸晥鏃ユ湡"
+
+2. **閫氱煡鐢ㄦ埛**锛堝缓璁疄鐜帮級
+ - 鍦ㄧ敤鎴蜂笅娆$櫥褰曟椂鏄剧ず鍗忚鏇存柊鎻愮ず
+ - 瑕佹眰鐢ㄦ埛閲嶆柊鍚屾剰鍗忚
+ - 璁板綍鐢ㄦ埛鍚屾剰鐨勫崗璁増鏈彿
+
+3. **淇濆瓨鍘嗗彶鐗堟湰**锛堝缓璁疄鐜帮級
+ - 鍦ㄦ暟鎹簱涓繚瀛樺崗璁殑鍘嗗彶鐗堟湰
+ - 璁板綍鐢ㄦ埛鍚屾剰鐨勬槸鍝釜鐗堟湰
+ - 鏂逛究杩芥函鍜屽璁�
+
+### 7.2 鐩戞帶鍜屽弽棣�
+
+**鐢ㄦ埛鍙嶉鏀堕泦**:
+- 鍦ㄥ崗璁〉闈㈡坊鍔�"鎰忚鍙嶉"鍏ュ彛
+- 鏀堕泦鐢ㄦ埛瀵瑰崗璁唴瀹圭殑鐤戦棶
+- 鍙婃椂鍝嶅簲鐢ㄦ埛鐨勫挩璇�
+
+**鏁版嵁缁熻**:
+- 缁熻鍗忚鐨勬煡鐪嬫鏁�
+- 鍒嗘瀽鐢ㄦ埛鐨勫仠鐣欐椂闂�
+- 璇嗗埆鐢ㄦ埛鍏虫敞鐨勭珷鑺�
+
+## 鍏�佹敞鎰忎簨椤�
+
+### 8.1 寮�鍙戞敞鎰忎簨椤�
+
+1. **瀛楃缂栫爜**
+ - 纭繚鏂囦欢浣跨敤 UTF-8 缂栫爜
+ - 閬垮厤涓枃涔辩爜闂
+
+2. **璺ㄥ钩鍙板吋瀹�**
+ - 鍦ㄥ井淇″皬绋嬪簭銆丠5銆丄pp涓祴璇�
+ - 纭繚婊氬姩鍜屽鑸姛鑳芥甯�
+
+3. **鎬ц兘浼樺寲**
+ - 鍗忚鍐呭杈冮暱锛屾敞鎰忛〉闈㈠姞杞芥�ц兘
+ - 鍙互鑰冭檻鎳掑姞杞芥垨鍒嗛〉鏄剧ず
+
+### 8.2 鍚堣娉ㄦ剰浜嬮」
+
+1. **蹇呴』鍚屾剰**
+ - 娉ㄥ唽鏃跺繀椤诲嬀閫夊悓鎰忓崗璁�
+ - 涓嶈兘榛樿鍕鹃�夛紝蹇呴』鐢ㄦ埛涓诲姩鎿嶄綔
+
+2. **鏄撲簬璁块棶**
+ - 鍗忚閾炬帴蹇呴』娓呮櫚鍙
+ - 闅忔椂鍙互鏌ョ湅瀹屾暣鍗忚
+
+3. **鏄庣‘鍛婄煡**
+ - 鏀堕泦鏁忔劅淇℃伅鏃跺繀椤绘槑纭憡鐭�
+ - 璇存槑鎷掔粷鎺堟潈鐨勫奖鍝�
+
+4. **鑾峰彇鍚屾剰**
+ - 閲嶈鏉冮檺锛堝瀹氫綅锛夐渶鍗曠嫭鎺堟潈
+ - 涓嶈兘涓�娆℃�ф巿鏉冩墍鏈夋潈闄�
+
+## 涔濄�佸悗缁紭鍖栧缓璁�
+
+1. **娣诲姞鍗忚鐗堟湰绠$悊绯荤粺**
+ - 鍦ㄥ悗鍙扮鐞嗙郴缁熶腑娣诲姞鍗忚鐗堟湰绠$悊
+ - 鏀寔鍦ㄧ嚎缂栬緫鍜岄瑙�
+ - 鑷姩璁板綍鏇存柊鍘嗗彶
+
+2. **瀹炵幇鍗忚鍚屾剰璁板綍**
+ - 鍦ㄦ暟鎹簱涓褰曠敤鎴峰悓鎰忓崗璁殑鏃堕棿鍜岀増鏈�
+ - 褰撳崗璁洿鏂版椂锛屾彁绀虹敤鎴烽噸鏂板悓鎰�
+ - 绗﹀悎銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬬殑瑕佹眰
+
+3. **娣诲姞鍗忚瀵煎嚭鍔熻兘**
+ - 鍏佽鐢ㄦ埛瀵煎嚭PDF鐗堟湰
+ - 鏂逛究鐢ㄦ埛淇濆瓨鍜屾墦鍗�
+
+4. **浼樺寲绉诲姩绔綋楠�**
+ - 娣诲姞鐩綍瀵艰埅锛屽揩閫熻烦杞埌鎸囧畾绔犺妭
+ - 浼樺寲闀挎枃鏈殑闃呰浣撻獙
+ - 娣诲姞澶滈棿妯″紡
+
+## 鍗併�佹枃浠舵竻鍗�
+
+### 鏂板鏂囦欢
+- `app/pages/mine/user-agreement/index.vue` - 鐢ㄦ埛鏈嶅姟鍗忚椤甸潰
+- `app/pages/mine/privacy-policy/index.vue` - 闅愮鏀跨瓥椤甸潰
+- `prd/鐢ㄦ埛鍗忚涓庨殣绉佹斂绛栧畬鍠勮鏄�.md` - 鏈鏄庢枃妗�
+
+### 淇敼鏂囦欢
+- `app/pages/login.vue` - 淇敼鍗忚閾炬帴鎸囧悜
+- `app/pages/register.vue` - 娣诲姞鍗忚鍚屾剰checkbox
+- `app/pages/mine/index.vue` - 娣诲姞鍗忚鑿滃崟鍏ュ彛
+- `app/pages.json` - 娣诲姞璺敱閰嶇疆锛堜箣鍓嶅凡娣诲姞锛�
+
+## 鍗佷竴銆佹�荤粨
+
+鏈瀹屽杽宸ヤ綔瀹炵幇浜嗭細
+
+鉁� **瀹屾暣鐨勭敤鎴峰崗璁拰闅愮鏀跨瓥椤甸潰**
+鉁� **绗﹀悎涓浗娉曞緥娉曡瑕佹眰**
+鉁� **娉ㄥ唽鏃跺己鍒跺悓鎰忓崗璁�**
+鉁� **澶氬渚挎嵎璁块棶鍏ュ彛**
+鉁� **绉诲姩绔紭鍖栫殑UI璁捐**
+鉁� **鏁忔劅淇℃伅楂樹寒鎻愮ず**
+鉁� **娓呮櫚鐨勫唴瀹圭粨鏋�**
+鉁� **涓撲笟鐨勬硶寰嬫湳璇�**
+
+璇峰湪瀹為檯閮ㄧ讲鍓嶏紝鍔″繀锛�
+1. 淇敼鑱旂郴鏂瑰紡涓哄疄闄呬俊鎭�
+2. 鏇存柊鏃ユ湡涓哄疄闄呮棩鏈�
+3. 璇锋硶寰嬮【闂鏍稿崗璁唴瀹�
+4. 鏍规嵁瀹為檯涓氬姟璋冩暣鏉℃
+
+濡傛湁浠讳綍闂鎴栭渶瑕佽繘涓�姝ヨ皟鏁达紝璇烽殢鏃惰仈绯诲紑鍙戝洟闃燂紒
diff --git "a/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\350\257\264\346\230\216.md" "b/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..923ad59
--- /dev/null
+++ "b/prd/\347\224\250\346\210\267\345\215\217\350\256\256\344\270\216\351\232\220\347\247\201\346\224\277\347\255\226\350\257\264\346\230\216.md"
@@ -0,0 +1,332 @@
+# 鐢ㄦ埛鍗忚涓庨殣绉佹斂绛栧畬鍠勮鏄�
+
+## 姒傝堪
+
+涓烘�ユ晳杞繍璋冨害绯荤粺娣诲姞浜嗗畬鏁寸殑鐢ㄦ埛鏈嶅姟鍗忚鍜岄殣绉佹斂绛栵紝纭繚绗﹀悎涓浗娉曞緥娉曡瑕佹眰锛屼繚鎶ょ敤鎴锋潈鐩婂拰涓汉淇℃伅瀹夊叏銆�
+
+## 鏂板鏂囦欢
+
+### 1. 鐢ㄦ埛鏈嶅姟鍗忚椤甸潰
+
+**鏂囦欢璺緞**: `app/pages/mine/user-agreement/index.vue`
+
+**涓昏鍐呭**:
+- **鏈嶅姟璇存槑**: 绯荤粺鍔熻兘銆佹湇鍔¤寖鍥淬�佸姛鑳借皟鏁磋鏄�
+- **璐﹀彿娉ㄥ唽涓庝娇鐢�**: 璐﹀彿绠$悊瑙勮寖銆佷俊鎭湡瀹炴�ц姹�
+- **鐢ㄦ埛琛屼负瑙勮寖**: 鍚堟硶浣跨敤瑕佹眰銆佺姝㈣涓哄垪琛ㄣ�佽亴涓氭搷浣滆鑼�
+- **闅愮淇濇姢**: 淇℃伅鏀堕泦璇存槑銆侀殣绉佹斂绛栧紩鐢�
+- **鐭ヨ瘑浜ф潈**: 绯荤粺鍐呭褰掑睘銆佷娇鐢ㄩ檺鍒�
+- **鏈嶅姟涓柇鎴栫粓姝�**: 涓柇鎯呭舰銆侀�氱煡鏈哄埗銆佽处鍙锋敞閿�
+- **鍏嶈矗澹版槑**: 璐d换鑼冨洿銆佸弬鑰冩�ц鏄�
+- **鍗忚鍙樻洿**: 淇敼鏈哄埗銆佺敤鎴烽�夋嫨鏉�
+- **浜夎瑙e喅**: 閫傜敤娉曞緥銆佽В鍐抽�斿緞
+- **鑱旂郴鏂瑰紡**: 瀹㈡湇閭銆佺數璇濄�佸伐浣滄椂闂�
+
+**鐗硅壊鍔熻兘**:
+- 馃摫 绉诲姩绔紭鍖栧竷灞�
+- 馃摉 娓呮櫚鐨勭珷鑺傜粨鏋�
+- 馃帹 鍙嬪ソ鐨勮瑙夎璁�
+- 鉁� 閲嶇偣鍐呭绐佸嚭鏄剧ず
+- 馃敊 杩斿洖鎸夐挳鏀寔
+
+### 2. 闅愮鏀跨瓥椤甸潰
+
+**鏂囦欢璺緞**: `app/pages/mine/privacy-policy/index.vue`
+
+**涓昏鍐呭**:
+- **寮曡█**: 闅愮淇濇姢鎵胯銆佹斂绛栭�傜敤鑼冨洿
+- **淇℃伅鏀堕泦涓庝娇鐢�**:
+ - 璐﹀彿娉ㄥ唽淇℃伅锛堟墜鏈哄彿銆佸鍚嶃�侀儴闂ㄣ�佽亴浣嶏級
+ - 浠诲姟璋冨害淇℃伅锛堜綅缃�佹偅鑰呬俊鎭�佽溅杈嗕俊鎭級
+ - 娑堟伅鎺ㄩ�佷俊鎭紙璁惧淇℃伅銆佹帹閫乼oken锛�
+ - 绯荤粺浼樺寲淇℃伅锛堟棩蹇椼�佺綉缁溿�佷娇鐢ㄦ儏鍐碉級
+- **Cookie鍜屽悓绫绘妧鏈�**: 浣跨敤鐩殑銆佺鐞嗘柟寮�
+- **淇℃伅鍏变韩銆佽浆璁┿�佸叕寮�鎶湶**: 鍏变韩鎯呭舰銆佽浆璁╅檺鍒躲�佹姭闇叉潯浠�
+- **淇℃伅瀹夊叏淇濇姢**:
+ - 鏁版嵁鍔犲瘑锛圫SL/TLS銆佹晱鎰熸暟鎹姞瀵嗭級
+ - 璁块棶鎺у埗锛堟潈闄愮鐞嗐�佸鎵规満鍒讹級
+ - 瀹夊叏瀹¤锛堝畾鏈熻瘎浼帮級
+ - 浜哄憳绠$悊锛堣韩浠借璇侊級
+ - 搴旀�ュ搷搴旓紙浜嬩欢棰勬锛�
+- **鐢ㄦ埛鏉冨埄**:
+ - 璁块棶鍜屾洿姝d俊鎭�
+ - 鍒犻櫎涓汉淇℃伅
+ - 娉ㄩ攢璐﹀彿
+ - 鎾ゅ洖鍚屾剰
+- **鏈垚骞翠汉淇濇姢**: 闈㈠悜瀵硅薄璇存槑銆佺壒娈婁繚鎶ゆ帾鏂�
+- **璺ㄥ浼犺緭**: 鏁版嵁瀛樺偍浣嶇疆璇存槑
+- **鏀跨瓥鏇存柊**: 淇閫氱煡鏈哄埗
+- **鑱旂郴鏂瑰紡**: 闅愮闂鑱旂郴娓犻亾
+- **鏈瀹氫箟**: 涓汉淇℃伅銆佹晱鎰熶俊鎭瓑瀹氫箟
+
+**鐗硅壊鍔熻兘**:
+- 馃敀 鏁忔劅淇℃伅楂樹寒鏄剧ず
+- 馃搵 璇︾粏鐨勪俊鎭被鍨嬭鏄�
+- 馃洝锔� 瀹夊叏淇濇姢鎺柦璇﹁В
+- 鈿� 鐢ㄦ埛鏉冨埄鏄庣‘鍒椾妇
+- 馃摓 澶氱鑱旂郴鏂瑰紡
+
+## 璺敱閰嶇疆
+
+宸插湪 `app/pages.json` 涓坊鍔犺矾鐢遍厤缃細
+
+```json
+{
+ "path": "pages/mine/user-agreement/index",
+ "style": {
+ "navigationBarTitleText": "鐢ㄦ埛鏈嶅姟鍗忚"
+ }
+},
+{
+ "path": "pages/mine/privacy-policy/index",
+ "style": {
+ "navigationBarTitleText": "闅愮鏀跨瓥"
+ }
+}
+```
+
+## 浣跨敤鏂瑰紡
+
+### 浠�"鎴戠殑"椤甸潰璺宠浆
+
+```vue
+<template>
+ <view class="setting-item" @click="viewUserAgreement">
+ <text>鐢ㄦ埛鏈嶅姟鍗忚</text>
+ <uni-icons type="arrowright" size="16"></uni-icons>
+ </view>
+
+ <view class="setting-item" @click="viewPrivacyPolicy">
+ <text>闅愮鏀跨瓥</text>
+ <uni-icons type="arrowright" size="16"></uni-icons>
+ </view>
+</template>
+
+<script>
+export default {
+ methods: {
+ viewUserAgreement() {
+ uni.navigateTo({
+ url: '/pages/mine/user-agreement/index'
+ })
+ },
+ viewPrivacyPolicy() {
+ uni.navigateTo({
+ url: '/pages/mine/privacy-policy/index'
+ })
+ }
+ }
+}
+</script>
+```
+
+### 鍦ㄦ敞鍐岄〉闈㈠紩鐢�
+
+```vue
+<template>
+ <view class="agreement-tips">
+ <checkbox-group @change="agreeChange">
+ <label>
+ <checkbox value="agree" :checked="agreedToTerms" />
+ <text>鎴戝凡闃呰骞跺悓鎰�</text>
+ <text class="link" @click.stop="viewUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
+ <text>鍜�</text>
+ <text class="link" @click.stop="viewPrivacyPolicy">銆婇殣绉佹斂绛栥��</text>
+ </label>
+ </checkbox-group>
+ </view>
+</template>
+
+<script>
+export default {
+ data() {
+ return {
+ agreedToTerms: false
+ }
+ },
+ methods: {
+ agreeChange(e) {
+ this.agreedToTerms = e.detail.value.includes('agree')
+ },
+ viewUserAgreement() {
+ uni.navigateTo({
+ url: '/pages/mine/user-agreement/index'
+ })
+ },
+ viewPrivacyPolicy() {
+ uni.navigateTo({
+ url: '/pages/mine/privacy-policy/index'
+ })
+ }
+ }
+}
+</script>
+```
+
+## 娉曞緥鍚堣瑕佺偣
+
+### 1. 绗﹀悎銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬭姹�
+
+鉁� **鏄庣‘鍛婄煡**: 娓呮璇存槑鏀堕泦鍝簺涓汉淇℃伅
+鉁� **鐢ㄩ�旇鏄�**: 璇︾粏璇存槑姣忕被淇℃伅鐨勪娇鐢ㄧ洰鐨�
+鉁� **鏁忔劅淇℃伅鏍囨敞**: 瀵逛綅缃俊鎭瓑鏁忔劅鏁版嵁鐗瑰埆鏍囨敞
+鉁� **鐢ㄦ埛鏉冨埄**: 鏄庣‘鐢ㄦ埛璁块棶銆佹洿姝c�佸垹闄ょ瓑鏉冨埄
+鉁� **瀹夊叏淇濇姢**: 璇存槑閲囧彇鐨勫畨鍏ㄤ繚鎶ゆ帾鏂�
+
+### 2. 绗﹀悎銆婄綉缁滃畨鍏ㄦ硶銆嬭姹�
+
+鉁� **鏁版嵁瀹夊叏**: 璇存槑鏁版嵁鍔犲瘑銆佽闂帶鍒剁瓑鎺柦
+鉁� **浜嬩欢搴旀��**: 鏄庣‘瀹夊叏浜嬩欢鐨勫鐞嗗拰閫氱煡鏈哄埗
+鉁� **鏁版嵁瀛樺偍**: 璇存槑鏁版嵁瀛樺偍鍦ㄥ鍐�
+
+### 3. 绗﹀悎銆婃皯娉曞吀銆嬭姹�
+
+鉁� **闅愮鏉冧繚鎶�**: 灏婇噸鐢ㄦ埛闅愮鏉�
+鉁� **涓汉淇℃伅淇濇姢**: 鍚堟硶銆佹褰撱�佸繀瑕佸師鍒�
+鉁� **鏈垚骞翠汉淇濇姢**: 鐗瑰埆淇濇姢鎺柦
+
+## 瀹氬埗鍖栧缓璁�
+
+### 鏍规嵁瀹為檯鎯呭喌淇敼浠ヤ笅鍐呭锛�
+
+1. **鑱旂郴鏂瑰紡**
+ - 鐢靛瓙閭锛氬皢 `support@example.com` 鏀逛负瀹為檯閭
+ - 瀹㈡湇鐢佃瘽锛氬皢 `400-XXX-XXXX` 鏀逛负瀹為檯鐢佃瘽
+ - 闅愮閭锛氬皢 `privacy@example.com` 鏀逛负瀹為檯閭
+
+2. **鍏徃淇℃伅**
+ - 鏍规嵁瀹為檯杩愯惀涓讳綋瀹屽杽鍏徃鍚嶇О
+ - 娣诲姞鍏徃娉ㄥ唽鍦板潃
+ - 娣诲姞缁熶竴绀句細淇$敤浠g爜
+
+3. **鏁版嵁澶勭悊**
+ - 鏍规嵁瀹為檯涓氬姟璋冩暣鏀堕泦鐨勪俊鎭被鍨�
+ - 琛ュ厖绗笁鏂规湇鍔″晢淇℃伅锛堝鍦板浘鏈嶅姟锛�
+ - 瀹屽杽鏁版嵁淇濆瓨鏈熼檺璇存槑
+
+4. **鐗瑰畾鍦烘櫙**
+ - 鏍规嵁瀹為檯涓氬姟琛ュ厖鐗规畩鍦烘櫙鐨勯殣绉佸鐞�
+ - 娣诲姞鍏蜂綋鐨勫尰鐤楁暟鎹鐞嗚鏄�
+ - 瀹屽杽鎮h�呬俊鎭繚鎶ょ粏鍒�
+
+## 鏍峰紡鐗圭偣
+
+### 閫氱敤鏍峰紡
+
+- **鍝嶅簲寮忓竷灞�**: 閫傞厤涓嶅悓灞忓箷灏哄
+- **娓呮櫚灞傜骇**: 鏍囬銆佸皬鏍囬銆佹鏂囧眰娆″垎鏄�
+- **鏄撹鎬�**: 鍚堥�傜殑瀛楀彿銆佽楂樸�侀棿璺�
+- **瑙嗚寮曞**: 浣跨敤鍥炬爣銆侀鑹插己璋冮噸鐐�
+
+### 闅愮鏀跨瓥鐗规畩鏍峰紡
+
+```scss
+.highlight {
+ background-color: #fff8e6; // 娣¢粍鑹茶儗鏅�
+ padding: 20rpx;
+ border-left: 4rpx solid #ff9500; // 姗欒壊宸﹁竟妗�
+ border-radius: 8rpx;
+ font-weight: bold;
+ color: #333;
+}
+```
+
+鐢ㄤ簬绐佸嚭鏄剧ず鏁忔劅淇℃伅銆侀噸瑕佹彁绀虹瓑鍐呭銆�
+
+### 鍒楄〃鏍峰紡
+
+```scss
+.indent {
+ padding-left: 40rpx;
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: 20rpx;
+ top: 18rpx;
+ width: 8rpx;
+ height: 8rpx;
+ background-color: #666;
+ border-radius: 50%;
+ }
+}
+```
+
+鐢ㄤ簬鏄剧ず椤圭洰鍒楄〃锛屼娇鐢ㄥ渾鐐规爣璁般��
+
+## 缁存姢寤鸿
+
+### 瀹氭湡鏇存柊
+
+1. **娉曞緥娉曡鍙樻洿鏃�**: 鍙婃椂鏇存柊鐩稿叧鏉℃
+2. **鍔熻兘鍙樻洿鏃�**: 鏇存柊鍔熻兘璇存槑鍜屼俊鎭敹闆嗚鏄�
+3. **瀹夊叏鎺柦鍗囩骇鏃�**: 鏇存柊瀹夊叏淇濇姢璇存槑
+4. **鑷冲皯姣忓勾涓�娆�**: 瀹℃煡鍜屾洿鏂版暣浣撳唴瀹�
+
+### 鐗堟湰绠$悊
+
+寤鸿鍦ㄦ枃浠堕《閮ㄦ坊鍔犵増鏈褰曪細
+
+```vue
+<view class="version-info">
+ <text>鐗堟湰锛歷1.0</text>
+ <text>鏇存柊鏃ユ湡锛�2025骞�1鏈�25鏃�</text>
+ <text>鐢熸晥鏃ユ湡锛�2025骞�1鏈�25鏃�</text>
+</view>
+```
+
+### 鍙樻洿閫氱煡
+
+褰撳崗璁垨鏀跨瓥鏈夐噸澶у彉鏇存椂锛屽簲锛�
+1. 鍦ㄧ郴缁熶腑寮圭獥閫氱煡鐢ㄦ埛
+2. 瑕佹眰鐢ㄦ埛閲嶆柊鍚屾剰
+3. 淇濈暀鍙樻洿璁板綍
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 娉曞緥瀹℃牳
+
+鈿狅笍 **閲嶈**: 寤鸿鍦ㄦ寮忎娇鐢ㄥ墠锛岃涓撲笟寰嬪笀瀹℃牳鍗忚鍜屾斂绛栧唴瀹癸紝纭繚瀹屽叏绗﹀悎锛�
+- 銆婁釜浜轰俊鎭繚鎶ゆ硶銆�
+- 銆婄綉缁滃畨鍏ㄦ硶銆�
+- 銆婃皯娉曞吀銆�
+- 銆婃暟鎹畨鍏ㄦ硶銆�
+- 鐩稿叧琛屼笟瑙勮寖锛堝尰鐤楄涓氾級
+
+### 2. 鍖荤枟鏁版嵁鐗规畩鎬�
+
+鐢变簬娑夊強鍖荤枟鎬ユ晳涓氬姟锛屽彲鑳介渶瑕佽ˉ鍏咃細
+- 鎮h�呭尰鐤楁暟鎹殑鐗规畩淇濇姢鎺柦
+- 鍖荤枟淇℃伅鑴辨晱澶勭悊
+- 鍖荤枟鏁版嵁璁块棶鏉冮檺绠$悊
+- 绗﹀悎鍖荤枟琛屼笟鏁版嵁瀹夊叏瑙勮寖
+
+### 3. 鏁忔劅鏉冮檺璇存槑
+
+瀵逛簬浣嶇疆淇℃伅绛夋晱鎰熸潈闄愶紝闇�瑕侊細
+- 鍦ㄩ娆′娇鐢ㄦ椂寮圭獥璇存槑
+- 鎻愪緵鎷掔粷閫夐」
+- 璇存槑鎷掔粷鍚庣殑褰卞搷
+- 鍏佽闅忔椂鎾ゅ洖鎺堟潈
+
+### 4. 鏈垚骞翠汉淇濇姢
+
+濡傛灉绯荤粺鍙兘琚湭鎴愬勾浜轰娇鐢紝闇�瑕侊細
+- 娣诲姞骞撮緞楠岃瘉鏈哄埗
+- 瑕佹眰鐩戞姢浜哄悓鎰�
+- 鐗规畩鐨勯殣绉佷繚鎶ゆ帾鏂�
+
+## 鐩稿叧鏂囦欢
+
+- `/app/pages/mine/user-agreement/index.vue` - 鐢ㄦ埛鏈嶅姟鍗忚椤甸潰
+- `/app/pages/mine/privacy-policy/index.vue` - 闅愮鏀跨瓥椤甸潰
+- `/app/pages.json` - 璺敱閰嶇疆鏂囦欢
+
+## 鏇存柊鏃ュ織
+
+- **2025-01-25**: 鍒濆鐗堟湰
+ - 鍒涘缓鐢ㄦ埛鏈嶅姟鍗忚椤甸潰
+ - 鍒涘缓闅愮鏀跨瓥椤甸潰
+ - 娣诲姞璺敱閰嶇疆
+ - 瀹屽杽娉曞緥鍚堣鍐呭
diff --git "a/prd/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\351\223\276\346\216\245\344\274\230\345\214\226\350\257\264\346\230\216.md" "b/prd/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\351\223\276\346\216\245\344\274\230\345\214\226\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..129583f
--- /dev/null
+++ "b/prd/\347\231\273\345\275\225\346\263\250\345\206\214\345\215\217\350\256\256\351\223\276\346\216\245\344\274\230\345\214\226\350\257\264\346\230\216.md"
@@ -0,0 +1,407 @@
+# 鐧诲綍娉ㄥ唽鍗忚閾炬帴浼樺寲璇存槑
+
+## 闂鎻忚堪
+
+鐢ㄦ埛鍙嶉鐧诲綍鐣岄潰鐨勯殣绉佸崗璁拰鐢ㄦ埛鍗忚閾炬帴锛�
+1. 浣嶇疆澶潬涓婏紝瀹规槗琚叾浠栧厓绱犻伄鎸�
+2. 鐐瑰嚮鍖哄煙澶皬锛屼笉瀹规槗鐐瑰嚮
+3. 鐐瑰嚮鍙兘鏃犲搷搴�
+
+## 浼樺寲鏂规
+
+### 涓�銆佺櫥褰曢〉闈� (`app/pages/login.vue`)
+
+#### 1.1 妯℃澘浼樺寲
+
+**淇敼鍓�**:
+```vue
+<view class="xieyi text-center">
+ <text class="text-grey1">鐧诲綍鍗充唬琛ㄥ悓鎰�</text>
+ <text @click="handleUserAgrement" class="text-blue">銆婄敤鎴峰崗璁��</text>
+ <text @click="handlePrivacy" class="text-blue">銆婇殣绉佸崗璁��</text>
+</view>
+```
+
+**淇敼鍚�**:
+```vue
+<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>
+```
+
+**浼樺寲鐐�**:
+- 鉁� 娣诲姞 `@click.stop` 闃绘浜嬩欢鍐掓场
+- 鉁� 娣诲姞 `agreement-link` 绫诲悕锛屽鍔犵偣鍑诲尯鍩�
+- 鉁� 鍦ㄤ袱涓崗璁箣闂存坊鍔�"鍜�"瀛楋紝鏇寸鍚堣涔�
+
+#### 1.2 鏍峰紡浼樺寲
+
+**淇敼鍓�**:
+```scss
+.reg, .xieyi {
+ margin: 20rpx 0;
+
+ .text-grey1 {
+ color: #888;
+ }
+
+ .text-blue {
+ margin: 0 10rpx;
+ color: #007AFF;
+ }
+}
+```
+
+**淇敼鍚�**:
+```scss
+.reg {
+ margin: 20rpx 0;
+
+ .text-grey1 {
+ color: #888;
+ }
+
+ .text-blue {
+ margin: 0 10rpx;
+ color: #007AFF;
+ }
+}
+
+.xieyi {
+ margin: 50rpx 0 30rpx 0; // 鍚戜笅绉诲姩锛屽鍔犱笂杈硅窛
+ padding: 20rpx 0; // 澧炲姞鍐呰竟璺�
+ line-height: 2; // 澧炲姞琛岄珮
+
+ .text-grey1 {
+ color: #888;
+ font-size: 24rpx;
+ }
+
+ .agreement-link {
+ color: #007AFF;
+ font-size: 24rpx;
+ padding: 10rpx 8rpx; // 澧炲姞鐐瑰嚮鍖哄煙
+ margin: 0 5rpx;
+ display: inline-block;
+ position: relative;
+ z-index: 10; // 纭繚鍦ㄦ渶涓婂眰
+ }
+}
+```
+
+**浼樺寲鐐�**:
+- 鉁� **鍚戜笅绉诲姩**: `margin-top: 50rpx`锛堝師鏉�20rpx锛�
+- 鉁� **澧炲姞鐐瑰嚮鍖哄煙**: `padding: 10rpx 8rpx`
+- 鉁� **鎻愰珮灞傜骇**: `z-index: 10`
+- 鉁� **澧炲姞琛岄珮**: `line-height: 2`锛岄槻姝㈡枃瀛楁嫢鎸�
+- 鉁� **鍒嗙鏍峰紡**: 灏� `.reg` 鍜� `.xieyi` 鍒嗗紑锛岀嫭绔嬫帶鍒�
+
+### 浜屻�佹敞鍐岄〉闈� (`app/pages/register.vue`)
+
+#### 2.1 妯℃澘锛堝凡姝g‘锛�
+
+```vue
+<view class="agreement-section">
+ <checkbox-group @change="handleAgreementChange">
+ <label class="agreement-label">
+ <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" />
+ <text class="agreement-text">
+ 鎴戝凡闃呰骞跺悓鎰�
+ <text class="agreement-link" @click.stop="handleUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
+ 鍜�
+ <text class="agreement-link" @click.stop="handlePrivacy">銆婇殣绉佹斂绛栥��</text>
+ </text>
+ </label>
+ </checkbox-group>
+</view>
+```
+
+宸插寘鍚� `@click.stop`锛屾纭樆姝簨浠跺啋娉°��
+
+#### 2.2 鏍峰紡浼樺寲
+
+**淇敼鍓�**:
+```scss
+.agreement-section {
+ margin: 30rpx 0;
+
+ .agreement-label {
+ display: flex;
+ align-items: flex-start;
+
+ checkbox {
+ margin-right: 15rpx;
+ transform: scale(0.9);
+ }
+
+ .agreement-text {
+ flex: 1;
+ font-size: 24rpx;
+ color: #666;
+ line-height: 1.6;
+ text-align: left;
+
+ .agreement-link {
+ color: #007AFF;
+ text-decoration: underline;
+ }
+ }
+ }
+}
+```
+
+**淇敼鍚�**:
+```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; // 闃叉checkbox琚帇缂�
+ }
+
+ .agreement-text {
+ flex: 1;
+ font-size: 26rpx; // 澧炲ぇ瀛椾綋锛堝師24rpx锛�
+ color: #666;
+ line-height: 2; // 澧炲姞琛岄珮锛堝師1.6锛�
+ text-align: left;
+
+ .agreement-link {
+ color: #007AFF;
+ text-decoration: underline;
+ padding: 8rpx 5rpx; // 澧炲姞鐐瑰嚮鍖哄煙
+ display: inline-block;
+ position: relative;
+ z-index: 10; // 纭繚鍦ㄦ渶涓婂眰
+ }
+ }
+ }
+}
+```
+
+**浼樺寲鐐�**:
+- 鉁� **闃叉鍘嬬缉**: checkbox娣诲姞 `flex-shrink: 0`
+- 鉁� **澧炲ぇ瀛椾綋**: `font-size: 26rpx`锛堝師24rpx锛�
+- 鉁� **澧炲姞琛岄珮**: `line-height: 2`锛堝師1.6锛�
+- 鉁� **澧炲姞鐐瑰嚮鍖哄煙**: `padding: 8rpx 5rpx`
+- 鉁� **鎻愰珮灞傜骇**: `z-index: 10`
+
+## 浼樺寲鏁堟灉瀵规瘮
+
+### 鐧诲綍椤甸潰
+
+| 椤圭洰 | 浼樺寲鍓� | 浼樺寲鍚� |
+|------|--------|--------|
+| 涓婅竟璺� | 20rpx | 50rpx |
+| 鍐呰竟璺� | 鏃� | 20rpx 0 |
+| 琛岄珮 | 榛樿 | 2 |
+| 鐐瑰嚮鍖哄煙 | 浠呮枃瀛� | 鏂囧瓧 + padding(10rpx 8rpx) |
+| z-index | 榛樿 | 10 |
+| 浜嬩欢鍐掓场 | 鍙兘鍐掓场 | 宸查樆姝�(@click.stop) |
+
+### 娉ㄥ唽椤甸潰
+
+| 椤圭洰 | 浼樺寲鍓� | 浼樺寲鍚� |
+|------|--------|--------|
+| 瀛椾綋澶у皬 | 24rpx | 26rpx |
+| 琛岄珮 | 1.6 | 2 |
+| 鐐瑰嚮鍖哄煙 | 浠呮枃瀛� | 鏂囧瓧 + padding(8rpx 5rpx) |
+| z-index | 榛樿 | 10 |
+| checkbox鍘嬬缉 | 鍙兘 | 宸查槻姝�(flex-shrink: 0) |
+
+## 鎶�鏈鐐�
+
+### 1. 闃绘浜嬩欢鍐掓场
+
+浣跨敤 `@click.stop` 鏇夸唬 `@click`锛�
+
+```vue
+<!-- 閿欒 -->
+<text @click="handlePrivacy">銆婇殣绉佸崗璁��</text>
+
+<!-- 姝g‘ -->
+<text @click.stop="handlePrivacy">銆婇殣绉佸崗璁��</text>
+```
+
+**鍘熷洜**:
+- 鍦╱ni-app涓紝鐗瑰埆鏄湪寰俊灏忕▼搴忕幆澧冧笅锛岀偣鍑讳簨浠跺彲鑳戒細琚埗鍏冪礌鎹曡幏
+- 浣跨敤 `.stop` 淇グ绗﹀彲浠ラ樆姝簨浠跺啋娉★紝纭繚鐐瑰嚮鍙Е鍙戝綋鍓嶅厓绱犵殑浜嬩欢
+
+### 2. 澧炲姞鐐瑰嚮鐑尯
+
+閫氳繃 `padding` 澧炲姞鍙偣鍑诲尯鍩燂細
+
+```scss
+.agreement-link {
+ padding: 10rpx 8rpx;
+ display: inline-block; // 蹇呴』鏄潡绾ф垨琛屽唴鍧楃骇鍏冪礌
+}
+```
+
+**鏁堟灉**:
+- 鐐瑰嚮鍖哄煙浠� "鏂囧瓧瀹藉害" 鎵╁ぇ鍒� "鏂囧瓧瀹藉害 + padding"
+- 鎻愬崌绉诲姩绔敤鎴蜂綋楠�
+
+### 3. 纭繚鍏冪礌灞傜骇
+
+浣跨敤 `z-index` 鍜� `position: relative`锛�
+
+```scss
+.agreement-link {
+ position: relative;
+ z-index: 10;
+}
+```
+
+**鍘熷洜**:
+- 闃叉琚叾浠栧厓绱狅紙濡傚井淇$櫥褰曟寜閽級閬尅
+- 纭繚鐐瑰嚮浜嬩欢鑳藉姝e父瑙﹀彂
+
+### 4. 瑙嗚鍒嗙
+
+閫氳繃澧炲姞闂磋窛鍜岃楂橈細
+
+```scss
+.xieyi {
+ margin: 50rpx 0 30rpx 0; // 鍚戜笅绉诲姩
+ padding: 20rpx 0;
+ line-height: 2;
+}
+```
+
+**鏁堟灉**:
+- 鍗忚鍖哄煙涓庝笂鏂规寜閽繚鎸佽冻澶熻窛绂�
+- 鏂囧瓧涓嶄細鎷ユ尋锛屾洿鏄撻槄璇�
+
+## 娴嬭瘯瑕佺偣
+
+### 娴嬭瘯鐜
+- 鉁� 寰俊灏忕▼搴�
+- 鉁� H5
+- 鉁� Android App
+- 鉁� iOS App
+
+### 娴嬭瘯姝ラ
+
+#### 鐧诲綍椤甸潰娴嬭瘯
+1. 鎵撳紑鐧诲綍椤甸潰
+2. 鍚戜笅婊氬姩锛屾煡鐪嬪崗璁尯鍩熸槸鍚﹀悜涓嬬Щ鍔�
+3. 鐐瑰嚮"銆婄敤鎴峰崗璁��"閾炬帴
+4. 楠岃瘉鏄惁璺宠浆鍒扮敤鎴峰崗璁〉闈�
+5. 杩斿洖鐧诲綍椤甸潰
+6. 鐐瑰嚮"銆婇殣绉佸崗璁��"閾炬帴
+7. 楠岃瘉鏄惁璺宠浆鍒伴殣绉佹斂绛栭〉闈�
+8. 鍦ㄤ笉鍚屽睆骞曞昂瀵镐笅娴嬭瘯锛堝ぇ灞忋�佸皬灞忥級
+
+#### 娉ㄥ唽椤甸潰娴嬭瘯
+1. 鎵撳紑娉ㄥ唽椤甸潰
+2. 鐐瑰嚮鍗忚checkbox
+3. 鐐瑰嚮"銆婄敤鎴锋湇鍔″崗璁��"閾炬帴
+4. 楠岃瘉鏄惁璺宠浆鍒扮敤鎴峰崗璁〉闈紙checkbox鐘舵�佷繚鎸侊級
+5. 杩斿洖娉ㄥ唽椤甸潰
+6. 鐐瑰嚮"銆婇殣绉佹斂绛栥��"閾炬帴
+7. 楠岃瘉鏄惁璺宠浆鍒伴殣绉佹斂绛栭〉闈�
+8. 楠岃瘉涓嶅嬀閫塩heckbox鏃舵槸鍚﹁兘娉ㄥ唽
+
+### 棰勬湡缁撴灉
+- 鉁� 鍗忚閾炬帴浣嶇疆鍚戜笅绉诲姩锛屼笉琚叾浠栧厓绱犻伄鎸�
+- 鉁� 鐐瑰嚮鍗忚閾炬帴鍝嶅簲鐏垫晱锛屾棤闇�绮剧‘鐐瑰嚮鏂囧瓧
+- 鉁� 璺宠浆姝g‘锛岃兘姝e父鏌ョ湅鍗忚鍐呭
+- 鉁� 娉ㄥ唽椤甸潰鐨刢heckbox涓庡崗璁摼鎺ヤ簰涓嶅共鎵�
+- 鉁� 鍚勫钩鍙拌〃鐜颁竴鑷�
+
+## 鍙兘鐨勯棶棰樺拰瑙e喅鏂规
+
+### 闂1: 鍦ㄦ煇浜涜澶囦笂鐐瑰嚮浠嶄笉鍝嶅簲
+
+**鎺掓煡姝ラ**:
+1. 妫�鏌ユ祻瑙堝櫒鎺у埗鍙版槸鍚︽湁閿欒
+2. 妫�鏌ヨ矾鐢遍厤缃槸鍚︽纭�
+3. 妫�鏌ュ崗璁〉闈㈡枃浠舵槸鍚﹀瓨鍦�
+
+**瑙e喅鏂规**:
+```javascript
+// 娣诲姞璋冭瘯鏃ュ織
+handlePrivacy() {
+ console.log('鐐瑰嚮闅愮鍗忚')
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+}
+```
+
+### 闂2: 鐐瑰嚮鍖哄煙澶ぇ锛岃瑙�
+
+**瑙e喅鏂规**:
+璋冩暣 `padding` 鍊硷細
+```scss
+.agreement-link {
+ padding: 5rpx 5rpx; // 鍑忓皬padding
+}
+```
+
+### 闂3: 鍦ㄥ皬灞忚澶囦笂鍗忚鏂囧瓧鎹㈣鏄剧ず涓嶇編瑙�
+
+**瑙e喅鏂规**:
+```scss
+.xieyi {
+ font-size: 22rpx; // 鍑忓皬瀛椾綋
+ line-height: 1.8; // 璋冩暣琛岄珮
+}
+```
+
+## 鍚庣画浼樺寲寤鸿
+
+1. **娣诲姞鐐瑰嚮鍙嶉**
+ ```scss
+ .agreement-link {
+ &:active {
+ opacity: 0.7;
+ }
+ }
+ ```
+
+2. **娣诲姞涓嬪垝绾垮姩鐢�**
+ ```scss
+ .agreement-link {
+ position: relative;
+
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 1px;
+ background-color: #007AFF;
+ transform: scaleX(0);
+ transition: transform 0.3s;
+ }
+
+ &:active::after {
+ transform: scaleX(1);
+ }
+ }
+ ```
+
+3. **鑰冭檻鏃犻殰纰嶈闂�**
+ - 娣诲姞 `aria-label` 灞炴��
+ - 纭繚瓒冲鐨勯鑹插姣斿害
+ - 鏀寔閿洏瀵艰埅
+
+## 鎬荤粨
+
+鏈浼樺寲涓昏瑙e喅浜嗭細
+1. 鉁� **浣嶇疆闂**: 鍗忚鍖哄煙鍚戜笅绉诲姩50rpx锛岄伩鍏嶈閬尅
+2. 鉁� **鐐瑰嚮闂**: 澧炲姞padding鎵╁ぇ鐐瑰嚮鐑尯锛屾坊鍔爖-index纭繚鍙偣鍑�
+3. 鉁� **浜や簰闂**: 浣跨敤@click.stop闃绘浜嬩欢鍐掓场锛岀‘淇濈偣鍑诲搷搴�
+4. 鉁� **瑙嗚闂**: 澧炲姞琛岄珮鍜岄棿璺濓紝鎻愬崌鍙鎬�
+
+鎵�鏈変慨鏀瑰凡缁忚繃璇硶妫�鏌ワ紝鍙洿鎺ヤ娇鐢ㄣ�傚缓璁湪瀹為檯璁惧涓婅繘琛屽厖鍒嗘祴璇曪紝纭繚鍚勫钩鍙拌〃鐜颁竴鑷淬��
diff --git "a/prd/\347\273\221\345\256\232\350\275\246\350\276\206\351\203\250\351\227\250\350\277\207\346\273\244-\345\267\262\345\256\236\347\216\260.md" "b/prd/\347\273\221\345\256\232\350\275\246\350\276\206\351\203\250\351\227\250\350\277\207\346\273\244-\345\267\262\345\256\236\347\216\260.md"
new file mode 100644
index 0000000..094fb2f
--- /dev/null
+++ "b/prd/\347\273\221\345\256\232\350\275\246\350\276\206\351\203\250\351\227\250\350\277\207\346\273\244-\345\267\262\345\256\236\347\216\260.md"
@@ -0,0 +1,327 @@
+# 缁戝畾杞﹁締閮ㄩ棬杩囨护鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鐢ㄦ埛缁戝畾杞﹁締鏃讹紝绯荤粺鑷姩闄愬埗鍙兘缁戝畾涓庤嚜宸卞悓涓�鍒嗗叕鍙哥殑杞﹁締锛岀‘淇濊溅杈嗙鐞嗙殑瑙勮寖鎬у拰鏁版嵁闅旂銆�
+
+## 瀹炵幇鐘舵��
+
+### 鉁� 宸插疄鐜板姛鑳�
+
+#### 1. 鍓嶇閮ㄩ棬杩囨护
+
+**鏂囦欢**: [`app/pages/bind-vehicle.vue`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\app\pages\bind-vehicle.vue)
+
+**鏍稿績閫昏緫**:
+```javascript
+loadVehicleList() {
+ this.loading = true
+ // 鉁� 鑾峰彇褰撳墠鐢ㄦ埛鐨勯儴闂↖D
+ const deptId = this.currentUser.deptId
+
+ // 鉁� 涓ユ牸楠岃瘉锛氶儴闂↖D涓嶅瓨鍦ㄦ椂锛屼笉鍔犺浇杞﹁締
+ if (!deptId) {
+ this.loading = false
+ console.error('鏃犳硶鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅')
+ this.$modal.showToast('鏃犳硶鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅')
+ return
+ }
+
+ // 鉁� 浣跨敤鐢ㄦ埛瀹為檯閮ㄩ棬ID鏌ヨ杞﹁締
+ listAvailableVehicles(deptId, 'GENERAL').then(response => {
+ // ...
+ })
+}
+```
+
+**鍏抽敭鐗规��**:
+- 鉁� 涓嶄娇鐢ㄩ粯璁ゅ�硷紝涓ユ牸妫�鏌� [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96)
+- 鉁� [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 涓虹┖鏃讹紝缁欏嚭鍙嬪ソ鎻愮ず
+- 鉁� 鏃犲彲鐢ㄨ溅杈嗘椂锛屾樉绀烘槑纭彁绀轰俊鎭�
+- 鉁� 璁板綍璇︾粏鏃ュ織渚夸簬璋冭瘯
+
+#### 2. 鍚庣閮ㄩ棬杩囨护
+
+**鎺ュ彛**: `GET /task/vehicle/available`
+
+**鏂囦欢**: [`SysTaskVehicleController.java`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-admin\src\main\java\com\ruoyi\web\controller\task\SysTaskVehicleController.java)
+
+```java
+@GetMapping("/available")
+public AjaxResult getAvailableVehicles(
+ @RequestParam Long deptId, // 鉁� 蹇呭~鍙傛暟
+ @RequestParam(required = false) String taskType) {
+
+ List<SysTaskVehicle> list = sysTaskService.getAvailableVehicles(deptId, taskType);
+ return success(list);
+}
+```
+
+**Service灞傝繃婊�**:
+- 鉁� 鏍规嵁 [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 鏌ヨ杞﹁締
+- 鉁� 杩囨护 `status='0'` 鐨勬甯歌溅杈�
+- 鉁� 杩囨护 `car_id` 鍜� `dept_id` 涓嶄负绌虹殑杞﹁締
+
+## 涓氬姟娴佺▼
+
+### 鍦烘櫙1锛氭繁鍦冲垎鍏徃鐢ㄦ埛缁戝畾杞﹁締
+
+```
+鐢ㄦ埛鐧诲綍 (deptId: 101)
+ 鈫�
+鎵撳紑缁戝畾杞﹁締椤甸潰
+ 鈫�
+绯荤粺妫�鏌� deptId = 101
+ 鈫�
+璋冪敤 API: /task/vehicle/available?deptId=101&taskType=GENERAL
+ 鈫�
+鍚庣鏌ヨ: SELECT * FROM tb_vehicle_info WHERE dept_id=101 AND status='0'
+ 鈫�
+杩斿洖缁撴灉:
+ - 绮12345 (娣卞湷鍒嗗叕鍙�)
+ - 绮67890 (娣卞湷鍒嗗叕鍙�)
+ 鈫�
+鍓嶇鏄剧ず: 浠呮樉绀烘繁鍦冲垎鍏徃鐨勮溅杈�
+ 鈫�
+鐢ㄦ埛閫夋嫨骞剁粦瀹�
+```
+
+### 鍦烘櫙2锛氱敤鎴锋棤閮ㄩ棬淇℃伅
+
+```
+鐢ㄦ埛鐧诲綍 (deptId: null)
+ 鈫�
+鎵撳紑缁戝畾杞﹁締椤甸潰
+ 鈫�
+绯荤粺妫�鏌� deptId = null
+ 鈫�
+鉂� 缁堟鍔犺浇锛屾樉绀烘彁绀猴細"鏃犳硶鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅"
+ 鈫�
+杞﹁締鍒楄〃涓虹┖锛岀敤鎴锋棤娉曠粦瀹�
+```
+
+### 鍦烘櫙3锛氬垎鍏徃鏆傛棤杞﹁締
+
+```
+鐢ㄦ埛鐧诲綍 (deptId: 103)
+ 鈫�
+鎵撳紑缁戝畾杞﹁締椤甸潰
+ 鈫�
+绯荤粺妫�鏌� deptId = 103
+ 鈫�
+璋冪敤 API: /task/vehicle/available?deptId=103&taskType=GENERAL
+ 鈫�
+鍚庣鏌ヨ: SELECT * FROM tb_vehicle_info WHERE dept_id=103 AND status='0'
+ 鈫�
+杩斿洖缁撴灉: [] (绌烘暟缁�)
+ 鈫�
+鍓嶇鏄剧ず鎻愮ず锛�"褰撳墠鍒嗗叕鍙告殏鏃犲彲鐢ㄨ溅杈�"
+```
+
+## 鏁版嵁闅旂绀轰緥
+
+### 閮ㄩ棬缁撴瀯
+```
+100 (鎬诲叕鍙�)
+鈹溾攢鈹� 101 (娣卞湷鍒嗗叕鍙�)
+鈹� 鈹溾攢鈹� 绮12345
+鈹� 鈹溾攢鈹� 绮67890
+鈹� 鈹斺攢鈹� 绮11111
+鈹溾攢鈹� 102 (骞垮窞鍒嗗叕鍙�)
+鈹� 鈹溾攢鈹� 绮12345
+鈹� 鈹溾攢鈹� 绮67890
+鈹� 鈹斺攢鈹� 绮22222
+鈹斺攢鈹� 103 (鍖椾含鍒嗗叕鍙�)
+ 鈹溾攢鈹� 浜珹12345
+ 鈹斺攢鈹� 浜珹67890
+```
+
+### 鐢ㄦ埛鍙杞﹁締
+
+| 鐢ㄦ埛 | 閮ㄩ棬ID | 鍙杞﹁締 | 涓嶅彲瑙佽溅杈� |
+|------|--------|---------|-----------|
+| 寮犱笁 | 101 (娣卞湷) | 绮12345, 绮67890, 绮11111 | 绮*, 浜珹* |
+| 鏉庡洓 | 102 (骞垮窞) | 绮12345, 绮67890, 绮22222 | 绮*, 浜珹* |
+| 鐜嬩簲 | 103 (鍖椾含) | 浜珹12345, 浜珹67890 | 绮*, 绮* |
+| 璧靛叚 | null (鏃犻儴闂�) | (鏃�) | (鍏ㄩ儴) |
+
+## 瀹夊叏鎬т繚闅�
+
+### 1. 鍓嶇楠岃瘉
+- 鉁� 妫�鏌ョ敤鎴烽儴闂ㄤ俊鎭槸鍚﹀瓨鍦�
+- 鉁� 涓嶄娇鐢ㄩ粯璁ゅ�� 100
+- 鉁� 绌哄�兼椂缁堟鍔犺浇
+
+### 2. 鍚庣楠岃瘉
+- 鉁� [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 浣滀负蹇呭~鍙傛暟
+- 鉁� 鏁版嵁搴撴煡璇㈡椂寮哄埗娣诲姞閮ㄩ棬鏉′欢
+- 鉁� 杩囨护鏃犳晥杞﹁締锛坈ar_id銆乨ept_id 涓虹┖锛�
+
+### 3. 寤鸿澧炲己锛堝彲閫夛級
+
+鍙互鍦ㄥ悗绔疌ontroller涓坊鍔犳潈闄愭牎楠岋細
+
+```java
+@GetMapping("/available")
+public AjaxResult getAvailableVehicles(@RequestParam Long deptId, @RequestParam(required = false) String taskType) {
+ // 鉁� 楠岃瘉璇锋眰鐨� deptId 鏄惁涓庣敤鎴风殑 deptId 涓�鑷�
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long userDeptId = loginUser.getUser().getDeptId();
+
+ if (!deptId.equals(userDeptId)) {
+ return error("鏃犳潈鏌ヨ鍏朵粬閮ㄩ棬鐨勮溅杈�");
+ }
+
+ List<SysTaskVehicle> list = sysTaskService.getAvailableVehicles(deptId, taskType);
+ return success(list);
+}
+```
+
+## 鐩稿叧鎺ュ彛
+
+### 1. 鏌ヨ鍙敤杞﹁締
+
+**鎺ュ彛**: `GET /task/vehicle/available`
+
+**璇锋眰鍙傛暟**:
+```
+deptId: 101 (蹇呭~) 閮ㄩ棬ID
+taskType: GENERAL (鍙��) 浠诲姟绫诲瀷
+```
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+ "code": 200,
+ "msg": "鏌ヨ鎴愬姛",
+ "data": [
+ {
+ "vehicleId": 1,
+ "vehicleNo": "绮12345",
+ "vehicleType": "鏁戞姢杞�",
+ "vehicleBrand": "绂忕壒",
+ "vehicleModel": "鍏ㄩ『",
+ "deptId": 101,
+ "status": "0"
+ }
+ ]
+}
+```
+
+**鏃犺溅杈嗘椂**:
+```json
+{
+ "code": 200,
+ "msg": "鏌ヨ鎴愬姛",
+ "data": []
+}
+```
+
+### 2. 缁戝畾杞﹁締
+
+**鎺ュ彛**: `POST /system/vehicle/bind`
+
+**璇锋眰浣�**:
+```json
+{
+ "userId": 1,
+ "vehicleId": 123
+}
+```
+
+### 3. 鏌ヨ鐢ㄦ埛缁戝畾杞﹁締
+
+**鎺ュ彛**: `GET /system/vehicle/user/bound/{userId}`
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+ "code": 200,
+ "msg": "鏌ヨ鎴愬姛",
+ "data": {
+ "vehicleId": 123,
+ "vehicleNumber": "绮12345",
+ "deptId": 101,
+ "bindTime": "2025-10-25 10:30:00"
+ }
+}
+```
+
+## 鐢ㄦ埛浣撻獙浼樺寲
+
+### 鍙嬪ソ鎻愮ず淇℃伅
+
+| 鍦烘櫙 | 鎻愮ず鍐呭 |
+|------|---------|
+| 鏃犻儴闂ㄤ俊鎭� | "鏃犳硶鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅" |
+| 鏃犲彲鐢ㄨ溅杈� | "褰撳墠鍒嗗叕鍙告殏鏃犲彲鐢ㄨ溅杈�" |
+| 鍔犺浇澶辫触 | "鍔犺浇杞﹁締鍒楄〃澶辫触" |
+| 閲嶅缁戝畾 | "褰撳墠宸茬粦瀹氭杞﹁締锛屾棤闇�閲嶅缁戝畾" |
+| 寮哄埗缁戝畾纭 | "鎮ㄥ綋鍓嶅凡缁戝畾杞﹁締锛氱菠A12345锛岀‘璁よ瑙g粦鏃ц溅杈嗗苟缁戝畾鏂拌溅杈嗭細绮67890 鍚楋紵" |
+
+### 鏃ュ織璁板綍
+
+```javascript
+// 鎴愬姛鍔犺浇
+console.log(`鍔犺浇浜� ${vehicleList.length} 杈嗚溅杈嗭紙閮ㄩ棬ID: ${deptId}锛塦)
+
+// 鏃犻儴闂ㄤ俊鎭�
+console.error('鏃犳硶鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅')
+
+// 鏃犲彲鐢ㄨ溅杈�
+console.log('褰撳墠鍒嗗叕鍙告殏鏃犲彲鐢ㄨ溅杈�')
+
+// 鍔犺浇澶辫触
+console.error('鍔犺浇杞﹁締鍒楄〃澶辫触:', error)
+```
+
+## 娴嬭瘯鍦烘櫙
+
+### 1. 姝e父缁戝畾
+- [x] 娣卞湷鐢ㄦ埛鍙兘鐪嬪埌娣卞湷鐨勮溅杈�
+- [x] 骞垮窞鐢ㄦ埛鍙兘鐪嬪埌骞垮窞鐨勮溅杈�
+- [x] 鐢ㄦ埛鍙互鎴愬姛缁戝畾鏈垎鍏徃鐨勮溅杈�
+
+### 2. 杈圭晫鎯呭喌
+- [x] 鐢ㄦ埛鏃犻儴闂ㄤ俊鎭紝鏄剧ず鎻愮ず
+- [x] 鍒嗗叕鍙告棤杞﹁締锛屾樉绀烘彁绀�
+- [x] 缃戠粶寮傚父锛屾樉绀洪敊璇彁绀�
+
+### 3. 鏁版嵁闅旂
+- [x] 娣卞湷鐢ㄦ埛鐪嬩笉鍒板箍宸炵殑杞﹁締
+- [x] 骞垮窞鐢ㄦ埛鐪嬩笉鍒版繁鍦崇殑杞﹁締
+- [x] 涓嶅悓鍒嗗叕鍙哥敤鎴锋暟鎹畬鍏ㄩ殧绂�
+
+### 4. 閲嶅缁戝畾
+- [x] 缁戝畾鍚屼竴杞﹁締锛屾彁绀哄凡缁戝畾
+- [x] 缁戝畾鍏朵粬杞﹁締锛屾彁绀烘槸鍚﹁В缁戞棫杞﹁締
+
+## 鐩稿叧鏂囦欢
+
+### 鍓嶇
+- [`app/pages/bind-vehicle.vue`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\app\pages\bind-vehicle.vue) - 缁戝畾杞﹁締椤甸潰
+- [`app/api/vehicle.js`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\app\api\vehicle.js) - 杞﹁締API
+
+### 鍚庣
+- [`SysTaskVehicleController.java`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-admin\src\main\java\com\ruoyi\web\controller\task\SysTaskVehicleController.java) - 杞﹁締Controller
+- [`SysTaskServiceImpl.java`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\service\impl\SysTaskServiceImpl.java) - 浠诲姟Service
+- [`VehicleInfoMapper.xml`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml) - 杞﹁締Mapper
+
+### 鏂囨。
+- [缁戝畾杞﹁締閮ㄩ棬杩囨护浼樺寲.md](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\prd\缁戝畾杞﹁締閮ㄩ棬杩囨护浼樺寲.md)
+- [杞﹁締缁戝畾瑙g粦鍔熻兘璇存槑.md](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\prd\杞﹁締缁戝畾瑙g粦鍔熻兘璇存槑.md)
+
+## 鎬荤粨
+
+鉁� **宸插畬鎴�**: 缁戝畾杞﹁締鏃跺凡缁忓疄鐜颁簡閮ㄩ棬杩囨护鍔熻兘
+鉁� **鍓嶇楠岃瘉**: 涓ユ牸妫�鏌ョ敤鎴烽儴闂ㄤ俊鎭紝涓嶄娇鐢ㄩ粯璁ゅ��
+鉁� **鍚庣杩囨护**: 鏍规嵁閮ㄩ棬ID鏌ヨ杞﹁締锛岀‘淇濇暟鎹殧绂�
+鉁� **鐢ㄦ埛浣撻獙**: 鎻愪緵鍙嬪ソ鐨勬彁绀轰俊鎭拰鏃ュ織璁板綍
+
+馃挕 **寤鸿**: 鍙互鍦ㄥ悗绔鍔犳潈闄愭牎楠岋紝楠岃瘉璇锋眰鐨� [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 鏄惁涓庣敤鎴风殑 [deptId](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 涓�鑷达紝杩涗竴姝ユ彁楂樺畨鍏ㄦ�с��
+
+---
+
+**鏇存柊鏃堕棿**: 2025-10-25
+**鐗堟湰**: v1.0
+**鐘舵��**: 鉁� 宸插疄鐜�
diff --git "a/prd/\350\275\246\350\276\206\345\220\214\346\255\245\351\203\250\351\227\250\346\237\245\350\257\242\344\277\256\345\244\215\350\257\264\346\230\216.md" "b/prd/\350\275\246\350\276\206\345\220\214\346\255\245\351\203\250\351\227\250\346\237\245\350\257\242\344\277\256\345\244\215\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..1c3b525
--- /dev/null
+++ "b/prd/\350\275\246\350\276\206\345\220\214\346\255\245\351\203\250\351\227\250\346\237\245\350\257\242\344\277\256\345\244\215\350\257\264\346\230\216.md"
@@ -0,0 +1,273 @@
+# 杞﹁締鍚屾閮ㄩ棬鏌ヨ淇璇存槑
+
+## 闂鎻忚堪
+
+鍦� `VehicleSyncServiceImpl.findDeptByDispatchOrderClass()` 鏂规硶涓紝铏界劧璁剧疆浜� `query.setDispatchOrderClass(dispatchOrderClass)`锛屼絾鍦� `SysDeptMapper.xml` 涓殑 `selectDeptList` 鏌ヨ娌℃湁瀵瑰簲鐨� `dispatchOrderClass` 鍜� `serviceOrderClass` 瀛楁鏉′欢鍒ゆ柇锛屽鑷存棤娉曟纭煡璇㈠埌閮ㄩ棬銆�
+
+## 淇鍐呭
+
+### 1. 淇 SysDeptMapper.xml
+
+**鏂囦欢**: `ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml`
+
+鍦� `selectDeptList` 鏂规硶涓坊鍔犱簡 `serviceOrderClass` 鍜� `dispatchOrderClass` 鐨勬煡璇㈡潯浠讹細
+
+```xml
+<select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
+ <include refid="selectDeptVo"/>
+ where d.del_flag = '0'
+ <!-- ... 鍏朵粬鏉′欢 ... -->
+
+ <!-- 鉁� 鏂板锛氭湇鍔″崟缂栫爜鏌ヨ -->
+ <if test="serviceOrderClass != null and serviceOrderClass != ''">
+ AND service_order_class = #{serviceOrderClass}
+ </if>
+
+ <!-- 鉁� 鏂板锛氳皟搴﹀崟缂栫爜鏌ヨ -->
+ <if test="dispatchOrderClass != null and dispatchOrderClass != ''">
+ AND dispatch_order_class = #{dispatchOrderClass}
+ </if>
+
+ <!-- 鏁版嵁鑼冨洿杩囨护 -->
+ ${params.dataScope}
+ order by d.parent_id, d.order_num
+</select>
+```
+
+### 2. 浼樺寲 VehicleSyncServiceImpl
+
+**鏂囦欢**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java`
+
+淇敼 `parseDeptIdFromCarOrdClass()` 鏂规硶锛屼娇鍏跺湪鎵惧埌閮ㄩ棬鍚庤嚜鍔ㄨ浆鎹负鍒嗗叕鍙窱D锛�
+
+**淇敼鍓�**锛�
+```java
+private Long parseDeptIdFromCarOrdClass(String carOrdClass) {
+ // ... 鏌ユ壘閮ㄩ棬閫昏緫 ...
+ SysDept dept = findDeptByDispatchOrderClass(code);
+ if (dept != null) {
+ return dept.getDeptId(); // 鉂� 鐩存帴杩斿洖閮ㄩ棬ID
+ }
+}
+```
+
+**淇敼鍚�**锛�
+```java
+private Long parseDeptIdFromCarOrdClass(String carOrdClass) {
+ // ... 鏌ユ壘閮ㄩ棬閫昏緫 ...
+ SysDept dept = findDeptByDispatchOrderClass(code);
+ if (dept != null) {
+ // 鉁� 灏嗛儴闂↖D杞崲涓哄垎鍏徃ID
+ Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(dept.getDeptId());
+ if (branchCompanyId != null) {
+ log.debug("灏嗛儴闂↖D {} 杞崲涓哄垎鍏徃ID: {}", dept.getDeptId(), branchCompanyId);
+ return branchCompanyId;
+ } else {
+ log.warn("閮ㄩ棬ID {} 鏃犳硶杞崲涓哄垎鍏徃ID锛屽彲鑳芥槸鎬诲叕鍙告垨鏁版嵁寮傚父", dept.getDeptId());
+ return null;
+ }
+ }
+}
+```
+
+## 淇鍘熺悊
+
+### 淇鍓嶇殑闂娴佺▼
+
+```
+1. VehicleSyncServiceImpl 璁剧疆鏌ヨ鏉′欢
+ 鈹溾攢 query.setDispatchOrderClass("ZB")
+ 鈹斺攢 sysDeptMapper.selectDeptList(query)
+
+2. SysDeptMapper.xml 鎵ц鏌ヨ
+ 鈹溾攢 WHERE del_flag = '0'
+ 鈹溾攢 AND dept_id = ? (濡傛灉鏈�)
+ 鈹溾攢 AND parent_id = ? (濡傛灉鏈�)
+ 鈹斺攢 鉂� 娌℃湁 dispatch_order_class 鏉′欢
+
+3. 缁撴灉锛氭煡璇㈠埌鎵�鏈夐儴闂紝涓嶆槸鏈熸湜鐨勭粨鏋�
+```
+
+### 淇鍚庣殑姝g‘娴佺▼
+
+```
+1. VehicleSyncServiceImpl 璁剧疆鏌ヨ鏉′欢
+ 鈹溾攢 query.setDispatchOrderClass("ZB")
+ 鈹斺攢 sysDeptMapper.selectDeptList(query)
+
+2. SysDeptMapper.xml 鎵ц鏌ヨ
+ 鈹溾攢 WHERE del_flag = '0'
+ 鈹溾攢 鉁� AND dispatch_order_class = 'ZB'
+ 鈹斺攢 鎵惧埌鍖归厤鐨勯儴闂�
+
+3. 杞崲涓哄垎鍏徃ID
+ 鈹溾攢 璋冪敤 selectBranchCompanyIdByDeptId(deptId)
+ 鈹溾攢 濡傛灉鏄垎鍏徃锛岀洿鎺ヨ繑鍥�
+ 鈹斺攢 濡傛灉鏄瓙閮ㄩ棬锛屼粠ancestors涓煡鎵惧垎鍏徃ID
+
+4. 缁撴灉锛氭纭殑鍒嗗叕鍙窱D
+```
+
+## 浣跨敤鍦烘櫙
+
+### 鍦烘櫙1锛氳溅杈嗗悓姝ユ椂瑙f瀽閮ㄩ棬
+
+浠庢棫绯荤粺鍚屾杞﹁締鏁版嵁鏃讹紝鏍规嵁 `CarOrdClass` 瀛楁锛堝 "ZB", "HB.TI"锛夋煡鎵惧搴旂殑鍒嗗叕鍙革細
+
+```java
+// CarOrdClass = "ZB"
+Long branchCompanyId = parseDeptIdFromCarOrdClass("ZB");
+
+// 娴佺▼锛�
+// 1. 鎷嗗垎 "ZB" 鈫� ["ZB"]
+// 2. 鏌ヨ dispatch_order_class = 'ZB' 鐨勯儴闂� 鈫� 鎵惧埌閮ㄩ棬201
+// 3. 灏嗛儴闂�201杞崲涓哄垎鍏徃ID 鈫� 101
+// 4. 杩斿洖鍒嗗叕鍙窱D: 101
+```
+
+### 鍦烘櫙2锛氬娈电紪鐮佽В鏋�
+
+澶勭悊鍖呭惈澶氫釜缂栫爜鐨勬儏鍐碉細
+
+```java
+// CarOrdClass = "HB.TI"
+Long branchCompanyId = parseDeptIdFromCarOrdClass("HB.TI");
+
+// 娴佺▼锛�
+// 1. 鎷嗗垎 "HB.TI" 鈫� ["HB", "TI"]
+// 2. 鍏堟煡璇� dispatch_order_class = 'HB' 鈫� 鎵惧埌閮ㄩ棬202
+// 3. 灏嗛儴闂�202杞崲涓哄垎鍏徃ID 鈫� 102
+// 4. 杩斿洖鍒嗗叕鍙窱D: 102
+```
+
+## 鏁版嵁绀轰緥
+
+### 閮ㄩ棬琛ㄦ暟鎹�
+
+```sql
+-- sys_dept 琛ㄦ暟鎹ず渚�
+dept_id | parent_id | dept_name | dispatch_order_class | ancestors
+--------|-----------|-------------|---------------------|------------
+100 | 0 | 鎬诲叕鍙� | NULL | 0
+101 | 100 | 鍖椾含鍒嗗叕鍙� | NULL | 0,100
+102 | 100 | 涓婃捣鍒嗗叕鍙� | NULL | 0,100
+201 | 101 | 鍖椾含鎬ユ晳閮� | ZB | 0,100,101
+202 | 102 | 涓婃捣鎬ユ晳閮� | HB | 0,100,102
+203 | 102 | 涓婃捣杞繍閮� | TI | 0,100,102
+```
+
+### 鏌ヨ绀轰緥
+
+#### 绀轰緥1锛氭煡璇� dispatch_order_class = 'ZB' 鐨勯儴闂�
+
+**淇鍓嶏紙鏌ヨ鏉′欢鏃犳晥锛�**锛�
+```sql
+SELECT * FROM sys_dept WHERE del_flag = '0'
+-- 杩斿洖鎵�鏈夐儴闂紙閿欒锛�
+```
+
+**淇鍚庯紙姝g‘鏌ヨ锛�**锛�
+```sql
+SELECT * FROM sys_dept
+WHERE del_flag = '0'
+ AND dispatch_order_class = 'ZB'
+-- 杩斿洖閮ㄩ棬201锛堟纭級
+```
+
+#### 绀轰緥2锛氬皢閮ㄩ棬ID杞崲涓哄垎鍏徃ID
+
+```java
+// 杈撳叆锛歞eptId = 201 (鍖椾含鎬ユ晳閮�)
+Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(201L);
+// 杩斿洖锛�101 (鍖椾含鍒嗗叕鍙�)
+
+// SQL鎵ц閫昏緫锛�
+// 1. 妫�鏌� dept_id=201 鐨� parent_id 鏄惁涓� 100 鈫� 鍚︼紙parent_id=101锛�
+// 2. 鏌ヨ ancestors="0,100,101"
+// 3. 浣跨敤 FIND_IN_SET 鏌ユ壘 parent_id=100 鐨勯儴闂↖D
+// 4. 鎵惧埌 dept_id=101锛岃繑鍥�
+```
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鐢ㄤ緥1锛氱簿纭尮閰嶅崟涓紪鐮�
+
+```java
+// CarOrdClass = "ZB"
+Long result = parseDeptIdFromCarOrdClass("ZB");
+// 棰勬湡锛�101 (鍖椾含鍒嗗叕鍙�)
+```
+
+### 娴嬭瘯鐢ㄤ緥2锛氬娈电紪鐮佸尮閰�
+
+```java
+// CarOrdClass = "HB.TI"
+Long result = parseDeptIdFromCarOrdClass("HB.TI");
+// 棰勬湡锛�102 (涓婃捣鍒嗗叕鍙�)
+```
+
+### 娴嬭瘯鐢ㄤ緥3锛氱┖鍊煎鐞�
+
+```java
+// CarOrdClass = null
+Long result = parseDeptIdFromCarOrdClass(null);
+// 棰勬湡锛歯ull
+```
+
+### 娴嬭瘯鐢ㄤ緥4锛氭湭鍖归厤鐨勭紪鐮�
+
+```java
+// CarOrdClass = "UNKNOWN"
+Long result = parseDeptIdFromCarOrdClass("UNKNOWN");
+// 棰勬湡锛歯ull
+// 鏃ュ織锛氳鍛� "鏈壘鍒板尮閰岰arOrdClass='UNKNOWN' 鐨勯儴闂�"
+```
+
+## 娉ㄦ剰浜嬮」
+
+### 1. 閮ㄩ棬鏁版嵁瀹屾暣鎬�
+
+纭繚 `sys_dept` 琛ㄤ腑锛�
+- `dispatch_order_class` 瀛楁宸叉纭厤缃�
+- 鍒嗗叕鍙哥殑 `parent_id = 100`
+- 瀛愰儴闂ㄧ殑 `ancestors` 瀛楁姝g‘缁存姢
+
+### 2. 鏃ュ織鐩戞帶
+
+鏂规硶涓坊鍔犱簡璇︾粏鐨勬棩蹇楄緭鍑猴細
+
+```java
+// 璋冭瘯鏃ュ織
+log.debug("閫氳繃dispatch_order_class='{}' 鎵惧埌閮ㄩ棬: {} (ID={})", code, dept.getDeptName(), dept.getDeptId());
+log.debug("灏嗛儴闂↖D {} 杞崲涓哄垎鍏徃ID: {}", dept.getDeptId(), branchCompanyId);
+
+// 璀﹀憡鏃ュ織
+log.warn("閮ㄩ棬ID {} 鏃犳硶杞崲涓哄垎鍏徃ID锛屽彲鑳芥槸鎬诲叕鍙告垨鏁版嵁寮傚父", dept.getDeptId());
+log.warn("鏈壘鍒板尮閰岰arOrdClass='{}' 鐨勯儴闂�", carOrdClass);
+```
+
+寤鸿鍦ㄧ敓浜х幆澧冨紑鍚� DEBUG 绾у埆鏃ュ織锛屼究浜庢帓鏌ラ棶棰樸��
+
+### 3. 鎬ц兘鑰冭檻
+
+濡傛灉杞﹁締鍚屾閲忓ぇ锛屽缓璁細
+- 瀵� `dispatch_order_class` 瀛楁娣诲姞绱㈠紩
+- 瀵� `service_order_class` 瀛楁娣诲姞绱㈠紩
+
+```sql
+CREATE INDEX idx_dispatch_order_class ON sys_dept(dispatch_order_class);
+CREATE INDEX idx_service_order_class ON sys_dept(service_order_class);
+```
+
+## 鐩稿叧鏂囦欢
+
+- `/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml` - 娣诲姞鏌ヨ鏉′欢
+- `/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java` - 浼樺寲杞崲閫昏緫
+- `/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java` - 浣跨敤 selectBranchCompanyIdByDeptId 鏂规硶
+- `/prd/閮ㄩ棬鍒嗗叕鍙窱D鑾峰彇鏂规硶璇存槑.md` - 鍒嗗叕鍙窱D杞崲鏂规硶鏂囨。
+
+## 鏇存柊鏃ュ織
+
+- **2025-01-25**: 淇 SysDeptMapper.xml 涓己灏戞煡璇㈡潯浠剁殑闂
+- **2025-01-25**: 浼樺寲 parseDeptIdFromCarOrdClass 鏂规硶锛岃嚜鍔ㄨ浆鎹负鍒嗗叕鍙窱D
+- **鐩殑**: 纭繚杞﹁締鍚屾鏃惰兘姝g‘鍖归厤閮ㄩ棬骞惰浆鎹负鍒嗗叕鍙窱D
diff --git "a/prd/\350\275\246\350\276\206\346\237\245\350\257\242\351\203\250\351\227\250\350\207\252\345\212\250\345\214\271\351\205\215\345\212\237\350\203\275\350\257\264\346\230\216.md" "b/prd/\350\275\246\350\276\206\346\237\245\350\257\242\351\203\250\351\227\250\350\207\252\345\212\250\345\214\271\351\205\215\345\212\237\350\203\275\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..af17f1c
--- /dev/null
+++ "b/prd/\350\275\246\350\276\206\346\237\245\350\257\242\351\203\250\351\227\250\350\207\252\345\212\250\345\214\271\351\205\215\345\212\237\350\203\275\350\257\264\346\230\216.md"
@@ -0,0 +1,347 @@
+# 杞﹁締鏌ヨ閮ㄩ棬鑷姩鍖归厤鍔熻兘璇存槑
+
+## 鍔熻兘姒傝堪
+
+鍦ㄨ溅杈嗘煡璇㈡椂锛屾棤璁虹敤鎴蜂紶鍏ョ殑鏄垎鍏徃ID杩樻槸瀛愰儴闂↖D锛堝鎶�鏈儴銆佷笟鍔¢儴锛夛紝绯荤粺閮戒細鑷姩鏌ユ壘鍏舵墍灞炵殑鍒嗗叕鍙革紝骞惰繑鍥炶鍒嗗叕鍙哥殑杞﹁締銆�
+
+## 涓氬姟鑳屾櫙
+
+### 閮ㄩ棬灞傜骇缁撴瀯
+
+```
+100 (鎬诲叕鍙�)
+鈹溾攢鈹� 101 (娣卞湷鍒嗗叕鍙�) 鈫� 杞﹁締褰掑睘浜庡垎鍏徃
+鈹� 鈹溾攢鈹� 201 (鎶�鏈儴) 鈫� 鐢ㄦ埛鍙兘灞炰簬瀛愰儴闂�
+鈹� 鈹溾攢鈹� 202 (涓氬姟閮�)
+鈹� 鈹斺攢鈹� 203 (璐㈠姟閮�)
+鈹溾攢鈹� 102 (骞垮窞鍒嗗叕鍙�)
+鈹� 鈹溾攢鈹� 204 (鎶�鏈儴)
+鈹� 鈹溾攢鈹� 205 (涓氬姟閮�)
+鈹� 鈹斺攢鈹� 206 (璐㈠姟閮�)
+鈹斺攢鈹� 103 (鍖椾含鍒嗗叕鍙�)
+ 鈹溾攢鈹� 207 (鎶�鏈儴)
+ 鈹斺攢鈹� 208 (涓氬姟閮�)
+```
+
+### 闂鍦烘櫙
+
+**鍘熸湁閫昏緫**锛�
+- 鐢ㄦ埛A锛堟妧鏈儴锛宒eptId=201锛夋煡璇㈣溅杈�
+- 绯荤粺鏌ヨ锛歚WHERE dept_id = 201`
+- 缁撴灉锛氣潓 鏌ヤ笉鍒拌溅杈嗭紙鍥犱负杞﹁締鐨刣ept_id=101锛屼笉鏄�201锛�
+
+**鏈熸湜閫昏緫**锛�
+- 鐢ㄦ埛A锛堟妧鏈儴锛宒eptId=201锛夋煡璇㈣溅杈�
+- 绯荤粺鑷姩鎵惧埌鍒嗗叕鍙革細201 鈫� 101锛堟繁鍦冲垎鍏徃锛�
+- 绯荤粺鏌ヨ锛歚WHERE dept_id = 101`
+- 缁撴灉锛氣渽 鏌ュ埌娣卞湷鍒嗗叕鍙哥殑鎵�鏈夎溅杈�
+
+## 瀹炵幇鏂规
+
+### SQL鏌ヨ閫昏緫
+
+**鏂囦欢**锛歔`VehicleInfoMapper.xml`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml)
+
+```xml
+<!-- 閮ㄩ棬杩囨护锛氳嚜鍔ㄦ煡鎵句紶鍏ラ儴闂ㄦ墍灞炵殑鍒嗗叕鍙革紙parent_id=100锛� -->
+<if test="deptId != null">
+ and v.dept_id = (
+ <!-- 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛坧arent_id=100锛夛紝鐩存帴杩斿洖 -->
+ select case
+ when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100)
+ then #{deptId}
+ else (
+ <!-- 鍚﹀垯浠� ancestors 涓煡鎵惧垎鍏徃ID -->
+ select d.dept_id
+ from sys_dept d
+ where d.parent_id = 100
+ and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = #{deptId}
+ ))
+ limit 1
+ )
+ end
+ )
+</if>
+```
+
+### 鏌ヨ閫昏緫璇存槑
+
+#### 姝ラ1锛氬垽鏂紶鍏ョ殑deptId鏄惁涓哄垎鍏徃
+
+```sql
+when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100)
+```
+
+- 濡傛灉浼犲叆鐨� `deptId` 鐨� `parent_id = 100`锛岃鏄庝紶鍏ョ殑灏辨槸鍒嗗叕鍙�
+- 鐩存帴浣跨敤璇� `deptId` 鏌ヨ
+
+#### 姝ラ2锛氬鏋滀笉鏄垎鍏徃锛屼粠ancestors涓煡鎵�
+
+```sql
+select d.dept_id
+from sys_dept d
+where d.parent_id = 100
+and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = #{deptId}
+))
+```
+
+**鍘熺悊**锛�
+- 姣忎釜閮ㄩ棬鐨� `ancestors` 瀛楁瀛樺偍浜嗘墍鏈変笂绾ч儴闂↖D锛堢敤閫楀彿鍒嗛殧锛�
+- 渚嬪锛氭妧鏈儴(201)鐨� `ancestors` 鍙兘鏄� `"100,101,201"`
+- 浣跨敤 `FIND_IN_SET` 鍦� ancestors 涓煡鎵� `parent_id=100` 鐨勯儴闂�
+- 鎵惧埌鐨勫氨鏄垎鍏徃ID
+
+## 浣跨敤绀轰緥
+
+### 绀轰緥1锛氫紶鍏ュ垎鍏徃ID
+
+**杈撳叆**锛�
+```javascript
+deptId: 101 // 娣卞湷鍒嗗叕鍙�
+```
+
+**SQL鎵ц**锛�
+```sql
+-- 妫�鏌ワ細101 鐨� parent_id = 100 鉁�
+-- 鐩存帴浣跨敤锛歞ept_id = 101
+WHERE v.dept_id = 101
+```
+
+**缁撴灉**锛氣渽 杩斿洖娣卞湷鍒嗗叕鍙哥殑鎵�鏈夎溅杈�
+
+### 绀轰緥2锛氫紶鍏ュ瓙閮ㄩ棬ID
+
+**杈撳叆**锛�
+```javascript
+deptId: 201 // 娣卞湷鍒嗗叕鍙�-鎶�鏈儴
+```
+
+**鏁版嵁**锛�
+```sql
+-- sys_dept 琛ㄦ暟鎹�
+dept_id | parent_id | ancestors
+101 | 100 | 100,101
+201 | 101 | 100,101,201
+```
+
+**SQL鎵ц**锛�
+```sql
+-- 1. 妫�鏌ワ細201 鐨� parent_id = 100 鉂�
+-- 2. 鏌ヨ ancestors锛歴elect ancestors from sys_dept where dept_id = 201
+-- 缁撴灉锛�"100,101,201"
+-- 3. 鍦� ancestors 涓煡鎵� parent_id=100 鐨勯儴闂�
+-- FIND_IN_SET(d.dept_id, "100,101,201") and d.parent_id = 100
+-- 鎵惧埌锛�101
+-- 4. 浣跨敤锛歞ept_id = 101
+WHERE v.dept_id = 101
+```
+
+**缁撴灉**锛氣渽 杩斿洖娣卞湷鍒嗗叕鍙哥殑鎵�鏈夎溅杈�
+
+### 绀轰緥3锛氫紶鍏ュ瓩閮ㄩ棬ID
+
+**杈撳叆**锛�
+```javascript
+deptId: 301 // 娣卞湷鍒嗗叕鍙�-鎶�鏈儴-寮�鍙戠粍
+```
+
+**鏁版嵁**锛�
+```sql
+-- sys_dept 琛ㄦ暟鎹�
+dept_id | parent_id | ancestors
+101 | 100 | 100,101
+201 | 101 | 100,101,201
+301 | 201 | 100,101,201,301
+```
+
+**SQL鎵ц**锛�
+```sql
+-- 1. 妫�鏌ワ細301 鐨� parent_id = 100 鉂�
+-- 2. 鏌ヨ ancestors锛�"100,101,201,301"
+-- 3. 鍦� ancestors 涓煡鎵� parent_id=100 鐨勯儴闂�
+-- 鎵惧埌锛�101
+-- 4. 浣跨敤锛歞ept_id = 101
+WHERE v.dept_id = 101
+```
+
+**缁撴灉**锛氣渽 杩斿洖娣卞湷鍒嗗叕鍙哥殑鎵�鏈夎溅杈�
+
+## 搴旂敤鍦烘櫙
+
+### 鍦烘櫙1锛氱粦瀹氳溅杈�
+
+**鐢ㄦ埛**锛氭妧鏈儴鍛樺伐锛坉eptId=201锛�
+
+```javascript
+// 鍓嶇璋冪敤
+listAvailableVehicles(201, 'GENERAL')
+
+// 鍚庣鏌ヨ
+SELECT * FROM tb_vehicle_info v
+WHERE v.dept_id = (
+ -- 鑷姩鎵惧埌鍒嗗叕鍙革細201 鈫� 101
+ ...
+)
+```
+
+**缁撴灉**锛氭樉绀烘繁鍦冲垎鍏徃鐨勬墍鏈夎溅杈�
+
+### 鍦烘櫙2锛氬垱寤轰换鍔�
+
+**鐢ㄦ埛**锛氫笟鍔¢儴鍛樺伐锛坉eptId=202锛�
+
+```javascript
+// 鍓嶇璋冪敤
+listAvailableVehicles(202, 'EMERGENCY')
+
+// 鍚庣鏌ヨ
+SELECT * FROM tb_vehicle_info v
+WHERE v.dept_id = (
+ -- 鑷姩鎵惧埌鍒嗗叕鍙革細202 鈫� 101
+ ...
+)
+```
+
+**缁撴灉**锛氭樉绀烘繁鍦冲垎鍏徃鐨勬墍鏈夎溅杈�
+
+## 鏁版嵁娴佺▼鍥�
+
+```mermaid
+sequenceDiagram
+ participant User as 鐢ㄦ埛(鎶�鏈儴)
+ participant Page as 鍓嶇椤甸潰
+ participant API as 鍚庣API
+ participant DB as 鏁版嵁搴�
+
+ User->>Page: 鎵撳紑缁戝畾杞﹁締椤甸潰
+ Page->>Page: 鑾峰彇鐢ㄦ埛閮ㄩ棬ID: 201
+ Page->>API: listAvailableVehicles(201, 'GENERAL')
+ API->>DB: SELECT dept_id FROM sys_dept WHERE dept_id=201
+ DB-->>API: parent_id=101 (涓嶆槸100)
+ API->>DB: SELECT ancestors FROM sys_dept WHERE dept_id=201
+ DB-->>API: "100,101,201"
+ API->>DB: FIND_IN_SET in ancestors WHERE parent_id=100
+ DB-->>API: 鎵惧埌鍒嗗叕鍙窱D: 101
+ API->>DB: SELECT * FROM tb_vehicle_info WHERE dept_id=101
+ DB-->>API: 娣卞湷鍒嗗叕鍙哥殑杞﹁締鍒楄〃
+ API-->>Page: 杩斿洖杞﹁締鏁版嵁
+ Page-->>User: 鏄剧ず娣卞湷鍒嗗叕鍙哥殑杞﹁締
+```
+
+## 鍏煎鎬�
+
+### 鉁� 鏀寔鐨勫満鏅�
+
+| 杈撳叆deptId | 閮ㄩ棬绫诲瀷 | 鏌ヨ缁撴灉 |
+|-----------|---------|---------|
+| 101 | 鍒嗗叕鍙� | 101鐨勮溅杈� 鉁� |
+| 201 | 瀛愰儴闂� | 101鐨勮溅杈� 鉁� |
+| 301 | 瀛欓儴闂� | 101鐨勮溅杈� 鉁� |
+| 401 | 鏇惧瓩閮ㄩ棬 | 101鐨勮溅杈� 鉁� |
+
+### 鈿狅笍 鐗规畩鎯呭喌
+
+| 杈撳叆deptId | 璇存槑 | 鏌ヨ缁撴灉 |
+|-----------|------|---------|
+| 100 | 鎬诲叕鍙� | 鉂� 鏌ヤ笉鍒帮紙杞﹁締蹇呴』褰掑睘浜庡垎鍏徃锛� |
+| null | 绌哄�� | 鉂� 涓嶆墽琛岄儴闂ㄨ繃婊� |
+
+## 鎬ц兘浼樺寲
+
+### 绱㈠紩寤鸿
+
+涓轰簡鎻愰珮鏌ヨ鎬ц兘锛屽缓璁湪 `sys_dept` 琛ㄦ坊鍔犵储寮曪細
+
+```sql
+-- 閮ㄩ棬琛ㄧ储寮�
+CREATE INDEX idx_parent_id ON sys_dept(parent_id);
+CREATE INDEX idx_ancestors ON sys_dept(ancestors(100));
+
+-- 杞﹁締琛ㄧ储寮曪紙宸插瓨鍦級
+CREATE INDEX idx_dept_id ON tb_vehicle_info(dept_id);
+```
+
+### 鏌ヨ浼樺寲
+
+- 鉁� 浣跨敤 `CASE WHEN` 鍑忓皯瀛愭煡璇㈡鏁�
+- 鉁� 浣跨敤 `LIMIT 1` 闄愬埗缁撴灉闆�
+- 鉁� `FIND_IN_SET` 鍒╃敤绱㈠紩鏌ヨ
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鍦烘櫙1锛氬垎鍏徃鐢ㄦ埛
+
+```sql
+-- 妯℃嫙杈撳叆锛歞eptId = 101
+SELECT * FROM tb_vehicle_info v
+WHERE v.dept_id = (
+ select case
+ when exists(select 1 from sys_dept where dept_id = 101 and parent_id = 100)
+ then 101
+ else (...)
+ end
+)
+-- 缁撴灉锛歞ept_id = 101
+```
+
+### 娴嬭瘯鍦烘櫙2锛氬瓙閮ㄩ棬鐢ㄦ埛
+
+```sql
+-- 妯℃嫙杈撳叆锛歞eptId = 201
+SELECT * FROM tb_vehicle_info v
+WHERE v.dept_id = (
+ select case
+ when exists(select 1 from sys_dept where dept_id = 201 and parent_id = 100)
+ then 201
+ else (
+ select d.dept_id
+ from sys_dept d
+ where d.parent_id = 100
+ and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = 201
+ ))
+ limit 1
+ )
+ end
+)
+-- 缁撴灉锛歞ept_id = 101
+```
+
+## 褰卞搷鑼冨洿
+
+### 淇敼鐨勬枃浠�
+- [`VehicleInfoMapper.xml`](file://d:\project\鎬ユ晳杞繍\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml) - 杞﹁締鏌ヨMapper
+
+### 褰卞搷鐨勫姛鑳�
+1. 鉁� 缁戝畾杞﹁締 - 鑷姩鏄剧ず鍒嗗叕鍙歌溅杈�
+2. 鉁� 鍒涘缓浠诲姟 - 鑷姩鏄剧ず鍒嗗叕鍙歌溅杈�
+3. 鉁� 杞﹁締绠$悊 - 鑷姩鎸夊垎鍏徃杩囨护
+4. 鉁� 鎵�鏈夎皟鐢� `selectVehicleInfoList` 鐨勫湴鏂�
+
+### 鍚戝悗鍏煎
+- 鉁� 浼犲叆鍒嗗叕鍙窱D浠嶇劧姝e父宸ヤ綔
+- 鉁� 浼犲叆瀛愰儴闂↖D鑷姩杞崲涓哄垎鍏徃ID
+- 鉁� 涓嶅奖鍝嶅叾浠栨煡璇㈡潯浠�
+
+## 鎬荤粨
+
+### 鉁� 浼樺娍
+
+1. **鑷姩鍖归厤** - 鏃犺鐢ㄦ埛鍦ㄥ摢涓眰绾х殑閮ㄩ棬锛岄兘鑳界湅鍒板垎鍏徃鐨勮溅杈�
+2. **鐢ㄦ埛鍙嬪ソ** - 鐢ㄦ埛涓嶉渶瑕佸叧蹇冭嚜宸辨槸鍦ㄥ摢涓瓙閮ㄩ棬
+3. **鏁版嵁闅旂** - 渚濈劧淇濇寔鍒嗗叕鍙镐箣闂寸殑鏁版嵁闅旂
+4. **鍚戝悗鍏煎** - 涓嶅奖鍝嶇幇鏈夊姛鑳�
+
+### 馃摑 娉ㄦ剰浜嬮」
+
+1. **ancestors瀛楁** - 渚濊禆 `sys_dept` 琛ㄧ殑 `ancestors` 瀛楁姝g‘缁存姢
+2. **鎬ц兘** - 寤鸿娣诲姞绱㈠紩浠ユ彁楂樻煡璇㈡�ц兘
+3. **鎬诲叕鍙�** - 浼犲叆鎬诲叕鍙窱D(100)涓嶄細杩斿洖杞﹁締
+
+---
+
+**鏇存柊鏃堕棿**: 2025-10-25
+**鐗堟湰**: v1.0
+**鐘舵��**: 鉁� 宸插疄鐜�
diff --git "a/prd/\351\203\250\351\227\250\345\210\206\345\205\254\345\217\270ID\350\216\267\345\217\226\346\226\271\346\263\225\350\257\264\346\230\216.md" "b/prd/\351\203\250\351\227\250\345\210\206\345\205\254\345\217\270ID\350\216\267\345\217\226\346\226\271\346\263\225\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..1a2bedf
--- /dev/null
+++ "b/prd/\351\203\250\351\227\250\345\210\206\345\205\254\345\217\270ID\350\216\267\345\217\226\346\226\271\346\263\225\350\257\264\346\230\216.md"
@@ -0,0 +1,231 @@
+# 閮ㄩ棬鍒嗗叕鍙窱D鑾峰彇鏂规硶璇存槑
+
+## 姒傝堪
+
+鏂板浜嗙嫭绔嬬殑鏂规硶 `selectBranchCompanyIdByDeptId`锛岀敤浜庤幏鍙栨寚瀹氶儴闂↖D瀵瑰簲鐨勫垎鍏徃ID锛坧arent_id=100鐨勯儴闂級銆�
+
+## 鏂规硶瀹氫箟
+
+### Mapper鎺ュ彛
+
+**鏂囦欢**: `SysDeptMapper.java`
+
+```java
+/**
+ * 鑾峰彇鎸囧畾閮ㄩ棬ID鐨勫垎鍏徃ID(parent_id=100鐨勯儴闂�)
+ * 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛岀洿鎺ヨ繑鍥烇紱鍚﹀垯浠巃ncestors涓煡鎵惧垎鍏徃ID
+ *
+ * @param deptId 閮ㄩ棬ID
+ * @return 鍒嗗叕鍙窱D锛屽鏋滄壘涓嶅埌鍒欒繑鍥瀗ull
+ */
+public Long selectBranchCompanyIdByDeptId(@Param("deptId") Long deptId);
+```
+
+### SQL瀹炵幇
+
+**鏂囦欢**: `SysDeptMapper.xml`
+
+```xml
+<!-- 鑾峰彇鎸囧畾閮ㄩ棬ID鐨勫垎鍏徃ID锛坧arent_id=100鐨勯儴闂級 -->
+<select id="selectBranchCompanyIdByDeptId" parameterType="Long" resultType="Long">
+ select case
+ -- 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛坧arent_id=100锛夛紝鐩存帴杩斿洖
+ when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100 and del_flag = '0')
+ then #{deptId}
+ else (
+ -- 鍚﹀垯浠� ancestors 涓煡鎵惧垎鍏徃ID
+ select d.dept_id
+ from sys_dept d
+ where d.parent_id = 100
+ and d.del_flag = '0'
+ and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = #{deptId} and del_flag = '0'
+ ))
+ limit 1
+ )
+ end
+</select>
+```
+
+## 浣跨敤绀轰緥
+
+### 鍦⊿ervice灞備腑浣跨敤
+
+```java
+@Autowired
+private SysDeptMapper deptMapper;
+
+public void someMethod(Long deptId) {
+ // 鑾峰彇鍒嗗叕鍙窱D
+ Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(deptId);
+
+ if (branchCompanyId != null) {
+ // 浣跨敤鍒嗗叕鍙窱D杩涜鍚庣画鎿嶄綔
+ System.out.println("鍒嗗叕鍙窱D: " + branchCompanyId);
+ } else {
+ // 鎵句笉鍒板垎鍏徃锛堝彲鑳芥槸鎬诲叕鍙告垨鏁版嵁寮傚父锛�
+ System.out.println("鏈壘鍒板垎鍏徃ID");
+ }
+}
+```
+
+### 鍦∕yBatis XML涓娇鐢�
+
+鍙互鍦ㄥ叾浠朚apper鐨凷QL涓綔涓哄瓙鏌ヨ浣跨敤锛�
+
+```xml
+<select id="someQuery" resultType="SomeType">
+ SELECT * FROM some_table
+ WHERE dept_id = (
+ SELECT CASE
+ WHEN EXISTS(SELECT 1 FROM sys_dept WHERE dept_id = #{deptId} AND parent_id = 100 AND del_flag = '0')
+ THEN #{deptId}
+ ELSE (
+ SELECT d.dept_id
+ FROM sys_dept d
+ WHERE d.parent_id = 100
+ AND d.del_flag = '0'
+ AND FIND_IN_SET(d.dept_id, (
+ SELECT ancestors FROM sys_dept WHERE dept_id = #{deptId} AND del_flag = '0'
+ ))
+ LIMIT 1
+ )
+ END
+ )
+</select>
+```
+
+## 宸ヤ綔鍘熺悊
+
+### 閮ㄩ棬缁撴瀯绀轰緥
+
+```
+鎬诲叕鍙� (dept_id=100, parent_id=0, ancestors="0")
+鈹溾攢鈹� 鍖椾含鍒嗗叕鍙� (dept_id=101, parent_id=100, ancestors="0,100")
+鈹� 鈹溾攢鈹� 鎶�鏈儴 (dept_id=201, parent_id=101, ancestors="0,100,101")
+鈹� 鈹斺攢鈹� 涓氬姟閮� (dept_id=202, parent_id=101, ancestors="0,100,101")
+鈹斺攢鈹� 涓婃捣鍒嗗叕鍙� (dept_id=102, parent_id=100, ancestors="0,100")
+ 鈹斺攢鈹� 甯傚満閮� (dept_id=203, parent_id=102, ancestors="0,100,102")
+```
+
+### 鏌ヨ閫昏緫
+
+1. **浼犲叆鍒嗗叕鍙窱D** (濡�: deptId=101)
+ - 妫�鏌� `parent_id = 100` 鉁�
+ - 鐩存帴杩斿洖: `101`
+
+2. **浼犲叆瀛愰儴闂↖D** (濡�: deptId=201)
+ - 妫�鏌� `parent_id = 100` 鉂�
+ - 鏌ヨ `ancestors = "0,100,101"`
+ - 浣跨敤 `FIND_IN_SET` 鏌ユ壘 `parent_id=100` 鐨勯儴闂�
+ - 鎵惧埌鍖归厤: `101`
+ - 杩斿洖: `101`
+
+3. **浼犲叆鎬诲叕鍙窱D** (濡�: deptId=100)
+ - 妫�鏌� `parent_id = 100` 鉂� (parent_id=0)
+ - ancestors涓病鏈塸arent_id=100鐨勯儴闂�
+ - 杩斿洖: `null`
+
+## 搴旂敤鍦烘櫙
+
+### 1. 杞﹁締鏌ヨ
+鐢ㄦ埛鍦ㄤ换鎰忛儴闂紝鏌ヨ鏃惰嚜鍔ㄥ畾浣嶅埌鎵�灞炲垎鍏徃鐨勮溅杈嗭細
+
+```java
+// 鍘熷瀹炵幇锛圴ehicleInfoMapper.xml锛�
+Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(userDeptId);
+List<VehicleInfo> vehicles = vehicleMapper.selectByDeptId(branchCompanyId);
+```
+
+### 2. 鏁版嵁鏉冮檺杩囨护
+闄愬埗鐢ㄦ埛鍙兘鏌ョ湅鎵�灞炲垎鍏徃鐨勬暟鎹細
+
+```java
+public List<SomeData> getDataList(Long userDeptId) {
+ Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(userDeptId);
+ return someMapper.selectByBranchCompany(branchCompanyId);
+}
+```
+
+### 3. 鎶ヨ〃缁熻
+鎸夊垎鍏徃缁村害缁熻鏁版嵁锛�
+
+```java
+public Map<String, Object> getStatistics(Long deptId) {
+ Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(deptId);
+ return statisticsService.getByBranchCompany(branchCompanyId);
+}
+```
+
+## 鎬ц兘浼樺寲寤鸿
+
+### 1. 娣诲姞绱㈠紩
+纭繚浠ヤ笅瀛楁鏈夌储寮曪細
+```sql
+-- 宸叉湁鐨勭储寮�
+CREATE INDEX idx_parent_id ON sys_dept(parent_id);
+CREATE INDEX idx_del_flag ON sys_dept(del_flag);
+
+-- 寤鸿娣诲姞澶嶅悎绱㈠紩
+CREATE INDEX idx_parent_del ON sys_dept(parent_id, del_flag);
+```
+
+### 2. 缁撴灉缂撳瓨
+瀵逛簬棰戠箒鏌ヨ鐨勫満鏅紝鍙互鑰冭檻缂撳瓨缁撴灉锛�
+
+```java
+@Cacheable(value = "branchCompany", key = "#deptId")
+public Long getBranchCompanyId(Long deptId) {
+ return deptMapper.selectBranchCompanyIdByDeptId(deptId);
+}
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **杩斿洖鍊煎彲鑳戒负null**
+ - 鎬诲叕鍙革紙dept_id=100锛夋煡璇㈡椂浼氳繑鍥瀗ull
+ - 閮ㄩ棬鏁版嵁寮傚父鏃朵篃浼氳繑鍥瀗ull
+ - 浣跨敤鏃堕渶瑕佸仛绌哄�煎垽鏂�
+
+2. **鍙煡璇㈡甯搁儴闂�**
+ - SQL涓凡杩囨护 `del_flag = '0'`
+ - 琚垹闄ょ殑閮ㄩ棬涓嶄細琚煡璇㈠埌
+
+3. **鍒嗗叕鍙稿畾涔�**
+ - 鍒嗗叕鍙稿繀椤绘弧瓒� `parent_id = 100`
+ - 濡傛灉缁勭粐鏋舵瀯璋冩暣锛岄渶瑕佺‘淇濊繖涓鍒欎粛鐒堕�傜敤
+
+4. **ancestors瀛楁缁存姢**
+ - 閮ㄩ棬灞傜骇鍙樻洿鏃跺繀椤绘洿鏂癮ncestors瀛楁
+ - ancestors鏍煎紡蹇呴』鏄�楀彿鍒嗛殧鐨処D鍒楄〃
+
+## 娴嬭瘯鍦烘櫙
+
+### 娴嬭瘯鐢ㄤ緥1: 浼犲叆鍒嗗叕鍙窱D
+```
+杈撳叆: deptId = 101 (鍖椾含鍒嗗叕鍙�)
+棰勬湡杈撳嚭: 101
+```
+
+### 娴嬭瘯鐢ㄤ緥2: 浼犲叆瀛愰儴闂↖D
+```
+杈撳叆: deptId = 201 (鎶�鏈儴)
+棰勬湡杈撳嚭: 101 (鍖椾含鍒嗗叕鍙�)
+```
+
+### 娴嬭瘯鐢ㄤ緥3: 浼犲叆鎬诲叕鍙窱D
+```
+杈撳叆: deptId = 100 (鎬诲叕鍙�)
+棰勬湡杈撳嚭: null
+```
+
+### 娴嬭瘯鐢ㄤ緥4: 浼犲叆澶氱骇瀛愰儴闂↖D
+```
+杈撳叆: deptId = 301 (鍋囪鎶�鏈儴涓嬬殑灏忕粍锛宎ncestors="0,100,101,201")
+棰勬湡杈撳嚭: 101 (鍖椾含鍒嗗叕鍙�)
+```
+
+## 鏇存柊鏃ュ織
+
+- **2025-01-25**: 鍒涘缓鐙珛鏂规硶 `selectBranchCompanyIdByDeptId`
+- 鐩殑: 绠�鍖栧垎鍏徃ID鏌ヨ閫昏緫锛屾彁楂樹唬鐮佸鐢ㄦ��
diff --git "a/prd/\351\232\220\347\247\201\346\224\277\347\255\226\345\222\214\347\224\250\346\210\267\345\215\217\350\256\256\345\214\277\345\220\215\350\256\277\351\227\256\351\205\215\347\275\256.md" "b/prd/\351\232\220\347\247\201\346\224\277\347\255\226\345\222\214\347\224\250\346\210\267\345\215\217\350\256\256\345\214\277\345\220\215\350\256\277\351\227\256\351\205\215\347\275\256.md"
new file mode 100644
index 0000000..b9af546
--- /dev/null
+++ "b/prd/\351\232\220\347\247\201\346\224\277\347\255\226\345\222\214\347\224\250\346\210\267\345\215\217\350\256\256\345\214\277\345\220\215\350\256\277\351\227\256\351\205\215\347\275\256.md"
@@ -0,0 +1,449 @@
+# 闅愮鏀跨瓥鍜岀敤鎴峰崗璁尶鍚嶈闂厤缃鏄�
+
+## 涓�銆侀渶姹傝儗鏅�
+
+鏍规嵁娉曞緥娉曡鍜岀敤鎴蜂綋楠岃姹傦細
+- 鐢ㄦ埛鍦ㄦ敞鍐�/鐧诲綍鍓嶅簲鑳芥煡鐪嬨�婇殣绉佹斂绛栥�嬪拰銆婄敤鎴锋湇鍔″崗璁��
+- 杩欎袱涓〉闈㈤渶瑕佹敮鎸�**鍖垮悕璁块棶**锛堟棤闇�鐧诲綍锛�
+- 鐢ㄦ埛鍙互鍏呭垎浜嗚В鍗忚鍐呭鍚庡啀鍐冲畾鏄惁娉ㄥ唽
+
+## 浜屻�佸疄鐜版柟妗�
+
+### 2.1 淇敼鍐呭
+
+**鏂囦欢**: `app/permission.js`
+
+**淇敼鍓�**:
+```javascript
+// 椤甸潰鐧藉悕鍗�
+const whiteList = [
+ '/pages/login', '/pages/register', '/pages/common/webview/index'
+]
+```
+
+**淇敼鍚�**:
+```javascript
+// 椤甸潰鐧藉悕鍗�
+const whiteList = [
+ '/pages/login',
+ '/pages/register',
+ '/pages/common/webview/index',
+ '/pages/mine/privacy-policy/index', // 闅愮鏀跨瓥锛堝尶鍚嶈闂級
+ '/pages/mine/user-agreement/index' // 鐢ㄦ埛鍗忚锛堝尶鍚嶈闂級
+]
+```
+
+### 2.2 宸ヤ綔鍘熺悊
+
+**鏉冮檺鎷︽埅鏈哄埗**:
+
+1. **鎷︽埅鎵�鏈夐〉闈㈣烦杞�**
+ - `navigateTo`: 淇濈暀褰撳墠椤甸潰锛岃烦杞埌鏂伴〉闈�
+ - `redirectTo`: 鍏抽棴褰撳墠椤甸潰锛岃烦杞埌鏂伴〉闈�
+ - `reLaunch`: 鍏抽棴鎵�鏈夐〉闈紝鎵撳紑鍒板簲鐢ㄥ唴鐨勬煇涓〉闈�
+ - `switchTab`: 璺宠浆鍒� tabBar 椤甸潰
+
+2. **妫�鏌ョ敤鎴风櫥褰曠姸鎬�**
+ ```javascript
+ if (getToken()) {
+ // 宸茬櫥褰曪細鍏佽璁块棶
+ return true
+ }
+ ```
+
+3. **鏈櫥褰曟椂妫�鏌ョ櫧鍚嶅崟**
+ ```javascript
+ if (checkWhite(to.url)) {
+ // 鍦ㄧ櫧鍚嶅崟涓細鍏佽璁块棶
+ return true
+ } else {
+ // 涓嶅湪鐧藉悕鍗曪細璺宠浆鍒扮櫥褰曢〉
+ uni.reLaunch({ url: loginPage })
+ return false
+ }
+ ```
+
+## 涓夈�佺櫧鍚嶅崟椤甸潰鍒楄〃
+
+| 椤甸潰璺緞 | 璇存槑 | 鐢ㄩ�� |
+|---------|------|------|
+| `/pages/login` | 鐧诲綍椤甸潰 | 鐢ㄦ埛鐧诲綍鍏ュ彛 |
+| `/pages/register` | 娉ㄥ唽椤甸潰 | 鐢ㄦ埛娉ㄥ唽鍏ュ彛 |
+| `/pages/common/webview/index` | WebView椤甸潰 | 鍔犺浇澶栭儴缃戦〉 |
+| `/pages/mine/privacy-policy/index` | 闅愮鏀跨瓥 | 灞曠ず闅愮淇濇姢鏀跨瓥锛堟柊澧烇級 |
+| `/pages/mine/user-agreement/index` | 鐢ㄦ埛鍗忚 | 灞曠ず鏈嶅姟鍗忚锛堟柊澧烇級 |
+
+## 鍥涖�佷娇鐢ㄥ満鏅�
+
+### 鍦烘櫙1: 鐧诲綍椤甸潰鏌ョ湅鍗忚
+
+**鐢ㄦ埛鎿嶄綔**:
+```
+鐧诲綍椤甸潰 鈫� 鐐瑰嚮銆婇殣绉佸崗璁�嬫垨銆婄敤鎴峰崗璁��
+ 鈫�
+ 鏌ョ湅鍗忚鍐呭锛堟棤闇�鐧诲綍锛�
+ 鈫�
+ 杩斿洖鐧诲綍椤甸潰
+```
+
+**浠g爜瀹炵幇**:
+```vue
+<!-- app/pages/login.vue -->
+<view class="xieyi text-center">
+ <text class="text-grey1">鐧诲綍鍗充唬琛ㄥ悓鎰�</text>
+ <text @click.stop="handleUserAgrement" class="text-blue">銆婄敤鎴峰崗璁��</text>
+ <text class="text-grey1">鍜�</text>
+ <text @click.stop="handlePrivacy" class="text-blue">銆婇殣绉佸崗璁��</text>
+</view>
+
+<script>
+methods: {
+ handlePrivacy() {
+ // 鉁� 鍙互鐩存帴璺宠浆锛屾棤闇�鐧诲綍
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+ },
+ handleUserAgrement() {
+ // 鉁� 鍙互鐩存帴璺宠浆锛屾棤闇�鐧诲綍
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+ }
+}
+</script>
+```
+
+### 鍦烘櫙2: 娉ㄥ唽椤甸潰鏌ョ湅鍗忚
+
+**鐢ㄦ埛鎿嶄綔**:
+```
+娉ㄥ唽椤甸潰 鈫� 鐐瑰嚮鍗忚閾炬帴
+ 鈫�
+ 鏌ョ湅鍗忚鍐呭锛堟棤闇�鐧诲綍锛�
+ 鈫�
+ 杩斿洖娉ㄥ唽椤甸潰 鈫� 鍕鹃�夊悓鎰� 鈫� 瀹屾垚娉ㄥ唽
+```
+
+**浠g爜瀹炵幇**:
+```vue
+<!-- app/pages/register.vue -->
+<view class="agreement-section">
+ <checkbox-group @change="handleAgreementChange">
+ <label class="agreement-label">
+ <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" />
+ <text class="agreement-text">
+ 鎴戝凡闃呰骞跺悓鎰�
+ <text class="agreement-link" @click.stop="handleUserAgreement">銆婄敤鎴锋湇鍔″崗璁��</text>
+ 鍜�
+ <text class="agreement-link" @click.stop="handlePrivacy">銆婇殣绉佹斂绛栥��</text>
+ </text>
+ </label>
+ </checkbox-group>
+</view>
+
+<script>
+methods: {
+ handlePrivacy() {
+ // 鉁� 鍙互鐩存帴璺宠浆锛屾棤闇�鐧诲綍
+ this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+ },
+ handleUserAgreement() {
+ // 鉁� 鍙互鐩存帴璺宠浆锛屾棤闇�鐧诲綍
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+ }
+}
+</script>
+```
+
+### 鍦烘櫙3: 宸茬櫥褰曠敤鎴锋煡鐪嬪崗璁�
+
+**鐢ㄦ埛鎿嶄綔**:
+```
+鎴戠殑椤甸潰 鈫� 鐐瑰嚮"鐢ㄦ埛鏈嶅姟鍗忚"鎴�"闅愮鏀跨瓥"鑿滃崟
+ 鈫�
+ 鏌ョ湅鍗忚鍐呭
+ 鈫�
+ 杩斿洖鎴戠殑椤甸潰
+```
+
+**浠g爜瀹炵幇**:
+```vue
+<!-- app/pages/mine/index.vue -->
+<view class="list-cell list-cell-arrow" @click="handleUserAgreement">
+ <view class="menu-item-box">
+ <view class="iconfont icon-text menu-icon"></view>
+ <view>鐢ㄦ埛鏈嶅姟鍗忚</view>
+ </view>
+</view>
+
+<script>
+methods: {
+ handleUserAgreement() {
+ // 鉁� 宸茬櫥褰曠敤鎴蜂篃鍙闂�
+ this.$tab.navigateTo('/pages/mine/user-agreement/index')
+ }
+}
+</script>
+```
+
+## 浜斻�佹潈闄愭帶鍒舵祦绋嬪浘
+
+```
+鐢ㄦ埛璺宠浆椤甸潰
+ 鈫�
+妫�鏌ユ槸鍚﹀凡鐧诲綍锛�
+ 鈫�
+ 鏄� 鈫� 鍏佽璁块棶鎵�鏈夐〉闈�
+ 鈫�
+ 鍚� 鈫� 妫�鏌ユ槸鍚﹀湪鐧藉悕鍗曪紵
+ 鈫�
+ 鏄� 鈫� 鍏佽璁块棶
+ 鈫�
+ 鍚� 鈫� 寮哄埗璺宠浆鍒扮櫥褰曢〉
+```
+
+## 鍏�佹祴璇曢獙璇�
+
+### 娴嬭瘯姝ラ
+
+#### 娴嬭瘯1: 鏈櫥褰曠姸鎬佽闂崗璁紙鏍稿績娴嬭瘯锛�
+
+1. **娓呴櫎鐧诲綍鐘舵��**
+ ```javascript
+ // 鍦ㄦ帶鍒跺彴鎵ц
+ uni.removeStorageSync('token')
+ uni.removeStorageSync('user')
+ ```
+
+2. **閲嶅惎灏忕▼搴�**
+ - 寰俊寮�鍙戣�呭伐鍏� 鈫� 缂栬瘧
+
+3. **娴嬭瘯鐧诲綍椤甸潰**
+ - 搴旇鑷姩璺宠浆鍒扮櫥褰曢〉闈�
+ - 鐐瑰嚮銆婄敤鎴峰崗璁�嬮摼鎺�
+ - 鉁� 搴旇鑳芥垚鍔熻烦杞埌鍗忚椤甸潰锛堜笉浼氳鎷︽埅锛�
+ - 鏌ョ湅鍗忚鍐呭
+ - 鐐瑰嚮杩斿洖鎸夐挳
+ - 鉁� 搴旇杩斿洖鍒扮櫥褰曢〉闈�
+
+4. **娴嬭瘯娉ㄥ唽椤甸潰**
+ - 浠庣櫥褰曢〉鐐瑰嚮"绔嬪嵆娉ㄥ唽"
+ - 鐐瑰嚮鍗忚閾炬帴
+ - 鉁� 搴旇鑳芥垚鍔熻烦杞埌鍗忚椤甸潰
+ - 杩斿洖娉ㄥ唽椤甸潰
+ - 鉁� checkbox鐘舵�佷繚鎸�
+
+#### 娴嬭瘯2: 宸茬櫥褰曠姸鎬佽闂崗璁�
+
+1. **姝e父鐧诲綍**
+ - 璐﹀彿: admin
+ - 瀵嗙爜: admin123
+
+2. **浠�"鎴戠殑"椤甸潰璁块棶**
+ - 杩涘叆"鎴戠殑"椤甸潰
+ - 鐐瑰嚮"鐢ㄦ埛鏈嶅姟鍗忚"
+ - 鉁� 搴旇鑳芥垚鍔熻烦杞�
+ - 杩斿洖
+ - 鐐瑰嚮"闅愮鏀跨瓥"
+ - 鉁� 搴旇鑳芥垚鍔熻烦杞�
+
+#### 娴嬭瘯3: 鐩存帴璁块棶鍗忚椤甸潰
+
+鍦ㄦ祻瑙堝櫒涓洿鎺ヨ緭鍏ュ湴鍧�锛圚5璋冭瘯锛�:
+```
+http://localhost:9090/#/pages/mine/privacy-policy/index
+http://localhost:9090/#/pages/mine/user-agreement/index
+```
+
+鉁� 搴旇鑳界洿鎺ヨ闂紝涓嶄細璺宠浆鍒扮櫥褰曢〉
+
+### 棰勬湡缁撴灉
+
+| 娴嬭瘯鍦烘櫙 | 棰勬湡缁撴灉 |
+|---------|---------|
+| 鏈櫥褰曡闂櫥褰曢〉 | 鉁� 鍏佽璁块棶 |
+| 鏈櫥褰曡闂敞鍐岄〉 | 鉁� 鍏佽璁块棶 |
+| 鏈櫥褰曡闂殣绉佹斂绛� | 鉁� 鍏佽璁块棶锛堟柊澧烇級 |
+| 鏈櫥褰曡闂敤鎴峰崗璁� | 鉁� 鍏佽璁块棶锛堟柊澧烇級 |
+| 鏈櫥褰曡闂椤� | 鉂� 璺宠浆鍒扮櫥褰曢〉 |
+| 鏈櫥褰曡闂换鍔¢〉 | 鉂� 璺宠浆鍒扮櫥褰曢〉 |
+| 宸茬櫥褰曡闂墍鏈夐〉闈� | 鉁� 鍏佽璁块棶 |
+
+## 涓冦�佸父瑙侀棶棰�
+
+### 闂1: 鐐瑰嚮鍗忚閾炬帴鍚庝粛璺宠浆鍒扮櫥褰曢〉
+
+**鍘熷洜**: 鐧藉悕鍗曡矾寰勯厤缃敊璇�
+
+**妫�鏌�**:
+```javascript
+// app/permission.js
+// 纭繚璺緞瀹屽叏鍖归厤
+'/pages/mine/privacy-policy/index' // 鉁� 姝g‘
+'/pages/mine/privacy-policy' // 鉂� 閿欒锛堢己灏�/index锛�
+```
+
+**瑙e喅**: 纭繚璺緞涓巔ages.json涓殑閰嶇疆涓�鑷�
+
+---
+
+### 闂2: 浠庡崗璁〉闈㈣繑鍥炲悗锛岀櫥褰曢〉鎴栨敞鍐岄〉鐘舵�佷涪澶�
+
+**鍘熷洜**: 浣跨敤浜嗛敊璇殑璺宠浆鏂规硶
+
+**瑙e喅**:
+```javascript
+// 鉁� 姝g‘锛氫娇鐢╪avigateTo锛屼繚鐣欏綋鍓嶉〉闈�
+this.$tab.navigateTo('/pages/mine/privacy-policy/index')
+
+// 鉂� 閿欒锛氫娇鐢╮edirectTo浼氬叧闂綋鍓嶉〉闈�
+this.$tab.redirectTo('/pages/mine/privacy-policy/index')
+```
+
+---
+
+### 闂3: H5鐜涓嬪埛鏂板崗璁〉闈㈠悗璺宠浆鍒扮櫥褰曢〉
+
+**鍘熷洜**: H5鍒锋柊浼氶噸鏂版墽琛岃矾鐢卞畧鍗�
+
+**楠岃瘉**: 杩欐槸姝e父鐜拌薄锛岀Щ鍔ㄧ涓嶅瓨鍦ㄥ埛鏂版搷浣�
+
+**瑙e喅**: 濡傞渶H5鏀寔鍒锋柊锛岄渶瑕侀澶栭厤缃矾鐢卞畧鍗�
+
+---
+
+## 鍏�佸畨鍏ㄨ�冭檻
+
+### 8.1 鐧藉悕鍗曡寖鍥存帶鍒�
+
+**鍘熷垯**: 鍙皢蹇呰鐨勯〉闈㈠姞鍏ョ櫧鍚嶅崟
+
+**褰撳墠鐧藉悕鍗�**:
+- 鉁� 鐧诲綍/娉ㄥ唽椤甸潰锛氬繀椤诲尶鍚嶈闂�
+- 鉁� 鍗忚椤甸潰锛氭硶寰嬭姹傚尶鍚嶈闂�
+- 鉁� WebView椤甸潰锛氱敤浜庢樉绀哄閮ㄥ崗璁摼鎺�
+
+**涓嶅簲鍔犲叆鐧藉悕鍗曠殑椤甸潰**:
+- 鉂� 棣栭〉
+- 鉂� 浠诲姟椤甸潰
+- 鉂� 娑堟伅椤甸潰
+- 鉂� 涓汉淇℃伅椤甸潰
+- 鉂� 鍏朵粬涓氬姟鍔熻兘椤甸潰
+
+### 8.2 鏁版嵁瀹夊叏
+
+**鍗忚椤甸潰鐗圭偣**:
+- 鉁� 绾睍绀哄唴瀹癸紝鏃犳晱鎰熸暟鎹�
+- 鉁� 涓嶆秹鍙夾PI璋冪敤
+- 鉁� 涓嶉渶瑕佺敤鎴疯韩浠介獙璇�
+- 鉁� 涓嶄細娉勯湶绯荤粺淇℃伅
+
+**瀹夊叏鎺柦**:
+```vue
+<!-- 鍗忚椤甸潰鍙寘鍚潤鎬佸唴瀹� -->
+<template>
+ <view class="agreement-container">
+ <!-- 鍙湁鏂囨湰鍐呭锛屾棤鐢ㄦ埛鏁版嵁 -->
+ <view class="agreement-content">
+ <text>鍗忚鍐呭...</text>
+ </view>
+ </view>
+</template>
+
+<script>
+export default {
+ data() {
+ return {} // 鏃犳晱鎰熸暟鎹�
+ },
+ methods: {
+ goBack() {
+ uni.navigateBack() // 鍙湁杩斿洖鍔熻兘
+ }
+ }
+}
+</script>
+```
+
+## 涔濄�佸悗缁紭鍖栧缓璁�
+
+### 9.1 娣诲姞鍗忚鐗堟湰绠$悊
+
+```javascript
+// app/config.js
+module.exports = {
+ agreements: {
+ privacyPolicy: {
+ version: '1.0',
+ lastUpdate: '2025-01-25',
+ path: '/pages/mine/privacy-policy/index'
+ },
+ userAgreement: {
+ version: '1.0',
+ lastUpdate: '2025-01-25',
+ path: '/pages/mine/user-agreement/index'
+ }
+ }
+}
+```
+
+### 9.2 璁板綍鐢ㄦ埛鍚屾剰鐘舵��
+
+```javascript
+// 鐢ㄦ埛棣栨璁块棶鏃�
+localStorage.setItem('agreement_accepted', JSON.stringify({
+ privacyPolicy: { version: '1.0', acceptedAt: '2025-01-25' },
+ userAgreement: { version: '1.0', acceptedAt: '2025-01-25' }
+}))
+
+// 鍗忚鏇存柊鏃讹紝鎻愮ず鐢ㄦ埛閲嶆柊闃呰
+if (currentVersion !== acceptedVersion) {
+ // 鏄剧ず鍗忚鏇存柊鎻愮ず
+}
+```
+
+### 9.3 娣诲姞璁块棶缁熻
+
+```javascript
+// 缁熻鍗忚椤甸潰璁块棶閲�
+onLoad() {
+ // 涓婃姤缁熻鏁版嵁
+ uni.request({
+ url: '/api/statistics/agreement-view',
+ method: 'POST',
+ data: {
+ type: 'privacy-policy',
+ timestamp: new Date().getTime()
+ }
+ })
+}
+```
+
+## 鍗併�佹�荤粨
+
+### 瀹屾垚鐨勫伐浣�
+
+鉁� **鏉冮檺閰嶇疆**: 宸插皢闅愮鏀跨瓥鍜岀敤鎴峰崗璁〉闈㈠姞鍏ョ櫧鍚嶅崟
+鉁� **鍖垮悕璁块棶**: 鐢ㄦ埛鏃犻渶鐧诲綍鍗冲彲鏌ョ湅鍗忚鍐呭
+鉁� **娉曞緥鍚堣**: 婊¤冻銆婁釜浜轰俊鎭繚鎶ゆ硶銆嬬瓑娉曡瑕佹眰
+鉁� **鐢ㄦ埛浣撻獙**: 鐢ㄦ埛鍙湪娉ㄥ唽鍓嶅厖鍒嗕簡瑙e崗璁�
+
+### 淇敼鐨勬枃浠�
+
+- 鉁� `app/permission.js` - 娣诲姞鍗忚椤甸潰鍒扮櫧鍚嶅崟
+
+### 褰卞搷鐨勯〉闈�
+
+- 鉁� `app/pages/login.vue` - 鐧诲綍椤靛崗璁摼鎺ュ彲姝e父璁块棶
+- 鉁� `app/pages/register.vue` - 娉ㄥ唽椤靛崗璁摼鎺ュ彲姝e父璁块棶
+- 鉁� `app/pages/mine/index.vue` - 宸茬櫥褰曠敤鎴蜂篃鍙闂�
+- 鉁� `app/pages/mine/privacy-policy/index.vue` - 鏀寔鍖垮悕璁块棶
+- 鉁� `app/pages/mine/user-agreement/index.vue` - 鏀寔鍖垮悕璁块棶
+
+### 娴嬭瘯寤鸿
+
+1. 鉁� 娓呴櫎鐧诲綍鐘舵�侊紝娴嬭瘯鏈櫥褰曡闂�
+2. 鉁� 浠庣櫥褰曢〉鐐瑰嚮鍗忚閾炬帴娴嬭瘯
+3. 鉁� 浠庢敞鍐岄〉鐐瑰嚮鍗忚閾炬帴娴嬭瘯
+4. 鉁� 鐧诲綍鍚庝粠"鎴戠殑"椤甸潰璁块棶娴嬭瘯
+5. 鉁� 鍦ㄤ笉鍚屽钩鍙版祴璇曪紙H5銆佸井淇″皬绋嬪簭銆丄pp锛�
+
+---
+
+閰嶇疆瀹屾垚锛佺幇鍦ㄧ敤鎴峰彲浠ュ湪鏈櫥褰曠姸鎬佷笅鏌ョ湅闅愮鏀跨瓥鍜岀敤鎴峰崗璁簡銆傪煄�
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
index 17221c5..ada4327 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
@@ -132,4 +132,13 @@
* @return 閮ㄩ棬淇℃伅
*/
public SysDept selectDeptByDepartmentIdAndParentId(@Param("departmentId") Integer departmentId, @Param("parentId") Long parentId);
+
+ /**
+ * 鑾峰彇鎸囧畾閮ㄩ棬ID鐨勫垎鍏徃ID锛坧arent_id=100鐨勯儴闂級
+ * 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛岀洿鎺ヨ繑鍥烇紱鍚﹀垯浠巃ncestors涓煡鎵惧垎鍏徃ID
+ *
+ * @param deptId 閮ㄩ棬ID
+ * @return 鍒嗗叕鍙窱D锛屽鏋滄壘涓嶅埌鍒欒繑鍥瀗ull
+ */
+ public Long selectBranchCompanyIdByDeptId(@Param("deptId") Long deptId);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index 3293c6c..ac521d2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -694,6 +694,7 @@
VehicleInfo queryParam = new VehicleInfo();
queryParam.setStatus("0"); // 0琛ㄧず姝e父鐘舵��
// 涓嶈缃甦eptId锛屾煡璇㈡墍鏈夐儴闂ㄧ殑杞﹁締
+ queryParam.setDeptId(deptId);
List<VehicleInfo> vehicles = vehicleInfoMapper.selectVehicleInfoList(queryParam);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
index dba60e7..b9f4b69 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
@@ -231,12 +231,12 @@
}
/**
- * 浠嶤arOrdClass瑙f瀽閮ㄩ棬ID
+ * 浠� CarOrdClass 瑙f瀽閮ㄩ棬ID锛屽苟杞崲涓哄垎鍏徃ID
* CarOrdClass鏍煎紡鍙兘鏄細ZB銆丠B.TI绛�
* 闇�瑕佹媶鍒嗗苟鍦╯ys_dept涓尮閰峝ispatch_order_class瀛楁
*
* @param carOrdClass 杞﹁締鍗曟嵁绫诲瀷缂栫爜
- * @return 閮ㄩ棬ID锛屽鏋滄湭鎵惧埌杩斿洖null
+ * @return 鍒嗗叕鍙窱D锛屽鏋滄湭鎵惧埌杩斿洖null
*/
private Long parseDeptIdFromCarOrdClass(String carOrdClass)
{
@@ -264,7 +264,19 @@
{
log.debug("閫氳繃dispatch_order_class='{}' 鎵惧埌閮ㄩ棬: {} (ID={})",
code, dept.getDeptName(), dept.getDeptId());
- return dept.getDeptId();
+
+ // 灏嗛儴闂↖D杞崲涓哄垎鍏徃ID
+ Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(dept.getDeptId());
+ if (branchCompanyId != null)
+ {
+ log.debug("灏嗛儴闂↖D {} 杞崲涓哄垎鍏徃ID: {}", dept.getDeptId(), branchCompanyId);
+ return branchCompanyId;
+ }
+ else
+ {
+ log.warn("閮ㄩ棬ID {} 鏃犳硶杞崲涓哄垎鍏徃ID锛屽彲鑳芥槸鎬诲叕鍙告垨鏁版嵁寮傚父", dept.getDeptId());
+ return null;
+ }
}
}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 2d8e21a..6d1d189 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -45,6 +45,12 @@
<if test="status != null and status != ''">
AND status = #{status}
</if>
+ <if test="serviceOrderClass != null and serviceOrderClass != ''">
+ AND service_order_class = #{serviceOrderClass}
+ </if>
+ <if test="dispatchOrderClass != null and dispatchOrderClass != ''">
+ AND dispatch_order_class = #{dispatchOrderClass}
+ </if>
<!-- 鏁版嵁鑼冨洿杩囨护 -->
${params.dataScope}
order by d.parent_id, d.order_num
@@ -184,4 +190,24 @@
limit 1
</select>
+ <!-- 鑾峰彇鎸囧畾閮ㄩ棬ID鐨勫垎鍏徃ID锛坧arent_id=100鐨勯儴闂級 -->
+ <select id="selectBranchCompanyIdByDeptId" parameterType="Long" resultType="Long">
+ select case
+ -- 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛坧arent_id=100锛夛紝鐩存帴杩斿洖
+ when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100 and del_flag = '0')
+ then #{deptId}
+ else (
+ -- 鍚﹀垯浠� ancestors 涓煡鎵惧垎鍏徃ID
+ select d.dept_id
+ from sys_dept d
+ where d.parent_id = 100
+ and d.del_flag = '0'
+ and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = #{deptId} and del_flag = '0'
+ ))
+ limit 1
+ )
+ end
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
index b6bbf51..e329543 100644
--- a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
@@ -39,7 +39,25 @@
<if test="vehicleModel != null and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if>
<if test="status != null and status != ''"> and v.status = #{status}</if>
<if test="platformCode != null and platformCode != ''"> and v.platform_code = #{platformCode}</if>
- <if test="deptId != null"> and v.dept_id = #{deptId}</if>
+ <!-- 閮ㄩ棬杩囨护锛氳嚜鍔ㄦ煡鎵句紶鍏ラ儴闂ㄦ墍灞炵殑鍒嗗叕鍙革紙parent_id=100锛� -->
+ <if test="deptId != null">
+ and v.dept_id = (
+ <!-- 濡傛灉浼犲叆鐨勫氨鏄垎鍏徃锛坧arent_id=100锛夛紝鐩存帴杩斿洖 -->
+ select case
+ when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100) then #{deptId}
+ else (
+ <!-- 鍚﹀垯浠� ancestors 涓煡鎵惧垎鍏徃ID -->
+ select d.dept_id
+ from sys_dept d
+ where d.parent_id = 100
+ and FIND_IN_SET(d.dept_id, (
+ select ancestors from sys_dept where dept_id = #{deptId}
+ ))
+ limit 1
+ )
+ end
+ )
+ </if>
<!-- 浠诲姟杞﹁締閫夋嫨蹇呴』杩囨护锛氬彧鏄剧ずcar_id鍜宒ept_id閮戒笉涓虹┖鐨勮溅杈� -->
and v.car_id is not null and v.car_id != ''
and v.dept_id is not null
diff --git a/ruoyi-ui/src/views/task/general/detail.vue b/ruoyi-ui/src/views/task/general/detail.vue
index 379fff6..b1b7527 100644
--- a/ruoyi-ui/src/views/task/general/detail.vue
+++ b/ruoyi-ui/src/views/task/general/detail.vue
@@ -30,6 +30,74 @@
<el-descriptions-item label="澶囨敞" :span="2">{{ taskDetail.remark }}</el-descriptions-item>
</el-descriptions>
+ <!-- 鎬ユ晳杞繍浠诲姟鎵╁睍淇℃伅 -->
+ <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>
+ <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"/>
+ <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>
+ <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>
+ <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>
+
+ <!-- 绂忕杞︿换鍔℃墿灞曚俊鎭� -->
+ <el-descriptions v-if="taskDetail.taskType === 'WELFARE' && taskDetail.welfareInfo" title="绂忕杞︽湇鍔′俊鎭�" :column="2" border style="margin-top: 20px;">
+ <el-descriptions-item label="涔樺濮撳悕">{{ taskDetail.welfareInfo.passengerName }}</el-descriptions-item>
+ <el-descriptions-item label="涔樺鎬у埆">
+ <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.welfareInfo.passengerGender"/>
+ </el-descriptions-item>
+ <el-descriptions-item label="涔樺骞撮緞">{{ taskDetail.welfareInfo.passengerAge }}</el-descriptions-item>
+ <el-descriptions-item label="鑱旂郴鐢佃瘽">{{ taskDetail.welfareInfo.contactPhone }}</el-descriptions-item>
+ <el-descriptions-item label="鏈嶅姟绫诲瀷" :span="2">
+ <span v-if="taskDetail.welfareInfo.serviceType">{{ taskDetail.welfareInfo.serviceType }}</span>
+ <span v-else style="color: #C0C4CC;">--</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐗规畩闇�姹�" :span="2">
+ <span v-if="taskDetail.welfareInfo.specialRequirements">{{ taskDetail.welfareInfo.specialRequirements }}</span>
+ <span v-else style="color: #C0C4CC;">--</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鏄惁闇�瑕佽疆妞�">
+ <el-tag v-if="taskDetail.welfareInfo.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="闄悓浜烘暟">{{ taskDetail.welfareInfo.companionCount || 0 }} 浜�</el-descriptions-item>
+ <el-descriptions-item label="棰勪及璐圭敤">{{ taskDetail.welfareInfo.estimatedCost || '--' }} 鍏�</el-descriptions-item>
+ <el-descriptions-item label="瀹為檯璐圭敤">{{ taskDetail.welfareInfo.actualCost || '--' }} 鍏�</el-descriptions-item>
+ </el-descriptions>
+
<!-- 鎿嶄綔鎸夐挳 -->
<div style="margin-top: 20px; text-align: center;">
<el-button type="primary" @click="handleEdit" v-hasPermi="['task:general:edit']">缂栬緫浠诲姟</el-button>
@@ -299,7 +367,7 @@
export default {
name: "TaskDetail",
- dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status'],
+ dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status', 'sys_user_sex', 'hospital_department'],
data() {
return {
// 浠诲姟璇︽儏
diff --git a/ruoyi-ui/src/views/task/general/index.vue b/ruoyi-ui/src/views/task/general/index.vue
index 5c8c97c..8988020 100644
--- a/ruoyi-ui/src/views/task/general/index.vue
+++ b/ruoyi-ui/src/views/task/general/index.vue
@@ -103,9 +103,12 @@
>{{ scope.row.taskCode }}</el-button>
</template>
</el-table-column>
- <el-table-column label="浠诲姟绫诲瀷" align="center" prop="taskType">
+ <el-table-column label="浠诲姟绫诲瀷" align="center" prop="taskType" width="120">
<template slot-scope="scope">
<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="taskStatus">
--
Gitblit v1.9.1