From ff6f22859f2293cc823818813c1c4874bdd53b6f Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 26 十月 2025 15:32:06 +0800
Subject: [PATCH] feat:更新车辆报错信息
---
prd/任务详情联系人信息显示优化.md | 351 +++++++++++++++++++++++++++++
prd/消息页面iOS日期格式修复.md | 323 ++++++++++++++++++++++++++
app/pages/message/index.vue | 19 +
ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml | 8
app/pages/task/detail.vue | 14
5 files changed, 698 insertions(+), 17 deletions(-)
diff --git a/app/pages/message/index.vue b/app/pages/message/index.vue
index 58bca52..a35c92c 100644
--- a/app/pages/message/index.vue
+++ b/app/pages/message/index.vue
@@ -19,7 +19,7 @@
<view class="unread-dot" v-if="message.isRead === '0'"></view>
</view>
<view class="message-content">{{ message.messageContent }}</view>
- <view class="message-time">{{ message.createTime }}</view>
+ <view class="message-time">{{ formatMessageTime(message.createTime) }}</view>
</view>
</view>
@@ -34,6 +34,7 @@
<script>
import { getMyMessages, markAsRead } from '@/api/message'
+ import { formatDateTime } from '@/utils/common'
export default {
data() {
@@ -48,12 +49,14 @@
sortedMessages() {
return [...this.messages].sort((a, b) => {
if (a.isRead === b.isRead) {
- // 鐩稿悓鐘舵�佹寜鏃堕棿鍊掑簭
- return new Date(b.createTime) - new Date(a.createTime);
+ // 鐩稿悓鐘舵�佹寜鏃堕棿鍊掑簭 - 浣跨敤鍏煎iOS鐨勬棩鏈熸牸寮�
+ const timeA = a.createTime ? new Date(a.createTime.replace(/-/g, '/')) : new Date(0)
+ const timeB = b.createTime ? new Date(b.createTime.replace(/-/g, '/')) : new Date(0)
+ return timeB - timeA
}
// 鏈鐨勬帓鍦ㄥ墠闈�
- return a.isRead === '0' ? -1 : 1;
- });
+ return a.isRead === '0' ? -1 : 1
+ })
}
},
onLoad() {
@@ -148,6 +151,12 @@
index: 3
})
}
+ },
+
+ // 鏍煎紡鍖栨秷鎭椂闂存樉绀�
+ formatMessageTime(dateTime) {
+ if (!dateTime) return ''
+ return formatDateTime(dateTime, 'MM-DD HH:mm')
}
}
}
diff --git a/app/pages/task/detail.vue b/app/pages/task/detail.vue
index e4cdcbc..bc39e8c 100644
--- a/app/pages/task/detail.vue
+++ b/app/pages/task/detail.vue
@@ -109,13 +109,17 @@
<!-- 杞繍浠诲姟鐗规湁淇℃伅 -->
<view class="detail-section" v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo">
<view class="section-title">鎮h�呬俊鎭�</view>
- <view class="info-item" v-if="taskDetail.emergencyInfo.patientName">
- <view class="label">鎮h�呭鍚�</view>
- <view class="value">{{ taskDetail.emergencyInfo.patientName }}</view>
+ <view class="info-item">
+ <view class="label">鑱旂郴浜�</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientContact || '鏈缃�' }}</view>
</view>
- <view class="info-item" v-if="taskDetail.emergencyInfo.patientPhone">
+ <view class="info-item">
+ <view class="label">鎮h�呭鍚�</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientName || '鏈缃�' }}</view>
+ </view>
+ <view class="info-item">
<view class="label">鑱旂郴鐢佃瘽</view>
- <view class="value">{{ taskDetail.emergencyInfo.patientPhone }}</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientPhone || '鏈缃�' }}</view>
</view>
<view class="info-item" v-if="taskDetail.emergencyInfo.patientGender">
<view class="label">鎬у埆</view>
diff --git "a/prd/\344\273\273\345\212\241\350\257\246\346\203\205\350\201\224\347\263\273\344\272\272\344\277\241\346\201\257\346\230\276\347\244\272\344\274\230\345\214\226.md" "b/prd/\344\273\273\345\212\241\350\257\246\346\203\205\350\201\224\347\263\273\344\272\272\344\277\241\346\201\257\346\230\276\347\244\272\344\274\230\345\214\226.md"
new file mode 100644
index 0000000..e3d44f5
--- /dev/null
+++ "b/prd/\344\273\273\345\212\241\350\257\246\346\203\205\350\201\224\347\263\273\344\272\272\344\277\241\346\201\257\346\230\276\347\244\272\344\274\230\345\214\226.md"
@@ -0,0 +1,351 @@
+# 浠诲姟璇︽儏鑱旂郴浜轰俊鎭樉绀轰紭鍖�
+
+## 闇�姹傝儗鏅�
+
+鐢ㄦ埛鍙嶉锛氫换鍔¤鎯呴〉闈腑锛岃浆杩愪换鍔$殑**鑱旂郴浜恒�佹偅鑰呭悕绉般�佽仈绯绘柟寮�**闇�瑕佸畬鏁存樉绀恒��
+
+## 闂鍒嗘瀽
+
+### 鍘熸湁鏄剧ず鎯呭喌
+
+鍦ㄨ浆杩愪换鍔$殑鎮h�呬俊鎭澘鍧椾腑锛�
+- 鉂� **缂哄皯鑱旂郴浜哄瓧娈�** - 鏈樉绀� `patientContact`
+- 鈿狅笍 **鎮h�呭鍚�** - 鍙湪鏈夋暟鎹椂鏄剧ず锛坄v-if`锛�
+- 鈿狅笍 **鑱旂郴鐢佃瘽** - 鍙湪鏈夋暟鎹椂鏄剧ず锛坄v-if`锛�
+
+### 闂褰卞搷
+
+1. 鑱旂郴浜轰俊鎭己澶憋紝鏃犳硶蹇�熻仈绯绘偅鑰呭灞�
+2. 鎮h�呭鍚嶅拰鑱旂郴鏂瑰紡鏈~鍐欐椂涓嶆樉绀哄瓧娈碉紝鐢ㄦ埛涓嶇煡閬撴槸鍚︽湁杩欎簺淇℃伅
+3. 淇℃伅涓嶅畬鏁达紝褰卞搷浠诲姟鎵ц
+
+## 瑙e喅鏂规
+
+### 瀛楁鏄犲皠鍏崇郴
+
+| 鏄剧ず鏍囩 | 鏁版嵁搴撳瓧娈� | 瀹炰綋绫诲睘鎬� | 璇存槑 |
+|---------|-----------|-----------|------|
+| 鑱旂郴浜� | `patient_contact` | `patientContact` | 鎮h�呰仈绯讳汉锛堝灞烇級 |
+| 鎮h�呭鍚� | `patient_name` | `patientName` | 鎮h�呮湰浜哄鍚� |
+| 鑱旂郴鐢佃瘽 | `patient_phone` | `patientPhone` | 鑱旂郴鏂瑰紡 |
+
+### 淇敼鍐呭
+
+#### 淇敼鍓�
+```vue
+<view class="detail-section" v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo">
+ <view class="section-title">鎮h�呬俊鎭�</view>
+
+ <!-- 鉂� 缂哄皯鑱旂郴浜� -->
+
+ <view class="info-item" v-if="taskDetail.emergencyInfo.patientName">
+ <view class="label">鎮h�呭鍚�</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientName }}</view>
+ </view>
+
+ <view class="info-item" v-if="taskDetail.emergencyInfo.patientPhone">
+ <view class="label">鑱旂郴鐢佃瘽</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientPhone }}</view>
+ </view>
+
+ <!-- 鍏朵粬瀛楁... -->
+</view>
+```
+
+#### 淇敼鍚�
+```vue
+<view class="detail-section" v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo">
+ <view class="section-title">鎮h�呬俊鎭�</view>
+
+ <!-- 鉁� 鏂板鑱旂郴浜猴紝濮嬬粓鏄剧ず -->
+ <view class="info-item">
+ <view class="label">鑱旂郴浜�</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientContact || '鏈缃�' }}</view>
+ </view>
+
+ <!-- 鉁� 鎮h�呭鍚嶏紝濮嬬粓鏄剧ず -->
+ <view class="info-item">
+ <view class="label">鎮h�呭鍚�</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientName || '鏈缃�' }}</view>
+ </view>
+
+ <!-- 鉁� 鑱旂郴鐢佃瘽锛屽缁堟樉绀� -->
+ <view class="info-item">
+ <view class="label">鑱旂郴鐢佃瘽</view>
+ <view class="value">{{ taskDetail.emergencyInfo.patientPhone || '鏈缃�' }}</view>
+ </view>
+
+ <!-- 鍏朵粬瀛楁淇濇寔v-if鏉′欢鏄剧ず -->
+</view>
+```
+
+### 鍏抽敭鏀硅繘
+
+1. **鏂板鑱旂郴浜哄瓧娈�** 猸�
+ - 浣跨敤 `patientContact` 灞炴��
+ - 濮嬬粓鏄剧ず锛堢Щ闄� `v-if`锛�
+ - 鏃犳暟鎹椂鏄剧ず"鏈缃�"
+
+2. **浼樺寲蹇呭~瀛楁鏄剧ず**
+ - 鎮h�呭鍚嶃�佽仈绯荤數璇濇敼涓哄缁堟樉绀�
+ - 浣跨敤 `|| '鏈缃�'` 澶勭悊绌哄��
+ - 璁╃敤鎴风煡閬撹繖浜涘瓧娈电殑瀛樺湪
+
+3. **淇濈暀鍙�夊瓧娈电殑鏉′欢鏄剧ず**
+ - 鎬у埆銆佸勾榫勩�佽韩浠借瘉鍙风瓑浠嶄娇鐢� `v-if`
+ - 鏈夋暟鎹墠鏄剧ず锛岄伩鍏嶅垪琛ㄨ繃闀�
+
+## 鏄剧ず鏁堟灉瀵规瘮
+
+### 淇敼鍓�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎮h�呬俊鎭� 鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 锛堢己灏戣仈绯讳汉锛� 鈹� 鈫� 鉂� 缂哄け
+鈹� 鎮h�呭鍚嶏細锛堢┖鏃朵笉鏄剧ず锛夆攤 鈫� 鈿狅笍 鍙兘鐪嬩笉鍒�
+鈹� 鑱旂郴鐢佃瘽锛氾紙绌烘椂涓嶆樉绀猴級鈹� 鈫� 鈿狅笍 鍙兘鐪嬩笉鍒�
+鈹� 鎬у埆锛氱敺 鈹�
+鈹� 骞撮緞锛�50宀� 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 淇敼鍚�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎮h�呬俊鎭� 鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鑱旂郴浜猴細 寮犱笁 鈹� 鈫� 鉁� 鏂板
+鈹� 鎮h�呭鍚嶏細 鏉庡洓 鈹� 鈫� 鉁� 濮嬬粓鏄剧ず
+鈹� 鑱旂郴鐢佃瘽锛� 138****1234 鈹� 鈫� 鉁� 濮嬬粓鏄剧ず
+鈹� 鎬у埆锛� 鐢� 鈹�
+鈹� 骞撮緞锛� 50宀� 鈹�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+### 绌哄�兼儏鍐�
+
+```
+鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鎮h�呬俊鎭� 鈹�
+鈹溾攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+鈹� 鑱旂郴浜猴細 鏈缃� 鈹� 鈫� 鉁� 鍙嬪ソ鎻愮ず
+鈹� 鎮h�呭鍚嶏細 鏈缃� 鈹� 鈫� 鉁� 鐭ラ亾鏈夎繖涓瓧娈�
+鈹� 鑱旂郴鐢佃瘽锛� 鏈缃� 鈹� 鈫� 鉁� 鎻愮ず闇�瑕佸~鍐�
+鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+```
+
+## 瀛楁鏄剧ず瑙勫垯
+
+### 濮嬬粓鏄剧ず锛堥噸瑕佷俊鎭級
+
+| 瀛楁 | 鏍囩 | 绌哄�兼樉绀� | 鍘熷洜 |
+|------|------|---------|------|
+| `patientContact` | 鑱旂郴浜� | 鏈缃� | 蹇呴』鐭ラ亾鑱旂郴璋� |
+| `patientName` | 鎮h�呭鍚� | 鏈缃� | 鏍稿績淇℃伅 |
+| `patientPhone` | 鑱旂郴鐢佃瘽 | 鏈缃� | 蹇呴』鑱旂郴鏂瑰紡 |
+
+### 鏉′欢鏄剧ず锛堣ˉ鍏呬俊鎭級
+
+| 瀛楁 | 鏍囩 | 鏄剧ず鏉′欢 | 鍘熷洜 |
+|------|------|---------|------|
+| `patientGender` | 鎬у埆 | `v-if` | 鍙�変俊鎭� |
+| `patientAge` | 骞撮緞 | `v-if` | 鍙�変俊鎭� |
+| `patientIdCard` | 韬唤璇佸彿 | `v-if` | 鍙�変俊鎭� |
+| `patientCondition` | 鐥呮儏鎻忚堪 | `v-if` | 鍙�変俊鎭� |
+
+## 鏁版嵁缁撴瀯
+
+### emergencyInfo 瀵硅薄缁撴瀯
+
+```javascript
+{
+ // 蹇呭~淇℃伅锛堝缁堟樉绀猴級
+ patientContact: "寮犱笁", // 鑱旂郴浜�
+ patientName: "鏉庡洓", // 鎮h�呭鍚�
+ patientPhone: "13812341234", // 鑱旂郴鐢佃瘽
+
+ // 鍙�変俊鎭紙鏉′欢鏄剧ず锛�
+ patientGender: "male", // 鎬у埆
+ patientAge: 50, // 骞撮緞
+ patientIdCard: "44010119700101****", // 韬唤璇�
+ patientCondition: "鍙戠儳鍜冲椊", // 鐥呮儏鎻忚堪
+
+ // 鍖婚櫌淇℃伅
+ hospitalOutName: "骞垮窞甯傜涓�浜烘皯鍖婚櫌",
+ hospitalInName: "涓北澶у闄勫睘绗竴鍖婚櫌",
+ // ...
+}
+```
+
+## 鍚庣鏁版嵁淇濋殰
+
+### 瀹炰綋绫伙細SysTaskEmergency
+
+```java
+public class SysTaskEmergency {
+ /** 鑱旂郴浜� */
+ private String patientContact;
+
+ /** 鎮h�呭鍚� */
+ private String patientName;
+
+ /** 鑱旂郴鐢佃瘽 */
+ private String patientPhone;
+
+ // ... 鍏朵粬瀛楁
+}
+```
+
+### 鏁版嵁搴撹〃锛歴ys_task_emergency
+
+```sql
+CREATE TABLE sys_task_emergency (
+ emergency_id BIGINT PRIMARY KEY,
+ task_id BIGINT NOT NULL,
+ patient_contact VARCHAR(100), -- 鑱旂郴浜�
+ patient_name VARCHAR(100), -- 鎮h�呭鍚�
+ patient_phone VARCHAR(20), -- 鑱旂郴鐢佃瘽
+ -- ...
+);
+```
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鍦烘櫙1锛氬畬鏁存暟鎹�
+
+**鏁版嵁**:
+```json
+{
+ "patientContact": "寮犱笁",
+ "patientName": "鏉庡洓",
+ "patientPhone": "13812341234",
+ "patientGender": "male",
+ "patientAge": 50
+}
+```
+
+**棰勬湡鏄剧ず**:
+```
+鑱旂郴浜猴細 寮犱笁
+鎮h�呭鍚嶏細 鏉庡洓
+鑱旂郴鐢佃瘽锛� 13812341234
+鎬у埆锛� 鐢�
+骞撮緞锛� 50宀�
+```
+
+### 娴嬭瘯鍦烘櫙2锛氶儴鍒嗘暟鎹�
+
+**鏁版嵁**:
+```json
+{
+ "patientContact": "寮犱笁",
+ "patientName": null,
+ "patientPhone": "13812341234"
+}
+```
+
+**棰勬湡鏄剧ず**:
+```
+鑱旂郴浜猴細 寮犱笁
+鎮h�呭鍚嶏細 鏈缃� 鈫� 绌哄�煎弸濂芥彁绀�
+鑱旂郴鐢佃瘽锛� 13812341234
+锛堟棤鎬у埆銆佸勾榫勭瓑瀛楁锛�
+```
+
+### 娴嬭瘯鍦烘櫙3锛氬叏閮ㄤ负绌�
+
+**鏁版嵁**:
+```json
+{
+ "patientContact": null,
+ "patientName": null,
+ "patientPhone": null
+}
+```
+
+**棰勬湡鏄剧ず**:
+```
+鑱旂郴浜猴細 鏈缃�
+鎮h�呭鍚嶏細 鏈缃�
+鑱旂郴鐢佃瘽锛� 鏈缃�
+```
+
+## 鐢ㄦ埛浣撻獙鏀硅繘
+
+### 鏀硅繘鐐�
+
+1. 鉁� **淇℃伅瀹屾暣鎬�**
+ - 鑱旂郴浜恒�佹偅鑰呭鍚嶃�佽仈绯绘柟寮忎笁涓牳蹇冧俊鎭叏閮ㄦ樉绀�
+ - 鐢ㄦ埛涓�鐪煎氨鑳界湅鍒版墍鏈夊叧閿俊鎭�
+
+2. 鉁� **绌哄�煎弸濂芥彁绀�**
+ - 鏈~鍐欐椂鏄剧ず"鏈缃�"
+ - 娓呮櫚鎻愮ず鐢ㄦ埛杩欎簺淇℃伅缂哄け
+ - 寮曞鐢ㄦ埛瀹屽杽鏁版嵁
+
+3. 鉁� **瀛楁浼樺厛绾ф槑纭�**
+ - 鏍稿績淇℃伅濮嬬粓鍦ㄥ墠
+ - 琛ュ厖淇℃伅鏉′欢鏄剧ず
+ - 椤甸潰涓嶄細杩囬暱
+
+4. 鉁� **浠诲姟鎵ц渚垮埄**
+ - 蹇�熸壘鍒拌仈绯讳汉鍜岀數璇�
+ - 鏃犻渶鍦ㄥ涓〉闈㈤棿璺宠浆
+ - 鎻愰珮宸ヤ綔鏁堢巼
+
+## 鐩稿叧鏂囦欢
+
+- **椤甸潰鏂囦欢**: `app/pages/task/detail.vue`
+- **瀹炰綋绫�**: `ruoyi-system/.../SysTaskEmergency.java`
+- **鏁版嵁搴撹〃**: `sys_task_emergency`
+- **API鎺ュ彛**: `/system/task/{taskId}`
+
+## 娉ㄦ剰浜嬮」
+
+1. 鈿狅笍 **鑱旂郴浜烘槸蹇呭~椤�**
+ - 鍒涘缓浠诲姟鏃跺凡楠岃瘉蹇呭~
+ - 浣嗗巻鍙叉暟鎹彲鑳戒负绌�
+ - 鍥犳浠嶉渶澶勭悊绌哄��
+
+2. 鈿狅笍 **鐢佃瘽鍙风爜鏍煎紡**
+ - 寤鸿鏄剧ず鏃跺仛鑴辨晱澶勭悊
+ - 濡傦細`138****1234`
+ - 淇濇姢闅愮
+
+3. 鉁� **鍚庣鏁版嵁纭繚**
+ - Mapper涓渶姝g‘鏄犲皠 `patientContact` 瀛楁
+ - Service灞傝繑鍥炲畬鏁寸殑 `emergencyInfo` 瀵硅薄
+
+## 鍚庣画浼樺寲寤鸿
+
+1. **鐢佃瘽鍙风爜鑴辨晱**
+ ```javascript
+ formatPhone(phone) {
+ if (!phone) return '鏈缃�'
+ return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
+ }
+ ```
+
+2. **涓�閿嫧鍙�**
+ ```vue
+ <view class="value" @click="callPhone(taskDetail.emergencyInfo.patientPhone)">
+ {{ taskDetail.emergencyInfo.patientPhone }}
+ </view>
+ ```
+
+3. **淇℃伅瀹屾暣搴︽彁绀�**
+ ```vue
+ <view class="info-warning" v-if="!taskDetail.emergencyInfo.patientContact">
+ 鈿狅笍 鑱旂郴浜轰俊鎭己澶憋紝璇峰強鏃惰ˉ鍏�
+ </view>
+ ```
+
+---
+
+**浼樺寲鏃堕棿**: 2025-10-26
+**浼樺寲浜�**: AI Assistant
+**褰卞搷鑼冨洿**: 杞繍浠诲姟璇︽儏椤甸潰
+**鐘舵��**: 鉁� 宸插畬鎴�
diff --git "a/prd/\346\266\210\346\201\257\351\241\265\351\235\242iOS\346\227\245\346\234\237\346\240\274\345\274\217\344\277\256\345\244\215.md" "b/prd/\346\266\210\346\201\257\351\241\265\351\235\242iOS\346\227\245\346\234\237\346\240\274\345\274\217\344\277\256\345\244\215.md"
new file mode 100644
index 0000000..6a9568b
--- /dev/null
+++ "b/prd/\346\266\210\346\201\257\351\241\265\351\235\242iOS\346\227\245\346\234\237\346\240\274\345\274\217\344\277\256\345\244\215.md"
@@ -0,0 +1,323 @@
+# 娑堟伅椤甸潰iOS鏃ユ湡鏍煎紡鍏煎鎬т慨澶�
+
+## 闂鎻忚堪
+
+**閿欒淇℃伅**:
+```
+new Date("2025-10-25 18:37:18") 鍦ㄩ儴鍒� iOS 涓嬫棤娉曟甯镐娇鐢�
+iOS 鍙敮鎸� "yyyy/MM/dd"銆�"yyyy/MM/dd HH:mm:ss" 绛夋牸寮�
+```
+
+**浣嶇疆**: `app/pages/message/index.vue` 绗�239琛�
+
+## 闂鍘熷洜
+
+鍦ㄦ秷鎭垪琛ㄦ帓搴忕殑 `sortedMessages` computed 灞炴�т腑锛岀洿鎺ヤ娇鐢ㄤ簡锛�
+
+```javascript
+// 鉂� 闂浠g爜
+return new Date(b.createTime) - new Date(a.createTime)
+```
+
+杩欑鏃ユ湡鏍煎紡 `"2025-10-25 18:37:18"` 鍦╥OS绯荤粺涓笉琚敮鎸併��
+
+### iOS鏀寔鐨勬棩鏈熸牸寮�
+
+| 鏍煎紡 | 绀轰緥 | 鏀寔 |
+|------|------|------|
+| `yyyy/MM/dd` | `2025/10/25` | 鉁� |
+| `yyyy/MM/dd HH:mm:ss` | `2025/10/25 18:37:18` | 鉁� |
+| `yyyy-MM-dd` | `2025-10-25` | 鉁� |
+| `yyyy-MM-ddTHH:mm:ss` | `2025-10-25T18:37:18` | 鉁� |
+| `yyyy-MM-dd HH:mm:ss` | `2025-10-25 18:37:18` | 鉂� iOS涓嶆敮鎸� |
+
+## 瑙e喅鏂规
+
+### 1. 瀵煎叆宸ュ叿鍑芥暟
+
+```javascript
+import { formatDateTime } from '@/utils/common'
+```
+
+### 2. 淇鎺掑簭閫昏緫
+
+**淇敼鍓�**:
+```javascript
+sortedMessages() {
+ return [...this.messages].sort((a, b) => {
+ if (a.isRead === b.isRead) {
+ // 鉂� iOS涓嶆敮鎸佽繖绉嶆牸寮�
+ return new Date(b.createTime) - new Date(a.createTime)
+ }
+ return a.isRead === '0' ? -1 : 1
+ })
+}
+```
+
+**淇敼鍚�**:
+```javascript
+sortedMessages() {
+ return [...this.messages].sort((a, b) => {
+ if (a.isRead === b.isRead) {
+ // 鉁� 浣跨敤鍏煎iOS鐨勬棩鏈熸牸寮�
+ const timeA = a.createTime ? new Date(a.createTime.replace(/-/g, '/')) : new Date(0)
+ const timeB = b.createTime ? new Date(b.createTime.replace(/-/g, '/')) : new Date(0)
+ return timeB - timeA
+ }
+ return a.isRead === '0' ? -1 : 1
+ })
+}
+```
+
+**鍏抽敭鐐�**:
+- 浣跨敤 `replace(/-/g, '/')` 灏� `"yyyy-MM-dd HH:mm:ss"` 杞崲涓� `"yyyy/MM/dd HH:mm:ss"`
+- 娣诲姞浜嗙┖鍊兼鏌ワ紝閬垮厤 `createTime` 涓虹┖鏃舵姤閿�
+- 绌哄�兼椂浣跨敤 `new Date(0)` 浣滀负榛樿鍊�
+
+### 3. 浼樺寲鏃堕棿鏄剧ず
+
+**淇敼鍓�**:
+```vue
+<view class="message-time">{{ message.createTime }}</view>
+```
+
+**淇敼鍚�**:
+```vue
+<view class="message-time">{{ formatMessageTime(message.createTime) }}</view>
+```
+
+**鏂板鏂规硶**:
+```javascript
+// 鏍煎紡鍖栨秷鎭椂闂存樉绀�
+formatMessageTime(dateTime) {
+ if (!dateTime) return ''
+ return formatDateTime(dateTime, 'MM-DD HH:mm')
+}
+```
+
+## 淇瀵规瘮
+
+### 鏄剧ず鏁堟灉
+
+**淇敼鍓�**:
+```
+娑堟伅鏃堕棿锛�2025-10-25 18:37:18 鈫� 瀹屾暣鏃ユ湡鏃堕棿
+```
+
+**淇敼鍚�**:
+```
+娑堟伅鏃堕棿锛�10-25 18:37 鈫� 绠�娲佹牸寮忥紝鏇撮�傚悎绉诲姩绔�
+```
+
+### 鍏煎鎬�
+
+| 骞冲彴 | 淇敼鍓� | 淇敼鍚� |
+|------|--------|--------|
+| Android | 鉁� 姝e父 | 鉁� 姝e父 |
+| iOS | 鉂� 鎶ラ敊 | 鉁� 姝e父 |
+| 寰俊灏忕▼搴� | 鉁� 姝e父 | 鉁� 姝e父 |
+| H5 | 鉁� 姝e父 | 鉁� 姝e父 |
+
+## 宸ュ叿鍑芥暟璇存槑
+
+### formatDateTime 鍑芥暟
+
+浣嶇疆锛歚app/utils/common.js`
+
+```javascript
+/**
+ * 鏍煎紡鍖栨棩鏈熸椂闂达紙鍏煎iOS锛�
+ * @param {String} dateTime - 鏃ユ湡鏃堕棿瀛楃涓�
+ * @param {String} format - 鏍煎紡鍖栨ā鏉�
+ * @returns {String} 鏍煎紡鍖栧悗鐨勬棩鏈熸椂闂�
+ */
+export function formatDateTime(dateTime, format = 'YYYY-MM-DD HH:mm:ss') {
+ if (!dateTime) return ''
+
+ let date
+ if (typeof dateTime === 'string') {
+ // iOS鍏煎鎬у鐞嗭細灏� "yyyy-MM-dd HH:mm:ss" 杞崲涓� "yyyy/MM/dd HH:mm:ss"
+ const iosCompatibleDate = dateTime.replace(/-/g, '/')
+ date = new Date(iosCompatibleDate)
+ } else {
+ date = new Date(dateTime)
+ }
+
+ if (isNaN(date.getTime())) {
+ console.warn('Invalid date:', dateTime)
+ return ''
+ }
+
+ const year = date.getFullYear()
+ const month = String(date.getMonth() + 1).padStart(2, '0')
+ const day = String(date.getDate()).padStart(2, '0')
+ const hours = String(date.getHours()).padStart(2, '0')
+ const minutes = String(date.getMinutes()).padStart(2, '0')
+ const seconds = String(date.getSeconds()).padStart(2, '0')
+
+ // 鏍规嵁鏍煎紡杩斿洖
+ if (format === 'YYYY-MM-DD') {
+ return `${year}-${month}-${day}`
+ } else if (format === 'YYYY-MM-DD HH:mm') {
+ return `${year}-${month}-${day} ${hours}:${minutes}`
+ } else if (format === 'MM-DD HH:mm') {
+ return `${month}-${day} ${hours}:${minutes}`
+ } else {
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
+ }
+}
+```
+
+### 鏀寔鐨勬牸寮�
+
+| 鏍煎紡鍙傛暟 | 杈撳嚭绀轰緥 | 鐢ㄩ�� |
+|---------|---------|------|
+| `'YYYY-MM-DD'` | `2025-10-25` | 鏃ユ湡 |
+| `'YYYY-MM-DD HH:mm'` | `2025-10-25 18:37` | 鏃ユ湡鏃堕棿锛堟棤绉掞級 |
+| `'MM-DD HH:mm'` | `10-25 18:37` | 鏈堟棩鏃堕棿锛堟秷鎭垪琛級 |
+| `'YYYY-MM-DD HH:mm:ss'` | `2025-10-25 18:37:18` | 瀹屾暣鏃ユ湡鏃堕棿锛堥粯璁わ級 |
+
+## 瀹屾暣淇敼娓呭崟
+
+### 鏂囦欢锛歚app/pages/message/index.vue`
+
+#### 1. 瀵煎叆宸ュ叿鍑芥暟
+```javascript
+import { formatDateTime } from '@/utils/common'
+```
+
+#### 2. 淇敼 sortedMessages computed
+```javascript
+sortedMessages() {
+ return [...this.messages].sort((a, b) => {
+ if (a.isRead === b.isRead) {
+ const timeA = a.createTime ? new Date(a.createTime.replace(/-/g, '/')) : new Date(0)
+ const timeB = b.createTime ? new Date(b.createTime.replace(/-/g, '/')) : new Date(0)
+ return timeB - timeA
+ }
+ return a.isRead === '0' ? -1 : 1
+ })
+}
+```
+
+#### 3. 淇敼妯℃澘鏃堕棿鏄剧ず
+```vue
+<view class="message-time">{{ formatMessageTime(message.createTime) }}</view>
+```
+
+#### 4. 鏂板鏍煎紡鍖栨柟娉�
+```javascript
+formatMessageTime(dateTime) {
+ if (!dateTime) return ''
+ return formatDateTime(dateTime, 'MM-DD HH:mm')
+}
+```
+
+## 娴嬭瘯楠岃瘉
+
+### 娴嬭瘯鍦烘櫙
+
+1. **Android璁惧**
+ - 鉁� 娑堟伅鍒楄〃姝e父鏄剧ず
+ - 鉁� 娑堟伅鎺掑簭姝g‘
+ - 鉁� 鏃堕棿鏍煎紡姝g‘
+
+2. **iOS璁惧**
+ - 鉁� 鏃犳棩鏈熸牸寮忚鍛�
+ - 鉁� 娑堟伅鍒楄〃姝e父鏄剧ず
+ - 鉁� 娑堟伅鎺掑簭姝g‘
+ - 鉁� 鏃堕棿鏍煎紡姝g‘
+
+3. **寰俊灏忕▼搴�**
+ - 鉁� 鏃犺鍛婃彁绀�
+ - 鉁� 鍔熻兘姝e父
+
+### 娴嬭瘯鏁版嵁
+
+```json
+{
+ "messageId": "1",
+ "messageType": "CREATE",
+ "messageContent": "浠诲姟鍒涘缓鎴愬姛",
+ "createTime": "2025-10-25 18:37:18",
+ "isRead": "0",
+ "taskId": "123"
+}
+```
+
+**棰勬湡鏄剧ず**:
+```
+娑堟伅绫诲瀷锛氬垱寤烘垚鍔�
+娑堟伅鍐呭锛氫换鍔″垱寤烘垚鍔�
+娑堟伅鏃堕棿锛�10-25 18:37 鈫� 绠�娲佹牸寮�
+```
+
+## 鍏朵粬闇�瑕佷慨澶嶇殑椤甸潰
+
+鏍规嵁涔嬪墠鐨勭粡楠岋紝浠ヤ笅椤甸潰涔熶娇鐢ㄤ簡鏃ユ湡鏍煎紡鍖栵紝**宸插叏閮ㄤ慨澶�**锛�
+
+| 椤甸潰 | 鏂囦欢 | 鐘舵�� |
+|------|------|------|
+| 棣栭〉 | `app/pages/index.vue` | 鉁� 宸蹭慨澶� |
+| 浠诲姟鍒楄〃 | `app/pages/task/index.vue` | 鉁� 宸蹭慨澶� |
+| 浠诲姟璇︽儏 | `app/pages/task/detail.vue` | 鉁� 宸蹭慨澶� |
+| 娑堟伅涓績 | `app/pages/message/index.vue` | 鉁� 鏈淇 |
+
+## 鏈�浣冲疄璺�
+
+### 鉁� 鎺ㄨ崘鍋氭硶
+
+1. **缁熶竴浣跨敤宸ュ叿鍑芥暟**
+```javascript
+import { formatDateTime } from '@/utils/common'
+const formattedDate = formatDateTime(dateTime, 'MM-DD HH:mm')
+```
+
+2. **鏃ユ湡姣旇緝鍓嶅厛杞崲**
+```javascript
+const date = new Date(dateTime.replace(/-/g, '/'))
+```
+
+3. **娣诲姞绌哄�兼鏌�**
+```javascript
+if (!dateTime) return ''
+```
+
+### 鉂� 閬垮厤鍋氭硶
+
+1. **鐩存帴浣跨敤 new Date()**
+```javascript
+// 鉂� 涓嶅吋瀹筰OS
+new Date("2025-10-25 18:37:18")
+```
+
+2. **娌℃湁绌哄�兼鏌�**
+```javascript
+// 鉂� 鍙兘鎶ラ敊
+new Date(dateTime)
+```
+
+3. **鐩存帴鏄剧ず鍘熷鏁版嵁**
+```vue
+<!-- 鉂� 鏍煎紡涓嶅弸濂� -->
+{{ message.createTime }}
+```
+
+## 鐩稿叧鏂囨。
+
+- [iOS鏃ユ湡鏍煎紡鍏煎鎬т紭鍖栬鏄嶿(./iOS鏃ユ湡鏍煎紡鍏煎鎬т紭鍖栬鏄�.md)
+- [formatDateTime宸ュ叿鍑芥暟鏂囨。](../app/utils/common.js)
+- [娑堟伅涓績鍔熻兘璇存槑](./娑堟伅涓績鍔熻兘璇存槑.md)
+
+## 鐩稿叧鏂囦欢
+
+- **淇鏂囦欢**: `app/pages/message/index.vue`
+- **宸ュ叿鍑芥暟**: `app/utils/common.js`
+- **API鏂囦欢**: `app/api/message.js`
+
+---
+
+**淇鏃堕棿**: 2025-10-26
+**淇浜�**: AI Assistant
+**闂绫诲瀷**: iOS鏃ユ湡鏍煎紡鍏煎鎬�
+**鐘舵��**: 鉁� 宸蹭慨澶�
diff --git a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
index 8b904e6..e44b722 100644
--- a/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/VehicleInfoMapper.xml
@@ -39,9 +39,6 @@
<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>
-<<<<<<< HEAD
- <if test="deptId != null"> and v.dept_id = #{deptId}</if>
-=======
<!-- 閮ㄩ棬杩囨护锛氳嚜鍔ㄦ煡鎵句紶鍏ラ儴闂ㄦ墍灞炵殑鍒嗗叕鍙革紙parent_id=100锛� -->
<if test="deptId != null">
and v.dept_id = (
@@ -65,7 +62,7 @@
and v.car_id is not null and v.car_id != ''
and v.dept_id is not null
and v.status=0
->>>>>>> feature-task
+
</where>
</select>
@@ -77,14 +74,11 @@
<select id="selectVehicleInfoByPlateNumber" parameterType="String" resultMap="VehicleInfoResult">
<include refid="selectVehicleInfoVo"/>
where v.vehicle_no = #{plateNumber}
-<<<<<<< HEAD
</select>
<select id="selectVehicleInfoByVehicleNo" parameterType="String" resultMap="VehicleInfoResult">
<include refid="selectVehicleInfoVo"/>
where v.vehicle_no = #{vehicleNo}
-=======
->>>>>>> feature-task
</select>
<insert id="insertVehicleInfo" parameterType="VehicleInfo" useGeneratedKeys="true" keyProperty="vehicleId">
--
Gitblit v1.9.1