From fefb649f462ae6b19dd8f0f6bc6096619db9a82e Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 25 十月 2025 18:38:54 +0800
Subject: [PATCH] feat:消息体推送
---
app/pages/index.vue | 273 +++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 188 insertions(+), 85 deletions(-)
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 82ed65a..14fc8f5 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -4,16 +4,27 @@
<view class="user-info-section">
<view class="user-info-content">
<view class="user-details">
- <view class="user-name">{{ userName || '鏈櫥褰�' }}</view>
- <view class="vehicle-info" @click="goToBindVehicle">
- <text v-if="boundVehicle">鍏宠仈杞︾墝鍙凤細{{ boundVehicle }}</text>
- <text v-else>鏈粦瀹氳溅鐗屽彿</text>
- <uni-icons
- :type="boundVehicle ? 'loop' : 'plus-filled'"
- size="18"
- :color="boundVehicle ? '#007AFF' : '#999'"
- style="margin-left: 8rpx;"
- ></uni-icons>
+ <view class="user-info-row">
+ <text class="user-name">{{ userName || '鏈櫥褰�' }}</text>
+ <text class="separator" v-if="currentUser.branchCompanyName">|</text>
+ <view class="branch-company" v-if="currentUser.branchCompanyName">
+ <uni-icons type="location" size="16" color="#666" style="margin-right: 4rpx;"></uni-icons>
+ <text>{{ currentUser.branchCompanyName }}</text>
+ </view>
+ <text class="separator" v-if="boundVehicle">|</text>
+ <view class="vehicle-info" @click.stop="goToBindVehicle" v-if="boundVehicle">
+ <text>{{ boundVehicle }}</text>
+ <uni-icons
+ type="loop"
+ size="16"
+ color="#007AFF"
+ style="margin-left: 4rpx;"
+ ></uni-icons>
+ </view>
+ </view>
+ <view class="bind-vehicle-btn" v-if="!boundVehicle" @click="goToBindVehicle">
+ <uni-icons type="plus-filled" size="16" color="#007AFF" style="margin-right: 4rpx;"></uni-icons>
+ <text>缁戝畾杞︾墝</text>
</view>
</view>
</view>
@@ -41,18 +52,21 @@
<view class="task-list">
<view class="task-item" v-for="task in runningTasks" :key="task.id">
<view class="task-main" @click="viewTaskDetail(task)">
- <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
- <view class="task-info">
- <view class="info-row">
- <view class="info-item">
- <view class="label">浠诲姟缂栧彿:</view>
- <view class="value">{{ task.taskNo }}</view>
- </view>
- <view class="info-item">
- <view class="label">浠诲姟鐘舵��:</view>
- <view class="value">{{ getStatusText(task.status) }}</view>
- </view>
+ <!-- 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵�佹爣绛� -->
+ <view class="task-header">
+ <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view>
+ <view class="task-status" :class="getStatusClass(task.taskStatus)">
+ {{ getStatusText(task.status) }}
</view>
+ </view>
+
+ <!-- 浠诲姟缂栧彿鍗曠嫭涓�琛� -->
+ <view class="task-code-row">
+ <text class="task-code">{{ task.taskNo }}</text>
+ </view>
+
+ <!-- 浠诲姟璇︾粏淇℃伅 -->
+ <view class="task-info">
<view class="info-row">
<view class="info-item">
<view class="label">鍑哄彂鍦�:</view>
@@ -148,6 +162,7 @@
import { getMyTasks, changeTaskStatus } from '@/api/task'
import { getUserProfile } from '@/api/system/user'
import { getUserBoundVehicle } from '@/api/vehicle'
+ import { getUnreadCount } from '@/api/message'
export default {
data() {
@@ -157,48 +172,8 @@
boundVehicleId: null,
// 娑堟伅鏁版嵁
- messages: [
- {
- id: 1,
- type: 'create', // 鍒涘缓鎴愬姛
- content: 'TD 1011 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 浠诲姟鍒涘缓鎴愬姛',
- time: '2023-05-15 13:20',
- read: false,
- taskId: 1
- },
- {
- id: 2,
- type: 'push', // 浠诲姟鎺ㄩ��
- content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20 鍑哄彂锛岃鍙婃椂澶勭悊',
- time: '2023-05-15 13:25',
- read: false,
- taskId: 2
- },
- {
- id: 3,
- type: 'status', // 浠诲姟鐘舵�佸彉鏇�
- content: 'TD1021 骞垮窞澶╂渤->骞垮窞涓滅珯锛屾椂闂达細13锛�20锛屼换鍔℃鍦ㄨ浆杩愪腑',
- time: '2023-05-15 14:30',
- read: true,
- taskId: 2
- },
- {
- id: 4,
- type: 'create', // 鍒涘缓鎴愬姛
- content: 'TD 1022 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細15锛�10 浠诲姟鍒涘缓鎴愬姛',
- time: '2023-05-15 15:10',
- read: false,
- taskId: 3
- },
- {
- id: 5,
- type: 'push', // 浠诲姟鎺ㄩ��
- content: 'TD1023 娣卞湷鍗楀北->娣卞湷绂忕敯锛屾椂闂达細16锛�00 鍑哄彂锛岃鍙婃椂澶勭悊',
- time: '2023-05-15 16:00',
- read: true,
- taskId: 4
- }
- ],
+ messages: [],
+ unreadMessageCount: 0,
// 姝e湪杩愯鐨勪换鍔″垪琛�
taskList: [],
@@ -207,7 +182,7 @@
},
computed: {
...mapState({
- userName: state => state.user.name,
+ userName: state => state.user.nickName,
currentUser: state => state.user
}),
@@ -217,11 +192,6 @@
// 鍖呭惈寰呭鐞嗐�佸嚭鍙戜腑銆佸凡鍒拌揪銆佽繑绋嬩腑绛夋墍鏈夋湭瀹屾垚鐨勭姸鎬�
return ['PENDING', 'DEPARTING', 'ARRIVED', 'RETURNING', 'IN_PROGRESS'].includes(task.taskStatus)
});
- },
-
- // 鏈娑堟伅鏁伴噺
- unreadMessageCount() {
- return this.messages.filter(message => !message.read).length;
}
},
onLoad() {
@@ -229,11 +199,14 @@
this.loadUserVehicle()
// 鍔犺浇姝e湪杩愯鐨勪换鍔�
this.loadRunningTasks()
+ // 鍔犺浇鏈娑堟伅鏁伴噺
+ this.loadUnreadMessageCount()
},
onShow() {
- // 姣忔鏄剧ず椤甸潰鏃跺埛鏂颁换鍔″垪琛ㄥ拰缁戝畾杞﹁締
+ // 姣忔鏄剧ず椤甸潰鏃跺埛鏂颁换鍔″垪琛ㄣ�佺粦瀹氳溅杈嗗拰娑堟伅鏁伴噺
this.loadUserVehicle()
this.loadRunningTasks()
+ this.loadUnreadMessageCount()
},
onPullDownRefresh() {
// 涓嬫媺鍒锋柊
@@ -267,6 +240,17 @@
console.error('鑾峰彇缁戝畾杞﹁締淇℃伅澶辫触:', error)
this.boundVehicle = ''
this.boundVehicleId = null
+ })
+ },
+
+ // 鍔犺浇鏈娑堟伅鏁伴噺
+ loadUnreadMessageCount() {
+ getUnreadCount().then(response => {
+ if (response.code === 200) {
+ this.unreadMessageCount = response.data || 0
+ }
+ }).catch(error => {
+ console.error('鑾峰彇鏈娑堟伅鏁伴噺澶辫触:', error)
})
},
@@ -505,6 +489,20 @@
})
},
+ // 鑾峰彇鐘舵�佹牱寮忕被
+ 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'
+ },
+
getStatusText(status) {
// 鏀寔鏂版棫涓ょ鐘舵�佹牸寮�
const statusMap = {
@@ -588,19 +586,44 @@
.user-details {
flex: 1;
- .user-name {
- font-size: 36rpx;
- font-weight: bold;
- margin-bottom: 10rpx;
- color: #333;
- }
-
- .vehicle-info {
- font-size: 28rpx;
- color: #666;
+ .user-info-row {
display: flex;
align-items: center;
- cursor: pointer;
+ flex-wrap: wrap;
+ margin-bottom: 12rpx;
+
+ .user-name {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ }
+
+ .separator {
+ margin: 0 12rpx;
+ color: #ddd;
+ font-size: 28rpx;
+ }
+
+ .branch-company {
+ font-size: 26rpx;
+ color: #666;
+ display: flex;
+ align-items: center;
+ }
+
+ .vehicle-info {
+ font-size: 26rpx;
+ color: #007AFF;
+ display: flex;
+ align-items: center;
+ }
+ }
+
+ .bind-vehicle-btn {
+ font-size: 26rpx;
+ color: #007AFF;
+ display: flex;
+ align-items: center;
&:active {
opacity: 0.7;
@@ -699,10 +722,90 @@
padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0;
- .task-title {
- font-size: 32rpx;
- font-weight: bold;
- margin-bottom: 20rpx;
+ // 浠诲姟澶撮儴锛氭爣棰樺拰鐘舵��
+ .task-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ margin-bottom: 15rpx;
+
+ .task-title {
+ flex: 1;
+ font-size: 32rpx;
+ font-weight: bold;
+ padding-right: 20rpx;
+ line-height: 1.4;
+ }
+
+ .task-status {
+ padding: 8rpx 20rpx;
+ border-radius: 30rpx;
+ font-size: 24rpx;
+ white-space: nowrap;
+ flex-shrink: 0;
+
+ // 寰呭鐞� - 姗欒壊
+ &.status-pending {
+ background-color: #fff3e0;
+ color: #ff9500;
+ }
+
+ // 鍑哄彂涓� - 钃濊壊
+ &.status-departing {
+ background-color: #e3f2fd;
+ color: #007AFF;
+ }
+
+ // 宸插埌杈� - 绱壊
+ &.status-arrived {
+ background-color: #f3e5f5;
+ color: #9c27b0;
+ }
+
+ // 杩旂▼涓� - 闈掕壊
+ &.status-returning {
+ background-color: #e0f2f1;
+ color: #009688;
+ }
+
+ // 宸插畬鎴� - 缁胯壊
+ &.status-completed {
+ background-color: #e8f5e9;
+ color: #34C759;
+ }
+
+ // 宸插彇娑� - 鐏拌壊
+ &.status-cancelled {
+ background-color: #f5f5f5;
+ color: #999;
+ }
+
+ // 澶勭悊涓� (鍏煎鏃ф暟鎹�) - 钃濊壊
+ &.status-in-progress {
+ background-color: #e3f2fd;
+ color: #007AFF;
+ }
+
+ // 榛樿鏍峰紡
+ &.status-default {
+ background-color: #f5f5f5;
+ color: #666;
+ }
+ }
+ }
+
+ // 浠诲姟缂栧彿鍗曠嫭涓�琛�
+ .task-code-row {
+ margin-bottom: 15rpx;
+ padding: 10rpx 0;
+ border-bottom: 1rpx dashed #e0e0e0;
+
+ .task-code {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: 500;
+ font-family: monospace;
+ }
}
.task-info {
--
Gitblit v1.9.1