From f6c2fdcac811de16eeb3ddb78134bac90a699dad Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 28 Mar 2025 15:06:00 +0800
Subject: [PATCH] feat: 用户操作
---
src/layout/Header.vue | 89 +++++++++++++++++++++++++----
src/assets/images/home/homeRight/operate1.png | 0
src/assets/images/home/homeRight/operate3.png | 0
src/views/Home/components/HomeRight/UserOperate.vue | 25 ++++++++
src/assets/images/home/homeRight/operate2.png | 0
src/views/Home/components/HomeRight/HomeRight.vue | 2
src/views/Home/SearchBox.vue | 22 +++++--
7 files changed, 119 insertions(+), 19 deletions(-)
diff --git a/src/assets/images/home/homeRight/operate1.png b/src/assets/images/home/homeRight/operate1.png
new file mode 100644
index 0000000..61bafef
--- /dev/null
+++ b/src/assets/images/home/homeRight/operate1.png
Binary files differ
diff --git a/src/assets/images/home/homeRight/operate2.png b/src/assets/images/home/homeRight/operate2.png
new file mode 100644
index 0000000..654de74
--- /dev/null
+++ b/src/assets/images/home/homeRight/operate2.png
Binary files differ
diff --git a/src/assets/images/home/homeRight/operate3.png b/src/assets/images/home/homeRight/operate3.png
new file mode 100644
index 0000000..27a3722
--- /dev/null
+++ b/src/assets/images/home/homeRight/operate3.png
Binary files differ
diff --git a/src/layout/Header.vue b/src/layout/Header.vue
index 7a49c54..6583f15 100644
--- a/src/layout/Header.vue
+++ b/src/layout/Header.vue
@@ -1,23 +1,82 @@
<template>
<div class="header">
<div class="h-left">
- <div class="left-item active" @click="router.push('/')">首页</div>
- <div class="left-item">集群调度</div>
- <div class="left-item" @click="router.push('/taskManage')">任务管理</div>
- <div class="left-item">航线规划</div>
+ <div
+ v-for="(item, index) in leftList"
+ :key="index"
+ class="left-item"
+ :class="{ active: item.active }"
+ @click="handleClick(item)"
+ >
+ {{ item.name }}
+ </div>
</div>
<div class="big-title">江西省指挥调度平台</div>
<div class="h-right">
- <div class="right-item">AI识别分析</div>
- <div class="right-item">综合分析</div>
- <div class="right-item">数据中心</div>
- <div class="right-item">系统运维</div>
+ <div
+ v-for="(item, index) in rightList"
+ :key="index"
+ class="right-item"
+ :class="{ active: item.active }"
+ @click="handleClick(item)"
+ >
+ {{ item.name }}
+ </div>
</div>
</div>
</template>
<script setup>
-const router = useRouter()
+import { ref, onMounted } from 'vue';
+import { useRouter, useRoute } from 'vue-router';
+import { Message } from '@element-plus/icons-vue';
+import { ElMessage } from 'element-plus';
+
+const router = useRouter();
+const route = useRoute();
+
+const leftList = ref([
+ { name: '首页', active: true, path: '/index' },
+ { name: '集群调度', active: false, path: '/clusterScheduling' },
+ { name: '任务管理', active: false, path: '/taskManage' },
+ { name: '航线规划', active: false, path: '/routePlanning' },
+]);
+
+const rightList = ref([
+ { name: 'AI识别分析', active: false, path: '/aiAnalysis' },
+ { name: '综合分析', active: false, path: '/comprehensiveAnalysis' },
+ { name: '数据中心', active: false, path: '/dataCenter' },
+ { name: '系统运维', active: false, path: '/systemMaintenance' },
+]);
+
+const handleClick = ({ path, name }) => {
+ if (!['首页', '任务管理'].includes(name)) return ElMessage.warning('正在开发中');
+ // 更新 leftList 的 active 状态
+ leftList.value.forEach(item => {
+ item.active = item.router === path;
+ });
+
+ // 更新 rightList 的 active 状态
+ rightList.value.forEach(item => {
+ item.active = item.router === path;
+ });
+ console.log(path);
+ // 跳转到指定页面
+ router.push(path);
+};
+
+onMounted(() => {
+ // 初始化 leftList 的 active 状态
+ const currentPath = route.path;
+ leftList.value.forEach(item => {
+ item.active = item.router === currentPath;
+ });
+
+ // 初始化 rightList 的 active 状态
+ rightList.value.forEach(item => {
+ item.active = item.router === currentPath;
+ });
+});
</script>
<style scoped lang="scss">
@@ -40,7 +99,7 @@
background: url(@/assets/images/header-left.png) no-repeat;
background-size: 100% 100%;
margin-right: 3px;
- font-family: YouSheBiaoTiHei, YouSheBiaoTiHei,serif;
+ font-family: YouSheBiaoTiHei, YouSheBiaoTiHei, serif;
font-weight: 400;
font-size: 18px;
color: #ffffff;
@@ -48,6 +107,7 @@
text-align: center;
font-style: normal;
text-transform: none;
+ cursor: pointer;
}
.active {
@@ -55,6 +115,7 @@
background-size: 100% 100%;
}
}
+
.big-title {
position: relative;
top: -12px;
@@ -63,14 +124,16 @@
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 45px;
- color: #FFFFFF;
+ color: #ffffff;
line-height: 53px;
letter-spacing: 11px;
- text-shadow: 0px 4px 1px rgba(19,80,143,0.66), 0px 0px 18px rgba(130,165,255,0.4), inset 0px 0px 2px rgba(255,255,255,0.8);
+ text-shadow: 0px 4px 1px rgba(19, 80, 143, 0.66), 0px 0px 18px rgba(130, 165, 255, 0.4),
+ inset 0px 0px 2px rgba(255, 255, 255, 0.8);
text-align: center;
font-style: normal;
text-transform: none;
}
+
.h-right {
display: flex;
justify-content: space-between;
@@ -82,7 +145,7 @@
background: url(@/assets/images/header-right.png) no-repeat;
background-size: 100% 100%;
margin-right: 3px;
- font-family: YouSheBiaoTiHei, YouSheBiaoTiHei,serif;
+ font-family: YouSheBiaoTiHei, YouSheBiaoTiHei, serif;
font-weight: 400;
font-size: 18px;
color: #ffffff;
diff --git a/src/views/Home/SearchBox.vue b/src/views/Home/SearchBox.vue
index a5f371d..591231a 100644
--- a/src/views/Home/SearchBox.vue
+++ b/src/views/Home/SearchBox.vue
@@ -1,10 +1,8 @@
<script setup>
-import { ArrowDown, Search } from '@element-plus/icons-vue';
-
const input3 = ref('');
-const select = ref('');
const value = ref('Option1');
+const value2 = ref('Optio44n1');
const options = [
{
@@ -14,6 +12,17 @@
{
value: 'Optio44n1',
label: '事件',
+ },
+];
+
+const options1 = [
+ {
+ value: 'Option1',
+ label: '南昌市',
+ },
+ {
+ value: 'Optio44n1',
+ label: '抚州市',
},
];
</script>
@@ -33,9 +42,9 @@
</div>
<div class="searchBtn"></div>
<div class="region">
- <el-select v-model="value" placeholder="请选择查询">
+ <el-select v-model="value2" placeholder="请选择查询">
<el-option
- v-for="item in options"
+ v-for="item in options1"
:key="item.value"
:label="item.label"
:value="item.value"
@@ -93,6 +102,7 @@
box-shadow: none;
height: 100%;
}
+
.el-input__inner {
font-family: Source Han Sans CN, Source Han Sans CN, serif;
font-weight: 400;
@@ -119,7 +129,7 @@
:deep() {
.el-select__wrapper {
width: 100px;
- padding-left: 30px;
+ padding-left: 20px;
}
}
}
diff --git a/src/views/Home/components/HomeRight/HomeRight.vue b/src/views/Home/components/HomeRight/HomeRight.vue
index 06ac641..180e997 100644
--- a/src/views/Home/components/HomeRight/HomeRight.vue
+++ b/src/views/Home/components/HomeRight/HomeRight.vue
@@ -1,5 +1,6 @@
<template>
<div class="home-right">
+ <UserOperate/>
<Synergy />
<TaskAchievements />
<EventOverview />
@@ -10,6 +11,7 @@
import Synergy from '@/views/Home/components/HomeRight/Synergy.vue';
import TaskAchievements from '@/views/Home/components/HomeRight/TaskAchievements.vue';
import EventOverview from '@/views/Home/components/HomeRight/EventOverview.vue';
+import UserOperate from '@/views/Home/components/HomeRight/UserOperate.vue';
</script>
<style scoped lang="scss">
diff --git a/src/views/Home/components/HomeRight/UserOperate.vue b/src/views/Home/components/HomeRight/UserOperate.vue
new file mode 100644
index 0000000..6e11799
--- /dev/null
+++ b/src/views/Home/components/HomeRight/UserOperate.vue
@@ -0,0 +1,25 @@
+<script setup></script>
+
+<template>
+ <div class="userOperate">
+ <img alt="" src="@/assets/images/home/homeRight/operate1.png" />
+ <img alt="" src="@/assets/images/home/homeRight/operate2.png" />
+ <img alt="" src="@/assets/images/home/homeRight/operate3.png" />
+ </div>
+</template>
+
+<style scoped lang="scss">
+.userOperate {
+ position: absolute;
+ right: 27px;
+ top: -30px;
+ width: 132px;
+ height: 38px;
+ display: flex;
+ justify-content: space-between;
+
+ > img {
+ cursor: pointer;
+ }
+}
+</style>
--
Gitblit v1.9.3