From 97db9d11ff425583d2dece82a842a7766bb5e7e4 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 26 九月 2025 21:43:39 +0800
Subject: [PATCH] feat: 添加map
---
app/pages/index.vue | 605 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 580 insertions(+), 25 deletions(-)
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 4646807..5539ffa 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -1,43 +1,598 @@
<template>
- <view class="content">
- <image class="logo" src="@/static/logo.png"></image>
- <view class="text-area">
- <text class="title">Hello RuoYi</text>
+ <view class="home-container">
+ <!-- 椤堕儴鐢ㄦ埛淇℃伅鍖哄煙 -->
+ <view class="user-info-section">
+ <view class="user-info-content">
+ <view class="user-details">
+ <view class="user-name">{{ userName || '鏈櫥褰�' }}</view>
+ <view class="vehicle-info">
+ <text v-if="boundVehicle">鍏宠仈杞︾墝鍙凤細{{ boundVehicle }}</text>
+ <text v-else>鏈粦瀹氳溅鐗屽彿</text>
+ </view>
+ </view>
+ <button
+ class="bind-vehicle-btn"
+ @click="goToBindVehicle"
+ >
+ {{ boundVehicle ? '鏇存崲杞﹁締' : '缁戝畾杞﹁締' }}
+ </button>
+ </view>
</view>
+
+ <!-- 娑堟伅鍏ュ彛 -->
+ <view class="message-entry" @click="goToMessages">
+ <view class="message-icon">
+ <uni-icons type="chat" size="24" color="#007AFF"></uni-icons>
+ </view>
+ <view class="message-text">娑堟伅涓績</view>
+ <view class="unread-dot" v-if="unreadMessageCount > 0">{{ unreadMessageCount }}</view>
+ <view class="arrow">
+ <uni-icons type="arrowright" size="16" color="#999"></uni-icons>
+ </view>
+ </view>
+
+ <!-- 姝e湪杩愯鐨勪换鍔℃爣棰� -->
+ <view class="running-tasks-header">
+ <text class="header-title">姝e湪杩愯鐨勪换鍔�</text>
+ </view>
+
+ <!-- 姝e湪杩愯鐨勪换鍔″垪琛� -->
+ <scroll-view class="running-tasks-section" scroll-y="true">
+ <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>
+ <view class="info-row">
+ <view class="info-item">
+ <view class="label">鍑哄彂鍦�:</view>
+ <view class="value">{{ task.startLocation }}</view>
+ </view>
+ <view class="info-item">
+ <view class="label">鐩殑鍦�:</view>
+ <view class="value">{{ task.endLocation }}</view>
+ </view>
+ </view>
+ <view class="info-row">
+ <view class="info-item">
+ <view class="label">鍑哄彂鏃堕棿:</view>
+ <view class="value">{{ task.startTime }}</view>
+ </view>
+ <view class="info-item">
+ <view class="label">鎵ц浜哄憳:</view>
+ <view class="value">{{ task.assignee }}</view>
+ </view>
+ </view>
+ </view>
+ </view>
+
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <view class="task-actions">
+ <button
+ class="action-btn"
+ :class="{ disabled: isActionDisabled(task, 'depart') }"
+ @click="handleTaskAction(task, 'depart')"
+ v-if="task.status !== 'completed'"
+ >
+ 鍑哄彂
+ </button>
+ <button
+ class="action-btn"
+ :class="{ disabled: isActionDisabled(task, 'arrive') }"
+ @click="handleTaskAction(task, 'arrive')"
+ v-if="task.status !== 'completed'"
+ >
+ 宸插埌杈�
+ </button>
+ <button
+ class="action-btn"
+ :class="{ disabled: isActionDisabled(task, 'return') }"
+ @click="handleTaskAction(task, 'return')"
+ v-if="task.status !== 'completed'"
+ >
+ 杩旂▼
+ </button>
+ <button
+ class="action-btn"
+ :class="{ disabled: isActionDisabled(task, 'settle') }"
+ @click="handleTaskAction(task, 'settle')"
+ v-if="task.status !== 'completed'"
+ >
+ 缁撶畻
+ </button>
+ <button
+ class="action-btn primary"
+ :class="{ disabled: isActionDisabled(task, 'complete') }"
+ @click="handleTaskAction(task, 'complete')"
+ v-if="task.status !== 'completed'"
+ >
+ 宸插畬鎴�
+ </button>
+ </view>
+ </view>
+
+ <view class="no-data" v-if="runningTasks.length === 0">
+ <uni-icons type="info" size="40" color="#ccc"></uni-icons>
+ <text>鏆傛棤姝e湪杩愯鐨勪换鍔�</text>
+ </view>
+ </view>
+ </scroll-view>
</view>
</template>
<script>
+ import { mapState } from 'vuex'
+
export default {
- onLoad: function() {
+ data() {
+ return {
+ // 妯℃嫙鐢ㄦ埛缁戝畾鐨勮溅杈嗕俊鎭�
+ boundVehicle: '绮12345', // 妯℃嫙宸茬粦瀹氳溅杈�
+
+ // 妯℃嫙娑堟伅鏁版嵁
+ 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
+ }
+ ],
+
+ // 妯℃嫙姝e湪杩愯鐨勪换鍔″垪琛�
+ taskList: [
+ {
+ id: 1,
+ title: '绱ф�ョ淮淇换鍔�',
+ type: 'maintenance', // 缁翠慨淇濆吇
+ startLocation: '骞垮窞甯傚ぉ娌冲尯XX璺�123鍙�',
+ endLocation: '骞垮窞甯傜櫧浜戝尯YY璺�456鍙�',
+ startTime: '2023-05-15 15:00',
+ assignee: '寮犱笁',
+ status: 'pending',
+ vehicle: '绮12345',
+ taskNo: 'RW20230515001'
+ },
+ {
+ id: 2,
+ title: '瀹氭湡淇濆吇浠诲姟',
+ type: 'maintenance', // 缁翠慨淇濆吇
+ startLocation: '娣卞湷甯傚崡灞卞尯XX璺�789鍙�',
+ endLocation: '娣卞湷甯傜鐢板尯YY璺�999鍙�',
+ startTime: '2023-05-14 10:00',
+ assignee: '鏉庡洓',
+ status: 'processing',
+ vehicle: '绮67890',
+ taskNo: 'RW20230514002'
+ },
+ {
+ id: 5,
+ title: '鎬ユ晳杞繍浠诲姟',
+ type: 'emergency', // 鎬ユ晳杞繍
+ startLocation: '骞垮窞甯傝秺绉�鍖哄尰闄㈣矾1鍙�',
+ endLocation: '骞垮窞甯傛捣鐝犲尯鍖婚櫌璺�2鍙�',
+ startTime: '2023-05-16 14:00',
+ assignee: '寮犲尰鐢�,鏉庢姢澹�',
+ status: 'pending',
+ vehicle: '绮33333',
+ taskNo: 'RW20230516005'
+ },
+ {
+ id: 6,
+ title: '绂忕杞︿换鍔�',
+ type: 'welfare', // 绂忕杞�
+ startLocation: '骞垮窞甯傝崝婀惧尯绀惧尯璺�10鍙�',
+ endLocation: '骞垮窞甯傚ぉ娌冲尯鍏昏�侀櫌璺�20鍙�',
+ startTime: '2023-05-17 08:00',
+ assignee: '鐜嬪徃鏈�',
+ status: 'processing',
+ vehicle: '绮44444',
+ taskNo: 'RW20230517006'
+ }
+ ]
+ }
+ },
+ computed: {
+ ...mapState({
+ userName: state => state.user.name
+ }),
+
+ // 姝e湪杩愯鐨勪换鍔★紙寰呭鐞嗗拰澶勭悊涓殑浠诲姟锛�
+ runningTasks() {
+ return this.taskList.filter(task =>
+ task.status === 'pending' || task.status === 'processing'
+ );
+ },
+
+ // 鏈娑堟伅鏁伴噺
+ unreadMessageCount() {
+ return this.messages.filter(message => !message.read).length;
+ }
+ },
+ methods: {
+ // 璺宠浆鍒扮粦瀹氳溅杈嗛〉闈�
+ goToBindVehicle() {
+ // 璺宠浆鍒扮粦瀹氳溅杈嗙殑椤甸潰
+ this.$tab.navigateTo('/pages/bind-vehicle');
+ },
+
+ // 璺宠浆鍒版秷鎭〉闈�
+ goToMessages() {
+ this.$tab.switchTab('/pages/message/index');
+ },
+
+ // 鏌ョ湅浠诲姟璇︽儏
+ viewTaskDetail(task) {
+ // 璺宠浆鍒颁换鍔¤鎯呴〉闈�
+ this.$tab.navigateTo(`/pages/task/detail?id=${task.id}`);
+ },
+
+ // 鍒ゆ柇鎿嶄綔鎸夐挳鏄惁绂佺敤
+ isActionDisabled(task, action) {
+ // 鏍规嵁浠诲姟鐘舵�佸拰鎿嶄綔绫诲瀷鍒ゆ柇鏄惁绂佺敤
+ switch (action) {
+ case 'depart':
+ return task.status !== 'pending';
+ case 'arrive':
+ return task.status !== 'processing';
+ case 'return':
+ return task.status !== 'processing';
+ case 'settle':
+ return task.status !== 'processing';
+ case 'complete':
+ return task.status !== 'processing';
+ default:
+ return false;
+ }
+ },
+
+ // 澶勭悊浠诲姟鎿嶄綔
+ handleTaskAction(task, action) {
+ if (this.isActionDisabled(task, action)) {
+ return;
+ }
+
+ switch (action) {
+ case 'depart':
+ // 鍑哄彂鎿嶄綔锛屾牴鎹换鍔$被鍨嬫樉绀轰笉鍚岀殑纭淇℃伅
+ let departMessage = '纭畾瑕佹爣璁颁负宸插嚭鍙戝悧锛�';
+ if (task.type !== 'maintenance' && task.type !== 'refuel' && task.type !== 'inspection') {
+ departMessage = '鍙戝嚭鍘荤洰鐨勫湴,纭锛�';
+ }
+ this.$modal.confirm(departMessage).then(() => {
+ task.status = 'processing';
+ this.$modal.showToast('宸插嚭鍙�');
+ // 杩欓噷鍙互璋冪敤API鏇存柊浠诲姟鐘舵��
+ }).catch(() => {});
+ break;
+ case 'arrive':
+ // 宸插埌杈炬搷浣�
+ this.$modal.confirm('宸茬粡鍒拌揪鐩殑鍦帮紝纭锛�').then(() => {
+ this.$modal.showToast('宸插埌杈�');
+ // 杩欓噷鍙互璋冪敤API鏇存柊浠诲姟鐘舵��
+ }).catch(() => {});
+ break;
+ case 'return':
+ // 杩旂▼鎿嶄綔
+ this.$modal.confirm('鐜板湪宸茬粡杩旂▼涓紝纭锛�').then(() => {
+ this.$modal.showToast('杩旂▼涓�');
+ // 杩欓噷鍙互璋冪敤API鏇存柊浠诲姟鐘舵��
+ }).catch(() => {});
+ break;
+ case 'settle':
+ // 缁撶畻鎿嶄綔锛岃烦杞埌缁撶畻椤甸潰
+ this.$tab.navigateTo(`/pages/task/settlement?id=${task.id}`);
+ break;
+ case 'complete':
+ // 宸插畬鎴愭搷浣�
+ this.$modal.confirm('浠诲姟鏄惁宸茬粡鍏ㄩ儴瀹屾垚锛岀‘璁わ紵').then(() => {
+ task.status = 'completed';
+ this.$modal.showToast('浠诲姟宸插畬鎴�');
+ // 杩欓噷鍙互璋冪敤API鏇存柊浠诲姟鐘舵��
+ }).catch(() => {});
+ break;
+ }
+ },
+
+ getStatusText(status) {
+ const statusMap = {
+ 'pending': '寰呭鐞�',
+ 'processing': '澶勭悊涓�',
+ 'completed': '宸插畬鎴�'
+ }
+ return statusMap[status] || '鏈煡'
+ },
+
+ getTaskTypeText(type) {
+ const typeMap = {
+ 'maintenance': '缁翠慨淇濆吇',
+ 'refuel': '鍔犳补',
+ 'inspection': '宸℃',
+ 'emergency': '鎬ユ晳杞繍',
+ 'welfare': '绂忕杞�'
+ }
+ return typeMap[type] || '鏈煡绫诲瀷'
+ }
}
}
</script>
-<style>
- .content {
+<style lang="scss">
+ .home-container {
+ padding: 20rpx;
+ background-color: #f5f5f5;
+ height: 100vh;
display: flex;
flex-direction: column;
- align-items: center;
- justify-content: center;
+ // 闅愯棌婊氬姩鏉′絾淇濇寔婊氬姩鍔熻兘
+ ::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ background: transparent;
+ }
+
+ // Firefox婊氬姩鏉¢殣钘�
+ * {
+ scrollbar-width: none; /* Firefox */
+ }
+
+ // IE/Edge婊氬姩鏉¢殣钘�
+ * {
+ -ms-overflow-style: none; /* IE 10+ */
+ }
}
-
- .logo {
- height: 200rpx;
- width: 200rpx;
- margin-top: 200rpx;
- margin-left: auto;
- margin-right: auto;
- margin-bottom: 50rpx;
+
+ // 鐢ㄦ埛淇℃伅鍖哄煙
+ .user-info-section {
+ background-color: white;
+ border-radius: 15rpx;
+ padding: 30rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+ flex-shrink: 0; // 闃叉鏀剁缉
+
+ .user-info-content {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ .user-details {
+ .user-name {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ color: #333;
+ }
+
+ .vehicle-info {
+ font-size: 28rpx;
+ color: #666;
+ }
+ }
+
+ .bind-vehicle-btn {
+ background-color: #007AFF;
+ color: white;
+ border-radius: 10rpx;
+ padding: 15rpx 30rpx;
+ font-size: 28rpx;
+ }
+ }
}
-
- .text-area {
+
+ // 娑堟伅鍏ュ彛
+ .message-entry {
display: flex;
- justify-content: center;
+ align-items: center;
+ background-color: white;
+ border-radius: 15rpx;
+ padding: 30rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+ position: relative;
+
+ .message-icon {
+ margin-right: 20rpx;
+ }
+
+ .message-text {
+ flex: 1;
+ font-size: 32rpx;
+ color: #333;
+ }
+
+ .unread-dot {
+ position: absolute;
+ top: 15rpx;
+ right: 60rpx;
+ background-color: #ff4d4f;
+ color: white;
+ border-radius: 50%;
+ width: 32rpx;
+ height: 32rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 20rpx;
+ }
+
+ .arrow {
+ margin-left: 20rpx;
+ }
}
-
- .title {
- font-size: 36rpx;
- color: #8f8f94;
+
+ // 姝e湪杩愯鐨勪换鍔℃爣棰�
+ .running-tasks-header {
+ margin-bottom: 20rpx;
+ flex-shrink: 0; // 闃叉鏀剁缉
+
+ .header-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+ }
}
-</style>
+
+ // 姝e湪杩愯鐨勪换鍔″垪琛�
+ .running-tasks-section {
+ flex: 1;
+ background-color: white;
+ border-radius: 15rpx;
+ padding: 30rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+ // 闅愯棌婊氬姩鏉′絾淇濇寔婊氬姩鍔熻兘
+ ::-webkit-scrollbar {
+ display: none;
+ width: 0 !important;
+ height: 0 !important;
+ background: transparent;
+ }
+
+ // Firefox婊氬姩鏉¢殣钘�
+ * {
+ scrollbar-width: none; /* Firefox */
+ }
+
+ // IE/Edge婊氬姩鏉¢殣钘�
+ * {
+ -ms-overflow-style: none; /* IE 10+ */
+ }
+
+ .task-list {
+ .task-item {
+ background-color: #fafafa;
+ border-radius: 15rpx;
+ margin-bottom: 30rpx;
+ overflow: hidden;
+
+ .task-main {
+ padding: 30rpx;
+ border-bottom: 1rpx solid #f0f0f0;
+
+ .task-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ }
+
+ .task-info {
+ .info-row {
+ display: flex;
+ margin-bottom: 15rpx;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .info-item {
+ flex: 1;
+ display: flex;
+
+ .label {
+ font-size: 26rpx;
+ color: #666;
+ margin-right: 10rpx;
+ white-space: nowrap;
+ }
+
+ .value {
+ font-size: 26rpx;
+ flex: 1;
+ word-break: break-all;
+ }
+ }
+ }
+ }
+ }
+
+ .task-actions {
+ display: flex;
+ padding: 20rpx;
+
+ .action-btn {
+ flex: 1;
+ height: 70rpx;
+ border-radius: 10rpx;
+ font-size: 26rpx;
+ margin: 0 5rpx;
+ background-color: #f0f0f0;
+ color: #333;
+
+ &.primary {
+ background-color: #007AFF;
+ color: white;
+ }
+
+ &.disabled {
+ opacity: 0.5;
+ }
+
+ &:first-child {
+ margin-left: 0;
+ }
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+
+ .no-data {
+ text-align: center;
+ padding: 100rpx 0;
+ color: #999;
+
+ text {
+ display: block;
+ margin-top: 20rpx;
+ }
+ }
+ }
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.1