当前位置: 首页 > news >正文

18.天气小案例

1►新增带Layout组件的页面

直接在views文件夹下面新增weather.vue。然后随便写一个123,现在先让我们页面能跳过去先。

让页面能跳过去,有好几种方法:

1、在菜单管理自己添加一个菜单,然后把菜单分配给某个角色,再把该角色分给某个人。【然而超级管理员什么时候都能看到此菜单,因为超级管理员能无视一切权限问题】

2、在路由文件(router/index.js直接写相关路由),然后可以手动切换浏览器网址进入该路由。

本次例子利用使用自己添加菜单的方法,这样比较简单。简单如下图:

组件地址:默认是views目录下面的文件

路由地址:点击这个功能访问的url

意思就是点击这个路由地址可以进入这个组件

组件路径一定要写对,写不对直接进不去相应的组件。路由地址可以乱写,但是起码也要有点“path”的样子吧?

先随便在weather.vue写一句话来测试一下:

 发现页面也出来了:

现在我们可以开始专注页面了。 

2►专注weather业务

首先.vue文件的代码如下:

<template><div v-loading="loading"><el-row style="margin-top: 30px;" :gutter="20"><el-col :offset="10" :span="4"><el-button type="success" @click="handleWeather">当前城市天气</el-button></el-col></el-row><el-row :gutter="20" v-if="city.length>0"><el-col :offset="2" :span="20"><el-descriptions title="当前实时天气"><el-descriptions-item label="当前城市">{{ city }}</el-descriptions-item><el-descriptions-item label="温度">{{ weather.realtime.temperature }}℃</el-descriptions-item><el-descriptions-item label="风向">{{ weather.realtime.direct }}</el-descriptions-item><el-descriptions-item label="风力">{{ weather.realtime.power }}</el-descriptions-item><el-descriptions-item label="湿度">{{ weather.realtime.humidity }}%</el-descriptions-item><el-descriptions-item label="天气状况">{{ weather.realtime.info }}</el-descriptions-item></el-descriptions></el-col></el-row><el-row v-for="item in weather.future" :key="item.date" style="margin-top: 30px;" :gutter="20"><el-col :offset="2" :span="20"><el-descriptions :title="item.date" :column="4"><el-descriptions-item label="风向">{{ item.direct }}</el-descriptions-item><el-descriptions-item label="温度">{{ item.temperature }}</el-descriptions-item><el-descriptions-item label="天气情况">{{ item.weather }}</el-descriptions-item></el-descriptions></el-col></el-row></div>
</template><script>
import {getWeather} from "@/api/gzh/weather";export default {name: "weather",data() {return {loading:false,city: "",weather: {realtime: {},future: []}}},methods: {handleWeather() {this.loading=true;getWeather().then(res => {const weatherInfo = JSON.parse(res.msg);this.city = weatherInfo.result.citythis.weather.realtime = weatherInfo.result.realtimethis.weather.future = weatherInfo.result.futureconsole.log(weatherInfo)this.loading=flase;}).catch(err => {console.error(err)})}}
}
</script><style scoped></style>

然后是前端api调用代码:

import request from "@/utils/request";
// 查询参数列表export function getWeather() {  return request({    url: '/getWeatherByLocalIP',    method: 'get',  })}

接下来是后端的工具类代码:


package com.ruoyi.web.controller.gzh;import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.http.HttpUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;@RestController
public class WeatherController {@GetMapping("/getWeatherByLocalIP")public AjaxResult getWeather() throws UnsupportedEncodingException {AjaxResult result = AjaxResult.success();String localCityName = GetLocationAndIP.getLocalCityName();//调用天气APIString encodeCity = URLEncoder.encode(localCityName, "UTF-8");System.out.println(encodeCity);String url = "http://apis.juhe.cn/simpleWeather/query?city=" + encodeCity + "&key=81fe33a6077267b2e4ae2967af47eeb7";String weatherInfo = HttpUtils.sendGet(url);result.put("msg", weatherInfo);return result;}}

然后是后端接口的代码:


package com.ruoyi.web.controller.gzh;import org.json.JSONException;
import org.json.JSONObject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class GetLocationAndIP {private static String readAll(BufferedReader rd) throws IOException {StringBuilder sb = new StringBuilder();int cp;while ((cp = rd.read()) != -1) {sb.append((char) cp);}return sb.toString();}public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {try (InputStream is = new URL(url).openStream()) {BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));String jsonText = readAll(rd);return new JSONObject(jsonText);}}public Map<String, Object> getAddress() {String ip = "";// 这个网址似乎不能了用了// String chinaz = "http://ip.chinaz.com";// 改用了太平洋的一个网址String chinaz = "http://whois.pconline.com.cn/";StringBuilder inputLine = new StringBuilder();String read = "";URL url = null;HttpURLConnection urlConnection = null;BufferedReader in = null;Map<String, Object> map = new HashMap<>();try {url = new URL(chinaz);urlConnection = (HttpURLConnection) url.openConnection();// 如有乱码的,请修改相应的编码集,这里是 gbkin = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "gbk"));while ((read = in.readLine()) != null) {inputLine.append(read).append("\r\n");}} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}// 这个是之前的正则表达式,// Pattern p = Pattern.compile("\\<dd class\\=\"fz24\">(.*?)\\<\\/dd>");// 通过正则表达式匹配我们想要的内容,根据拉取的网页内容不同,正则表达式作相应的改变Pattern p = Pattern.compile("显示IP地址为(.*?)的位置信息");Matcher m = p.matcher(inputLine.toString());if (m.find()) {String ipstr = m.group(0);// 这里根据具体情况,来截取想要的内容ip = ipstr.substring(ipstr.indexOf("为") + 2, ipstr.indexOf("的") - 1);map.put("ip", ip);}JSONObject json = null;try {// 这里调用百度的ip定位api服务 详见 http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htmjson = readJsonFromUrl("http://api.map.baidu.com/location/ip?ak=laOQElaF53xGGBjscGtrd10nN4j1zGki&ip=" + ip);//city = (((JSONObject) ((JSONObject) json.get("content")).get("address_detail")).get("city")).toString();map.put("city", ((JSONObject) ((JSONObject) json.get("content")).get("address_detail")).get("city").toString());} catch (Exception e) {e.printStackTrace();}return map;}public static String getLocalCityName() {GetLocationAndIP getLocationANDIp = new GetLocationAndIP();Map<String, Object> map = getLocationANDIp.getAddress();String city = map.get("city").toString();return city.substring(0, city.length() - 1);}public static void main(String[] args) {GetLocationAndIP getLocationANDIp = new GetLocationAndIP();Map<String, Object> map = getLocationANDIp.getAddress();String city = map.get("city").toString();String city_1 = city.substring(0, city.length() - 1);System.out.println(city_1);}
}

补充依赖

<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20090211</version>
</dependency>

由此,天气小demo就跑起来了,效果图如下:

相关文章:

18.天气小案例

1►新增带Layout组件的页面 直接在views文件夹下面新增weather.vue。然后随便写一个123&#xff0c;现在先让我们页面能跳过去先。 让页面能跳过去&#xff0c;有好几种方法&#xff1a; 1、在菜单管理自己添加一个菜单&#xff0c;然后把菜单分配给某个角色&#xff0c;再把…...

医保线上购药系统:代码驱动的医疗创新

医保线上购药系统&#xff0c;这是一个融合技术和医疗的创新典范。本文将通过简单的技术代码示例&#xff0c;为您揭示这一系统是如何通过技术驱动医疗创新&#xff0c;为用户提供更智能、便捷的健康管理体验的。 1. 前端界面开发 使用React框架&#xff0c;我们可以轻松构建…...

VMware OpenSLP漏洞解决方案

PS&#xff1a;早期为客户做VMware检测的方法&#xff0c;大家如有遇到可参考 OpenSLP堆溢出漏洞攻击大量ESXI服务器&#xff0c;该漏洞编号为CVE-2021-21974&#xff0c;由 OpenSLP 服务中的堆溢出问题引起 大于以下版本则不受影响 ESXi versions 7.x prior to ESXi7…...

UEditor编辑器实现上传图片自动加水印功能PHP源码

UEditor编辑器是百度旗下的免费开源富文本编辑器,使用很方便,但是也有缺点,比如,上传图片不能自动添加水印,下边我们就来说说如何在UEditor编辑器中自动实现上传图片添加水印功能,操作很简单。 首先找到UEditor/PHP目录下的Uploader.class.php的文件,打开该文件,找到以…...

【从浅识到熟知Linux】基本指定之find、grep、head和tail

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;一篇又一篇&#xff0c;学写越上头。 文章前言&#xff1a;本文介绍find、grep、head和tail指令用法并给出示例和截图。 文章目录 find基本…...

【云备份】文件操作实用工具类设计

文章目录 为什么要单独设计文件工具类&#xff1f;整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…...

LeetCode Hot100 199.二叉树的右视图

题目&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 方法&#xff08;灵神&#xff09;&#xff1a;先递归右子树&#xff0c;再递归左子树&#xff0c;在递归的同…...

Nacos身份绕过漏洞复现(QVD-2023-6271)

Nacos身份绕过漏洞复现&#xff08;QVD-2023-6271&#xff09; 环境配置 该漏洞主要用了win10_JAVA的环境&#xff0c;参考网上已有的复现文章&#xff0c;使用jdk-11.0.2_windows-x64_bin.exe 由于2.2.0之后的nacos已将本漏洞修复&#xff0c;所以本次复现使用2.2.0的包 下…...

Elasticsearch集群部署 head监控插件 Kibana部署 Nginx反向代理 Logstash部署

一、组件介绍1、Elasticsearch&#xff1a;2 、Logstash3、Kibana4、Kafka&#xff1a;5、Filebeat: 二、 Elasticsearch集群部署服务器创建用户安装ES修改配置文件创建数据和日志目录设置JVM堆大小 #7.0默认为4G修改安装目录及存储目录权限系统优化&#xff08;1&#xff09;增…...

网络和Linux网络_5(应用层)HTTP协议(方法+报头+状态码)

目录 1. HTTP协议介绍 1.1 URL介绍 1.2 urlencode和urldecode 1.3 HTTP协议格式 1.4 HTTP的方法和报头和状态码 2. 代码验证HTTP协议格式 HttpServer.hpp 2.2 html正式测试 Util.hpp index.html 2.3 再看HTTP方法和报头和状态码 2.3.1 方法_GET和POST等 2.3.2 报头…...

人工智能-注意力机制之残差连接和层规范化

残差连接和层规范化 层规范化和批量规范化的目标相同&#xff0c;但层规范化是基于特征维度进行规范化。尽管批量规范化在计算机视觉中被广泛应用&#xff0c;但在自然语言处理任务中&#xff08;输入通常是变长序列&#xff09;批量规范化通常不如层规范化的效果好。 以下代…...

linux centos安装nvm

安装目录 mkdir /opt/nvm && cd /opt/nvm安装包下载 wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.5.tar.gz注意&#xff1a;https://github.com/nvm-sh/nvm/tags获取新版本或所需版本下载链接并替换 安装包解压 for file in *.tar.gz; do tar -zxv…...

Spring(2):Spring事务管理机制

Spring事务管理高层抽象主要包括3个接口&#xff0c;Spring的事务主要是由他们共同完成的&#xff1a; PlatformTransactionManager&#xff1a;事务管理器—主要用于平台相关事务的管理。TransactionDefinition&#xff1a; 事务定义信息(隔离、传播、超时、只读)—通过配置如…...

STK Components 二次开发-创建卫星

1.卫星数据 可以用stk 里面自带的 参数帮助文档。 也可以自己下载 CelesTrak: Current GP Element Sets 这里你所需要的最新卫星数据全有。 其实创建需要的就是卫星的二根数。 给定二根数也可以。 读取数据库中的卫星数据 这个接口优先下载最新的。 var tleList TwoL…...

【深度学习】因果推断与机器学习的高级实践 | 数学建模

文章目录 因果推断因果推断的前世今生&#xff08;1&#xff09;潜在结果框架&#xff08;Potential Outcome Framework&#xff09;&#xff08;2&#xff09;结构因果模型&#xff08;Structual Causal Model&#xff0c;SCM&#xff09; 身处人工智能爆发式增长时代的机器学…...

【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现

目录 题目描述&#xff1a; 示例1 代码实现&#xff1a; 【华为OD】B\C卷真题 100%通过:字符串统计 C/C实现 题目描述&#xff1a; 给定两个字符集合&#xff0c;一个为全量字符集&#xff0c;一个为已占用字符集。已占用的字符集中的字符不能再使用&#xff0c;要求输出剩…...

SparkSession介绍

一、 介绍 SparkSession是Spark 2.0中引入的新概念&#xff0c;它是Spark SQL、DataFrame和Dataset API的入口点&#xff0c;是Spark编程的统一API&#xff0c;也可看作是读取数据的统一入口&#xff1b;它将以前的SparkContext、SQLContext和HiveContext组合在一起&#xff0…...

Error PostCSS plugin autoprefixer requires PostCSS 8

文章目录 一、情况一二、情况二三、总结 在启动 vue项目时&#xff0c;突然控制台报错&#xff1a; Error: PostCSS plugin autoprefixer requires PostCSS 8。然后依次出现下面几种情况&#xff0c;依次解决完&#xff0c;项目就可以正常启动了 一、情况一 error in ./src/…...

纵观手机市场,手机即鏖战全面屏

9月13日&#xff0c;在相继发布Apple TV、Apple Watch 和iPhone 8/8 Plus之后&#xff0c;当大家都以为苹果新品发布会临近结束之时&#xff0c;苹果前CEO史蒂夫乔布斯的这句经典名言再现屏幕&#xff0c;iPhone X终于揭开了神秘面纱。 “One more thing”。 9月13日&#xff…...

基于C#实现Dijkstra算法

或许在生活中&#xff0c;经常会碰到针对某一个问题&#xff0c;在众多的限制条件下&#xff0c;如何去寻找一个最优解&#xff1f;可能大家想到了很多诸如“线性规划”&#xff0c;“动态规划”这些经典策略&#xff0c;当然有的问题我们可以用贪心来寻求整体最优解&#xff0…...

紧急预警:2024年Q3起,Llama-3-Vision、Qwen-VL等主流开源多模态模型在边缘设备运行时功耗超标率达68%——3套轻量化迁移方案限时公开

第一章&#xff1a;多模态大模型能耗优化策略 2026奇点智能技术大会(https://ml-summit.org) 多模态大模型&#xff08;如Flamingo、KOSMOS-2、Qwen-VL&#xff09;在图像理解、跨模态推理等任务中展现出强大能力&#xff0c;但其训练与推理阶段的能源消耗显著高于单模态模型…...

Knwl.js插件依赖管理终极指南:实现插件间高效数据共享与协作

Knwl.js插件依赖管理终极指南&#xff1a;实现插件间高效数据共享与协作 【免费下载链接】Knwl Find Dates, Places, Times, and More. A .js library for parsing text for specific information. 项目地址: https://gitcode.com/gh_mirrors/kn/Knwl Knwl.js作为一款强…...

高项论文「范围管理」超详细写作攻略:从框架到字句,手把手教你写出高分答卷

前言&#xff1a;阅卷老师到底在看什么&#xff1f; 很多人认为论文是“玄学”&#xff0c;其实不然。范围管理论文的评分标准非常清晰&#xff0c;阅卷老师在几分钟内重点抓取以下5个关键得分维度&#xff1a;得分维度占比具体含义你的对策结构完整性20%6个子过程是否全部覆盖…...

如何用AI修复受损音频:VoiceFixer完整指南

如何用AI修复受损音频&#xff1a;VoiceFixer完整指南 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 还在为嘈杂的录音、失真的语音或老旧音频而烦恼吗&#xff1f;VoiceFixer是你的AI音频修复专家&…...

源码解读:拿下顶会最佳论文的重建式VLA,是如何实现的!

“如果模型能重建它&#xff0c;就说明它真正注意到了它” ——源码级解析 目录 01 问题的起点&#xff1a;为什么 VLA 需要“重建”&#xff1f; 02 系统架构总览 03 核心技术一&#xff1a;DiT 扩散去噪与 adaLN-Zero 条件注入 条件的构建与融合 adaLN-Zero 注入逻…...

瑞芯微开发板避坑指南:yolov5s模型在RK3566上的帧率优化实战

瑞芯微RK3566开发板实战&#xff1a;YOLOv5模型选型与帧率优化全解析 边缘计算设备上的AI模型部署&#xff0c;往往需要在性能和精度之间寻找微妙的平衡。当我们手握一块瑞芯微RK3566开发板&#xff0c;面对YOLOv5系列模型时&#xff0c;如何根据实际场景选择最合适的模型&…...

某上市炼化企业人才培养及引进成功案例纪实

某上市炼化企业人才培养及引进成功案例纪实——从“熬年限”到“凭能力”&#xff0c;以人才机制创新支撑战略转型【客户行业】炼化行业&#xff1b;民营企业【问题类型】人才引进&#xff1b;梯队建设【客户背景】该企业是国内领先的民营炼化一体化企业&#xff0c;业务涵盖原…...

终极指南:免费获取 macOS 风格鼠标指针,让你的 Windows/Linux 桌面焕然一新

终极指南&#xff1a;免费获取 macOS 风格鼠标指针&#xff0c;让你的 Windows/Linux 桌面焕然一新 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 想要为你的 Windows 或 Linux 系统…...

如何用 writable 属性描述符限制 JavaScript 对象属性修改

writable属性描述符控制对象属性值是否可被重新赋值&#xff0c;需通过Object.defineProperty()设置&#xff1b;设为false后属性值锁定&#xff0c;赋值操作静默失败或抛TypeError&#xff0c;且不可逆除非configurable为true。用 writable 属性描述符可以控制对象属性值是否可…...

ComfyUI 生态全攻略:从在线体验到云端协作的进阶之路

1. ComfyUI在线平台深度体验指南 第一次接触ComfyUI时&#xff0c;我也被那些密密麻麻的节点吓到了。后来发现&#xff0c;其实完全可以从在线平台开始慢慢熟悉。现在主流的几个平台我都用过&#xff0c;每个都有自己独特的定位。 先说说哩布这个平台&#xff0c;它特别适合中文…...