Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vue3portal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wuhao
vue3portal
Commits
f3c89c7c
Commit
f3c89c7c
authored
Aug 14, 2023
by
左玲玲
😬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1748
parent
f24b4a70
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
330 additions
and
35 deletions
+330
-35
request.js
src/api/request.js
+1
-1
main.less
src/assets/less/main.less
+24
-1
main.js
src/main.js
+11
-0
elsheader.vue
src/pages/layouts/components/elsheader.vue
+76
-17
elsmain.vue
src/pages/layouts/components/elsmain.vue
+200
-0
index.vue
src/pages/layouts/index.vue
+18
-16
No files found.
src/api/request.js
View file @
f3c89c7c
...
...
@@ -142,7 +142,7 @@ request.interceptors.response.use(async (response, options) => {
ElMessage
.
closeAll
();
data
?.
msg
&&
ElMessage
({
message
:
data
?.
msg
,
type
:
'warning'
,
type
:
'warning'
});
}
if
(
data
.
code
==
"0001"
)
{
...
...
src/assets/less/main.less
View file @
f3c89c7c
...
...
@@ -38,7 +38,30 @@ body {
.set3 {
flex: 3;
}
.swh{
.set4 {
flex: 4;
}
.swh {
width: 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
src/main.js
View file @
f3c89c7c
/*
* @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
App
from
'./App.vue'
import
router
from
'./router'
...
...
src/pages/layouts/components/elsheader.vue
View file @
f3c89c7c
...
...
@@ -2,7 +2,7 @@
* @Author: zuolingling zuolingling@jsnangao.com
* @Date: 2023-08-10 17:03:11
* @LastEditors: zuolingling zuolingling@jsnangao.com
* @LastEditTime: 2023-08-1
1 17:23:21
* @LastEditTime: 2023-08-1
4 17:16:10
* @FilePath: \vue3portal\src\pages\layouts\components\elsheader.vue
* @Description:
*
...
...
@@ -35,28 +35,62 @@
</el-dropdown>
</div>
<el-dialog
v-model=
"dialogVisible"
title=
"修改密码"
width=
"30%"
:before-close=
"handleClose"
>
<
template
#
footer
>
<span
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"dialogVisible = false"
>
提交
</el-button>
</span>
</
template
>
<el-form
label-position=
"top"
ref=
"ruleFormRef"
:model=
"ruleForm"
status-icon
:rules=
"rules"
label-width=
"100px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"用户名"
prop=
"username"
>
<el-input
v-model=
"ruleForm.username"
disabled
/>
</el-form-item>
<el-form-item
label=
"原始密码"
prop=
"oldPassword"
>
<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>
</div>
</template>
<
script
setup
>
import
{
ElMessage
Box
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
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
currentUser
=
computed
(()
=>
{
return
store
.
state
.
currentUser
});
let
titleconfig
=
reactive
({
width
:
1920
,
scale
:
.
75
}),
dialogVisible
=
ref
(
false
);
const
currentUser
=
computed
(()
=>
store
.
state
.
currentUser
);
dialogVisible
=
ref
(
false
),
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
=
()
=>
{
getFetch
({
url
:
"/logout"
,
params
:
{}
}).
then
(
res
=>
{
window
.
location
.
href
=
res
?.
logoutRedirectUrl
;
...
...
@@ -66,6 +100,7 @@ const loginOut = () => {
const
handleCommand
=
(
command
)
=>
{
if
(
command
==
"pwd"
)
{
dialogVisible
.
value
=
true
;
ruleFormRef
.
value
.
resetFields
()
}
else
{
store
.
commit
(
'CHANGE_USER'
,
{
currentUser
:
{}
...
...
@@ -75,10 +110,35 @@ const handleCommand = (command) => {
};
const
handleClose
=
()
=>
{
dialogVisible
.
value
=
false
;
}
// watch(() => dialogVisible.value, (newValue, oldValue) => {
// console.log(newValue, oldValue);
// })
};
const
submitForm
=
async
(
formEl
)
=>
{
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
>
...
...
@@ -89,7 +149,6 @@ const handleClose = () => {
padding: 0 18px;
height: 100%;
justify-content: flex-end;
.headerright {
height: 100%;
gap: 15px
...
...
src/pages/layouts/components/elsmain.vue
0 → 100644
View file @
f3c89c7c
<
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
src/pages/layouts/index.vue
View file @
f3c89c7c
...
...
@@ -2,7 +2,7 @@
* @Author: zuolingling zuolingling@jsnangao.com
* @Date: 2023-08-10 15:27:18
* @LastEditors: zuolingling zuolingling@jsnangao.com
* @LastEditTime: 2023-08-1
1 11:19:18
* @LastEditTime: 2023-08-1
4 17:13:47
* @FilePath: \vue3portal\src\pages\layouts\index.vue
* @Description:
*
...
...
@@ -10,30 +10,32 @@
-->
<
script
setup
>
import
elsheader
from
"./components/elsheader.vue"
;
import
elsmain
from
"./components/elsmain.vue"
;
import
"@/assets/less/main.less"
;
const
state
=
reactive
({
APConfig
:{
width
:
1920
,
height
:
974
,
userSelect
:
true
,
const
state
=
reactive
({
APConfig
:
{
width
:
1920
,
height
:
974
,
userSelect
:
true
,
// chartCount:0
loading
:
false
,
backgroundFillAll
:
false
loading
:
false
,
backgroundFillAll
:
false
}
})
</
script
>
<
template
>
<adaptivePanel
:config=
'state.APConfig'
>
<div
class=
"colflex swh"
>
<el-container>
<el-header
height=
"40px"
style=
"padding: 0;"
>
<elsheader></elsheader>
</el-header>
<el-main
style=
"flex:1;"
>
Main
</el-main>
</el-container>
</div>
<el-container
style=
"overflow-y: hidden;"
>
<el-header
height=
"40px"
style=
"padding: 0;"
>
<elsheader></elsheader>
</el-header>
<el-main
class=
"scrollbar"
style=
"flex:1;"
>
<elsmain></elsmain>
</el-main>
</el-container>
</div>
</adaptivePanel>
</
template
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment