【uni-app】使用天气API做一个天气APP(全过程)- 实况、逐小时、40日

头一次使用uni-app写代码, 现学现卖, 写的不好的地方见谅, 申请个appid就可以运行
切换城市界面比较简单, 城市名称需要符合天气api参数规则, 录入的城市不要带市区县; 格式如: 青岛、铁西、海淀、沛县

APP效果

在这里插入图片描述

功能说明

  1. 实况天气
  2. 逐小时预报
  3. 未来7日天气
  4. 未来40日天气
  5. 空气质量详情
  6. 切换城市
  7. 更多功能开发中

开发准备

  1. 前往天气api接口官网 http://tianqiapi.com 注册账号, 进入用户中心获取appid和appsecret
  2. 修改App.vue下globalData字段内容
globalData:{appid : '你的appid',appsecret : '你的appsecret'
},
  1. 然后直接运行程序就 o了

代码下载

先贴上下载链接, 省的在最底下看不见
http://file.tianqiapi.com/uniapp_tianqi0802.zip

附完整代码

  1. 首页 > index.vue
  2. 40日预报 > month.vue
  3. 空气质量详情 > aqi.vue
  4. 切换城市 > city.vue

首页 > index.vue

<template><image class="background" :src="bg"></image><view class="content" style="padding: 10px 5px 10px; color:#fff; text-align: center;"><view style="display: flex; width: 100%; padding-bottom: 35px; font-size:16px;"><view style="width: 50%; text-align: left;"><navigator url="/pages/index/city">{{weather.city}}[切换]</navigator></view><view style="width: 50%; text-align: right; color:#f1f1f1;font-size:13px;">{{weather.update_time}}更新</view></view><view style="font-size: 32.76px;">{{weather.data[0].wea}}</view><view style="font-size: 65.52px;">{{weather.data[0].tem}}°</view><view style="font-size: 14px;"><navigator url="/pages/index/aqi">AQI {{weather.aqi.air_level}} [查看详情]</navigator></view><view style="padding: 8px 0 20px 0;"><textdecode>最低{{weather.data[0].tem2}}°&nbsp;&nbsp;&nbsp;最高{{weather.data[0].tem1}}°</text></view><!--hours--><viewstyle="width:100%; overflow:scroll; border-bottom: 1px solid rgba(190, 185, 185, 0.5);border-top: 1px solid rgba(190, 185, 185, 0.5);padding:23.4rpx 0; height: 105px; min-height: 105px; max-height: 105px;"><view class="hlist"><view v-for="(item,index) in weather.data[0].hours" :key="item.id" class="hitem"><view>{{item.hours}}</view><view style="padding: 10px 0 0;"><image :src="item.wea_img" mode="widthFix" style="width: 46.8rpx;"></image></view><view style="font-weight: 500; font-size:13px;text-align: center;">{{item.wea}}</view><view style="font-weight: 500; font-size:14px;text-align: center;">{{item.tem}}°</view></view></view><view style="clear:both;width:100%;height:1px;"></view></view><!--hours--><!--week--><view style="width:100%; padding-top: 10px;padding-bottom: 15px;"><view v-for="(item,index) in weather.data" :key="item.id" class="week"><text class="weekday">{{item.day}}</text><view style="text-align: left; padding-left:30%; font-size: 13px;"><image :src="item.wea_img" mode="widthFix" style="width: 42rpx; vertical-align: middle;"></image> {{item.wea}} <text v-if="item.rain > 10"style="font-size:12px; color: #96dafb; margin-left: 5px;"wx:if="{{item.rain > 35}}">{{item.rain}}%</text></view><text class="weekmax">{{item.tem2}}°</text><text class="weekmin">{{item.tem1}}°</text></view></view><!--week--><view style="padding:15px;"><navigator url="/pages/index/month"><button type="primary"style="font-size: 12px; border-radius: 30px; padding-left:30px;padding-right: 30px;">查看40日预报&gt;&gt;</button></navigator></view><view class="smalltext">{{weather.data[0].narrative}}</view><!--dayinfo--><view style="width:100%;"><view style="padding:5px; text-align: left; "><view style="display: flex; border-bottom: 1px solid rgba(190, 185, 185, 0.5); padding-bottom: 10px;"><view style="width: 50%;"><view style="color:#d8d6d6;">日出</view><view style="font-size:16px;">上午 {{weather.data[0].sunrise}}</view></view><view style="width: 50%; "><view style="color:#d8d6d6;">日落</view><view style="font-size:16px;">下午 {{weather.data[0].sunset}}</view></view><view class="clearfix"></view></view><viewstyle="display: flex; border-bottom: 1px solid rgba(190, 185, 185, 0.5); padding-top: 10px;padding-bottom: 10px;"><view style="width: 50%;"><view style="color:#d8d6d6;">湿度</view><view style="">{{weather.data[0].humidity}}</view></view><view style="width: 50%;"><view style="color:#d8d6d6;"></view><view style="">{{weather.data[0].win[0]}}{{weather.data[0].win_speed}}</view></view><view class="clearfix"></view></view><viewstyle="display: flex;border-bottom: 1px solid rgba(190, 185, 185, 0.5); padding-top: 10px;padding-bottom: 10px;"><view style="width: 50%;"><view style="color:#d8d6d6;">气压</view><view style="">{{weather.data[0].pressure}}兆帕</view></view><view style="width: 50%;"><view style="color:#d8d6d6;">空气质量</view><view style="">{{weather.data[0].air_level}}</view></view><view class="clearfix"></view></view><viewstyle="display: flex; border-bottom: 1px solid rgba(190, 185, 185, 0.5); padding-top: 10px;padding-bottom: 10px;"><view style="width: 50%;"><view style="color:#d8d6d6;">降雨量</view><view style="">{{weather.data[0].rain_pcpn}}mm</view></view><view style="width: 50%;"><view style="color:#d8d6d6;">紫外线</view><view style="">{{weather.data[0].uvDescription}}</view></view><view class="clearfix"></view></view><view style="font-size: 23.4rpx; color:#d8d6d6; padding:10px 0">数据来源:TianqiAPI.com</view></view></view><!--./dayinfo--></view>
</template><script>export default {data() {return {city: '',weather: [],title: '易客API',phrase_img: '',bg: ''}},onLoad(e) {console.log('参数如下:')console.log(e.city);this.city = e.city;this.getWeather();},methods: {formatDate(date) {var date = new Date(date);return (date.getMonth() + 1) + '-' + (date.getDate()) + ' ' + date.getHours() + ':' + date.getMinutes();},openmonth() {uni.navigateTo({url: '/pages/index/month'})},getWeather() {if (this.city == undefined) {this.city = '';}if (this.city == '') {var scity = uni.getStorageSync('storage_city');if (scity != '') {this.city = scity;}}/* 天气api接口官网 http://tianqiapi.comappid和appsecret请在官网注册, 进入用户中心获取, 新用户可以免费请求3000次, 接口收费350一年*/const appid = getApp().globalData.appid;const appsecret = getApp().globalData.appsecret;const url = 'http://v1.yiketianqi.com/api?version=v91&ext=hours,life&appid=' + appid + '&appsecret=' +appsecret + '&city=' + this.city;uni.request({url: url,success: (res) => {if (res.data.errcode == "100") {// 错误处理console.error('获取天气信息失败', res.data);} else {uni.setStorageSync('storage_city', res.data.city);var mydata = res.data;console.log(mydata.data.length);for (var i = 0; i < mydata.data[0].hours.length; i++) {mydata.data[0].hours[i]['wea_img'] = '/static/skins/' + mydata.data[0].hours[i]['wea_img'] +'.png';}for (var i = 0; i < mydata.data.length; i++) {mydata.data[i]['wea_img'] = '/static/skins/' + mydata.data[i]['wea_img'] +'.png';}mydata.update_time = this.formatDate(mydata.update_time);console.log(mydata);this.weather = mydata;this.phrase_img = '/static/skins/' + mydata.data[0].wea_img + '.png';// 计算背景图if (mydata.data[0].wea.match(RegExp(//))) {this.bg = '/static/bg_sun.jpg';} else {this.bg = '/static/bg_yin.jpg';}}},fail: (error) => {// 请求失败处理console.error('请求失败', error);}});}}}
</script><style>.background {width: 100%;height: 100%;position: fixed;background-size: 100% 100%;z-index: -1;}.hlist {display: inline-flex;}.hitem {padding: 0 23.4rpx;width: 50px;text-align: center;}.week {font-size: 32.76rpx;position: relative;text-align: center;margin-top: 11.7rpx;}.weekday {position: absolute;left: 10px;top: 0px;font-size: 13px;}.weekmax {position: absolute;right: 70px;top: 0px;}.weekmin {color: #ebe7e7;position: absolute;right: 20px;top: 0px;text-align: left;}.smalltext {text-align: left;border-top: 1px solid rgba(190, 185, 185, 0.5);border-bottom: 1px solid rgba(190, 185, 185, 0.5);padding-top: 15px;padding-left: 15px;padding-bottom: 15px;font-size: 28.08rpx;width: 100%;}.logo {height: 200rpx;width: 200rpx;margin-top: 200rpx;margin-left: auto;margin-right: auto;margin-bottom: 50rpx;}.text-area {display: flex;justify-content: center;}.title {font-size: 36rpx;color: #8f8f94;}.wea_img {width: 25px;height: 25px;}
</style>

40日预报 > month.vue

<template><view style="background-color: rgb(0, 97, 204); height: 100%;"><view style="padding:10px;"><view style="padding: 15px; border-radius:5px; background-color: #fff; "><view v-for="(item,index) in weather.data" :key="item.id"><view style="padding:8px 0; display: flex; border-bottom: 1px solid #f1f1f1; font-size: 14px;"><view style="width: 30%;font-size:13px;">{{item.date}}<br>{{item.week}}</view><view style="width: 40%; text-align: left;font-size: 14px;"><image :src="item.wea_img" mode="widthFix" style="width: 42rpx; vertical-align: middle;"></image> {{item.wea}}</view><view style="width: 30%; text-align: center;"><text>{{item.tem2}}° ~ {{item.tem1}}°</text></view></view></view></view></view></view>
</template><script>export default {data() {return {city: '',weather: [],title: '易客API',phrase_img: '',bg: ''}},onLoad() {this.getWeather();},methods: {formatDate(date) {var date = new Date(date);return (date.getMonth() + 1) + '-' + (date.getDate());},getWeather() {var scity = uni.getStorageSync('storage_city');if (scity != '') {this.city = scity;}const appid = getApp().globalData.appid;const appsecret = getApp().globalData.appsecret;const url = 'http://v1.yiketianqi.com/api?unescape=1&version=v3&appid=' + appid + '&appsecret=' +appsecret + '&city=' + this.city;uni.request({url: url,success: (res) => {if (res.data.errcode == "100") {// 错误处理console.error('获取天气信息失败', res.data);} else {var mydata = res.data;for (var i = 0; i < mydata.data.length; i++) {mydata.data[i]['date'] = this.formatDate(mydata.data[i]['date']);mydata.data[i]['wea_img'] = '/static/skins/' + mydata.data[i]['wea_img'] +'.png';}console.log(mydata);this.weather = mydata;}},fail: (error) => {// 请求失败处理console.error('请求失败', error);}});}}}
</script><style></style>

空气质量详情 > aqi.vue

<template><view style="background-color: #E7ECF4; height: 100%;"><view style="padding:10px 10px 200px;"><view style="font-size: 12px; color:#333; text-align: right;">{{weather.aqi.update_time}}更新</view><view style="text-align: center; padding-top: 20px;"><view style="font-size: 46px; "><text style="position: relative; padding:10px;">{{weather.aqi.air}}<textstyle="background-color: #FFEF01; border-radius: 50%; padding:5px 8px; font-size: 14px; position: absolute; top: 0px; right:-20px;">{{weather.aqi.air_level}}</text></text></view><view style="padding: 10px 0;"><textstyle="font-size: 16px; background-color: #fff; color: #14C355; border-radius:8px; padding:5px;">AQI指数</text></view><view style="font-size: 13px; padding:10px 30px 20px;">{{weather.aqi.air_tips}}</view></view><viewstyle="font-size: 14px; padding: 10px; border-radius:5px; background-color: #fff; display: flex; text-align: center; "><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.pm10}}</view>PM10</view><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.pm25}}</view>PM2.5</view><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.no2}}</view>NO2</view><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.so2}}</view>SO2</view><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.o3}}</view>O3</view><view style="width: 16.66%;"><view style="font-size: 16px;">{{weather.aqi.co}}</view>CO</view></view><viewstyle="margin-top:15px; font-size: 14px; padding: 10px; border-radius:5px; background-color: #fff;  text-align: center; "><view style="text-align: left;">{{weather.city}}未来5日天气</view><view style="display: flex; "><view style="width: 20%;"><view class="itema">{{weather.data[1].date}}</view><view class="itemb">{{weather.data[1].wea}}</view><view class="itemc">{{weather.data[1].tem2}}~{{weather.data[1].tem1}}°</view><view class="itemd"><textclass="iteme">{{weather.data[1].air_level}}</text></view></view><!--2--><view style="width: 20%;"><view class="itema">{{weather.data[2].date}}</view><view class="itemb">{{weather.data[2].wea}}</view><view class="itemc">{{weather.data[2].tem2}}~{{weather.data[2].tem1}}°</view><view class="itemd"><textclass="iteme">{{weather.data[2].air_level}}</text></view></view><!--./2--><!--3--><view style="width: 20%;"><view class="itema">{{weather.data[3].date}}</view><view class="itemb">{{weather.data[3].wea}}</view><view class="itemc">{{weather.data[3].tem2}}~{{weather.data[3].tem1}}°</view><view class="itemd"><textclass="iteme">{{weather.data[3].air_level}}</text></view></view><!--./3--><!--4--><view style="width: 20%;"><view class="itema">{{weather.data[4].date}}</view><view class="itemb">{{weather.data[4].wea}}</view><view class="itemc">{{weather.data[4].tem2}}~{{weather.data[4].tem1}}°</view><view class="itemd"><textclass="iteme">{{weather.data[4].air_level}}</text></view></view><!--./4--><!--5--><view style="width: 20%;"><view class="itema">{{weather.data[5].date}}</view><view class="itemb">{{weather.data[5].wea}}</view><view class="itemc">{{weather.data[5].tem2}}~{{weather.data[5].tem1}}°</view><view class="itemd"><textclass="iteme">{{weather.data[5].air_level}}</text></view></view><!--./5--></view></view></view></view>
</template><script>export default {data() {return {city:'',weather: [],title: '易客API',phrase_img: '',bg: ''}},onLoad() {this.getWeather();},methods: {formatDate(date) {var date = new Date(date);return (date.getMonth() + 1) + '-' + (date.getDate());},getWeather() {var scity = uni.getStorageSync('storage_city');if (scity != '') {this.city = scity;}const appid = getApp().globalData.appid;const appsecret = getApp().globalData.appsecret;const url = 'http://v1.yiketianqi.com/api?unescape=1&version=v91&appid=' + appid + '&appsecret=' +appsecret + '&city=' + this.city;uni.request({url: url,success: (res) => {if (res.data.errcode == "100") {// 错误处理console.error('获取天气信息失败', res.data);} else {var mydata = res.data;for (var i = 0; i < mydata.data.length; i++) {mydata.data[i]['date'] = this.formatDate(mydata.data[i]['date']);mydata.data[i]['wea_img'] = '/static/skins/' + mydata.data[i]['wea_img'] +'.png';}console.log(mydata);this.weather = mydata;// update titleuni.setNavigationBarTitle({title: this.weather.city + '空气质量'});}},fail: (error) => {// 请求失败处理console.error('请求失败', error);}});}}}
</script><style>
.itema{font-size: 16px;padding-top: 10px; padding-bottom: 5px;font-size: 13px;}
.itemb{font-size: 16px;padding-bottom: 5px;font-size: 12px; white-space: nowrap;}
.itemc{font-size: 16px;padding-bottom: 10px;font-size: 14px;}
.itemd{font-size: 16px;font-size: 12px;padding-bottom: 10px;}
.iteme{background-color: #FFEF01; border-radius: 10px; padding:2px 5px;}
</style>

切换城市 > city.vue

<template><view style="padding: 10px;"><input class="uni-input" style="border: 1px solid #dcdcdc; border-radius: 15px; padding:10px 20px;" focusplaceholder="请输入城市名称" confirm-type="search" inputmode="search" @confirm="gocity" @input="onKeyInput" /></view>
</template><script>export default {data() {return {inputValue: ''}},methods: {onKeyInput: function(event) {this.inputValue = event.detail.value;console.log(this.inputValue);},gocity() {console.log(this.inputValue);//uni.setStorageSync('city', 'hello');uni.reLaunch({url: '/pages/index/index?city=' + this.inputValue});}}}
</script><style></style>

感谢阅读

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

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

相关文章

C语言 | Leetcode C语言题解之第336题回文对

题目&#xff1a; 题解&#xff1a; #define SIZE 9470 #define N 168000 #define P 13331typedef unsigned long long ULL; ULL p[301];//p[i]存储P^ivoid init()//初始化p进制次幂数组 {int i;p[0]1;for(i1;i<300;i){p[i]p[i-1]*P;} }int** palindromePairs(char**words,…

探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件

Resolume Arena 7 是一款专为 Mac 和 Windows 系统设计的强大 VJ 音视频软件&#xff0c;为创意专业人士和爱好者提供了丰富而出色的功能。 这款软件拥有直观且用户友好的界面&#xff0c;即使对于初学者来说&#xff0c;也能快速上手并开始创作。其强大的媒体管理功能&#x…

SpringBoot事务-调度-缓存

一.Spring Boot中的事务管理 设置事务 Transactional(isolation Isolation.DEFAULT) Transactional(propagation Propagation.REQUIRED) 开启事务 EnableTransactionManagement 1. 开启事务管理 要开启 Spring 的事务管理&#xff0c;你需要在你的 Spring Boot 应用中添加 …

大数据技术现场工程师特色实训室解决方案

一、引言 在大数据时代背景下&#xff0c;数据已成为新的生产要素&#xff0c;驱动着各行各业的创新发展。面对这一趋势&#xff0c;市场对于既掌握大数据理论知识又具备实战能力的大数据技术人才的需求急剧增加。为了应对这一挑战&#xff0c;唯众精心设计了一套全面的大数据…

详解golang内存管理

介绍 要搞明白 Go 语言的内存管理,就必须先理解操作系统以及机器硬件是如何管理内存的。因为 Go 语言的内部机制是建立在这个基础之上的,它的设计,本质上就是尽可能的会发挥操作系统层面的优势,而避开导致低效情况。 操作系统内存管理 其实现在计算机内存管理的方式都是…

FPGA资源评估

FPGA资源评估 文章目录 FPGA资源评估前言一、资源评估1.1 资源有哪些1.2 资源统计 二、 FPGA 的基本结构三、 更为复杂的 FPGA 架构 前言 一、资源评估 大家在项目中一般会要遇到需要资源评估的情况&#xff0c;例如立了新项目&#xff0c;前期需要确定使用什么FPGA片子&…

RabbitMQ消息队列总结

RabbitMQ那些事 参考一. `RabbitMQ`介绍1.1 Java工程师1.1.1 RabbitMQ学习目标1.1.2 消息队列介绍1.1.3 RabbitMQ介绍各自属性介绍(❤❤❤)二. `RabbitMQ`安装1. 基于Linux1.1 安装1.2 常用命令1.3 后台管理开启与面板介绍三. 客户端`SDK`操作(❤❤了解)1. 客户端依赖1. 生产者…

Springboot实现doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频在线预览功能,你学“废”了吗?

最近工作中&#xff0c;客户需要生成包含动态内容的word/pdf报告&#xff0c;并且需要在线预览。 刚开始使用后台直接生成word文档&#xff0c;返回文件流给前端&#xff0c;浏览器预览会发生格式错乱问题&#xff0c;特别是文档中的图片有些还不显示。 想到最简单的办法就是…

alibabacloud学习笔记13

微服务Docker镜像打包讲解 父项目怎么springboot版本依赖 每个子模块项目添加依赖 添加构建文件&#xff1a; 微服务Docker镜像打包整合JDK11 服务根目录创建dockerFile文件. dockerFile的内容。 构建镜像( 去到子模块pom文件下)&#xff1a; 要下载这个才能使用本地docker.…

Nginx--简介、安装、常用命令和配置文件

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx简介 1、nginx介绍 Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务&#xff0c;也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰…

RPC 和 HTTP 理解

网上充斥着各类类似于这样的文章&#xff1a;rpc 比 http 快了多少倍&#xff1f;既然有了 http&#xff0c;为什么还要用 rpc 调用等等。遇到这类文章&#xff0c;说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍&#xff0c;通信协议不是 rpc 最重要的部分&#x…

【OpenCV 】插值的方法原理,图片缩放,矫正,边界填充

图像旋转 缩放 计算机中的图像是以数组的方式储存&#xff0c;每个位置储存了像素点的像素值。对图像进行旋转缩放&#xff0c;就是对数组进行操作&#xff0c;乘以对应的矩阵&#xff0c;进行空间变换&#xff0c;而矩阵的行列式的值&#xff0c;就是缩放的倍数。 进行缩放旋…

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…

AR 眼镜之-开关机定制-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 开关机定制 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;开机 Logo 2&#xff09;开机音效 3&#xff09;开机动画 4&#xff09;关机动画 5&#xff09;关机弹窗 2. &#x1f4a0; 开机 Logo…

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…

ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】

ECharts一个基于 JavaScript 的开源可视化图表库&#xff0c;即将数据以图形或图像的方式展现成在屏幕上显示出来&#xff0c;这种方式称为数据可视化。数据可视化有助于我们分析数据&#xff0c;帮助我们更深入更直观的理解数据。今天回顾顺便总结一下echarts的基本知识&#…

C++密码管理器

先问一句 最近有几个关注我的原力等级为0或-1&#xff0c;文章全是转载&#xff0c;转载时间基本都在2021年&#xff0c;而且关注了很多人&#xff0c;这些是僵尸粉吗&#xff1f; 文末有投票&#xff0c;麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…

HTTPS通讯全过程

HTTPS通讯全过程 不得不说&#xff0c;https比http通讯更加复杂惹。在第一次接触https代码的时候&#xff0c;不知道为什么要用用证书&#xff0c;公钥是什么&#xff1f;私钥是什么&#xff1f;他们作用是什么&#xff1f;非对称加密和对称加密是啥&#xff1f;天&#xff0c;…

可视化大屏入口界面,炫酷科技又不失简洁时尚。

可视化大屏界面&#xff0c;大家见到很多了&#xff0c;当可视化大屏是多个系统的融合&#xff0c;而且彼此又相互独立&#xff0c;就需要设计一个入口页面&#xff0c;便于分流客户&#xff0c;这次我给大家分享一批。 设计可视化大屏入口界面时&#xff0c;可以结合炫酷科技…

startData

某音startData 记得加入学习群&#xff1a; python爬虫&js逆向3 714283180