Commit f3c89c7c authored by 左玲玲's avatar 左玲玲 :grimacing:

1748

parent f24b4a70
...@@ -142,7 +142,7 @@ request.interceptors.response.use(async (response, options) => { ...@@ -142,7 +142,7 @@ request.interceptors.response.use(async (response, options) => {
ElMessage.closeAll(); ElMessage.closeAll();
data?.msg && ElMessage({ data?.msg && ElMessage({
message: data?.msg, message: data?.msg,
type: 'warning', type: 'warning'
}); });
} }
if (data.code == "0001") { if (data.code == "0001") {
......
...@@ -38,7 +38,30 @@ body { ...@@ -38,7 +38,30 @@ body {
.set3 { .set3 {
flex: 3; flex: 3;
} }
.swh{
.set4 {
flex: 4;
}
.swh {
width: 100%; width: 100%;
height: 100%; height: 100%;
}
.scrollbar {
&::-webkit-scrollbar {
width: 5px;
}
&::-webkit-scrollbar-thumb {
background-color: #05192e;
border-radius: 5px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
border-radius: 5px;
}
&::-webkit-scrollbar-button {}
} }
\ No newline at end of file
/*
* @Author: zuolingling zuolingling@jsnangao.com
* @Date: 2023-08-14 13:31:41
* @LastEditors: zuolingling zuolingling@jsnangao.com
* @LastEditTime: 2023-08-14 13:31:41
* @FilePath: \vue3portal\src\main.js
* @Description:
*
* Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
*/
import 'element-plus/dist/index.css'
import { createApp } from 'vue' import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: zuolingling zuolingling@jsnangao.com * @Author: zuolingling zuolingling@jsnangao.com
* @Date: 2023-08-10 17:03:11 * @Date: 2023-08-10 17:03:11
* @LastEditors: zuolingling zuolingling@jsnangao.com * @LastEditors: zuolingling zuolingling@jsnangao.com
* @LastEditTime: 2023-08-11 17:23:21 * @LastEditTime: 2023-08-14 17:16:10
* @FilePath: \vue3portal\src\pages\layouts\components\elsheader.vue * @FilePath: \vue3portal\src\pages\layouts\components\elsheader.vue
* @Description: * @Description:
* *
...@@ -35,28 +35,62 @@ ...@@ -35,28 +35,62 @@
</el-dropdown> </el-dropdown>
</div> </div>
<el-dialog v-model="dialogVisible" title="修改密码" width="30%" :before-close="handleClose"> <el-dialog v-model="dialogVisible" title="修改密码" width="30%" :before-close="handleClose">
<template #footer> <el-form label-position="top" ref="ruleFormRef" :model="ruleForm" status-icon :rules="rules" label-width="100px"
<span class="dialog-footer"> class="demo-ruleForm">
<el-button type="primary" @click="dialogVisible = false"> <el-form-item label="用户名" prop="username">
提交 <el-input v-model="ruleForm.username" disabled />
</el-button> </el-form-item>
</span> <el-form-item label="原始密码" prop="oldPassword">
</template> <el-input v-model="ruleForm.oldPassword" type="password" autocomplete="off" />
</el-form-item>
<el-form-item label="新密码" prop="password">
<el-input v-model="ruleForm.password" type="password" autocomplete="off" />
</el-form-item>
<el-form-item label="确认新密码" prop="confirmPassword">
<el-input v-model="ruleForm.confirmPassword" type="password" autocomplete="off" />
</el-form-item>
<el-form-item>
<el-button style="width: 100%;" type="primary" @click="submitForm(ruleFormRef)"
:loading="loading">提交</el-button>
</el-form-item>
</el-form>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { Lock, SwitchButton } from "@element-plus/icons-vue"; import { Lock, SwitchButton } from "@element-plus/icons-vue";
import { getFetch } from "@/api/doFetch"; import { getFetch, postFetch } from "@/api/doFetch";
const validatePass = (rule, value, callback) => {
if (value && value !== ruleForm.password) {
callback(new Error("2次密码不一致!"))
} else {
callback()
}
};
const store = useStore(); const store = useStore();
const currentUser = computed(() => {
return store.state.currentUser
});
let titleconfig = reactive({ let titleconfig = reactive({
width: 1920, width: 1920,
scale: .75 scale: .75
}), }),
dialogVisible = ref(false); dialogVisible = ref(false),
const currentUser = computed(() => store.state.currentUser); ruleFormRef = ref({}),
loading = ref(false),
ruleForm = reactive({
username: '',
oldPassword: '',
password: '',
confirmPassword: ''
}),
rules = reactive({
oldPassword: [{ required: true, trigger: 'submit', }],
password: [{ required: true, trigger: 'submit', }],
confirmPassword: [{ validator: validatePass, trigger: 'blur', required: true }]
});
const loginOut = () => { const loginOut = () => {
getFetch({ url: "/logout", params: {} }).then(res => { getFetch({ url: "/logout", params: {} }).then(res => {
window.location.href = res?.logoutRedirectUrl; window.location.href = res?.logoutRedirectUrl;
...@@ -66,6 +100,7 @@ const loginOut = () => { ...@@ -66,6 +100,7 @@ const loginOut = () => {
const handleCommand = (command) => { const handleCommand = (command) => {
if (command == "pwd") { if (command == "pwd") {
dialogVisible.value = true; dialogVisible.value = true;
ruleFormRef.value.resetFields()
} else { } else {
store.commit('CHANGE_USER', { store.commit('CHANGE_USER', {
currentUser: {} currentUser: {}
...@@ -75,10 +110,35 @@ const handleCommand = (command) => { ...@@ -75,10 +110,35 @@ const handleCommand = (command) => {
}; };
const handleClose = () => { const handleClose = () => {
dialogVisible.value = false; dialogVisible.value = false;
} };
// watch(() => dialogVisible.value, (newValue, oldValue) => { const submitForm = async (formEl) => {
// console.log(newValue, oldValue); if (!formEl) return
// }) await formEl.validate((valid, fields) => {
if (valid) {
loading.value = true;
let newfields = JSON.parse(JSON.stringify(ruleForm));
delete newfields.username;
postFetch({ url: "/user/updatePassword", params: { ...newfields } }).then(res => {
if (res?.code == "0000") {
ElMessage.success('密码修改成功,请重新登录');
store.commit('CHANGE_USER', {
currentUser: {}
});
loginOut();
}
loading.value = false;
dialogVisible.value = false;
})
} else {
return false
}
})
};
watch(() => currentUser.value?.username, (newValue, oldValue) => {
ruleForm.username = newValue;
})
</script> </script>
...@@ -89,7 +149,6 @@ const handleClose = () => { ...@@ -89,7 +149,6 @@ const handleClose = () => {
padding: 0 18px; padding: 0 18px;
height: 100%; height: 100%;
justify-content: flex-end; justify-content: flex-end;
.headerright { .headerright {
height: 100%; height: 100%;
gap: 15px gap: 15px
......
<template>
<div class="mainbox">
<div class="set3 colflex leftbox">
<div class="box2">
<aYinTechBorderA1 :config="{ ...leftConfig, title: '设备状态' }"></aYinTechBorderA1>
</div>
<div class="box2">
<aYinTechBorderA1 :config="{ ...leftConfig, title: '设备开动率' }"></aYinTechBorderA1>
</div>
<div class="box3">
<aYinTechBorderA1 :config="{ ...leftConfig, title: '任务待办' }"></aYinTechBorderA1>
</div>
<div class="box2">
<aYinTechBorderA1 :config="{ ...leftConfig, title: '生产数据' }"></aYinTechBorderA1>
</div>
</div>
<div class="set4 colflex" style="justify-content: space-between;">
<div class="middlebox">
<aYinTechBorderB4 :config="systemconfig"></aYinTechBorderB4>
</div>
<div class="box1 rowflex" style="gap:15px">
<div class="item5 counter-item"></div>
<div class="item5 counter-item"></div>
<div class="item5 counter-item"></div>
<div class="item5 counter-item"></div>
<div class="item5 counter-item"></div>
</div>
<div class="box3">
<aYinTechBorderB1 :config="config"></aYinTechBorderB1>
</div>
</div>
<div class="set3 colflex leftbox">
<div class="box2">
<aYinTechBorderA1 :config="{ ...rightConfig, title: '能耗统计' }"></aYinTechBorderA1>
</div>
<div class="box2">
<aYinTechBorderA1 :config="{ ...rightConfig, title: '用电趋势' }"></aYinTechBorderA1>
</div>
<div class="box3">
<aYinTechBorderB3 :config="tableconfig"></aYinTechBorderB3>
</div>
<div class="box2">
<aYinTechBorderA1 :config="{ ...rightConfig, title: '质量合格率趋势', titleWidth: 120 }"></aYinTechBorderA1>
</div>
</div>
</div>
</template>
<script setup>
const leftConfig = reactive({
backgroundColor: $c.bll9,
decorationColor: [$c.bll3, $c.cyl5],
borderColor: $c.bll7,
titleWidth: 100,
titleColor: $c.cyl5,
decorationAlt: true,
rotate: 'y'
}),
rightConfig = reactive({
backgroundColor: $c.bll9,
decorationColor: [$c.bll3, $c.cyl5],
borderColor: $c.bll7,
titleWidth: 100,
titleColor: $c.cyl5
}),
systemconfig = reactive({
backgroundColor: $c.bll9,
borderColor: $c.bll7,
glowColor: $c.fade($c.cyl5, .3),
decorationColor: [$c.bll3, $c.cyl5],
glow: true,
decoration: false
}),
config = reactive({
backgroundColor: $c.bll9,
borderColor: $c.bll7,
glowColor: $c.fade($c.cyl5, .2),
decorationColor: [$c.bll3, $c.cyl5],
decoration: false,
}),
tableconfig = reactive({
backgroundColor: $c.bll9,
borderColor: $c.bll7,
decoration: false
}),
taskconfig = reactive({
backgroundColor: $c.bll9,
borderColor: $c.bll7,
glowColor: $c.fade($c.cyl5, .2),
decorationColor: [$c.bll3, $c.aql5],
titleColor: $c.bll9,
glow: true
});
</script>
<style lang="less" scoped>
.mainbox {
overflow-y: auto;
overflow-x: hidden;
display: flex;
gap: 18px;
.leftbox {
gap: 15px;
}
.box1 {
width: 100%;
height: 100px;
}
.box2 {
width: 100%;
height: 200px;
}
.box3 {
width: 100%;
height: 300px;
}
.middlebox {
width: 100%;
height: 500px;
}
.item5 {
height: 100%;
flex: 1;
}
.counter-item {
.bdl(@blA15, 3px);
.bdFilter;
.bgc(fade(@blA17, 70%));
display: inline-block;
height: 100%;
padding: 15px;
position: relative;
.icon {
.fc(var(--font-normal));
font-size: 32px;
z-index: 1;
.poa;
left: 5px;
top: 50%;
.fixc("y");
width: 50px;
height: 58px;
line-height: 60px;
text-align: center;
}
.name {
.fc(var(--font-normal));
font-size: 16px;
.ff("cn1");
z-index: 1;
.por;
.unit {
font-size: 12px;
}
}
.content {
.fc(var(--font-normal));
margin: 10px 0;
.num {
font-size: 24px;
.por;
font-weight: bold;
.ff("en0");
.fc(var(--font-normal));
.dt-scroll-digital {
text-align: center;
}
.plus {
.poa;
left: 101%;
top: -5px;
font-size: 12px;
.fc(var(--font-normal));
font-weight: normal;
.ff("arial");
}
}
}
&:last-child {
margin: 0;
}
}
}
</style>
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: zuolingling zuolingling@jsnangao.com * @Author: zuolingling zuolingling@jsnangao.com
* @Date: 2023-08-10 15:27:18 * @Date: 2023-08-10 15:27:18
* @LastEditors: zuolingling zuolingling@jsnangao.com * @LastEditors: zuolingling zuolingling@jsnangao.com
* @LastEditTime: 2023-08-11 11:19:18 * @LastEditTime: 2023-08-14 17:13:47
* @FilePath: \vue3portal\src\pages\layouts\index.vue * @FilePath: \vue3portal\src\pages\layouts\index.vue
* @Description: * @Description:
* *
...@@ -10,30 +10,32 @@ ...@@ -10,30 +10,32 @@
--> -->
<script setup> <script setup>
import elsheader from "./components/elsheader.vue"; import elsheader from "./components/elsheader.vue";
import elsmain from "./components/elsmain.vue";
import "@/assets/less/main.less"; import "@/assets/less/main.less";
const state=reactive({ const state = reactive({
APConfig:{ APConfig: {
width:1920, width: 1920,
height:974, height: 974,
userSelect:true, userSelect: true,
// chartCount:0 // chartCount:0
loading:false, loading: false,
backgroundFillAll:false backgroundFillAll: false
} }
}) })
</script> </script>
<template> <template>
<adaptivePanel :config='state.APConfig'> <adaptivePanel :config='state.APConfig'>
<div class="colflex swh"> <div class="colflex swh">
<el-container> <el-container style="overflow-y: hidden;">
<el-header height="40px" style="padding: 0;"> <el-header height="40px" style="padding: 0;">
<elsheader></elsheader> <elsheader></elsheader>
</el-header> </el-header>
<el-main style="flex:1;">Main</el-main> <el-main class="scrollbar" style="flex:1;">
</el-container> <elsmain></elsmain>
</div> </el-main>
</el-container>
</div>
</adaptivePanel> </adaptivePanel>
</template> </template>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment