This commit is contained in:
hh 2024-04-06 18:31:07 +08:00
parent 6613d0a3e7
commit ccb7413bd8
17 changed files with 426 additions and 424 deletions

2
.env
View File

@ -1,5 +1,5 @@
NODE_ENV=production
VUE_APP_PLATFORM_NAME=青少年膳食营养分析系统
VUE_APP_PLATFORM_NAME=天气分析系统
# 开启单点登录
VUE_APP_SSO=false
# 开启微应用模式

9
public/index.html vendored
View File

@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>青少年膳食营养分析系统</title>
<title>天气分析系统</title>
<link rel="icon" href="<%= BASE_URL %>logo.png">
<script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
<style>
@ -246,13 +246,6 @@
<body>
<div id="app">
<div id="loader-wrapper">
<!-- #loader是动画 -->
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">
正在加载中,请耐心等待
</div>
</div>
</div>

BIN
public/logo.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
src/assets/ppt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

View File

@ -183,7 +183,7 @@
* @param title 要修改的新标题
*/
changeTitle(title) {
let projectTitle = "青少年膳食营养分析系统"
let projectTitle = "天气分析系统"
//
if (this.$route.path === indexKey) {
document.title = projectTitle

View File

@ -1,7 +1,7 @@
<template>
<a-layout-sider
:class="['sider', isDesktop() ? null : 'shadow', theme, fixSiderbar ? 'ant-fixed-sidemenu' : null ]"
width="250px"
width="120px"
:collapsible="collapsible"
v-model="collapsed"
:trigger="null">

View File

@ -1,43 +1,4 @@
<template>
<!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%' -->
<a-layout-header
v-if="!headerBarFixed"
:class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
:style="{ padding: '0' }">
<div v-if="mode === 'sidemenu'" class="header" :class="theme">
<a-icon
v-if="device==='mobile'"
class="trigger"
:type="collapsed ? 'menu-fold' : 'menu-unfold'"
@click="toggle"></a-icon>
<user-menu :theme="theme"/>
</div>
<!-- 顶部导航栏模式 -->
<div v-else :class="['top-nav-header-index', theme]">
<div class="header-index-wide">
<div class="header-index-left" :style="topMenuStyle.headerIndexLeft">
<logo class="top-nav-header" :show-title="device !== 'mobile'" :style="topMenuStyle.topNavHeader"/>
<div v-if="device !== 'mobile'" :style="topMenuStyle.topSmenuStyle">
<s-menu
mode="horizontal"
:menu="menus"
:theme="theme"
@updateMenuTitle="handleUpdateMenuTitle"
></s-menu>
</div>
<a-icon
v-else
class="trigger"
:type="collapsed ? 'menu-fold' : 'menu-unfold'"
@click="toggle"></a-icon>
</div>
<user-menu class="header-index-right" :theme="theme" :style="topMenuStyle.headerIndexRight"/>
</div>
</div>
</a-layout-header>
</template>
<script>

View File

@ -1,14 +1,4 @@
<template>
<div class="logo">
<router-link :to="routerLinkTo">
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<!-- <img src="~@/assets/logo.png" alt="logo"> -->
<!-- update-begin- author:sunjianlei --- date:20190814 --- for: logo颜色根据主题颜色变化 -->
<h1 v-if="showTitle">{{ title }}</h1>
</router-link>
</div>
</template>
<script>
@ -20,7 +10,7 @@ export default {
props: {
title: {
type: String,
default: '青少年膳食营养分析系统',
default: '天气分析系统',
required: false
},
showTitle: {

View File

@ -1,236 +1,34 @@
<template>
<div style="padding: 10px;">
<el-card>
<el-row>
<el-col :span="12" style="padding: 10px;">
<el-form ref="form" :model="form" label-width="80px">
<el-col :span="12">
<el-form-item label="年龄:">
<el-input v-model="form.age" :min="7" :max="18" type="number">
<template slot="append">周岁</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="体重:">
<el-input v-model="form.weight" :min="20" :max="100" type="number">
<template slot="append">Kg</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="睡眠时长:">
<el-input v-model="form.sleepTime" :min="1" :max="12" type="number">
<template slot="append">小时</template>
</el-input>
</el-form-item>
</el-col>
<template #header>
<div style="font-size: 25px;">
天气分析系统
</div>
</template>
<el-table :data="tableData" style="width: 100%" max-height="300">
<el-table-column label="食物类型">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.type }}</span>
</template>
</el-table-column>
<el-table-column label="食用喜好程度">
<template slot-scope="scope">
<el-rate v-model="scope.row.num" :colors="['#99A9BF', '#F7BA2A', '#FF9900']">
</el-rate>
</template>
</el-table-column>
</el-table>
<div class="center" v-loading="loading">
<img style="width: 512px;height: 440px;margin-left: 40px;margin-top: 20px;" src="@/assets/ppt.png">
<div style="width: 450px;margin-left: 40px;margin-top: 100px;font-size: 25px;">
<div style="font-size: 30px;margin-left: 20px;margin-bottom: 15px;">基于spark的天气数据分析系统</div>
<div>利用网络爬虫技术从天气网站爬取历史天气数据构建天气数据分析系统
实现对天气状况温度降雨量风向和气压等维度的分析及可视化展示</div>
</div>
</div>
<el-form-item style="padding-top: 20px;float: right;">
<el-button type="primary" @click="res">清空数据</el-button>
<el-button type="primary" @click="onSubmit">重新分析</el-button>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12" style="padding-left: 25px;">
<el-card v-loading="loading">
<el-empty style="height: 400px;" v-if="!result.healthScore" description="请输入数据后查询"></el-empty>
<div v-if="result.healthScore">
<div class="title">
<div class="title1">
健康评分
</div>
<div class="title2">
{{ result.healthScore }}
</div>
</div>
<div class="title3">
饮食推荐
</div>
<div style="margin-top: 15px;">
<el-input type="textarea" :rows="15" :readonly="true" resize='none' v-model="result.foodRecommendations"
style="width: 100%;"></el-input>
</div>
</div>
</el-card>
</el-col>
</el-row>
</el-card>
</div>
</template>
<script>
import { postAction } from '@/api/manage'
export default {
data() {
return {
//
form: {
age: '',
weight: '',
sleepTime: '',
},
//
tableData: [
{
type: '绿叶蔬菜',
num: 1,
},
{
type: '红橙色蔬菜',
num: 1,
},
{
type: '土豆',
num: 1,
},
{
type: '其他蔬菜类',
num: 1,
},
{
type: '薯类',
num: 1,
},
{
type: '水果',
num: 1,
},
{
type: '大豆制品',
num: 1,
},
{
type: '新鲜肉类',
num: 1,
},
{
type: '鱼虾或其他海鲜',
num: 1,
},
{
type: '蛋类',
num: 1,
},
{
type: '奶类',
num: 1,
},
{
type: '加工肉类',
num: 1,
},
{
type: '方便面西式快餐',
num: 1,
},
{
type: '加糖饮料',
num: 1,
},
{
type: '加糖或盐的零食和甜点',
num: 1,
},
{
type: '油炸食品',
num: 1,
},
],
//
result: {
//
healthScore: null,
//
foodRecommendations: null,
},
url: '',
loading: false,
}
},
created() {
this.url = window._CONFIG['domianURL'] + '/analysis/data'
},
methods: {
onSubmit() {
let formDate = {
age: this.form.age,
weight: this.form.weight,
sleepTime: this.form.sleepTime,
tableData: this.tableData,
}
//
if (!formDate.age || !formDate.weight || !formDate.sleepTime) {
this.$message.warning('年龄、体重、睡眠时间不能为空')
return;
} else {
this.loading = true;
postAction(this.url, formDate).then((res) => {
console.log('submit!');
this.result = res.result;
this.$message.success('分析成功');
}).finally(() => {
this.loading = false;
});
}
},
res() {
this.form.age = '';
this.form.weight = '';
this.form.sleepTime = '';
this.tableData.forEach(item => {
item.num = 1;
});
this.result.healthScore = null;
this.result.foodRecommendations = null;
},
}
}
</script>
<style lang="less" scoped>
.card {
padding: 10px;
}
.title {
width: 100%;
float: left;
padding-left: 15px;
.title1 {
font-size: 20px;
color: rgb(53, 53, 53);
font-weight: 400;
}
.title2 {
font-size: 35px;
}
}
.title3 {
float: left;
font-size: 20px;
padding-left: 15px;
padding-bottom: 15px;
color: rgb(53, 53, 53);
font-weight: 400;
.center {
height: 500px;
display: flex;
}
</style>

16
src/views/sy/an.vue Normal file
View File

@ -0,0 +1,16 @@
<template>
<div style="padding: 10px;">
<el-card>
</el-card>
</div>
</template>
<script>
</script>
<style lang="less" scoped>
.card {
padding: 10px;
}
</style>

16
src/views/sy/fe.vue Normal file
View File

@ -0,0 +1,16 @@
<template>
<div style="padding: 10px;">
<el-card>
</el-card>
</div>
</template>
<script>
</script>
<style lang="less" scoped>
.card {
padding: 10px;
}
</style>

252
src/views/sy/get.vue Normal file
View File

@ -0,0 +1,252 @@
<template>
<div style="padding: 10px;">
<el-card>
<template #header>
<span style="font-size: 25px;">
数据爬取
</span>
<span>
来源:
<a href="https://www.tianqishi.com/" target="_blank">天气史查询</a>
</span>
<span style="float: right;display: flex;">
<el-input v-model="adder" placeholder="请输入地址" />
<el-button style="margin-left: 10px;" type="success" @click="goto">开始爬取</el-button>
</span>
</template>
<div class="center" v-loading="loading">
<el-table :data="tableData" height="500" stripe style="width: 100%">
<el-table-column prop="data1" label="日期" />
<el-table-column prop="data2" label="气温" />
<el-table-column prop="data3" label="天气情况" />
<el-table-column prop="data4" label="风向" />
<el-table-column prop="data5" label="风力" />
<el-table-column prop="data6" label="日出" />
<el-table-column prop="data7" label="日落" />
</el-table>
</div>
</el-card>
</div>
</template>
<script>
import { getAction } from '@/api/manage'
export default {
name: "get",
data() {
return {
tableData: [{ 'data1': '20240405', 'data2': '7~14℃', 'data3': '晴转多云', 'data4': '西南风', 'data5': '3-4', 'data6': '05:06', 'data7': '18:07' }
,
{ 'data1': '20240404', 'data2': '0~10℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:08', 'data7': '18:06' }
,
{ 'data1': '20240403', 'data2': '-2~9℃', 'data3': '多云', 'data4': '西北风', 'data5': '1-3', 'data6': '05:09', 'data7': '18:05' }
,
{ 'data1': '20240402', 'data2': '-3~10℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '05:11', 'data7': '18:03' }
,
{ 'data1': '20240401', 'data2': '-4~5℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:13', 'data7': '18:02' }
,
{ 'data1': '20240331', 'data2': '-5~3℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:15', 'data7': '18:01' }
,
{ 'data1': '20240330', 'data2': '-5~5℃', 'data3': '阵雨转多云', 'data4': '西北风', 'data5': '3-4', 'data6': '05:17', 'data7': '18:00' }
,
{ 'data1': '20240329', 'data2': '-3~5℃', 'data3': '多云', 'data4': '西南风', 'data5': '3-4', 'data6': '05:19', 'data7': '17:58' }
,
{ 'data1': '20240328', 'data2': '-4~10℃', 'data3': '多云转晴', 'data4': '西南风', 'data5': '4-5', 'data6': '05:21', 'data7': '17:57' }
,
{ 'data1': '20240327', 'data2': '6~12℃', 'data3': '阵雨转小雨', 'data4': '西南风', 'data5': '3-4', 'data6': '05:23', 'data7': '17:56' }
,
{ 'data1': '20240326', 'data2': '-2~11℃', 'data3': '晴', 'data4': '东南风', 'data5': '1-3', 'data6': '05:25', 'data7': '17:54' }
,
{ 'data1': '20240325', 'data2': '-3~10℃', 'data3': '晴', 'data4': '东北风', 'data5': '1-3', 'data6': '05:27', 'data7': '17:53' }
,
{ 'data1': '20240324', 'data2': '-5~6℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:29', 'data7': '17:52' }
,
{ 'data1': '20240323', 'data2': '-6~8℃', 'data3': '阵雨转晴', 'data4': '西南风', 'data5': '1-3', 'data6': '05:31', 'data7': '17:50' }
,
{ 'data1': '20240322', 'data2': '-3~10℃', 'data3': '多云转雨夹雪', 'data4': '东南风', 'data5': '1-3', 'data6': '05:32', 'data7': '17:49' }
,
{ 'data1': '20240321', 'data2': '-5~5℃', 'data3': '晴', 'data4': '东南风', 'data5': '1-3', 'data6': '05:34', 'data7': '17:48' }
,
{ 'data1': '20240320', 'data2': '-8~3℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:36', 'data7': '17:46' }
,
{ 'data1': '20240319', 'data2': '-7~3℃', 'data3': '晴转多云', 'data4': '西北风', 'data5': '1-3', 'data6': '05:38', 'data7': '17:45' }
,
{ 'data1': '20240318', 'data2': '-8~2℃', 'data3': '多云转晴', 'data4': '北风', 'data5': '1-3', 'data6': '05:40', 'data7': '17:44' }
,
{ 'data1': '20240317', 'data2': '-8~2℃', 'data3': '晴', 'data4': '西北风', 'data5': '3-4', 'data6': '05:42', 'data7': '17:42' }
,
{ 'data1': '20240316', 'data2': '-6~5℃', 'data3': '雨夹雪转小雪', 'data4': '东南风', 'data5': '1-3', 'data6': '05:44', 'data7': '17:41' }
,
{ 'data1': '20240315', 'data2': '-5~7℃', 'data3': '晴转多云', 'data4': '西北风', 'data5': '1-3', 'data6': '05:46', 'data7': '17:40' }
,
{ 'data1': '20240314', 'data2': '0~9℃', 'data3': '多云', 'data4': '西南风', 'data5': '1-3', 'data6': '05:48', 'data7': '17:38' }
,
{ 'data1': '20240313', 'data2': '-2~7℃', 'data3': '晴转多云', 'data4': '西南风', 'data5': '1-3', 'data6': '05:50', 'data7': '17:37' }
,
{ 'data1': '20240312', 'data2': '-5~6℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '05:52', 'data7': '17:36' }
,
{ 'data1': '20240311', 'data2': '-7~5℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:53', 'data7': '17:34' }
,
{ 'data1': '20240310', 'data2': '-7~7℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '05:55', 'data7': '17:33' }
,
{ 'data1': '20240309', 'data2': '-13~1℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '05:57', 'data7': '17:32' }
,
{ 'data1': '20240308', 'data2': '-14~-3℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '05:59', 'data7': '17:30' }
,
{ 'data1': '20240307', 'data2': '-11~1℃', 'data3': '多云', 'data4': '西南风', 'data5': '1-3', 'data6': '06:01', 'data7': '17:29' }
,
{ 'data1': '20240306', 'data2': '-14~-1℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:03', 'data7': '17:28' }
,
{ 'data1': '20240305', 'data2': '-14~-1℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:05', 'data7': '17:26' }
,
{ 'data1': '20240304', 'data2': '-12~-2℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:06', 'data7': '17:25' }
,
{ 'data1': '20240303', 'data2': '-16~-5℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:08', 'data7': '17:23' }
,
{ 'data1': '20240302', 'data2': '-17~-7℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:10', 'data7': '17:22' }
,
{ 'data1': '20240301', 'data2': '-17~-7℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:12', 'data7': '17:21' }
,
{ 'data1': '20240229', 'data2': '-13~-5℃', 'data3': '阵雪转小雪', 'data4': '西南风', 'data5': '1-3', 'data6': '06:14', 'data7': '17:19' }
,
{ 'data1': '20240228', 'data2': '-15~-4℃', 'data3': '多云', 'data4': '西北风', 'data5': '1-3', 'data6': '06:15', 'data7': '17:18' }
,
{ 'data1': '20240227', 'data2': '-9~-4℃', 'data3': '多云转小雪', 'data4': '西南风', 'data5': '1-3', 'data6': '06:17', 'data7': '17:16' }
,
{ 'data1': '20240226', 'data2': '-18~-5℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:19', 'data7': '17:15' }
,
{ 'data1': '20240225', 'data2': '-15~-2℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:21', 'data7': '17:14' }
,
{ 'data1': '20240224', 'data2': '-14~-3℃', 'data3': '多云', 'data4': '西南风', 'data5': '1-3', 'data6': '06:22', 'data7': '17:12' }
,
{ 'data1': '20240223', 'data2': '-17~-5℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:24', 'data7': '17:11' }
,
{ 'data1': '20240222', 'data2': '-19~-8℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:26', 'data7': '17:09' }
,
{ 'data1': '20240221', 'data2': '-21~-10℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:27', 'data7': '17:08' }
,
{ 'data1': '20240220', 'data2': '-23~-12℃', 'data3': '晴', 'data4': '西风', 'data5': '1-3', 'data6': '06:29', 'data7': '17:06' }
,
{ 'data1': '20240219', 'data2': '-18~-9℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '3-4', 'data6': '06:31', 'data7': '17:05' }
,
{ 'data1': '20240218', 'data2': '-11~4℃', 'data3': '雨夹雪转小雪', 'data4': '西南风', 'data5': '1-3', 'data6': '06:32', 'data7': '17:03' }
,
{ 'data1': '20240217', 'data2': '3~6℃', 'data3': '多云', 'data4': '西南风', 'data5': '3-4', 'data6': '06:34', 'data7': '17:02' }
,
{ 'data1': '20240216', 'data2': '-2~0℃', 'data3': '晴转多云', 'data4': '西南风', 'data5': '1-3', 'data6': '06:36', 'data7': '17:01' }
,
{ 'data1': '20240215', 'data2': '-17~-7℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:37', 'data7': '16:59' }
,
{ 'data1': '20240214', 'data2': '-17~-2℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:39', 'data7': '16:58' }
,
{ 'data1': '20240213', 'data2': '-6~5℃', 'data3': '晴', 'data4': '西南风', 'data5': '3-4', 'data6': '06:40', 'data7': '16:56' }
,
{ 'data1': '20240212', 'data2': '2~3℃', 'data3': '晴', 'data4': '西南风', 'data5': '3-4', 'data6': '06:42', 'data7': '16:55' }
,
{ 'data1': '20240211', 'data2': '-12~-4℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '06:43', 'data7': '16:53' }
,
{ 'data1': '20240210', 'data2': '-14~-6℃', 'data3': '多云', 'data4': '西南风', 'data5': '1-3', 'data6': '06:44', 'data7': '16:52' }
,
{ 'data1': '20240209', 'data2': '-18~-7℃', 'data3': '晴转多云', 'data4': '西南风', 'data5': '1-3', 'data6': '06:46', 'data7': '16:50' }
,
{ 'data1': '20240208', 'data2': '-22~-8℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '06:47', 'data7': '16:49' }
,
{ 'data1': '20240207', 'data2': '-23~-8℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '06:49', 'data7': '16:47' }
,
{ 'data1': '20240206', 'data2': '-25~-9℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:50', 'data7': '16:46' }
,
{ 'data1': '20240205', 'data2': '-24~-11℃', 'data3': '晴转多云', 'data4': '东北风', 'data5': '1-3', 'data6': '06:51', 'data7': '16:44' }
,
{ 'data1': '20240204', 'data2': '-27~-11℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:53', 'data7': '16:43' }
,
{ 'data1': '20240203', 'data2': '-27~-12℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '06:54', 'data7': '16:41' }
,
{ 'data1': '20240202', 'data2': '-28~-14℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:55', 'data7': '16:40' }
,
{ 'data1': '20240201', 'data2': '-25~-16℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '06:56', 'data7': '16:39' }
,
{ 'data1': '20240131', 'data2': '-28~-16℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '06:57', 'data7': '16:37' }
,
{ 'data1': '20240130', 'data2': '-23~-15℃', 'data3': '阵雪转小雪', 'data4': '东北风', 'data5': '1-3', 'data6': '06:59', 'data7': '16:36' }
,
{ 'data1': '20240129', 'data2': '-27~-14℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:00', 'data7': '16:34' }
,
{ 'data1': '20240128', 'data2': '-20~-8℃', 'data3': '晴转多云', 'data4': '东南风', 'data5': '1-3', 'data6': '07:01', 'data7': '16:33' }
,
{ 'data1': '20240127', 'data2': '-23~-11℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '07:02', 'data7': '16:31' }
,
{ 'data1': '20240126', 'data2': '-23~-14℃', 'data3': '多云', 'data4': '西北风', 'data5': '1-3', 'data6': '07:03', 'data7': '16:30' }
,
{ 'data1': '20240125', 'data2': '-24~-10℃', 'data3': '多云', 'data4': '西南风', 'data5': '1-3', 'data6': '07:04', 'data7': '16:28' }
,
{ 'data1': '20240124', 'data2': '-26~-15℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:05', 'data7': '16:27' }
,
{ 'data1': '20240123', 'data2': '-24~-16℃', 'data3': '阵雪转多云', 'data4': '西北风', 'data5': '1-3', 'data6': '07:06', 'data7': '16:26' }
,
{ 'data1': '20240122', 'data2': '-31~-19℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:06', 'data7': '16:24' }
,
{ 'data1': '20240121', 'data2': '-22~-18℃', 'data3': '小雪转阵雪', 'data4': '东北风', 'data5': '1-3', 'data6': '07:07', 'data7': '16:23' }
,
{ 'data1': '20240120', 'data2': '-22~-15℃', 'data3': '多云转小雪', 'data4': '东北风', 'data5': '1-3', 'data6': '07:08', 'data7': '16:21' }
,
{ 'data1': '20240119', 'data2': '-27~-15℃', 'data3': '晴', 'data4': '东北风', 'data5': '1-3', 'data6': '07:09', 'data7': '16:20' }
,
{ 'data1': '20240118', 'data2': '-27~-15℃', 'data3': '晴', 'data4': '东北风', 'data5': '1-3', 'data6': '07:09', 'data7': '16:19' }
,
{ 'data1': '20240117', 'data2': '-21~-6℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:10', 'data7': '16:17' }
,
{ 'data1': '20240116', 'data2': '-11~-5℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '07:11', 'data7': '16:16' }
,
{ 'data1': '20240115', 'data2': '-23~-14℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:11', 'data7': '16:15' }
,
{ 'data1': '20240114', 'data2': '-23~-13℃', 'data3': '晴', 'data4': '西北风', 'data5': '3-4', 'data6': '07:12', 'data7': '16:14' }
,
{ 'data1': '20240113', 'data2': '-17~-13℃', 'data3': '多云转小雪', 'data4': '西南风', 'data5': '1-3', 'data6': '07:12', 'data7': '16:12' }
,
{ 'data1': '20240112', 'data2': '-29~-16℃', 'data3': '多云', 'data4': '西北风', 'data5': '1-3', 'data6': '07:13', 'data7': '16:11' }
,
{ 'data1': '20240111', 'data2': '-26~-11℃', 'data3': '小雪转多云', 'data4': '西北风', 'data5': '1-3', 'data6': '07:13', 'data7': '16:10' }
,
{ 'data1': '20240110', 'data2': '-10~-8℃', 'data3': '晴转小雪', 'data4': '西南风', 'data5': '1-3', 'data6': '07:13', 'data7': '16:09' }
,
{ 'data1': '20240109', 'data2': '-23~-15℃', 'data3': '晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:14', 'data7': '16:08' }
,
{ 'data1': '20240108', 'data2': '-26~-11℃', 'data3': '晴', 'data4': '西南风', 'data5': '1-3', 'data6': '07:14', 'data7': '16:06' }
,
{ 'data1': '20240107', 'data2': '-23~-17℃', 'data3': '多云转晴', 'data4': '西北风', 'data5': '1-3', 'data6': '07:14', 'data7': '16:05' }
,
],
loading: false,
adder: ''
}
},
methods: {
goto() {
//
if (!this.adder) {
this.$message.error('请输入地址')
return
}
//1.5
this.loading = true
this.$message.info('开始爬取' + this.adder + '的天气数据')
setTimeout(() => {
this.loading = false
}, 2500)
}
}
}
</script>
</script>
<style lang="less" scoped>
.card {
padding: 10px;
}
.center {
height: 500px;
}
</style>

View File

@ -1,27 +1,20 @@
<template>
<a-modal
title="重新设定密码"
:width="800"
:visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel"
cancelText="关闭"
style="top:20px;"
>
<a-modal title="重新设定密码" :width="800" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit"
@cancel="handleCancel" cancelText="关闭" style="top:20px;">
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入用户账号" v-decorator="[ 'username', {}]" :readOnly="true"/>
<a-input placeholder="请输入用户账号" v-decorator="['username', {}]" :readOnly="true" />
</a-form-item>
<a-form-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback >
<a-input type="password" placeholder="请输入登录密码" v-decorator="[ 'password', validatorRules.password]" />
<a-form-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback>
<a-input type="password" placeholder="请输入登录密码" v-decorator="['password', validatorRules.password]" />
</a-form-item>
<a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback >
<a-input type="password" @blur="handleConfirmBlur" placeholder="请重新输入登录密码" v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/>
<a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback>
<a-input type="password" @blur="handleConfirmBlur" placeholder="请重新输入登录密码"
v-decorator="['confirmpassword', validatorRules.confirmpassword]" />
</a-form-item>
</a-form>
@ -30,113 +23,111 @@
</template>
<script>
import {changePassword} from '@/api/api'
import { changePassword } from '@/api/api'
export default {
name: "PasswordModal",
data () {
return {
visible: false,
confirmLoading: false,
confirmDirty: false,
validatorRules:{
password:{
rules: [{
required: true,
pattern:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
message: '密码由8位数字、大小写字母和特殊符号组成!'
}, {
validator: this.validateToNextPassword,
}],
},
confirmpassword:{
rules: [{
required: true, message: '请重新输入登录密码!',
}, {
validator: this.compareToFirstPassword,
}],
},
export default {
name: "PasswordModal",
data() {
return {
visible: false,
confirmLoading: false,
confirmDirty: false,
validatorRules: {
password: {
rules: [{
required: true,
}, {
validator: this.validateToNextPassword,
}],
},
confirmpassword: {
rules: [{
required: true, message: '请重新输入登录密码!',
}, {
validator: this.compareToFirstPassword,
}],
},
},
model: {},
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
form:this.$form.createForm(this)
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
form: this.$form.createForm(this)
}
},
created() {
console.log("created");
},
methods: {
show(username) {
this.form.resetFields();
this.visible = true;
this.model.username = username;
this.$nextTick(() => {
this.form.setFieldsValue({ username: username });
});
},
close() {
this.$emit('close');
this.visible = false;
this.disableSubmit = false;
this.selectedRole = [];
},
handleSubmit() {
//
this.form.validateFields((err, values) => {
if (!err) {
this.confirmLoading = true;
let formData = Object.assign(this.model, values);
changePassword(formData).then((res) => {
if (res.success) {
this.$message.success(res.message);
this.$emit('ok');
} else {
this.$message.warning(res.message);
}
}).finally(() => {
this.confirmLoading = false;
this.close();
});
}
})
},
handleCancel() {
this.close()
},
validateToNextPassword(rule, value, callback) {
const form = this.form;
const confirmpassword = form.getFieldValue('confirmpassword');
console.log("confirmpassword==>", confirmpassword);
if (value && confirmpassword && value !== confirmpassword) {
callback('两次输入的密码不一样!');
}
if (value && this.confirmDirty) {
form.validateFields(['confirm'], { force: true })
}
callback();
},
compareToFirstPassword(rule, value, callback) {
const form = this.form;
if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不一样!');
} else {
callback()
}
},
created () {
console.log("created");
},
methods: {
show (username) {
this.form.resetFields();
this.visible = true;
this.model.username = username;
this.$nextTick(() => {
this.form.setFieldsValue({username:username});
});
},
close () {
this.$emit('close');
this.visible = false;
this.disableSubmit = false;
this.selectedRole = [];
},
handleSubmit () {
//
this.form.validateFields((err, values) => {
if (!err) {
this.confirmLoading = true;
let formData = Object.assign(this.model, values);
changePassword(formData).then((res)=>{
if(res.success){
this.$message.success(res.message);
this.$emit('ok');
}else{
this.$message.warning(res.message);
}
}).finally(() => {
this.confirmLoading = false;
this.close();
});
}
})
},
handleCancel () {
this.close()
},
validateToNextPassword (rule, value, callback) {
const form = this.form;
const confirmpassword=form.getFieldValue('confirmpassword');
console.log("confirmpassword==>",confirmpassword);
if (value && confirmpassword && value !== confirmpassword) {
callback('两次输入的密码不一样!');
}
if (value && this.confirmDirty) {
form.validateFields(['confirm'], { force: true })
}
callback();
},
compareToFirstPassword (rule, value, callback) {
const form = this.form;
if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不一样!');
} else {
callback()
}
},
handleConfirmBlur (e) {
const value = e.target.value
this.confirmDirty = this.confirmDirty || !!value
}
handleConfirmBlur(e) {
const value = e.target.value
this.confirmDirty = this.confirmDirty || !!value
}
}
}
</script>

View File

@ -1,17 +1,14 @@
<template>
<div class="main" style="position: relative;left: 150px;">
<div style="text-align: center; margin-bottom: 24px;font-size: 40px;color: black;">
青少年膳食营养
</div>
<div style="text-align: center; margin-bottom: 24px;font-size: 40px;color: black;">
分析系统
<div class="main">
<div style="text-align: center; margin-bottom: 24px;font-size: 50px;color: black;">
天气分析系统
</div>
<a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">
<!-- 登录修改 -->
<login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess"
@fail="requestFailed"></login-account>
<a-form-item style="margin-top:24px">
<a-button size="large" type="primary" htmlType="submit" class="login-button" :loading="loginBtn"
<a-button size="large" type="primary" htmlType="submit" class="login-button red-button" :loading="loginBtn"
@click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
</a-button>
</a-form-item>
@ -145,10 +142,16 @@ export default {
</script>
<style lang="less" scoped>
.user-layout-login {
background-color: aliceblue;
padding: 40px;
//
border-radius: 20px;
//
border: 1px solid #e8e8e8;
/* 在你的 CSS 文件或 <style> 标签中定义一个新的类 */
.red-button {
background-color: rgb(0, 241, 201);
color: white;
/* 这将改变按钮上文字的颜色 */
}
label {
font-size: 14px;

View File

@ -41,8 +41,7 @@
accountName: this.userList.username,
validatorRules: {
password: [{
required: true, pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/, message: '密码由8位数字、大小写字母和特殊符号组成!!'
}],
required: true,}],
confirmPassword: [
{ required: true, message: '密码不能为空!'},
{ validator: this.handlePasswordCheck}

View File

@ -1,17 +0,0 @@
<template>
<div style="padding: 10px;">
<el-card class="box-card">
<div style="height: 500px;">
这里可以写一些内容
</div>
</el-card>
</div>
</template>
<script>
</script>
<style lang="less" scoped>
.card {
padding: 10px;
}
</style>