vue3+ts(<script setup lang=“ts“>)刷新页面后保持下拉框选中效果

效果图:

 

代码: 

<template><div class="app-layout"><div class="app-box"><div class="header"><div class="header-left"></div><div class="title">室外智能健身房数据中心</div><div class="header-right"><p class="p2"><i class="iconfont icon-home_icon_position"></i>{{ curInfo.siteName }}<div class="dropdown-box"><imgsrc="~@/assets/images/icon/drop_down.png"@click="isOpen = !isOpen"alt=""/><div class="dropdown-cont"><transition name="fade"><div v-if="isOpen" class="dropdown"><div class="dropdown-item" :class="{activeMenu:index === menuIdx}"  v-for="(item,index) in menuList" :key="index" @click="changeMenu(index,item.path)">{{ item.name }}</div></div></transition></div></div></p></div></div><div class="main-container"><router-view></router-view></div></div></div>
</template><script setup lang="ts">
import { reactive, onUnmounted,onMounted, ref } from "vue";
import * as dayjs from "dayjs";
import { getUrlKey } from "@/utils";
import axios from "axios";
import { useRouter,useRoute  } from "vue-router";
const router = useRouter();
const route = useRoute();
const menuList = [{ name: '首页', path: '/chartApp/home' },{ name: '查看运动记录', path: '/chartApp/sportsList' },{ name: '用户管理', path: '/chartApp/userList' },
]
const menuIdx = ref(0);
let curInfo = reactive({deviceNo: "",time: "2023-00-00 00:00:00",// 天气weather: "",temperature: "",// 空气质量aqi: "",category: "",weekday: "",siteName: "中国航发北京航空材料研究院",cityName: "",
});
const isOpen = ref(false);//下拉框
let curTimer = null;
const getCurTime = () => {curTimer = setTimeout(() => {curInfo.time = dayjs().format("YYYY-MM-DD HH:mm:ss");getCurTime();}, 1000);
};const wKEY = "ef38ffd9e9804ae77f5f9342ca2c3975";
let weatherTimer = null;
const getWeather = (adcode: string) => {axios.get(`https://restapi.amap.com/v3/weather/weatherInfo?key=${wKEY}&city=${adcode}`).then((res3) => {let resultTq = res3.data;if (resultTq.lives[0].weather) {curInfo.weather = resultTq.lives[0].weather;curInfo.temperature = resultTq.lives[0].temperature;}});weatherTimer = setTimeout(() => {getWeather(adcode);}, 1000 * 60 * 15);
};
// 获取天气
const getWeatherData = () => {axios.get(`https://restapi.amap.com/v3/config/district?keywords=${curInfo.cityName}&key=${wKEY}`).then((res) => {let result = res.data;if (result?.districts[0].adcode) {// 此处需轮询 每15分钟获取一次getWeather(result?.districts[0].adcode);}});
};
// 获取天气质量
const getCategoryData = () => {const KEY = "a815396d62d043a2bd19395d35997d49";axios.get(`https://geoapi.qweather.com/v2/city/lookup?location=${curInfo.cityName}&key=${KEY}&number=1`).then((res) => {let result = res.data;if (result?.location[0].id) {// 当天获取一次axios.get(`https://devapi.qweather.com/v7/air/now?key=${KEY}&location=${result?.location[0].id}`).then((res3) => {let resultObj = res3.data?.now;curInfo.aqi = resultObj.aqi;curInfo.category = resultObj.category;});}});
};
// 查看运动记录
const changeMenu = (index, path) => {menuIdx.value = index;router.push(path);isOpen.value = false;
}const initLayout = () => {// 优点取url 设备号if (getUrlKey("dNo")) {localStorage.setItem("DEVICE_NO",JSON.stringify({devNo: getUrlKey("dNo"),}));}curInfo.deviceNo = JSON.parse(localStorage.getItem("DEVICE_NO"))?.devNo;getCurTime();
};
initLayout();
onMounted(() => {// 刷新页面保持下拉框选择效果switch (route.name) {case "home":menuIdx.value = 0;break;case "userList":menuIdx.value = 2;break;case "sportsList":menuIdx.value = 1;break;default:menuIdx.value = 0;break;}
});
// 销毁
onUnmounted(() => {clearTimeout(curTimer);clearTimeout(weatherTimer);curTimer = null;weatherTimer = null;
});
</script>
<style lang="scss" scoped>
.app-layout {position: relative;padding: 30px;width: 100vw;min-height: 100vh;overflow: hidden;background: url("@/assets/images/back/them_bg.png") no-repeat;background-size: 100% 100%;color: #d3ffff;font-family: PingFang SC, PingFang SC-Medium;scrollbar-width: none; height: 0;overflow-y: scroll;
}
.app-layout::-webkit-scrollbar {/*滚动条整体样式*/width: 0 !important;}.app-layout::-webkit-scrollbar-thumb {/*滚动条里面小方块*/width: 0 !important;}
.app-box {width: 100%;height: auto;border: 1px solid #005989;border-radius: 30px;box-shadow: 0px 0px 8px 0px #004789 inset;
}
.header {display: flex;width: 100%;height: 86px;background: url("@/assets/images/back/heard.png") no-repeat;background-size: 100% 100%;.title {padding-bottom: 20px;display: flex;justify-content: center;align-items: center;width: 550px;height: 100%;font-family: PingFang SC, PingFang SC-Bold;font-size: 30px;font-weight: 700;text-align: CENTER;line-height: 42px;letter-spacing: 6px;}.header-left,.header-right {padding: 20px 0 10px 0;width: 655px;height: 100%;display: flex;align-items: center;justify-content: center;}.header-left {.p1 {margin-bottom: 6px;padding-left: 124px;font-size: 18px;}.p2 {text-align: right;padding-right: 30px;font-size: 20px;.tq-one {margin-right: 24px;}.iconfont {margin: 0 3px;font-size: 22px;}}}.score {display: inline-block;vertical-align: top;margin-top: 1px;margin-left: 8px;padding: 2px 4px;font-size: 15px;color: #ffffff;border-radius: 2px;}.bg-color1 {background: #29cd94;}.bg-color2 {background: #f7d631;}.bg-color3 {background: #ff9933;}.bg-color4 {background: #ff2626;}.bg-color5 {background: #b133ff;}.bg-color6 {background: #b21b1b;}.header-right {.p1 {margin-bottom: 6px;text-align: right;padding-right: 124px;font-size: 14px;span {padding: 2px 10px;background: rgba(112, 217, 250, 0.1);border: 1px solid rgba(77, 243, 243, 0.3);border-radius: 12px;box-shadow: 0px 0px 8px 0px #004789 inset;}}.p2 {display: flex;align-items: center;font-size: 18px;.dropdown-box{display: flex;flex-direction: column;align-items: flex-start;justify-content: flex-start;margin-left: 30px;position: relative;.dropdown-cont{position: absolute;left: 0;top: 0.14rem;z-index: 9999;}.dropdown{white-space: nowrap;background: rgba(18,60,92,0.60);border: 1px solid #005989;box-shadow: 0px 0px 8px 0px #004789 inset; padding: 0.08rem 0.1rem;font-size: 0.0938rem;.dropdown-item{cursor: pointer;}.dropdown-item:not(:last-child){margin-bottom: 0.06rem;}.activeMenu{color: rgb(53, 204, 151);font-weight: 700;}}}.iconfont {font-size: 20px;margin-right: 10px;}img {width: 20px;height: 20px;cursor: pointer;}}}
}
.main-container {position: relative;padding: 30px;width: 100%;box-sizing: border-box;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

<template>标签的作用是什么?<slot>标签的作用是什么?

<template> 和 <slot> 都是 Vue.js 框架中用于模板编程的标签&#xff0c;但它们在功能和应用场景上有所不同。 1. <template> 标签的作用 <template> 标签在 Vue.js 中用作一种声明性的方式来定义模板的片段。但它本身不会被渲染到最终的 DOM 中。&…

scratch列表排序 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch列表排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

《sklearn 基础教程:开启机器学习的奇妙之旅》

在当今数据驱动的世界中&#xff0c;机器学习已成为一项至关重要的技术。而 sklearn 作为机器学习领域的翘楚&#xff0c;为我们提供了强大的工具和方法。让我们一起深入了解 sklearn 的基础教程&#xff0c;探索其奥秘吧&#xff01; 一、初识 sklearn sklearn 是一个功能齐…

SpringBoot--@Transactional 和 @Cacheable的执行顺序

原文网址&#xff1a;SpringBoot--Transactional 和 Cacheable的执行顺序_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Transactional 和 Cacheable标注在同一个方法上时的执行顺序。 简述 如果一个方法上同时存在 Transactional 和 Cacheable &#xff0c;且没有指定事务切面…

【兆易创新GD32H759I-EVAL开发板】 移植LVGL

为什么最终选择了 LVGL&#xff1f; 经过比较多种主流的界面设计软件&#xff0c;emWin 开发方便 &#xff0c;但是没有开放源码 所以感觉不太自由&#xff1b; TouchGFX目前仅限于STM32用&#xff0c; 应用范围小&#xff1b; ThreadX 的配套GUI GUIX 这个用起来感觉确…

《Linux运维总结:基于银河麒麟V10+ARM64架构二进制部署elasticsearch7.17.21集群 + kibana(方案三)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、背景 elasticsearch是一个分布式、实时、高性能的搜索和分析引擎,它广泛应用于企业级搜索、日志分析、实时数据处理等领域。随着elasticsearch的广泛应用,安全性变得越来越重…

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现 OLS,GWR,GTWR回归模型均可以揭示解释变量对被解释变量的影响且可以进行预测。Ordinary Least Squares (OLS)是最小二乘法&#xff0c;Geographically Weighted Regression (GWR)是地理加权回归&#xff0c;Geographically and T…

Unity射击游戏开发教程:(18)添加弹药计数+补充弹药

添加简单的弹药计数 我将讨论如何向游戏中添加简单的弹药计数。这将包括在 HUD 中添加弹药计数器,当弹药达到 0 时,文本会将颜色更改为红色以提醒玩家。另外,当弹药数为0时,玩家将无法再射击。让我们深入了解吧! 在播放器脚本中我们需要添加一些变量。我们将创建两个公共整…

详细分析Python中的win32com(附Demo)

目录 前言1. 基本知识2. Excel3. Word 前言 对于自动化RPA比较火热&#xff0c;相应的库也比较多&#xff0c;此文分析win32com这个库&#xff0c;用于操作office 1. 基本知识 Win32com 是一个 Python 模块&#xff0c;是 pywin32 扩展的一部分&#xff0c;允许 Python 代码…

C语言如何删除表中指定位置的结点?

一、问题 如何删除链表中指定位置的结点&#xff1f; 二、解答 删除链表中指定的结点&#xff0c;就像是排好队的⼩朋友⼿牵着⼿&#xff0c;将其中⼀个⼩朋友从队伍中分出来&#xff0c;只需将这个⼩朋友的双⼿从两边松开。 删除结点有两种情况&#xff1a; &#xff08;1&am…

HTML静态网页成品作业(HTML+CSS)——我的家乡江永网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

mysql -- WITH RECURSIVE 语法

引言 在 SQL 中&#xff0c;WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE)&#xff0c;该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据&#xff0c;例如组织结构、文件系统或任何其他具有…

Pencils Protocol Season 2 收官在即,Season 3 携系列重磅权益来袭

此前Scroll生态LaunchPad &聚合收益平台Pencils Protocol&#xff08;原Penpad&#xff09;&#xff0c;推出了首个资产即其生态代币PDD的Launch&#xff0c;Season 2活动主要是用户通过质押ETH代币、组件战队等方式&#xff0c;来获得Point奖励&#xff0c;并以该Point为依…

2024 Google I/O大会:全方位解读最新AI技术和产品

引言&#xff1a; 2024年的Google I/O大会如期举行&#xff0c;作为技术圈的年度盛事之一&#xff0c;谷歌展示了其在人工智能领域的最新进展。本次大会尤其引人注目&#xff0c;因为它紧随着OpenAI昨天发布GPT-4o的脚步。让我们详细解析Google此次公布的各项新技术和产品&…

svn如何远程访问?

svn&#xff08;Subversion&#xff09;是一种版本控制系统&#xff0c;广泛应用于软件开发领域。它能够追踪文件和目录的变化&#xff0c;记录每个版本的修改内容&#xff0c;并允许多人协同开发。svn的远程访问功能允许开发人员可以在不同的地点访问和管理代码&#xff0c;提…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

typescript -元组类型

元组类型 元组表示有限元素构成的有序列表。元组类型是数组类型的子类型。元组是长度固定的数组&#xff0c;元组总每个元素都有具体的类型 元组的定义 [T0, T1, T2,...,Tn] const point: [number,number] [0, 0]只读元组 使用readonly修饰符或者Readonly工具类型 readon…

分布式websocket实时通讯的session共享问题

目录 1.需求 2.前置条件和要求 3.方案分析 3.1.方案1&#xff1a;session共享存储到redis数据库 3.2.方案2&#xff1a;采用mongo生命周期的AbstractMongoEventListener 3.3.方案3&#xff1a;引入redis等MQ组件&#xff0c;发送广播消息 3.4.方案4&#xff1a;采用chan…

AI4Science

AI4Science 文章目录 AI4ScienceMicroSoft AI4Science其它 微软研究院刘铁岩&#xff1a;AI for Science&#xff0c;追求人类智能最光辉的一面&#xff5c;MEET2023 &#xff08;17min&#xff09; https://www.bilibili.com/video/BV1bs4y1W7rW/AI Forum 2023 | AI4Science: …