Browse Source

2024-10-19

develop
王钦 1 month ago
parent
commit
dbc9be06fb
  1. BIN
      ruoyi-ui/src/views/JiHeExpressway/images/title/title-solar.png
  2. 912
      ruoyi-ui/src/views/login.vue

BIN
ruoyi-ui/src/views/JiHeExpressway/images/title/title-solar.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

912
ruoyi-ui/src/views/login.vue

@ -1,461 +1,569 @@
<template>
<div class="login">
<div class="login-content">
<div class="login-l">
<div class="logo"><img src="../assets/images/login/logo.png" /></div>
<span>齐鲁高速</span>
<span>济菏数智运营管理平台</span>
<div class="solar">
<gisMap2d ref="gisMap2d"
:mapZoom = "mapZoom"
:mapCenter="mapCenter"
radarSliderBottom="33%"
radarSliderRight="14%"
:mapBoxHeight="height" @clickPointEvent="clickPointEvent" widgetBoxDisplay="none"></gisMap2d>
<div class="solar_left">
<div>
<Bg2 class="content-l-t">
<div class="focuse-header">
<div class="title">重点数据</div>
</div>
<div class="content-l-t-content">
<div class="content-k1">
<div>当年累计发电量</div>
<div class="content-kk">
<div v-for="(item, index) in titles[0].value">{{ item }}</div>
</div>
<div class="content-unit" style="margin-top: 0px;">万度</div>
</div>
<div class="content-k1">
<div>当年累计用电量</div>
<div class="content-kk">
<div v-for="(item, index) in titles[1].value">{{ item }}</div>
</div>
<div class="content-unit">万度</div>
</div>
<div class="content-k1">
<div>今日累计发电量</div>
<div class="content-ll">
<div class="content-llc">
<div v-for="(item, index) in 10"></div>
</div>
</div>
<div class="content-unit">{{ titles[2].value }}</div>
</div>
<div class="content-k1">
<div>今日累计用电量</div>
<div class="content-ll">
<div class="content-llc">
<div v-for="(item, index) in 24"></div>
</div>
</div>
<div class="content-unit">{{ titles[2].value }}</div>
</div>
</div>
</Bg2>
</div>
<div class="login-r">
<span class="title">欢迎登录</span>
<img class="line" src="../assets/images/login/139.png" />
<el-form
ref="loginForm"
:model="loginForm"
:rules="loginRules"
class="login-form"
><el-form-item prop="username">
<el-input
v-model="loginForm.username"
type="text"
auto-complete="off"
placeholder="请输入用户名"
class="username"
>
<img
slot="prefix"
src="../assets/images/login/user.png"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
type="password"
auto-complete="off"
placeholder="请输入密码"
@keyup.enter.native="handleLogin"
class="password"
>
<img
slot="prefix"
src="../assets/images/login/password.png"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<Verify
@success="capctchaCheckSuccess"
:mode="'pop'"
:captchaType="'blockPuzzle'"
:imgSize="{ width: '330px', height: '155px' }"
ref="verify"
></Verify>
<el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox>
<el-form-item>
<el-button
class="btn"
:loading="loading"
size="medium"
type="goon"
style="width: 100%"
@click.native.prevent="handleLogin"
>
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
<div style="float: right" v-if="register">
<router-link class="link-type" :to="'/register'"
>立即注册</router-link
>
<div>
<Bg2 class="content-l-t">
<div class="focuse-header">
<div class="title">设备统计</div>
</div>
<div class="content-l-sec-content">
<div id="chartp1" class="secleft"></div>
<div class="secright">
<div class="d1"><span>1000</span> </div>
<div class="d2">设备总数</div>
<div class="d1"><span>10</span> </div>
<div class="d2">放电异常设备</div>
</div>
</el-form-item>
</el-form>
</div>
</Bg2>
</div>
<div>
<Bg2 class="content-l-t">
<div class="focuse-header">
<div class="title">环境贡献</div>
</div>
<div class="content-l-third-content">
<div class="thirditem">
<img :src="require('@screen/images/solar/CO2.png')" />
<div class="thirdNum"><span>88.88</span></div>
<div>CO减排</div>
</div>
<div class="thirditem">
<img :src="require('@screen/images/solar/tree.png')" />
<div class="thirdNum"><span>88.88</span></div>
<div>等效植树</div>
</div>
<div class="thirditem">
<img :src="require('@screen/images/solar/coal.png')" />
<div class="thirdNum"><span>8888</span>Kg</div>
<div>节约标准煤</div>
</div>
</div>
</Bg2>
</div>
</div>
<!-- 底部 -->
<div class="el-login-footer">
<!-- <span>Copyright ©hamdell All Rights Reserved.</span> -->
<div class="solar_right">
<div>
<Bg2 class="content-l-t" style="width:420px;">
<div class="focuse-header">
<div class="title2"></div>
</div>
<div class="content-box">
<div class="box-title " style="margin-top: 15px;">
<span>今日发电统计</span>
<span style="margin-left: 140px;">总计{{ chart1Total1 }}</span>
</div>
<div id="charts1" class="chart"></div>
<div class="box-title " style="margin-top: 15px;">
<span>今日用电统计</span>
<span style="margin-left: 140px;">总计{{ chart1Total1 }}</span>
</div>
<div id="charts1" class="chart"></div>
<div class="box-title " style="margin-top: 15px;">
<span>今日功率统计</span>
<span style="margin-left: 140px;">总计{{ chart1Total3 }}千瓦</span>
</div>
<div id="charts1" class="chart"></div>
</div>
</Bg2>
</div>
</div>
</div>
</template>
<script>
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
import Verify from "@/components/Verifition/Verify";
import { getCaptchaOnOff } from "@/api/login.js";
import { listOrder } from "@/api/payment/order";
import { getUserDeptId } from "@/api/system/user";
import { listTunnels } from "@/api/equipment/tunnel/api.js";
import { getConfigKey } from "@/api/system/config.js";
import Bg2 from "@screen/components/Decorations/bg-2.vue";
import Bg2 from "@screen/components/Decorations/bg-2.vue"
import request from "@/utils/request";
import * as echarts from "echarts";
export default {
components: { Verify, Bg2 },
name: "Login",
components: {
Bg2
},
name: "Soler",
data() {
return {
title: "", //
cookiePassword: "",
loginForm: {
// username: "admin",
// password: "dxc123!@#",
//dxc123!@#
username: "",
password: "",
rememberMe: false,
code: "",
uuid: "",
},
loginRules: {
username: [
{ required: true, trigger: "blur", message: "请输入您的账号" },
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" },
],
},
titles: [
{ icon: 'total.png', label: '当年累计发电量', unit: '度', value: '0022.4512' },
{ icon: 'used.png', label: '当年累计用电量', unit: '度', value: '0022.4512' },
{ icon: 'total.png', label: '今日累计发电量', unit: '度', value: '5555' },
{ icon: 'used.png', label: '今日累计用电量', unit: '度', value: '6666' },
{ icon: 'CO2.png', label: 'CO₂减排', unit: 'kg', value: '7777' },
{ icon: 'tree.png', label: '等效植树', unit: '棵', value: '8888' },
{ icon: 'coal.png', label: '节约标准煤', unit: 'kg', value: '-' },
{ icon: 'error.png', label: '放电异常设备', unit: '个', value: '-' },
],
chartp1: null,
chart1: null,
chart2: null,
chart3: null,
chart1Total1: '-',
chart1Total2: '-',
chart1Total3: '-',
loading: false,
//
captchaOnOff: false,
//
register: false,
redirect: undefined,
};
},
watch: {
$route: {
handler: function (route) {
this.redirect = route.query && route.query.redirect;
},
immediate: true,
},
},
created() {
this.getCookie();
//this.getCaptchaOnOffFun();
this.title = systemConfig.title(systemConfig.systemType);
mounted() {
this.initTotal();
this.initChart();
},
methods: {
//
getCaptchaOnOffFun() {
getCaptchaOnOff().then((response) => {
this.captchaOnOff = response.captchaOnOff;
});
initTotal() {
this.initP1();
},
//
capctchaCheckSuccess(params) {
this.loginForm.code = params.captchaVerification;
this.loading = true;
console.log(this.loginForm.rememberMe, "=======================");
if (this.loginForm.rememberMe == true) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), {
expires: 30,
});
Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("rememberMe");
initP1() {
const _chartsOptions = {
tooltip: {
trigger: 'item',
position: ['80%', '50%']
},
series: [
{
name: '设备统计',
type: 'pie',
radius: '70%',
center: ['50%', '50%'],
avoidLabelOverlap: false,
data: [
{ value: 900, name: '正常设备总数', itemStyle: { color: '#38737f' } },
{ value: 100, name: '异常设备数量', itemStyle: { color: '#9ff501' } },
],
label: {
show: false,
},
labelLine: {
show: false,
}
}
]
}
if (!this.chartp1) {
this.chartp1 = echarts.init(document.getElementById("chartp1"));
let option1 = JSON.parse(JSON.stringify(_chartsOptions));
this.chartp1.setOption(option1);
this.chartp1.resize();
}
this.$store
.dispatch("Login", this.loginForm)
.then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(() => {});
})
.catch(() => {
this.loading = false;
});
},
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get("rememberMe");
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password:
password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
};
},
handleLogin() {
if (this.captchaOnOff) {
this.$refs.loginForm.validate((valid) => {
if (valid) {
this.$refs.verify.show();
}
});
} else {
if (this.loginForm.rememberMe == true) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), {
expires: 30,
});
Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("rememberMe");
}
this.$store
.dispatch("Login", this.loginForm)
.then(() => {
this.$store.commit("menu/resetRecent");
// this.$router.push({ path: this.redirect || "/" }).catch(() => {});
this.$router.push({ path: "/" }).catch(() => {});
// this.getManageStation();
initChart(){
const _chartsOptions = {
color:['#00bead'],
title: {
text: '度',
textStyle:{
color:'#E5E7E8',
fontSize: 15,
fontStyle:'normal'
},
top:'10px',
left: '10px'
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: ['0点', '1点', '2点','3点', '4点','5点','6点','7点','8点', '9点','10点','11点',
'12点','13点','14点','15点','16点','17点','18点','19点','20点','21点','22点','23点'],
axisLine:{
show:true,
lineStyle:{
color:'#fff'
}
},
axisTick:{
show:false,
},
axisLabel: {
align: "center",
rotate: "1",
margin: 20,
textStyle: {
fontSize: 10,
color: "#E5E7E8",
}
},
},
yAxis: {
type: 'value',
axisLabel: {
show: false,
color: "#E5E7E8",
textStyle: {
fontSize: 10,
},
},
axisLine:{
show:true,
lineStyle:{
color:'#fff'
}
},
splitLine: {
show: false
},
},
grid: {
left: "40px",
right: "20px",
top: "10px",
bottom: "0px",
containLabel: true,
},
series: [
{
data: [],
type: 'line',
smooth: true
}
]
}
this.chart1 = echarts.init(document.getElementById("charts1"));
let option1 = JSON.parse(JSON.stringify(_chartsOptions));
const data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
let total = 0;
this.chart1Total1 = total;
option1.series[0].data = data;
this.chart1.setOption(option1);
this.chart1.resize();
return;
if(!this.chart1){
this.chart1 = echarts.init(document.getElementById("charts1"));
let option1 = JSON.parse(JSON.stringify(_chartsOptions));
request({
url: 'business/device/properties/history/oneDay/dailyAccumulatedCharge',
method: 'get'
}).then(result => {
if (result.code != 200) return;
const data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
let total = 0;
for(let i in result.data){
total += result.data[i]
const idx = parseInt(i.substr(11,2));
data[idx] = result.data[i];
}
this.chart1Total1 = total;
option1.series[0].data = data;
this.chart1.setOption(option1);
this.chart1.resize();
})
.catch(() => {
this.loading = false;
});
}
},
getManageStation() {
getConfigKey("sd.moduleSwitch").then((res) => {
console.log(res, "管理站01");
this.$cache.local.set("manageStation", res.msg);
});
getConfigKey("sd.navigationBar").then((res) => {
console.log(res, "res");
let sideTheme = "theme-blue";
if (res.msg == "0") {
sideTheme = "theme-dark";
} else {
sideTheme = "theme-blue";
this.chart2 = echarts.init(document.getElementById("charts2"));
let option2 = JSON.parse(JSON.stringify(_chartsOptions));
request({
url: 'business/device/properties/history/oneDay/cumulativeElectricityConsumptionOnTheDay',
method: 'get'
}).then(result => {
if (result.code != 200) return;
const data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
let total = 0;
for(let i in result.data){
total += result.data[i]
const idx = parseInt(i.substr(11,2));
data[idx] = result.data[i];
}
this.chart1Total2 = total;
option2.series[0].data = data;
this.chart2.setOption(option2);
this.chart2.resize();
})
//
this.chart3 = echarts.init(document.getElementById("charts3"));
let option3 = JSON.parse(JSON.stringify(_chartsOptions));
request({
url: 'business/device/properties/history/oneDay/generatingPower',
method: 'get'
}).then(result => {
if (result.code != 200) return;
const data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
let total = 0;
for(let i in result.data){
total += result.data[i]
const idx = parseInt(i.substr(11,2));
data[idx] = result.data[i];
}
this.chart1Total3 = total;
option3.series[0].data = data;
this.chart3.setOption(option3);
this.chart3.resize()
})
}
// console.log(res, "");
this.$cache.local.set("navigationBar", res.msg);
this.$store.dispatch("settings/changeSetting", {
key: "sideTheme",
value: sideTheme,
window.addEventListener("resize", () => {
if(this.chart1){
this.chart1.resize();
this.chart2.resize();
this.chart3.resize();
}
});
// this.sideTheme = val;
this.$cache.local.set(
"layout-setting",
`{
"topNav":${this.$store.state.settings.topNav},
"tagsView":${this.$store.state.settings.tagsView},
"weatherView":${this.$store.state.settings.weatherView},
"fixedHeader":${this.$store.state.settings.fixedHeader},
"sidebarLogo":${this.$store.state.settings.sidebarLogo},
"dynamicTitle":${this.$store.state.settings.dynamicTitle},
"sideTheme":"${sideTheme}",
"theme":"${this.$store.state.settings.theme}"
}`
);
// console.log(this.$store.state.settings.sideTheme)
});
},
}
},
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-input__inner {
background-color: #fff !important;
height: 34px;
font-size: 14px;
font-weight: 400;
color: #999999;
border: 1px solid rgba(0, 145, 67, 0.5);
caret-color: #39adff;
// margin-left: 20px;
}
::v-deep .el-checkbox__label {
color: #999;
font-size: 12px !important;
font-weight: 400;
color: #999 !important;
margin-bottom: 10px;
margin-top: 6px;
}
.solar {
width: 100%;
display: flex;
justify-content: space-between;
height: 100vh;
::v-deep .el-input__inner::placeholder {
color: #999999;
}
.solar_left {
position: absolute;
width: 420px;
left: 20px;
top: 20px;
overflow: hidden;
display: flex;
flex-direction: column;
overflow: hidden;
height: 100%;
gap: 10px;
}
.login {
position: relative;
height: 100%;
background-image: url("../assets/images/login/login-background.png");
// background-size: 100% auto;
background-repeat: no-repeat;
background-size: 100% 100%;
.solar_right {
position: absolute;
right: 20px;
top: 20px;
width: 480px;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: flex-end;
overflow: hidden;
height: 100%;
}
}
.login-content {
position: absolute;
left: 50%;
top: 367px;
transform: translateX(-50%);
width: 700px;
height: 367px;
background: rgba(10, 82, 123, 0.6);
display: flex;
.login-l {
// width: 300px;
margin-top: 42px;
margin-left: 25px;
.logo {
width: 177px;
height: 135px;
margin: auto;
margin-bottom: 10px;
img {
width: 100%;
height: 100%;
}
}
span {
display: block;
font-family: PingFang;
font-weight: 600;
font-size: 30px;
color: rgba(42, 217, 253, 0.7);
line-height: 35px;
text-align: center;
margin-top: 20px;
.content-l-t {
::v-deep {
.BackgroundClip.bg {
display: flex;
flex-direction: column;
justify-content: space-around;
}
}
.login-r {
width: 320px;
height: 290px;
margin-right: 27px;
margin-top: 42px;
margin-left: 20px;
background: #c9e5eb;
padding: 25px 22px;
.title {
display: block;
width: 100%;
font-family: PingFang;
font-weight: 600;
font-size: 28px;
color: #009143;
text-align: center;
}
.line {
width: 210px;
height: 3px;
display: block;
margin: auto;
margin-bottom: 20px;
}
.btn {
margin: auto;
width: 155px;
height: 34px;
background: #009143;
border-radius: 1px;
color: #fff;
font-size: 16px;
.focuse-header {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.title2 {
width: 220px;
height: 40px;
margin-top: 10px;
margin-left: 10px;
display: flex;
align-items: center;
justify-content: center;
background: url("~@screen/images/title/title-solar.png") no-repeat;
background-size: 100% 100%;
}
.title {
font-size: 24px;
font-family: YouSheBiaoTiHei;
font-weight: 400;
margin-left: 30px;
margin-top: 5px;
background-image: -webkit-linear-gradient(bottom, #217176, #34adb6, #3fd6e1);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
// .loginTitle {
// display: inline-flex;
// width: 100%;
// height: 45px;
// font-size: 30px;
// font-family: Source Han Sans CN, Source Han Sans CN;
// font-weight: 500;
// color: #ffffff;
// justify-content: center;
// align-items: center;
// }
.el-input {
width: 275px;
height: 36px;
border-radius: 2px;
background: #fff;
padding-left: 20px;
::v-deep .el-input__inner {
font-size: 14px !important;
.content-l-sec-content {
display: flex;
flex-direction: row;
.secleft {
height: 180px;
width: 250px;
}
input {
border: 0;
height: 36px;
.secright {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
gap: 10px;
font-size: 14px;
.d1 {
font-size: 12px;
span {
font-size: 30px;
font-weight: bold;
color: #d3d51c;
}
}
}
}
.input-icon {
height: 20px;
width: 20px;
margin-right: 10px;
position: relative;
left: 10px;
top: 7px;
.content-l-t-content {
margin-top: 10px;
padding: 20px;
display: flex;
align-items: center;
justify-content: flex-start;
gap: 15px 15px;
// justify-content: center;
flex: 1;
flex-wrap: wrap;
.content-k1 {
display: flex;
flex-direction: row;
.content-ll {
flex: 1;
width: 200px;
margin-right: 5px;
.content-llc {
display: flex;
flex-direction: row;
margin-left: 10px;
margin-top: 3px;
gap: 3px;
>div {
background-color: #9ff501;
width: 5px;
height: 17px;
}
}
}
.content-kk {
display: flex;
flex-direction: row;
margin-left: 10px;
margin-right: 3px;
gap: 3px;
>div {
border: 1px solid #0c7f8a;
padding: 2px 5px;
}
}
.content-unit {
font-size: 13px;
margin-left: 2px;
}
}
}
}
// .login-tip {
// font-size: 13px;
// text-align: center;
// color: #bfbfbf;
// }
// .login-code {
// width: 37%;
// height: 35px;
// float: right;
// img {
// cursor: pointer;
// vertical-align: middle;
// }
// }
.login-form{
::v-deep .el-form-item{
margin-bottom: 22px;
.content-l-third-content {
display: flex;
width: 100%;
margin: 20px 20px 20px 10px;
.thirditem {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 10px;
font-size: 14px;
img {
width: 40px;
height: 40px;
margin-bottom: 10px;
}
span {
font-size: 30px;
font-weight: bold;
color: #d3d51c;
}
}
}
}
.el-login-footer {
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
color: #fff;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
}
.content-box {
flex: 1;
display: flex;
flex-direction: column;
.login-code-img {
height: 35px;
}
/* 重置按钮 */
.el-button--goon {
font-size: 24px;
font-weight: 400;
color: #fff;
width: 380px;
height: 55px;
background: #07caf6;
border-radius: 4px;
opacity: 1;
border: none;
}
.box-title {
width: 100%;
height: 26px;
margin: 7px;
background: url("~@screen/images/title/title_bg_002.png") no-repeat;
.el-button--goon:hover {
span {
display: inline-block;
margin-left: 35px;
font-size: 16px;
font-family: Source Han Sans SC, Source Han Sans SC;
font-weight: 500;
color: #ffffff;
}
}
.chart{
height: 155px;
}
</style>

Loading…
Cancel
Save