Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
ba589d01
Unverified
提交
ba589d01
authored
9月 03, 2021
作者:
fit2cloud-chenyw
提交者:
GitHub
9月 03, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #760 from dataease/pr@dev@feat_theme_switch
feat: 切换主题基本功能
上级
a90de21b
b68888bc
隐藏空白字符变更
内嵌
并排
正在显示
32 个修改的文件
包含
330 行增加
和
613 行删除
+330
-613
.gitignore
.gitignore
+1
-0
V26__de1.3.sql
backend/src/main/resources/db/migration/V26__de1.3.sql
+31
-0
index.vue
frontend/src/components/LangSelect/index.vue
+9
-1
index.vue
frontend/src/components/Notification/index.vue
+1
-1
index.vue
frontend/src/components/RightPanel/index.vue
+0
-145
index.vue
frontend/src/components/Settings/index.vue
+0
-107
index.vue
frontend/src/components/ThemePicker/index.vue
+16
-12
index.vue
frontend/src/components/back-button/index.vue
+0
-2
LayoutContent.vue
frontend/src/components/business/LayoutContent.vue
+0
-2
index.vue
frontend/src/components/business/complex-table/index.vue
+2
-3
index.vue
frontend/src/components/business/tree-table/index.vue
+0
-1
docs.svg
frontend/src/icons/svg/docs.svg
+2
-2
language.svg
frontend/src/icons/svg/language.svg
+2
-2
zh.js
frontend/src/lang/zh.js
+10
-1
AppMain.vue
frontend/src/layout/components/AppMain.vue
+0
-1
Licbar.vue
frontend/src/layout/components/Licbar.vue
+2
-2
index.vue
frontend/src/layout/components/Settings/index.vue
+0
-140
Logo.vue
frontend/src/layout/components/Sidebar/Logo.vue
+1
-2
index.vue
frontend/src/layout/components/Sidebar/index.vue
+35
-4
Topbar.vue
frontend/src/layout/components/Topbar.vue
+80
-32
index.js
frontend/src/layout/components/index.js
+1
-1
permission.js
frontend/src/permission.js
+2
-39
sidebar.scss
frontend/src/styles/sidebar.scss
+11
-14
topbar.scss
frontend/src/styles/topbar.scss
+11
-15
variables.scss
frontend/src/styles/variables.scss
+29
-27
style.js
frontend/src/utils/style.js
+44
-0
all.vue
frontend/src/views/msg/all.vue
+2
-2
readed.vue
frontend/src/views/msg/readed.vue
+2
-2
unread.vue
frontend/src/views/msg/unread.vue
+2
-2
form.vue
frontend/src/views/system/datasource/form.vue
+22
-25
dynamic.vue
frontend/src/views/system/plugin/dynamic.vue
+9
-2
index.vue
frontend/src/views/system/user/index.vue
+3
-24
没有找到文件。
.gitignore
浏览文件 @
ba589d01
...
...
@@ -51,6 +51,7 @@ pnpm-debug.log*
*.classpath
*.project
.settings/
.lh
package-lock.json
backend/src/main/resources/db/migration/V26__de1.3.sql
浏览文件 @
ba589d01
...
...
@@ -6,6 +6,36 @@ INSERT INTO `sys_msg_type` VALUES (7, 0, 'i18n_msg_type_ds_invalid', 'datasource
INSERT
INTO
`sys_msg_type`
VALUES
(
8
,
7
,
'i18n_msg_type_ds_invalid'
,
'datasource'
,
'to-msg-ds'
);
COMMIT
;
-- ----------------------------
-- Table structure for system_parameter
-- ----------------------------
DROP
TABLE
IF
EXISTS
`system_parameter`
;
CREATE
TABLE
`system_parameter`
(
`param_key`
varchar
(
64
)
NOT
NULL
COMMENT
'Parameter name'
,
`param_value`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'Parameter value'
,
`type`
varchar
(
100
)
NOT
NULL
DEFAULT
'text'
COMMENT
'Parameter type'
,
`sort`
int
(
5
)
DEFAULT
NULL
COMMENT
'Sort'
,
PRIMARY
KEY
(
`param_key`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
;
-- ----------------------------
-- Records of system_parameter
-- ----------------------------
BEGIN
;
INSERT
INTO
`system_parameter`
VALUES
(
''
,
NULL
,
'text'
,
NULL
);
INSERT
INTO
`system_parameter`
VALUES
(
'default.language'
,
'zh_CN'
,
'text'
,
-
1
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.favicon'
,
NULL
,
'file'
,
-
1
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.loginImage'
,
NULL
,
'file'
,
4
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.loginLogo'
,
NULL
,
'file'
,
5
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.loginTitle'
,
NULL
,
'text'
,
3
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.logo'
,
NULL
,
'file'
,
6
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.theme'
,
NULL
,
'text'
,
2
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.title'
,
NULL
,
'text'
,
1
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuActiveColor'
,
NULL
,
'text'
,
8
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuColor'
,
NULL
,
'text'
,
7
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuTextActiveColor'
,
NULL
,
'text'
,
10
);
INSERT
INTO
`system_parameter`
VALUES
(
'ui.topMenuTextColor'
,
NULL
,
'text'
,
9
);
COMMIT
;
-- ----------------------------
-- Table structure for panel_pdf_template
...
...
@@ -20,3 +50,4 @@ CREATE TABLE `panel_pdf_template` (
`sort`
int
(
8
)
DEFAULT
NULL
COMMENT
'排序'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
;
frontend/src/components/LangSelect/index.vue
浏览文件 @
ba589d01
<
template
>
<el-dropdown
style=
"display: flex;align-items: center;"
trigger=
"click"
class=
"international"
@
command=
"handleSetLanguage"
>
<div>
<svg-icon
class-name=
"international-icon"
icon-class=
"language"
/>
<svg-icon
:style=
"
{color: topMenuTextColor}"
class-name="international-icon" icon-class="language" />
</div>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
:disabled=
"language==='zh_CN'"
command=
"zh_CN"
>
...
...
@@ -24,10 +24,18 @@
</
template
>
<
script
>
import
variables
from
'@/styles/variables.scss'
export
default
{
computed
:
{
language
()
{
return
this
.
$store
.
getters
.
language
},
variables
()
{
return
variables
},
topMenuTextColor
()
{
if
(
this
.
$store
.
getters
.
uiInfo
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
]
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
].
paramValue
)
{
return
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
].
paramValue
}
return
this
.
variables
.
topBarMenuText
}
},
methods
:
{
...
...
frontend/src/components/Notification/index.vue
浏览文件 @
ba589d01
...
...
@@ -232,7 +232,7 @@ export default {
right
:
178px
;
top
:
8px
;
background
:
red
;
color
:
#fff
;
//
color: #fff;
border-radius
:
17px
;
padding
:
4px
7px
;
font-size
:
16px
;
...
...
frontend/src/components/RightPanel/index.vue
deleted
100644 → 0
浏览文件 @
a90de21b
<
template
>
<div
ref=
"rightPanel"
:class=
"
{show:show}" class="rightPanel-container">
<div
class=
"rightPanel-background"
/>
<div
class=
"rightPanel"
>
<!--
<div
class=
"handle-button"
:style=
"
{'top':buttonTop+'px','background-color':theme}" @click="show=!show">-->
<!--
<i
:class=
"show?'el-icon-close':'el-icon-setting'"
/>
-->
<!--
</div>
-->
<div
class=
"rightPanel-items"
>
<slot
/>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
addClass
,
removeClass
}
from
'@/utils'
export
default
{
name
:
'RightPanel'
,
props
:
{
clickNotClose
:
{
default
:
false
,
type
:
Boolean
},
buttonTop
:
{
default
:
250
,
type
:
Number
}
},
data
()
{
return
{
show
:
false
}
},
computed
:
{
theme
()
{
return
this
.
$store
.
state
.
settings
.
theme
}
},
watch
:
{
show
(
value
)
{
if
(
value
&&
!
this
.
clickNotClose
)
{
this
.
addEventClick
()
}
if
(
value
)
{
addClass
(
document
.
body
,
'showRightPanel'
)
}
else
{
removeClass
(
document
.
body
,
'showRightPanel'
)
}
}
},
mounted
()
{
this
.
insertToBody
()
},
beforeDestroy
()
{
const
elx
=
this
.
$refs
.
rightPanel
elx
.
remove
()
},
methods
:
{
addEventClick
()
{
window
.
addEventListener
(
'click'
,
this
.
closeSidebar
)
},
closeSidebar
(
evt
)
{
const
parent
=
evt
.
target
.
closest
(
'.rightPanel'
)
if
(
!
parent
)
{
this
.
show
=
false
window
.
removeEventListener
(
'click'
,
this
.
closeSidebar
)
}
},
insertToBody
()
{
const
elx
=
this
.
$refs
.
rightPanel
const
body
=
document
.
querySelector
(
'body'
)
body
.
insertBefore
(
elx
,
body
.
firstChild
)
}
}
}
</
script
>
<
style
>
.showRightPanel
{
overflow
:
hidden
;
position
:
relative
;
width
:
100%
;
}
</
style
>
<
style
lang=
"scss"
scoped
>
.rightPanel-background
{
position
:
fixed
;
top
:
0
;
left
:
0
;
opacity
:
0
;
transition
:
opacity
.3s
cubic-bezier
(
.7
,
.3
,
.1
,
1
);
background
:
rgba
(
0
,
0
,
0
,
.2
);
z-index
:
-1
;
}
.rightPanel
{
width
:
100%
;
max-width
:
260px
;
height
:
100vh
;
position
:
fixed
;
top
:
0
;
right
:
0
;
box-shadow
:
0px
0px
15px
0px
rgba
(
0
,
0
,
0
,
.05
);
transition
:
all
.25s
cubic-bezier
(
.7
,
.3
,
.1
,
1
);
transform
:
translate
(
100%
);
background
:
#fff
;
z-index
:
40000
;
}
.show
{
transition
:
all
.3s
cubic-bezier
(
.7
,
.3
,
.1
,
1
);
.rightPanel-background
{
z-index
:
20000
;
opacity
:
1
;
width
:
100%
;
height
:
100%
;
}
.rightPanel
{
transform
:
translate
(
0
);
}
}
.handle-button
{
width
:
48px
;
height
:
48px
;
position
:
absolute
;
left
:
-48px
;
text-align
:
center
;
font-size
:
24px
;
border-radius
:
6px
0
0
6px
!
important
;
z-index
:
0
;
pointer-events
:
auto
;
cursor
:
pointer
;
color
:
#fff
;
line-height
:
48px
;
i
{
font-size
:
24px
;
line-height
:
48px
;
}
}
</
style
>
frontend/src/components/Settings/index.vue
deleted
100644 → 0
浏览文件 @
a90de21b
<
template
>
<div
class=
"drawer-container"
>
<div>
<h3
class=
"drawer-title"
>
{{
$t
(
'settings.title'
)
}}
</h3>
<div
class=
"drawer-item"
>
<span>
{{
$t
(
'settings.theme'
)
}}
</span>
<theme-picker
style=
"float: right;height: 26px;margin: -3px 8px 0 0;"
@
change=
"themeChange"
/>
</div>
<div
class=
"drawer-item"
>
<span>
{{
$t
(
'settings.fixedHeader'
)
}}
</span>
<el-switch
v-model=
"fixedHeader"
class=
"drawer-switch"
/>
</div>
<div
class=
"drawer-item"
>
<span>
{{
$t
(
'settings.sidebarLogo'
)
}}
</span>
<el-switch
v-model=
"sidebarLogo"
class=
"drawer-switch"
/>
</div>
</div>
</div>
</
template
>
<
script
>
import
ThemePicker
from
'@/components/ThemePicker'
export
default
{
name
:
'Settings'
,
components
:
{
ThemePicker
},
data
()
{
return
{}
},
computed
:
{
fixedHeader
:
{
get
()
{
return
this
.
$store
.
state
.
settings
.
fixedHeader
},
set
(
val
)
{
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'fixedHeader'
,
value
:
val
})
}
},
sidebarLogo
:
{
get
()
{
return
this
.
$store
.
state
.
settings
.
sidebarLogo
},
set
(
val
)
{
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'sidebarLogo'
,
value
:
val
})
}
},
lang
()
{
return
this
.
$store
.
getters
.
language
}
},
methods
:
{
themeChange
(
val
)
{
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'theme'
,
value
:
val
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.drawer-container
{
padding
:
24px
;
font-size
:
14px
;
line-height
:
1
.5
;
word-wrap
:
break-word
;
.drawer-title
{
margin-bottom
:
12px
;
color
:
rgba
(
0
,
0
,
0
,
.85
);
font-size
:
14px
;
line-height
:
22px
;
}
.drawer-item
{
color
:
rgba
(
0
,
0
,
0
,
.65
);
font-size
:
14px
;
padding
:
12px
0
;
}
.drawer-switch
{
float
:
right
}
.job-link
{
display
:
block
;
position
:
absolute
;
width
:
100%
;
left
:
0
;
bottom
:
0
;
}
}
</
style
>
frontend/src/components/ThemePicker/index.vue
浏览文件 @
ba589d01
...
...
@@ -8,9 +8,9 @@
</
template
>
<
script
>
import
{
getThemeCluster
}
from
'@/utils/style'
const
version
=
require
(
'element-ui/package.json'
).
version
// element-ui version from node_modules
const
ORIGINAL_THEME
=
'#409EFF'
// default color
import
Cookies
from
'js-cookie'
export
default
{
data
()
{
return
{
...
...
@@ -31,15 +31,20 @@ export default {
immediate
:
true
},
async
theme
(
val
)
{
Cookies
.
set
(
'theme'
,
val
,
{
expires
:
365
})
const
oldVal
=
this
.
chalk
?
this
.
theme
:
Cookies
.
get
(
'theme'
)
?
Cookies
.
get
(
'theme'
)
:
ORIGINAL_THEME
this
.
switch
(
val
)
}
},
methods
:
{
async
switch
(
val
)
{
const
oldVal
=
this
.
chalk
?
this
.
theme
:
ORIGINAL_THEME
if
(
typeof
val
!==
'string'
)
return
const
themeCluster
=
this
.
getThemeCluster
(
val
.
replace
(
'#'
,
''
))
const
originalCluster
=
this
.
getThemeCluster
(
oldVal
.
replace
(
'#'
,
''
))
const
themeCluster
=
getThemeCluster
(
val
.
replace
(
'#'
,
''
))
const
originalCluster
=
getThemeCluster
(
oldVal
.
replace
(
'#'
,
''
))
const
getHandler
=
(
variable
,
id
)
=>
{
return
()
=>
{
const
originalCluster
=
this
.
getThemeCluster
(
ORIGINAL_THEME
.
replace
(
'#'
,
''
))
const
originalCluster
=
getThemeCluster
(
ORIGINAL_THEME
.
replace
(
'#'
,
''
))
const
newStyle
=
this
.
updateStyle
(
this
[
variable
],
originalCluster
,
themeCluster
)
let
styleTag
=
document
.
getElementById
(
id
)
...
...
@@ -73,10 +78,7 @@ export default {
})
this
.
$emit
(
'change'
,
val
)
}
},
methods
:
{
},
updateStyle
(
style
,
oldCluster
,
newCluster
)
{
let
newStyle
=
style
oldCluster
.
forEach
((
color
,
index
)
=>
{
...
...
@@ -97,8 +99,8 @@ export default {
xhr
.
open
(
'GET'
,
url
)
xhr
.
send
()
})
}
,
}
/*
getThemeCluster(theme) {
const tintColor = (color, tint) => {
let red = parseInt(color.slice(0, 2), 16)
...
...
@@ -143,6 +145,8 @@ export default {
clusters.push(shadeColor(theme, 0.1))
return clusters
}
*/
}
}
</
script
>
...
...
frontend/src/components/back-button/index.vue
浏览文件 @
ba589d01
...
...
@@ -31,8 +31,6 @@ export default {
</
script
>
<
style
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"~@/styles/variables.scss"
;
.back-button
{
cursor
:
pointer
;
...
...
frontend/src/components/business/LayoutContent.vue
浏览文件 @
ba589d01
...
...
@@ -39,11 +39,9 @@ export default {
<
style
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"~@/styles/variables.scss"
;
.content-container
{
transition
:
0
.3s
;
color
:
$--color-text-primary
;
background-color
:
#FFFFFF
;
overflow
:
auto
;
height
:
100%
;
...
...
frontend/src/components/business/complex-table/index.vue
浏览文件 @
ba589d01
...
...
@@ -9,7 +9,7 @@
<div>
<slot
name=
"toolbar"
/>
</div>
<fu-search-bar
v-bind=
"searchConfig"
@
exec=
"search"
ref
=
"search"
>
<fu-search-bar
ref=
"search"
v-bind=
"searchConfig"
@
exec
=
"search"
>
<template
#
complex
>
<slot
name=
"complex"
/>
</
template
>
...
...
@@ -65,7 +65,7 @@ export default {
},
data
()
{
return
{
condition
:
{}
,
condition
:
{}
}
},
mounted
()
{
...
...
@@ -86,7 +86,6 @@ export default {
<
style
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"~@/styles/variables.scss"
;
.complex-table
{
.complex-table__header
{
@include
flex-row
(
flex-start
,
center
);
...
...
frontend/src/components/business/tree-table/index.vue
浏览文件 @
ba589d01
...
...
@@ -79,7 +79,6 @@ export default {
<
style
lang=
"scss"
>
@import
"~@/styles/mixin.scss"
;
@import
"~@/styles/variables.scss"
;
.complex-table
{
.complex-table__header
{
@include
flex-row
(
flex-start
,
center
);
...
...
frontend/src/icons/svg/docs.svg
浏览文件 @
ba589d01
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1623897748319"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"23219"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M512 1024C227.556 1024 0 796.444 0 512S227.556 0 512 0s512 227.556 512 512-227.556 512-512 512z m0-68.267c244.622 0 443.733-199.11 443.733-443.733S756.623 68.267 512 68.267 68.267 267.377 68.267 512 267.377 955.733 512 955.733z m11.378-694.044c45.51 0 85.333 11.378 113.778 39.822 28.444 22.756 45.51 62.578 45.51 102.4 0 34.133-11.377 68.267-28.444 91.022-5.689 5.69-28.444 28.445-62.578 56.89-11.377 11.377-22.755 22.755-28.444 39.821-5.689 17.067-11.378 34.134-11.378 45.512v11.377h-79.644v-11.377c0-28.445 5.689-51.2 17.066-68.267 11.378-22.756 39.823-51.2 79.645-91.022l11.378-11.378c11.377-17.067 22.755-34.133 22.755-51.2 0-22.756-5.689-45.511-22.755-56.889-17.067-17.067-34.134-22.756-62.578-22.756-34.133 0-56.889 11.378-73.956 28.445-11.377 17.067-17.066 39.822-17.066 73.955H352.71c0-51.2 17.067-96.71 45.511-125.155 28.445-34.133 73.956-51.2 125.156-51.2zM512 688.356c17.067 0 28.444 5.688 39.822 17.066 11.378 11.378 17.067 22.756 17.067 39.822 0 17.067-5.689 28.445-17.067 39.823-11.378 11.377-22.755 17.066-39.822 17.066-28.444 0-51.2-22.755-51.2-51.2 0-17.066 5.689-28.444 17.067-39.822 5.689-17.067 22.755-22.755 34.133-22.755z"
p-id=
"23220"
fill=
"#707070"
></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1623897748319"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"23219"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M512 1024C227.556 1024 0 796.444 0 512S227.556 0 512 0s512 227.556 512 512-227.556 512-512 512z m0-68.267c244.622 0 443.733-199.11 443.733-443.733S756.623 68.267 512 68.267 68.267 267.377 68.267 512 267.377 955.733 512 955.733z m11.378-694.044c45.51 0 85.333 11.378 113.778 39.822 28.444 22.756 45.51 62.578 45.51 102.4 0 34.133-11.377 68.267-28.444 91.022-5.689 5.69-28.444 28.445-62.578 56.89-11.377 11.377-22.755 22.755-28.444 39.821-5.689 17.067-11.378 34.134-11.378 45.512v11.377h-79.644v-11.377c0-28.445 5.689-51.2 17.066-68.267 11.378-22.756 39.823-51.2 79.645-91.022l11.378-11.378c11.377-17.067 22.755-34.133 22.755-51.2 0-22.756-5.689-45.511-22.755-56.889-17.067-17.067-34.134-22.756-62.578-22.756-34.133 0-56.889 11.378-73.956 28.445-11.377 17.067-17.066 39.822-17.066 73.955H352.71c0-51.2 17.067-96.71 45.511-125.155 28.445-34.133 73.956-51.2 125.156-51.2zM512 688.356c17.067 0 28.444 5.688 39.822 17.066 11.378 11.378 17.067 22.756 17.067 39.822 0 17.067-5.689 28.445-17.067 39.823-11.378 11.377-22.755 17.066-39.822 17.066-28.444 0-51.2-22.755-51.2-51.2 0-17.066 5.689-28.444 17.067-39.822 5.689-17.067 22.755-22.755 34.133-22.755z"
p-id=
"23220"
></path></svg>
\ No newline at end of file
frontend/src/icons/svg/language.svg
浏览文件 @
ba589d01
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1623896817205"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"12052"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M616.521143 407.478857h313.417143a69.485714 69.485714 0 0 1 69.705143 69.705143v452.754286a69.485714 69.485714 0 0 1-69.705143 69.705143h-452.754286a69.485714 69.485714 0 0 1-69.705143-69.705143V616.594286H94.061714a69.485714 69.485714 0 0 1-69.705143-69.705143v-452.754286a69.485714 69.485714 0 0 1 69.705143-69.705143h452.754286a69.485714 69.485714 0 0 1 69.705143 69.705143V407.405714z m0 69.705143v69.632a69.485714 69.485714 0 0 1-69.705143 69.705143h-69.632v278.674286c0 19.163429 15.579429 34.742857 34.816 34.742857h383.122286a34.816 34.816 0 0 0 34.816-34.742857V512a34.816 34.816 0 0 0-34.816-34.816h-278.674286zM94.061714 128.731429V512c0 19.236571 15.579429 34.816 34.742857 34.816H512A34.816 34.816 0 0 0 546.816 512V128.877714A34.816 34.816 0 0 0 512 94.061714H128.877714a34.816 34.816 0 0 0-34.816 34.742857z m69.632 265.947428V219.574857h122.733715V146.285714h50.834285c7.021714 1.024 10.532571 1.974857 10.532572 2.998857a11.483429 11.483429 0 0 1-1.462857 4.461715c-3.072 8.045714-4.534857 17.481143-4.534858 28.452571v37.376h130.194286v170.642286h-55.369143v-22.454857H341.796571v128.731428h-53.906285v-128.731428H214.601143v26.989714h-50.907429z m50.834286-133.193143v65.828572h73.362286v-65.828572H214.601143z m202.093714 65.828572v-65.828572H341.796571v65.828572h74.825143z m221.915429 531.163428h-56.905143l100.278857-276.918857h70.363429l97.28 276.918857h-59.830857l-20.992-58.368H659.456l-20.918857 58.368z m35.84-104.813714h79.36L716.361143 635.611429h-1.462857l-40.448 118.198857z m255.561143-450.706286h-69.632a139.337143 139.337143 0 0 0-139.337143-139.337143v-69.632a208.969143 208.969143 0 0 1 208.969143 208.969143zM94.061714 720.969143h69.632c0 76.946286 62.390857 139.337143 139.337143 139.337143v69.632a208.969143 208.969143 0 0 1-208.969143-208.969143z"
p-id=
"12053"
fill=
"#8a8a8a"
></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1623896817205"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"12052"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
></style></defs><path
d=
"M616.521143 407.478857h313.417143a69.485714 69.485714 0 0 1 69.705143 69.705143v452.754286a69.485714 69.485714 0 0 1-69.705143 69.705143h-452.754286a69.485714 69.485714 0 0 1-69.705143-69.705143V616.594286H94.061714a69.485714 69.485714 0 0 1-69.705143-69.705143v-452.754286a69.485714 69.485714 0 0 1 69.705143-69.705143h452.754286a69.485714 69.485714 0 0 1 69.705143 69.705143V407.405714z m0 69.705143v69.632a69.485714 69.485714 0 0 1-69.705143 69.705143h-69.632v278.674286c0 19.163429 15.579429 34.742857 34.816 34.742857h383.122286a34.816 34.816 0 0 0 34.816-34.742857V512a34.816 34.816 0 0 0-34.816-34.816h-278.674286zM94.061714 128.731429V512c0 19.236571 15.579429 34.816 34.742857 34.816H512A34.816 34.816 0 0 0 546.816 512V128.877714A34.816 34.816 0 0 0 512 94.061714H128.877714a34.816 34.816 0 0 0-34.816 34.742857z m69.632 265.947428V219.574857h122.733715V146.285714h50.834285c7.021714 1.024 10.532571 1.974857 10.532572 2.998857a11.483429 11.483429 0 0 1-1.462857 4.461715c-3.072 8.045714-4.534857 17.481143-4.534858 28.452571v37.376h130.194286v170.642286h-55.369143v-22.454857H341.796571v128.731428h-53.906285v-128.731428H214.601143v26.989714h-50.907429z m50.834286-133.193143v65.828572h73.362286v-65.828572H214.601143z m202.093714 65.828572v-65.828572H341.796571v65.828572h74.825143z m221.915429 531.163428h-56.905143l100.278857-276.918857h70.363429l97.28 276.918857h-59.830857l-20.992-58.368H659.456l-20.918857 58.368z m35.84-104.813714h79.36L716.361143 635.611429h-1.462857l-40.448 118.198857z m255.561143-450.706286h-69.632a139.337143 139.337143 0 0 0-139.337143-139.337143v-69.632a208.969143 208.969143 0 0 1 208.969143 208.969143zM94.061714 720.969143h69.632c0 76.946286 62.390857 139.337143 139.337143 139.337143v69.632a208.969143 208.969143 0 0 1-208.969143-208.969143z"
p-id=
"12053"
></path></svg>
\ No newline at end of file
frontend/src/lang/zh.js
浏览文件 @
ba589d01
...
...
@@ -1250,7 +1250,16 @@ export default {
loginImage
:
'登录页面右侧图片'
,
loginTitle
:
'登录页面标题'
,
title
:
'系统名称'
,
advice_size
:
'建议图片大小'
advice_size
:
'建议图片大小'
,
theme
:
'主题颜色'
,
topMenuColor
:
'头部背景'
,
topMenuActiveColor
:
'头部选中背景'
,
topMenuTextColor
:
'头部字体颜色'
,
topMenuTextActiveColor
:
'头部字体选中颜色'
},
auth
:
{
authConfig
:
'权限配置'
,
...
...
frontend/src/layout/components/AppMain.vue
浏览文件 @
ba589d01
...
...
@@ -20,7 +20,6 @@ export default {
</
script
>
<
style
lang=
"scss"
scoped
>
@import
"~@/styles/variables.scss"
;
.app-main
{
height
:
100%
;
...
...
frontend/src/layout/components/Licbar.vue
浏览文件 @
ba589d01
...
...
@@ -17,9 +17,9 @@ export default {
}
},
computed
:
{
theme
()
{
/*
theme() {
return this.$store.state.settings.theme
},
},
*/
licValidate
()
{
return
this
.
$store
.
state
.
lic
.
validate
},
...
...
frontend/src/layout/components/Settings/index.vue
deleted
100644 → 0
浏览文件 @
a90de21b
<
template
>
<div
class=
"drawer-container"
>
<div>
<h3
class=
"drawer-title"
>
系统布局设置
</h3>
<div
class=
"drawer-item"
>
<span>
主题颜色
</span>
<theme-picker
style=
"float: right;height: 26px;margin: -3px 8px 0 0;"
@
change=
"themeChange"
/>
</div>
<!--
<div
class=
"drawer-item"
>
<span>
显示标签
</span>
<el-switch
v-model=
"tagsView"
class=
"drawer-switch"
/>
</div>
<div
class=
"drawer-item"
>
<span>
固定头部
</span>
<el-switch
v-model=
"fixedHeader"
class=
"drawer-switch"
/>
</div>
-->
<div
class=
"drawer-item"
>
<span>
显示LOGO
</span>
<el-switch
v-model=
"sidebarLogo"
class=
"drawer-switch"
/>
</div>
<!--
<div
class=
"drawer-item"
>
<span>
菜单UniqueOpened
</span>
<el-switch
v-model=
"uniqueOpened"
class=
"drawer-switch"
/>
</div>
-->
<div
class=
"drawer-item"
>
<span>
展开菜单
</span>
<el-switch
v-model=
"toggleSideBar"
class=
"drawer-switch"
/>
</div>
</div>
</div>
</
template
>
<
script
>
import
ThemePicker
from
'@/components/ThemePicker'
export
default
{
components
:
{
ThemePicker
},
data
()
{
return
{
showMenu
:
true
}
},
computed
:
{
// fixedHeader: {
// get() {
// return this.$store.state.settings.fixedHeader
// },
// set(val) {
// this.$store.dispatch('settings/changeSetting', {
// key: 'fixedHeader',
// value: val
// })
// }
// },
// tagsView: {
// get() {
// return this.$store.state.settings.tagsView
// },
// set(val) {
// this.$store.dispatch('settings/changeSetting', {
// key: 'tagsView',
// value: val
// })
// }
// },
sidebarLogo
:
{
get
()
{
return
this
.
$store
.
state
.
settings
.
sidebarLogo
},
set
(
val
)
{
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'sidebarLogo'
,
value
:
val
})
}
},
toggleSideBar
:
{
get
()
{
return
this
.
showMenu
},
set
(
val
)
{
this
.
showMenu
=
!
this
.
showMenu
this
.
$store
.
dispatch
(
'app/toggleSideBar'
)
}
}
// uniqueOpened: {
// get() {
// return this.$store.state.settings.uniqueOpened
// },
// set(val) {
// this.$store.dispatch('settings/changeSetting', {
// key: 'uniqueOpened',
// value: val
// })
// }
// }
},
methods
:
{
themeChange
(
val
)
{
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'theme'
,
value
:
val
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.drawer-container
{
padding
:
24px
;
font-size
:
14px
;
line-height
:
1
.5
;
word-wrap
:
break-word
;
.drawer-title
{
margin-bottom
:
12px
;
color
:
rgba
(
0
,
0
,
0
,
.85
);
font-size
:
14px
;
line-height
:
22px
;
}
.drawer-item
{
color
:
rgba
(
0
,
0
,
0
,
.65
);
font-size
:
14px
;
padding
:
12px
0
;
}
.drawer-switch
{
float
:
right
}
}
</
style
>
frontend/src/layout/components/Sidebar/Logo.vue
浏览文件 @
ba589d01
...
...
@@ -53,8 +53,7 @@ export default {
width
:
100%
;
height
:
50px
;
line-height
:
50px
;
// background: #2b2f3a;
background-color
:
$menuBg
;
background-color
:
$topBarBg
;
text-align
:
center
;
overflow
:
hidden
;
...
...
frontend/src/layout/components/Sidebar/index.vue
浏览文件 @
ba589d01
<
template
>
<div
:class=
"
{'has-logo':showLogo}">
<div
:class=
"
{'has-logo':showLogo}"
:style="{'--active-bg': activeBg, '--theme':$store.state.settings.theme , '--left-menu-hovor': variables.leftMenuHovor}"
>
<logo
v-if=
"showLogo"
:collapse=
"isCollapse"
/>
<el-menu
:default-active=
"activeMenu"
:collapse=
"isCollapse"
:background-color=
"variables.menuBg"
:unique-opened=
"false"
:active-text-color=
"variables.menuActiveText"
:collapse-transition=
"false"
mode=
"vertical"
>
...
...
@@ -21,9 +18,12 @@ import { mapGetters } from 'vuex'
import
Logo
from
'./Logo'
import
SidebarItem
from
'./SidebarItem'
import
variables
from
'@/styles/variables.scss'
import
{
getThemeCluster
}
from
'@/utils/style'
export
default
{
components
:
{
SidebarItem
,
Logo
},
computed
:
{
...
mapGetters
([
'sidebar'
]),
...
...
@@ -48,7 +48,38 @@ export default {
},
isCollapse
()
{
return
false
},
activeBg
()
{
const
theme
=
this
.
$store
.
state
.
settings
.
theme
const
styleCluster
=
getThemeCluster
(
theme
.
replace
(
'#'
,
''
))
if
(
styleCluster
.
length
>
2
)
{
const
len
=
styleCluster
.
length
const
val
=
styleCluster
[
len
-
2
]
return
val
}
return
''
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.sidebar-container
{
>>>
li
.el-menu-item.is-active
{
background-color
:
var
(
--
active-bg
)
!
important
;
}
>>>
li
.el-submenu.is-active
:not
(
&
:hover
)
{
background-color
:
var
(
--
active-bg
)
;
}
>>>
li
.el-submenu__title
{
&
:hover
{
background-color
:
var
(
--
left-menu-hovor
)
!
important
;
}
}
/* .is-active > .el-submenu__title {
color: var(--theme) !important;
} */
}
</
style
>
frontend/src/layout/components/Topbar.vue
浏览文件 @
ba589d01
<
template
>
<div
class=
"top-nav"
:style=
"
{
'background-color': '#f1f3f8'
}">
<div
class=
"top-nav"
:style=
"
{
backgroundColor: topMenuColor, '--active-bg-color': topMenuActiveColor
}">
<div
v-loading=
"!axiosFinished"
class=
"log"
>
<!--
<img
v-if=
"!logoUrl"
src=
"@/assets/DataEase-color.png"
width=
"140"
alt=
""
style=
"padding-top: 10px;"
>
-->
<svg-icon
v-if=
"!logoUrl && axiosFinished"
icon-class=
"DataEase"
custom-class=
"top-nav-logo-icon"
/>
<img
v-if=
"logoUrl && axiosFinished"
:src=
"logoUrl"
width=
"140"
alt=
""
style=
"padding-top: 10px;"
>
</div>
<el-menu
:active-text-color=
"variables.topMenuActiveText"
class=
"de-top-menu"
:background-color=
"topMenuColor"
:text-color=
"topMenuTextColor"
:active-text-color=
"topMenuTextActiveColor"
:default-active=
"activeMenu"
mode=
"horizontal"
:style=
"
{'
background-color': '#f1f3f8', '
margin-left': '260px', 'position': 'absolute'}"
:style=
"
{'margin-left': '260px', 'position': 'absolute'}"
@select="handleSelect"
>
<div
v-for=
"item in permission_routes"
:key=
"item.path"
class=
"nav-item"
>
...
...
@@ -22,19 +24,9 @@
</div>
</el-menu>
<div
class=
"right-menu"
>
<div
class=
"right-menu"
:style=
"
{color: topMenuTextColor}"
>
<template>
<!--
<el-tooltip
content=
"项目文档"
effect=
"dark"
placement=
"bottom"
>
-->
<!--
<doc
class=
"right-menu-item hover-effect"
/>
-->
<!--
</el-tooltip>
-->
<!--
<el-tooltip
content=
"全屏缩放"
effect=
"dark"
placement=
"bottom"
>
-->
<!--
<screenfull
id=
"screenfull"
class=
"right-menu-item hover-effect"
/>
-->
<!--
</el-tooltip>
-->
<!--
<el-tooltip
:content=
"$t('navbar.size')"
effect=
"dark"
placement=
"bottom"
>
<size-select
id=
"size-select"
class=
"right-menu-item hover-effect"
/>
</el-tooltip>
-->
<notification
class=
"right-menu-item hover-effect"
/>
<lang-select
class=
"right-menu-item hover-effect"
/>
<div
style=
"height: 100%;padding: 0 8px;"
class=
"right-menu-item hover-effect"
>
...
...
@@ -45,7 +37,7 @@
</
template
>
<el-dropdown
class=
"top-dropdown"
style=
"display: flex;align-items: center; width:100px;"
>
<span
class=
"el-dropdown-link"
style=
"font-size: 14px;max-width: 80px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"
>
<span
:style=
" {color: topMenuTextColor}"
class=
"el-dropdown-link"
style=
"font-size: 14px;max-width: 80px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;"
>
{{ name }}
<i
class=
"el-icon-arrow-down el-icon--right"
/>
</span>
...
...
@@ -61,9 +53,7 @@
<router-link
to=
"/person-pwd/index"
>
<el-dropdown-item>
{{ $t('user.change_password') }}
</el-dropdown-item>
</router-link>
<!-- <a href="https://de-docs.fit2cloud.com/" target="_blank">-->
<!-- <el-dropdown-item>{{ $t('commons.help_documentation') }} </el-dropdown-item>-->
<!-- </a>-->
<router-link
to=
"/about/index"
>
<el-dropdown-item>
{{ $t('commons.about_us') }}
</el-dropdown-item>
</router-link>
...
...
@@ -73,7 +63,9 @@
</el-dropdown-menu>
</el-dropdown>
</div>
<theme-picker
v-show=
"false"
ref=
"de-theme"
/>
</div>
</template>
<
script
>
...
...
@@ -82,19 +74,17 @@ import AppLink from './Sidebar/Link'
import
variables
from
'@/styles/variables.scss'
import
{
isExternal
}
from
'@/utils/validate'
import
Notification
from
'@/components/Notification'
// import Screenfull from '@/components/Screenfull'
// import SizeSelect from '@/components/SizeSelect'
import
bus
from
'@/utils/bus'
import
LangSelect
from
'@/components/LangSelect'
import
{
getSysUI
}
from
'@/utils/auth'
import
ThemePicker
from
'@/components/ThemePicker'
export
default
{
name
:
'Topbar'
,
components
:
{
AppLink
,
// Screenfull,
// SizeSelect,
Notification
,
LangSelect
// Doc
LangSelect
,
ThemePicker
},
data
()
{
return
{
...
...
@@ -108,6 +98,26 @@ export default {
theme
()
{
return
this
.
$store
.
state
.
settings
.
theme
},
topMenuColor
()
{
if
(
this
.
$store
.
getters
.
uiInfo
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuColor'
]
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuColor'
].
paramValue
)
{
return
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuColor'
].
paramValue
}
return
this
.
variables
.
topBarBg
},
topMenuActiveColor
()
{
if
(
this
.
$store
.
getters
.
uiInfo
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuActiveColor'
]
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuActiveColor'
].
paramValue
)
{
return
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuActiveColor'
].
paramValue
}
return
this
.
variables
.
topBarMenuActive
},
topMenuTextColor
()
{
if
(
this
.
$store
.
getters
.
uiInfo
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
]
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
].
paramValue
)
{
return
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextColor'
].
paramValue
}
return
this
.
variables
.
topBarMenuText
},
topMenuTextActiveColor
()
{
if
(
this
.
$store
.
getters
.
uiInfo
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextActiveColor'
]
&&
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextActiveColor'
].
paramValue
)
{
return
this
.
$store
.
getters
.
uiInfo
[
'ui.topMenuTextActiveColor'
].
paramValue
}
return
this
.
variables
.
topBarMenuTextActive
},
/* topMenuColor() {
return this.$store.getters.uiInfo.topMenuColor
}, */
activeMenu
()
{
const
route
=
this
.
$route
const
{
meta
,
path
}
=
route
...
...
@@ -138,15 +148,14 @@ export default {
mounted
()
{
this
.
initCurrentRoutes
()
bus
.
$on
(
'set-theme-info'
,
this
.
setThemeInfo
)
bus
.
$on
(
'set-top-menu-info'
,
this
.
setTopMenuInfo
)
bus
.
$on
(
'set-top-menu-active-info'
,
this
.
setTopMenuActiveInfo
)
bus
.
$on
(
'set-top-text-info'
,
this
.
setTopTextInfo
)
bus
.
$on
(
'set-top-text-active-info'
,
this
.
setTopTextActiveInfo
)
},
created
()
{
this
.
$store
.
dispatch
(
'user/getUI'
).
then
(()
=>
{
this
.
uiInfo
=
getSysUI
()
if
(
this
.
uiInfo
[
'ui.logo'
]
&&
this
.
uiInfo
[
'ui.logo'
].
paramValue
)
{
this
.
logoUrl
=
'/system/ui/image/'
+
this
.
uiInfo
[
'ui.logo'
].
paramValue
}
this
.
axiosFinished
=
true
})
this
.
loadUiInfo
()
},
methods
:
{
// 通过当前路径找到二级菜单对应项,存到store,用来渲染左侧菜单
...
...
@@ -236,6 +245,38 @@ export default {
async
logout
()
{
await
this
.
$store
.
dispatch
(
'user/logout'
)
this
.
$router
.
push
(
`/login?redirect=
${
this
.
$route
.
fullPath
}
`
)
},
loadUiInfo
()
{
this
.
$store
.
dispatch
(
'user/getUI'
).
then
(()
=>
{
this
.
uiInfo
=
getSysUI
()
if
(
this
.
uiInfo
[
'ui.logo'
]
&&
this
.
uiInfo
[
'ui.logo'
].
paramValue
)
{
this
.
logoUrl
=
'/system/ui/image/'
+
this
.
uiInfo
[
'ui.logo'
].
paramValue
}
if
(
this
.
uiInfo
[
'ui.theme'
]
&&
this
.
uiInfo
[
'ui.theme'
].
paramValue
)
{
const
val
=
this
.
uiInfo
[
'ui.theme'
].
paramValue
this
.
$store
.
dispatch
(
'settings/changeSetting'
,
{
key
:
'theme'
,
value
:
val
})
}
this
.
axiosFinished
=
true
})
},
setThemeInfo
(
val
)
{
// console.log('切换的主题颜色是:' + val)
this
.
$refs
[
'de-theme'
]
&&
this
.
$refs
[
'de-theme'
].
switch
&&
this
.
$refs
[
'de-theme'
].
switch
(
val
)
},
setTopMenuInfo
(
val
)
{
this
.
loadUiInfo
()
},
setTopMenuActiveInfo
(
val
)
{
this
.
loadUiInfo
()
},
setTopTextInfo
(
val
)
{
this
.
loadUiInfo
()
},
setTopTextActiveInfo
(
val
)
{
this
.
loadUiInfo
()
}
}
...
...
@@ -259,4 +300,11 @@ export default {
vertical-align
:
text-bottom
;
margin-right
:
10px
;
}
.de-top-menu
{
>>>
li
.is-active
{
// background-color: #0a7be0 !important;
background-color
:
var
(
--
active-bg-color
)
!
important
;
}
}
</
style
>
frontend/src/layout/components/index.js
浏览文件 @
ba589d01
// export { default as Navbar } from './Navbar'
export
{
default
as
Sidebar
}
from
'./Sidebar'
export
{
default
as
Settings
}
from
'./Settings'
//
export { default as Settings } from './Settings'
export
{
default
as
AppMain
}
from
'./AppMain'
export
{
default
as
Topbar
}
from
'./Topbar'
export
{
default
as
Licbar
}
from
'./Licbar'
frontend/src/permission.js
浏览文件 @
ba589d01
...
...
@@ -7,6 +7,7 @@ import { getToken } from '@/utils/auth' // get token from cookie
import
getPageTitle
from
'@/utils/get-page-title'
import
{
buildMenus
}
from
'@/api/system/menu'
import
{
filterAsyncRouter
}
from
'@/store/modules/permission'
// import bus from './utils/bus'
NProgress
.
configure
({
showSpinner
:
false
})
// NProgress Configuration
...
...
@@ -21,7 +22,7 @@ router.beforeEach(async(to, from, next) => {
// determine whether the user has logged in
const
hasToken
=
getToken
()
// bus.$emit('set-theme-info', store.state.settings.theme)
if
(
hasToken
)
{
if
(
to
.
path
===
'/login'
)
{
// if is logged in, redirect to the home page
...
...
@@ -76,7 +77,6 @@ export const loadMenus = (next, to) => {
buildMenus
().
then
(
res
=>
{
const
filterDatas
=
filterRouter
(
res
.
data
)
const
asyncRouter
=
filterAsyncRouter
(
filterDatas
)
// addMsgMenu(asyncRouter)
asyncRouter
.
push
({
path
:
'*'
,
redirect
:
'/404'
,
hidden
:
true
})
store
.
dispatch
(
'permission/GenerateRoutes'
,
asyncRouter
).
then
(()
=>
{
// 存储路由
router
.
addRoutes
(
asyncRouter
)
...
...
@@ -89,43 +89,6 @@ export const loadMenus = (next, to) => {
})
}
export
const
addMsgMenu
=
asyncRouter
=>
{
const
menu
=
{
path
:
'system-msg-web'
,
component
:
()
=>
import
(
'@/views/msg/index'
),
name
:
'sys-msg-web'
,
meta
:
{
title
:
'站内消息'
,
icon
:
'all-msg'
},
children
:
[
{
path
:
'all'
,
component
:
()
=>
import
(
'@/views/msg/all'
),
name
:
'sys-msg-web-all'
,
meta
:
{
title
:
'所有消息'
,
icon
:
'web-msg'
}
},
{
path
:
'unread'
,
component
:
()
=>
import
(
'@/views/msg/unread'
),
name
:
'sys-msg-web-unread'
,
meta
:
{
title
:
'未读消息'
,
icon
:
'unread-msg'
}
},
{
path
:
'readed'
,
component
:
()
=>
import
(
'@/views/msg/readed'
),
name
:
'sys-msg-web-readed'
,
meta
:
{
title
:
'已读消息'
,
icon
:
'readed-msg'
}
}
]
}
asyncRouter
.
forEach
(
element
=>
{
if
(
element
.
name
===
'system'
)
{
if
(
element
.
children
)
{
element
.
children
.
splice
(
0
,
0
,
menu
)
}
// element.children.push(menu)
}
})
}
/**
* 验证path是否有效
* @param {*} path
...
...
frontend/src/styles/sidebar.scss
浏览文件 @
ba589d01
...
...
@@ -15,9 +15,7 @@
.sidebar-container
{
transition
:
width
0
.28s
;
// width: $sideBarWidth !important;
background-color
:
$menuBg
;
// width: 260px;
background-color
:
$leftMenuBg
;
height
:
$contentHeight
;
position
:
fixed
;
font-size
:
0px
;
...
...
@@ -73,30 +71,30 @@
height
:
100%
;
width
:
100%
!
important
;
.is-active
{
background-color
:
$
menuHover
;
}
/*
.is-active {
background-color: $
leftMenuActive
;
}
*/
}
// menu hover
.submenu-title-noDropdown
,
.el-submenu__title
{
&
:hover
{
background-color
:
$
menuHove
r
!
important
;
background-color
:
$
leftMenuHovo
r
!
important
;
}
}
.is-active
>
.el-submenu__title
{
color
:
$
menuActiveText
!
important
;
}
/*
.is-active > .el-submenu__title {
color: $
leftMenuTextActive
!important;
}
*/
&
.nest-menu
.el-submenu
>
.el-submenu__title
,
&
.el-submenu
.el-menu-item
{
min-width
:
$sideBarWidth
!
important
;
background-color
:
$
sub
MenuBg
!
important
;
background-color
:
$
left
MenuBg
!
important
;
&
:hover
{
background-color
:
$
menuHove
r
!
important
;
background-color
:
$
leftMenuHovo
r
!
important
;
}
}
}
...
...
@@ -198,8 +196,7 @@
.nest-menu
.el-submenu
>
.el-submenu__title
,
.el-menu-item
{
&
:hover
{
// you can use $subMenuHover
background-color
:
$menuHover
!
important
;
background-color
:
$leftMenuHovor
!
important
;
}
}
...
...
frontend/src/styles/topbar.scss
浏览文件 @
ba589d01
...
...
@@ -2,7 +2,7 @@
// margin-left: $sideBarWidth;
width
:
100%
;
// background-color: #304156;
// background-color: $--color-primary
;
background-color
:
$topBarBg
;
position
:
fixed
;
top
:
0
;
left
:
0
;
...
...
@@ -17,7 +17,8 @@
font-size
:
24px
;
font-weight
:
bold
;
// color: rgb(191, 203, 217);
color
:
rgba
(
255
,
255
,
255
,
0
.87
);
// color: rgba(255, 255, 255, 0.87);
// color: $topBarBg;
float
:
left
;
img
{
...
...
@@ -29,32 +30,27 @@
.el-menu
{
float
:
left
;
border
:
none
!
important
;
// background-color: #304156;
// background-color: $--color-primary;
background-color
:
$topBarBg
;
.nav-item
{
display
:
inline-block
;
.el-menu-item
:not
(
.is-active
)
{
// color: rgb(191, 203, 217);
color
:
$menuText
;
color
:
$topBarMenuText
;
&
:hover
{
background-color
:
$menuHover
!
important
;
// color: $subMenuActiveText !important;
background-color
:
$topBarMenuHovor
!
important
;
}
&
:focus
{
background-color
:
$subMenuHover
!
important
;
color
:
$subMenuActiveText
!
important
;
background-color
:
$topBarMenuHovor
!
important
;
}
}
.is-active
{
background-color
:
$subMenuHover
!
important
;
color
:
$subMenuActiveText
!
important
;
}
/* .is-active {
background-color: $topBarMenuActive !important;
} */
}
}
...
...
@@ -76,7 +72,7 @@
height
:
100%
;
font-size
:
18px
;
// color: #5a5e66;
color
:
#606266
;
//
color: #606266;
vertical-align
:
text-bottom
;
&
.hover-effect
{
...
...
frontend/src/styles/variables.scss
浏览文件 @
ba589d01
...
...
@@ -3,7 +3,10 @@
* So I modified the default color and you can modify it to your liking.
**/
/* theme color */
$--color-primary
:
#0a7be0
;
$--color-success
:
#67C23A
;
$--color-warning
:
#E6A23C
;
...
...
@@ -12,50 +15,49 @@ $--color-danger: #F56C6C;
$--button-font-weight
:
400
;
// $--color-text-regular: #1f2d3d;
$--border-color-light
:
#dfe4ed
;
$--border-color-lighter
:
#e6ebf5
;
$--table-border
:
1px
solid
#dfe6ec
;
/* icon font path, required */
$--font-path
:
"~element-ui/lib/theme-chalk/fonts"
;
@import
"~element-ui/packages/theme-chalk/src/index"
;
@import
"~fit2cloud-ui/src/styles/common/variables"
;
// topBar
$topBarBg
:
#f1f3f8
;
$topBarMenuHovor
:
rgba
(
158
,
158
,
158
,.
2
);
$topBarMenuActive
:
$--color-primary
;
$topBarMenuText
:
#1e212a
;
$topBarMenuTextActive
:
#f4f4f5
;
// sidebar
$menuText
:
#1e212a
;
$menuActiveText
:
#0a7be0
;
$topMenuActiveText
:
#f4f4f5
;
$subMenuActiveText
:
#f4f4f5
;
//https://github.com/ElemeFE/element/issues/12951
$leftMenuBg
:
#ffffff
;
$leftMenuActive
:
#ebf4fd
;
$leftMenuHovor
:
rgba
(
158
,
158
,
158
,.
2
);
$leftMenuText
:
#1e212a
;
$leftMenuTextActive
:
$--color-primary
;
// $menuBg:#304156;
$menuBg
:
#ffffff
;
// $menuHover:#263445;
$menuHover
:
rgba
(
158
,
158
,
158
,
0
.2
);
$subMenuBg
:
#ffffff
;
// $subMenuHover:#001528;
$subMenuHover
:
#0a7be0
;
$colorBg
:
rgba
(
10
,
123
,
224
,
.1
);
$colorBg
:
rgba
(
10
,
123
,
224
,
.1
);
$sideBarWidth
:
210px
;
$topBarHeight
:
56px
;
$contentHeight
:
calc
(
100vh
-
56px
);
// the :export directive is the magic sauce for webpack
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
:export
{
theme
:
$--color-primary
;
menuText
:
$menuText
;
menuActiveText
:
$menuActiveText
;
topMenuActiveText
:
$topMenuActiveText
;
subMenuActiveText
:
$subMenuActiveText
;
menuBg
:
$menuBg
;
menuHover
:
$menuHover
;
subMenuBg
:
$subMenuBg
;
subMenuHover
:
$subMenuHover
;
sideBarWidth
:
$sideBarWidth
;
topBarBg
:
$topBarBg
;
topBarMenuHovor
:
$topBarMenuHovor
;
topBarMenuActive
:
$topBarMenuActive
;
topBarMenuText
:
$topBarMenuText
;
topBarMenuTextActive
:
$topBarMenuTextActive
;
leftMenuBg
:
$leftMenuBg
;
leftMenuActive
:
$leftMenuActive
;
leftMenuHovor
:
$leftMenuHovor
;
leftMenuText
:
$leftMenuText
;
leftMenuTextActive
:
$leftMenuTextActive
;
}
frontend/src/utils/style.js
0 → 100644
浏览文件 @
ba589d01
export
function
getThemeCluster
(
theme
)
{
const
tintColor
=
(
color
,
tint
)
=>
{
let
red
=
parseInt
(
color
.
slice
(
0
,
2
),
16
)
let
green
=
parseInt
(
color
.
slice
(
2
,
4
),
16
)
let
blue
=
parseInt
(
color
.
slice
(
4
,
6
),
16
)
if
(
tint
===
0
)
{
// when primary color is in its rgb space
return
[
red
,
green
,
blue
].
join
(
','
)
}
else
{
red
+=
Math
.
round
(
tint
*
(
255
-
red
))
green
+=
Math
.
round
(
tint
*
(
255
-
green
))
blue
+=
Math
.
round
(
tint
*
(
255
-
blue
))
red
=
red
.
toString
(
16
)
green
=
green
.
toString
(
16
)
blue
=
blue
.
toString
(
16
)
return
`#
${
red
}${
green
}${
blue
}
`
}
}
const
shadeColor
=
(
color
,
shade
)
=>
{
let
red
=
parseInt
(
color
.
slice
(
0
,
2
),
16
)
let
green
=
parseInt
(
color
.
slice
(
2
,
4
),
16
)
let
blue
=
parseInt
(
color
.
slice
(
4
,
6
),
16
)
red
=
Math
.
round
((
1
-
shade
)
*
red
)
green
=
Math
.
round
((
1
-
shade
)
*
green
)
blue
=
Math
.
round
((
1
-
shade
)
*
blue
)
red
=
red
.
toString
(
16
)
green
=
green
.
toString
(
16
)
blue
=
blue
.
toString
(
16
)
return
`#
${
red
}${
green
}${
blue
}
`
}
const
clusters
=
[
theme
]
for
(
let
i
=
0
;
i
<=
9
;
i
++
)
{
clusters
.
push
(
tintColor
(
theme
,
Number
((
i
/
10
).
toFixed
(
2
))))
}
clusters
.
push
(
shadeColor
(
theme
,
0.1
))
return
clusters
}
frontend/src/views/msg/all.vue
浏览文件 @
ba589d01
...
...
@@ -180,8 +180,8 @@ export default {
>>>
.el-radio-button__orig-radio
:checked
+
.el-radio-button__inner
{
color
:
#fff
;
background-color
:
#0a7be0
;
border-color
:
#0a7be0
;
//
background-color: #0a7be0;
//
border-color: #0a7be0;
-webkit-box-shadow
:
0px
0
0
0
#0a7be0
;
box-shadow
:
0px
0
0
0
#0a7be0
;
}
...
...
frontend/src/views/msg/readed.vue
浏览文件 @
ba589d01
...
...
@@ -210,8 +210,8 @@ export default {
>>>
.el-radio-button__orig-radio
:checked
+
.el-radio-button__inner
{
color
:
#fff
;
background-color
:
#0a7be0
;
border-color
:
#0a7be0
;
/*
background-color: #0a7be0;
border-color: #0a7be0;
*/
-webkit-box-shadow
:
0px
0
0
0
#0a7be0
;
box-shadow
:
0px
0
0
0
#0a7be0
;
}
...
...
frontend/src/views/msg/unread.vue
浏览文件 @
ba589d01
...
...
@@ -218,8 +218,8 @@ export default {
>>>
.el-radio-button__orig-radio
:checked
+
.el-radio-button__inner
{
color
:
#fff
;
background-color
:
#0a7be0
;
border-color
:
#0a7be0
;
/*
background-color: #0a7be0;
border-color: #0a7be0;
*/
-webkit-box-shadow
:
0px
0
0
0
#0a7be0
;
box-shadow
:
0px
0
0
0
#0a7be0
;
}
...
...
frontend/src/views/system/datasource/form.vue
浏览文件 @
ba589d01
...
...
@@ -25,10 +25,10 @@
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.host')"
prop=
"configuration.host"
>
<el-input
v-model=
"form.configuration.host"
autocomplete=
"off"
/>
<el-input
v-model=
"form.configuration.host"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.data_base')"
prop=
"configuration.dataBase"
>
<el-input
v-model=
"form.configuration.dataBase"
autocomplete=
"off"
/>
<el-input
v-model=
"form.configuration.dataBase"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
v-if=
"form.type=='oracle'"
:label=
"$t('datasource.oracle_connection_type')"
prop=
"configuration.connectionType"
>
...
...
@@ -37,7 +37,7 @@
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.user_name')"
prop=
"configuration.username"
>
<el-input
v-model=
"form.configuration.username"
autocomplete=
"off"
/>
<el-input
v-model=
"form.configuration.username"
autocomplete=
"off"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.password')"
prop=
"configuration.password"
>
<el-input
v-model=
"form.configuration.password"
autocomplete=
"off"
show-password
/>
...
...
@@ -52,7 +52,7 @@
</el-form-item>
<el-form-item
v-if=
"form.type=='oracle' || form.type=='sqlServer' || form.type=='pg'"
:label=
"$t('datasource.schema')"
>
<el-select
filterable
v-model=
"form.configuration.schema"
:placeholder=
"$t('datasource.please_choose_schema')"
class=
"select-width"
>
<el-select
v-model=
"form.configuration.schema"
filterable
:placeholder=
"$t('datasource.please_choose_schema')"
class=
"select-width"
>
<el-option
v-for=
"item in schemas"
:key=
"item"
...
...
@@ -68,19 +68,19 @@
<el-input
v-model=
"form.configuration.initialPoolSize"
autocomplete=
"off"
type=
"number"
min=
"0"
size=
"small"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.min_pool_size')"
prop=
"configuration.minPoolSize"
>
<el-input
v-model=
"form.configuration.minPoolSize"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
<el-input
v-model=
"form.configuration.minPoolSize"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.max_pool_size')"
prop=
"configuration.maxPoolSize"
>
<el-input
v-model=
"form.configuration.maxPoolSize"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
<el-input
v-model=
"form.configuration.maxPoolSize"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.max_idle_time')"
prop=
"configuration.maxIdleTime"
>
<el-input
v-model=
"form.configuration.maxIdleTime"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
<el-input
v-model=
"form.configuration.maxIdleTime"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.acquire_increment')"
prop=
"configuration.acquireIncrement"
>
<el-input
v-model=
"form.configuration.acquireIncrement"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
<el-input
v-model=
"form.configuration.acquireIncrement"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
</el-form-item>
<el-form-item
v-if=
"form.configuration.dataSourceType=='jdbc'"
:label=
"$t('datasource.connect_timeout')"
prop=
"configuration.connectTimeout"
>
<el-input
v-model=
"form.configuration.connectTimeout"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
<el-input
v-model=
"form.configuration.connectTimeout"
autocomplete=
"off"
type=
"number"
min=
"0"
/>
</el-form-item>
</el-collapse-item>
...
...
@@ -144,9 +144,9 @@ export default {
'configuration.connectTimeout'
:
[{
required
:
true
,
message
:
this
.
$t
(
'datasource.please_input_connect_timeout'
),
trigger
:
'change'
}]
},
allTypes
:
[{
name
:
'mysql'
,
label
:
'MySQL'
,
type
:
'jdbc'
},
{
name
:
'oracle'
,
label
:
'Oracle'
,
type
:
'jdbc'
},
{
name
:
'sqlServer'
,
label
:
'SQL Server'
,
type
:
'jdbc'
},
{
name
:
'pg'
,
label
:
'PostgreSQL'
,
type
:
'jdbc'
}],
{
name
:
'oracle'
,
label
:
'Oracle'
,
type
:
'jdbc'
},
{
name
:
'sqlServer'
,
label
:
'SQL Server'
,
type
:
'jdbc'
},
{
name
:
'pg'
,
label
:
'PostgreSQL'
,
type
:
'jdbc'
}],
schemas
:
[],
canEdit
:
false
,
originConfiguration
:
{}
...
...
@@ -202,8 +202,8 @@ export default {
this
.
$message
.
error
(
this
.
$t
(
'datasource.please_choose_schema'
))
return
}
if
(
this
.
form
.
configuration
.
initialPoolSize
<
0
||
this
.
form
.
configuration
.
minPoolSize
<
0
||
this
.
form
.
configuration
.
maxPoolSize
<
0
||
this
.
form
.
configuration
.
maxIdleTime
<
0
||
this
.
form
.
configuration
.
acquireIncrement
<
0
||
this
.
form
.
configuration
.
idleConnectionTestPeriod
<
0
||
this
.
form
.
configuration
.
connectTimeout
<
0
)
{
if
(
this
.
form
.
configuration
.
initialPoolSize
<
0
||
this
.
form
.
configuration
.
minPoolSize
<
0
||
this
.
form
.
configuration
.
maxPoolSize
<
0
||
this
.
form
.
configuration
.
maxIdleTime
<
0
||
this
.
form
.
configuration
.
acquireIncrement
<
0
||
this
.
form
.
configuration
.
idleConnectionTestPeriod
<
0
||
this
.
form
.
configuration
.
connectTimeout
<
0
)
{
this
.
$message
.
error
(
this
.
$t
(
'datasource.no_less_then_0'
))
return
}
...
...
@@ -212,7 +212,7 @@ export default {
const
method
=
this
.
formType
===
'add'
?
addDs
:
editDs
const
form
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
form
))
form
.
configuration
=
JSON
.
stringify
(
form
.
configuration
)
if
(
this
.
formType
!==
'add'
&&
this
.
originConfiguration
!==
form
.
configuration
)
{
if
(
this
.
formType
!==
'add'
&&
this
.
originConfiguration
!==
form
.
configuration
)
{
$confirm
(
this
.
$t
(
'datasource.edit_datasource_msg'
),
()
=>
{
method
(
form
).
then
(
res
=>
{
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
...
...
@@ -220,7 +220,7 @@ export default {
this
.
backToList
()
})
})
}
else
{
}
else
{
method
(
form
).
then
(
res
=>
{
this
.
$success
(
this
.
$t
(
'commons.save_success'
))
this
.
refreshTree
()
...
...
@@ -255,23 +255,22 @@ export default {
if
(
valid
)
{
const
data
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
form
))
data
.
configuration
=
JSON
.
stringify
(
data
.
configuration
)
if
(
data
.
showModel
===
'show'
&&
!
this
.
canEdit
)
{
if
(
data
.
showModel
===
'show'
&&
!
this
.
canEdit
)
{
validateDsById
(
data
.
id
).
then
(
res
=>
{
if
(
res
.
success
)
{
if
(
res
.
success
)
{
this
.
$success
(
this
.
$t
(
'datasource.validate_success'
))
}
else
{
}
else
{
this
.
$error
(
this
.
$t
(
res
.
message
))
}
this
.
refreshTree
()
}).
catch
(
res
=>
{
this
.
$error
(
res
.
message
)
})
}
else
{
}
else
{
validateDs
(
data
).
then
(
res
=>
{
if
(
res
.
success
)
{
if
(
res
.
success
)
{
this
.
$success
(
this
.
$t
(
'datasource.validate_success'
))
}
else
{
}
else
{
this
.
$error
(
this
.
$t
(
res
.
message
))
}
}).
catch
(
res
=>
{
...
...
@@ -301,8 +300,6 @@ export default {
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
"~@/styles/mixin.scss"
;
@import
"~@/styles/variables.scss"
;
.back-button
{
cursor
:
pointer
;
...
...
frontend/src/views/system/plugin/dynamic.vue
浏览文件 @
ba589d01
<
template
>
<layout-content
v-if=
"!noLayout"
v-loading=
"$store.getters.loadingMap[$store.getters.currentPath]"
:header=
"header"
:back-name=
"backName"
>
<async-component
v-if=
"showAsync"
:url=
"url"
@
execute-axios=
"executeAxios"
@
on-add-languanges=
"addLanguages"
@
on-plugin-layout=
"setLayoutInfo"
/>
<async-component
v-if=
"showAsync"
:url=
"url"
@
execute-axios=
"executeAxios"
@
on-add-languanges=
"addLanguages"
@
on-plugin-layout=
"setLayoutInfo"
@
plugin-call-back=
"pluginCallBack"
/>
<div
v-else
>
<h1>
未知组件无法展示
</h1>
</div>
</layout-content>
<div
v-else
>
<async-component
v-if=
"showAsync"
:url=
"url"
@
execute-axios=
"executeAxios"
@
on-add-languanges=
"addLanguages"
@
on-plugin-layout=
"setLayoutInfo"
/>
<async-component
v-if=
"showAsync"
:url=
"url"
@
execute-axios=
"executeAxios"
@
on-add-languanges=
"addLanguages"
@
on-plugin-layout=
"setLayoutInfo"
@
plugin-call-back=
"pluginCallBack"
/>
<div
v-else
>
<h1>
未知组件无法展示
</h1>
</div>
...
...
@@ -18,6 +18,7 @@
import
LayoutContent
from
'@/components/business/LayoutContent'
import
AsyncComponent
from
'@/components/AsyncComponent'
import
i18n
from
'@/lang'
import
bus
from
'@/utils/bus'
import
{
execute
}
from
'@/api/system/dynamic'
export
default
{
name
:
'Dynamic'
,
...
...
@@ -85,6 +86,12 @@ export default {
const
{
header
,
backName
}
=
param
this
.
header
=
header
this
.
backName
=
backName
},
pluginCallBack
(
param
)
{
// console.log(param)
const
{
eventName
,
eventParam
}
=
param
bus
.
$emit
(
eventName
,
eventParam
)
}
}
}
...
...
frontend/src/views/system/user/index.vue
浏览文件 @
ba589d01
...
...
@@ -18,7 +18,6 @@
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"nickName"
sortable=
"custom"
:label=
"$t('commons.nick_name')"
/>
<el-table-column
prop=
"gender"
:label=
"$t('commons.gender')"
width=
"60"
/>
<!-- <el-table-column :show-overflow-tooltip="true" prop="phone" :label="$t('commons.phone')" /> -->
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"email"
:label=
"$t('commons.email')"
/>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"dept"
sortable=
"custom"
:label=
"$t('commons.organization')"
>
<
template
slot-scope=
"scope"
>
...
...
@@ -162,7 +161,6 @@
<
script
>
import
LayoutContent
from
'@/components/business/LayoutContent'
import
ComplexTable
from
'@/components/business/complex-table'
// import { checkPermission } from '@/utils/permission'
import
{
formatCondition
,
formatQuickCondition
,
addOrder
,
formatOrders
}
from
'@/utils/index'
import
{
PHONE_REGEX
}
from
'@/utils/validate'
import
{
LOAD_CHILDREN_OPTIONS
,
LOAD_ROOT_OPTIONS
}
from
'@riophae/vue-treeselect'
...
...
@@ -170,7 +168,6 @@ import Treeselect from '@riophae/vue-treeselect'
import
'@riophae/vue-treeselect/dist/vue-treeselect.css'
import
{
userLists
,
addUser
,
editUser
,
delUser
,
editPassword
,
editStatus
,
allRoles
}
from
'@/api/system/user'
// import { allRoles } from '@/api/system/role'
import
{
getDeptTree
,
treeByDeptId
}
from
'@/api/system/dept'
export
default
{
...
...
@@ -192,10 +189,7 @@ export default {
label
:
this
.
$t
(
'member.edit_password'
),
icon
:
'el-icon-s-tools'
,
type
:
'success'
,
click
:
this
.
editPassword
,
show
:
this
.
checkPermission
([
'user:editPwd'
])
}
// , {
// label: '权限查看', icon: 'el-icon-lock', type: 'warning', click: this.showAuth,
// show: this.checkPermission(['user:editPwd'])
// }
],
searchConfig
:
{
useQuickSearch
:
true
,
...
...
@@ -307,7 +301,6 @@ export default {
}
},
mounted
()
{
// this.form = Object.assign({}, this.defaultForm);
this
.
allRoles
()
this
.
search
()
},
...
...
@@ -347,28 +340,14 @@ export default {
create
()
{
this
.
$router
.
push
({
name
:
'system-user-form'
})
},
// create() {
// this.depts = null
// this.formType = 'add'
// this.form = Object.assign({}, this.defaultForm)
// this.dialogVisible = true
// },
edit
(
row
)
{
this
.
$router
.
push
({
name
:
'system-user-form'
,
params
:
row
})
},
showAuth
(
row
)
{
this
.
$router
.
push
({
name
:
'system-user-form'
,
params
:
row
})
},
// edit(row) {
// this.depts = null
// this.formType = 'modify'
// this.dialogVisible = true
// this.form = Object.assign({}, row)
// if (this.form.deptId === 0) {
// this.form.deptId = null
// }
// this.initDeptTree()
// },
editPassword
(
row
)
{
this
.
editPasswordVisible
=
true
const
tempForm
=
Object
.
assign
({},
row
)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论