This commit is contained in:
2026-04-27 17:21:11 +08:00
parent c06b7b10f3
commit 8e4313bdfd
5 changed files with 84 additions and 133 deletions

View File

@ -1,34 +0,0 @@
<template>
<div>
<div class="ltemBox" v-for="(item, index) in list" :key="index + 'list'">
<slot :item="item"></slot>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, watch, defineProps } from "vue";
const props = defineProps({
labelData: {
type: Array,
default: [],
},
});
const list = ref([]);
watch(
() => props.labelData,
() => {
list.value = props.labelData;
},
{ deep: true }
);
onMounted(() => {
list.value = props.labelData;
});
</script>
<style lang="scss" scoped>
.ltemBox{
margin-bottom: 1vw;
}
</style>

View File

@ -193,8 +193,6 @@ onMounted(() => {
display: flex;
justify-content: space-between;
align-items: center;
background: rgba(183, 288, 231, 0.1);
.btn {
flex: 1;
text-align: center;

View File

@ -4,7 +4,7 @@
<span class="fh" @click="onCLickFh" v-if="showLeft">
<van-icon name="arrow-left" color="#fff" size="18px" />
</span>
<span>{{ navTitle }}</span>
<span>{{ title }}</span>
<van-icon :name="rightIcon" color="#fff" size="25px" @click.stop="onClickRight" v-if="showRight" />
<span class="rightTitle" @click="onClickRight" v-if="rightTitle">{{
rightTitle
@ -17,7 +17,7 @@
import { ref, onMounted, defineEmits } from "vue";
import router from "../router";
const props = defineProps({
navTitle: String, //标题
title: String, //标题
showRight: Boolean, //是否显示右侧菜单图标
rightTitle: String, //右侧内容
showLeft: {
@ -34,36 +34,15 @@ const themeVars = {
paddingMd: "11px",
};
const showThemeSetting = ref(false); //下拉菜单
const defaultThemeQp = ref("light"); //默认的右侧气泡框主题
const isbody = ref("body");
const emit = defineEmits(["clickRight"]);
//是否显示右侧下拉菜单
const actions = [
{
text: "退出",
},
];
onMounted(() => {
isbody.value = ".headBlue";
defaultThemeQp.value = getStorage("themeSetting")
? getStorage("themeSetting")
: "dark";
});
//回退
function onCLickFh() {
router.back();
}
// 清除所有cookie
function clearnAllCookie() {
var keys = document.cookie.match(/[^=;]+(?=\=)/g)
if (keys) {
for (let i = keys.length; i--;) {
document.cookie = keys[i] + '0;expires=' + new Date(0).toUTCString()
}
}
}
//点击右侧按钮
function onClickRight() {
if (props.rightIcon == "weapp-nav" && !props.rightTitle) showThemeSetting.value = true;

View File

@ -1,95 +1,98 @@
<template>
<div class="profile-page">
<!-- 顶部用户信息区域 -->
<div class="header-section">
<div class="user-info">
<div class="avatar">
<span>{{ userInfo.nickName?userInfo.nickName?.charAt(0):"" }}</span>
</div>
<div class="info-content">
<h2 class="user-name">{{ userInfo.nickName || '未登录' }}</h2>
<p class="dept-name">{{ userInfo.departName || '' }}</p>
<div class="user-tags">
<span class="tag">民警</span>
<span class="work-id">工号: {{ userInfo.workNo || '-' }}</span>
<div class="profile-contant">
<!-- 顶部用户信息区域 -->
<div class="header-section">
<div class="user-info">
<div class="avatar">
<span>{{ userInfo.nickName?userInfo.nickName?.charAt(0):"" }}</span>
</div>
<div class="info-content">
<h2 class="user-name">{{ userInfo.nickName || '未登录' }}</h2>
<p class="dept-name">{{ userInfo.departName || '' }}</p>
<div class="user-tags">
<span class="tag">民警</span>
<span class="work-id">工号: {{ userInfo.workNo || '-' }}</span>
</div>
</div>
</div>
</div>
</div>
<!-- 今日统计卡片 -->
<div class="stats-card">
<h3 class="stats-title">今日统计</h3>
<div class="stats-grid">
<div class="stat-item">
<div class="stat-value violation">{{ stats.violationCount }}</div>
<div class="stat-label">违规任务</div>
</div>
<div class="stat-item">
<div class="stat-value traffic">{{ stats.trafficCount }}</div>
<div class="stat-label">路况任务</div>
</div>
<div class="stat-item">
<div class="stat-value completed">{{ stats.completedCount }}</div>
<div class="stat-label">已处理</div>
</div>
<div class="stat-item">
<div class="stat-value rate">{{ stats.completionRate }}</div>
<div class="stat-label">处理率</div>
<!-- 今日统计卡片 -->
<div class="stats-card">
<h3 class="stats-title">今日统计</h3>
<div class="stats-grid">
<div class="stat-item">
<div class="stat-value violation">{{ stats.violationCount }}</div>
<div class="stat-label">违规任务</div>
</div>
<div class="stat-item">
<div class="stat-value traffic">{{ stats.trafficCount }}</div>
<div class="stat-label">路况任务</div>
</div>
<div class="stat-item">
<div class="stat-value completed">{{ stats.completedCount }}</div>
<div class="stat-label">已处理</div>
</div>
<div class="stat-item">
<div class="stat-value rate">{{ stats.completionRate }}</div>
<div class="stat-label">处理率</div>
</div>
</div>
</div>
</div>
<!-- 功能菜单列表 -->
<div class="menu-list">
<!-- 预警语音提醒 -->
<div class="menu-item">
<div class="menu-left">
<div class="menu-icon" style="background: #eff6ff">
<van-icon name="volume-o" color="#2563eb" />
<!-- 功能菜单列表 -->
<div class="menu-list">
<!-- 预警语音提醒 -->
<div class="menu-item">
<div class="menu-left">
<div class="menu-icon" style="background: #eff6ff">
<van-icon name="volume-o" color="#2563eb" />
</div>
<span class="menu-label">预警语音提醒</span>
</div>
<span class="menu-label">预警语音提醒</span>
<van-switch v-model="alarmVoiceEnabled" size="20" />
</div>
<van-switch v-model="alarmVoiceEnabled" size="20" />
</div>
<!-- 执法点位 -->
<div class="menu-item" @click="handleLocationClick">
<div class="menu-left">
<div class="menu-icon" style="background: #f3f4f6">
<van-icon name="location-o" color="#6b7280" />
<!-- 执法点位 -->
<div class="menu-item" @click="handleLocationClick">
<div class="menu-left">
<div class="menu-icon" style="background: #f3f4f6">
<van-icon name="location-o" color="#6b7280" />
</div>
<span class="menu-label">执法点位</span>
</div>
<div class="menu-right">
<span class="location-name">{{ dataForm.sitPosition }}</span>
<van-icon name="arrow" class="arrow-icon" />
</div>
<span class="menu-label">执法点位</span>
</div>
<div class="menu-right">
<span class="location-name">{{ dataForm.sitPosition }}</span>
<!-- 切换账号 -->
<div class="menu-item" @click="handleSwitchAccount">
<div class="menu-left">
<div class="menu-icon" style="background: #f3f4f6">
<van-icon name="setting-o" color="#6b7280" />
</div>
<span class="menu-label">切换账号</span>
</div>
<van-icon name="arrow" class="arrow-icon" />
</div>
</div>
<!-- 切换账号 -->
<div class="menu-item" @click="handleSwitchAccount">
<div class="menu-left">
<div class="menu-icon" style="background: #f3f4f6">
<van-icon name="setting-o" color="#6b7280" />
</div>
<span class="menu-label">切换账号</span>
</div>
<van-icon name="arrow" class="arrow-icon" />
<!-- 版本信息 -->
<div class="version-info">
<span>当前版本v1.0.0</span>
</div>
</div>
<!-- 版本信息 -->
<div class="version-info">
<span>当前版本v1.0.0</span>
</div>
<!-- 退出登录按钮 -->
<div class="logout-section">
<van-button block round class="logout-btn" @click="handleLogout">
<van-icon name="cross" class="logout-icon" />
退出登录
</van-button>
</div>
<!-- 退出登录按钮 -->
<div class="logout-section">
<van-button block round class="logout-btn" @click="handleLogout">
<van-icon name="cross" class="logout-icon" />
退出登录
</van-button>
</div>
<!-- 底部导航 -->
@ -197,11 +200,15 @@ onMounted(() => {
<style lang="scss" scoped>
.profile-page {
min-height: 100vh;
background: #f3f4f6;
padding-bottom: 70px;
display: flex;
flex-direction: column;
.profile-contant{
height: calc(100vh - 77px);
overflow: hidden;
overflow-y: auto;
}
}
.header-section {

View File

@ -112,6 +112,7 @@ const routes = [
name: "clockInPage",
component: () => import("../pages/clockInPage/index"),
},
];
const router = createRouter({
history: createWebHashHistory(),