ui修改
This commit is contained in:
parent
6613d0a3e7
commit
ccb7413bd8
2
.env
2
.env
|
@ -1,5 +1,5 @@
|
|||
NODE_ENV=production
|
||||
VUE_APP_PLATFORM_NAME=青少年膳食营养分析系统
|
||||
VUE_APP_PLATFORM_NAME=天气分析系统
|
||||
# 开启单点登录
|
||||
VUE_APP_SSO=false
|
||||
# 开启微应用模式
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
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 |
Binary file not shown.
After Width: | Height: | Size: 754 KiB |
|
@ -183,7 +183,7 @@
|
|||
* @param title 要修改的新标题
|
||||
*/
|
||||
changeTitle(title) {
|
||||
let projectTitle = "青少年膳食营养分析系统"
|
||||
let projectTitle = "天气分析系统"
|
||||
// 首页特殊处理
|
||||
if (this.$route.path === indexKey) {
|
||||
document.title = projectTitle
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue