Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
attendance-performance-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
attendance-performance-platform
Commits
a80e27c9
Commit
a80e27c9
authored
Apr 08, 2023
by
dll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成登录页、首页、导航栏配置
parent
6867b551
Changes
20
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
9383 additions
and
9058 deletions
+9383
-9058
attendance-performance-manager-ui/admin/package-lock.json
attendance-performance-manager-ui/admin/package-lock.json
+1
-1
attendance-performance-manager-ui/admin/src/assets/images/login_bg.jpg
...rformance-manager-ui/admin/src/assets/images/login_bg.jpg
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u148.png
...e-performance-manager-ui/admin/src/assets/images/u148.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u153.png
...e-performance-manager-ui/admin/src/assets/images/u153.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u158.png
...e-performance-manager-ui/admin/src/assets/images/u158.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u162.svg
...e-performance-manager-ui/admin/src/assets/images/u162.svg
+11
-0
attendance-performance-manager-ui/admin/src/assets/images/u167.png
...e-performance-manager-ui/admin/src/assets/images/u167.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u172.png
...e-performance-manager-ui/admin/src/assets/images/u172.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/images/u177.png
...e-performance-manager-ui/admin/src/assets/images/u177.png
+0
-0
attendance-performance-manager-ui/admin/src/assets/less/base.less
...ce-performance-manager-ui/admin/src/assets/less/base.less
+1
-1
attendance-performance-manager-ui/admin/src/assets/mixins/tree.js
...ce-performance-manager-ui/admin/src/assets/mixins/tree.js
+8
-6
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
...nce-performance-manager-ui/admin/src/assets/utils/ajax.js
+8
-3
attendance-performance-manager-ui/admin/src/components/Header.vue
...ce-performance-manager-ui/admin/src/components/Header.vue
+64
-44
attendance-performance-manager-ui/admin/src/store.js
attendance-performance-manager-ui/admin/src/store.js
+19
-2
attendance-performance-manager-ui/admin/src/views/Home.vue
attendance-performance-manager-ui/admin/src/views/Home.vue
+231
-5
attendance-performance-manager-ui/admin/src/views/login/login.vue
...ce-performance-manager-ui/admin/src/views/login/login.vue
+60
-90
attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
...rformance-manager-ui/admin/src/views/staff/drawershow.vue
+1
-1
attendance-performance-manager-ui/admin/src/views/staff/list.vue
...nce-performance-manager-ui/admin/src/views/staff/list.vue
+7
-145
attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
...rformance-manager-ui/admin/src/views/system/menu/list.vue
+5
-21
attendance-performance-manager-ui/admin/yarn.lock
attendance-performance-manager-ui/admin/yarn.lock
+8967
-8739
No files found.
attendance-performance-manager-ui/admin/package-lock.json
View file @
a80e27c9
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
"js-cookie": "2.2.1",
"js-cookie": "2.2.1",
"jsencrypt": "3.0.0-rc.1",
"jsencrypt": "3.0.0-rc.1",
"json-bigint": "^0.3.0",
"json-bigint": "^0.3.0",
"jwt-decode": "
^
3.1.2",
"jwt-decode": "3.1.2",
"moment": "^2.29.4",
"moment": "^2.29.4",
"muse-ui": "^3.0.2",
"muse-ui": "^3.0.2",
"nprogress": "^0.2.0",
"nprogress": "^0.2.0",
attendance-performance-manager-ui/admin/src/assets/images/login_bg.jpg
0 → 100644
View file @
a80e27c9
1.96 MB
attendance-performance-manager-ui/admin/src/assets/images/u148.png
0 → 100644
View file @
a80e27c9
8.18 KB
attendance-performance-manager-ui/admin/src/assets/images/u153.png
0 → 100644
View file @
a80e27c9
8.54 KB
attendance-performance-manager-ui/admin/src/assets/images/u158.png
0 → 100644
View file @
a80e27c9
3.33 KB
attendance-performance-manager-ui/admin/src/assets/images/u162.svg
0 → 100644
View file @
a80e27c9
This diff is collapsed.
Click to expand it.
attendance-performance-manager-ui/admin/src/assets/images/u167.png
0 → 100644
View file @
a80e27c9
3.22 KB
attendance-performance-manager-ui/admin/src/assets/images/u172.png
0 → 100644
View file @
a80e27c9
8.86 KB
attendance-performance-manager-ui/admin/src/assets/images/u177.png
0 → 100644
View file @
a80e27c9
12.8 KB
attendance-performance-manager-ui/admin/src/assets/less/base.less
View file @
a80e27c9
...
@@ -105,7 +105,7 @@ ins,a {
...
@@ -105,7 +105,7 @@ ins,a {
.flex-align-center{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;}
.flex-align-center{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;}
.flex-pack-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}
.flex-pack-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}
.flex-pack-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}
.flex-pack-justify{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}
.flex_warp{flex-wrap: wrap;}
.clearfix{
.clearfix{
&:after{
&:after{
content: '';
content: '';
...
...
attendance-performance-manager-ui/admin/src/assets/mixins/tree.js
View file @
a80e27c9
...
@@ -62,6 +62,8 @@ export default {
...
@@ -62,6 +62,8 @@ export default {
treeProps
:
{
treeProps
:
{
id
:
"
id
"
,
id
:
"
id
"
,
label
:
"
label
"
,
label
:
"
label
"
,
areaCode
:
"
areaCode
"
,
type
:
"
type
"
,
isLeaf
:
"
isLeaf
"
,
isLeaf
:
"
isLeaf
"
,
children
:
"
children
"
,
children
:
"
children
"
,
icon
:
"
icon
"
,
icon
:
"
icon
"
,
...
...
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
View file @
a80e27c9
...
@@ -25,13 +25,18 @@ const instance = axios.create({
...
@@ -25,13 +25,18 @@ const instance = axios.create({
instance
.
interceptors
.
request
.
use
(
config
=>
{
instance
.
interceptors
.
request
.
use
(
config
=>
{
// 获取当前页面的主机名和端口号
// 获取当前页面的主机名和端口号
const
hostname
=
location
.
hostname
;
//
const hostname = location.hostname;
const
baseURL
=
config
.
baseURL
;
const
baseURL
=
config
.
baseURL
;
//const port = location.port;
//const port = location.port;
const
port
=
process
.
env
.
VUE_APP_PORTAL_PORT
==
'
undefined
'
?
'
11072
'
:
process
.
env
.
VUE_APP_PORTAL_PORT
;
//
const port =process.env.VUE_APP_PORTAL_PORT=='undefined'?'11072':process.env.VUE_APP_PORTAL_PORT;
// 动态修改请求地址
// 测试用
//http://192.168.0.98:11039/
const
hostname
=
'
192.168.0.98
'
const
port
=
'
11039
'
// 动态修改请求地址
console
.
log
(
hostname
,
baseURL
,
port
)
if
(
config
.
url
.
startsWith
(
'
/
'
))
{
if
(
config
.
url
.
startsWith
(
'
/
'
))
{
// 字符串以 / 开头
// 字符串以 / 开头
config
.
url
=
`http://
${
hostname
}
:
${
port
}${
baseURL
}${
config
.
url
}
`
;
config
.
url
=
`http://
${
hostname
}
:
${
port
}${
baseURL
}${
config
.
url
}
`
;
...
...
attendance-performance-manager-ui/admin/src/components/Header.vue
View file @
a80e27c9
...
@@ -16,27 +16,24 @@
...
@@ -16,27 +16,24 @@
<!-- 一级菜单 -->
<!-- 一级菜单 -->
<ul
class=
"menu-list flex"
>
<ul
class=
"menu-list flex"
>
<li
v-for=
'item in menu'
:key=
'item.id'
>
<li
v-for=
'item in menu'
:key=
'item.id'
>
<router-link
:to=
"item.path"
:active=
'submenu.path === item.path'
:title=
"item.name"
>
<!-- :active='submenu.path === item.path' -->
<router-link
:to=
"item.path"
:title=
"item.name"
replace
>
<i
:class=
"'el-icon-'+item.icon"
></i>
<i
:class=
"'el-icon-'+item.icon"
></i>
{{
item
.
name
}}
{{
item
.
name
}}
</router-link>
</router-link>
</li>
</li>
</ul>
</ul>
</div>
</div>
<div
class=
"layout-profile"
>
<!--
<span
class=
"el-dropdown-link"
>
<div
class=
"controllBar"
>
{{
userData
.
currUserName
}}
<i
class=
"el-icon-bell"
style=
"font-size: 15px;margin-right: 10px"
>
消息
</i>
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
</div>
</span>
-->
<div
class=
"controllBar"
@
click=
"returnHome"
>
<i
class=
"el-icon-s-home"
style=
"font-size: 15px;margin-right: 10px"
>
首页
</i>
<!--
</div>
<i
class=
"el-icon-s-home"
style=
"font-size: 15px;margin-right: 10px"
>
返回门户
</i>
-->
<!--
<div
class=
"layout-profile"
>
<el-link
class=
"el-icon-s-home"
style=
"font-size: 15px;margin-right: 10px"
@
click=
"returnHome"
>
返回门户
</el-link>
-->
<el-dropdown
@
command=
"handleCommand"
>
<el-dropdown
@
command=
"handleCommand"
>
<span
class=
"el-dropdown-link"
style=
"color:white"
>
<span
class=
"el-dropdown-link"
style=
"color:white"
>
...
@@ -63,7 +60,7 @@
...
@@ -63,7 +60,7 @@
</ul>
</ul>
<!-- 二级菜单 -->
<!-- 二级菜单 -->
<div
class=
"layout-submenu-wrapper flex"
v-if=
'submenu.children && submenu.children.length'
>
<
!--
<
div
class=
"layout-submenu-wrapper flex"
v-if=
'submenu.children && submenu.children.length'
>
<div
class=
"layout-submenu"
>
<div
class=
"layout-submenu"
>
<ul
class=
"submenu-list flex"
>
<ul
class=
"submenu-list flex"
>
<li
v-for=
'item in submenu.children'
:key=
'item.id'
>
<li
v-for=
'item in submenu.children'
:key=
'item.id'
>
...
@@ -72,7 +69,7 @@
...
@@ -72,7 +69,7 @@
</li>
</li>
</ul>
</ul>
</div>
</div>
</div>
</div>
-->
</div>
</div>
</
template
>
</
template
>
...
@@ -81,7 +78,7 @@ export default {
...
@@ -81,7 +78,7 @@ export default {
name
:
"
Header
"
,
name
:
"
Header
"
,
methods
:
{
methods
:
{
returnHome
(){
returnHome
(){
window
.
close
();
this
.
$router
.
replace
({
path
:
'
/
'
})
},
},
handleCommand
(
key
)
{
handleCommand
(
key
)
{
if
(
key
===
'
update
'
){
if
(
key
===
'
update
'
){
...
@@ -138,7 +135,7 @@ export default {
...
@@ -138,7 +135,7 @@ export default {
// this.getsocketData = getsocketData;
// this.getsocketData = getsocketData;
// // 注册监听事件
// // 注册监听事件
// window.addEventListener("onmessageWS", getsocketData,false);
// window.addEventListener("onmessageWS", getsocketData,false);
// console.log(this.menu,'菜单数据')
},
},
computed
:
{
computed
:
{
group
()
{
group
()
{
...
@@ -162,26 +159,30 @@ export default {
...
@@ -162,26 +159,30 @@ export default {
return
this
.
userData
.
flat
return
this
.
userData
.
flat
},
},
menu
()
{
menu
()
{
if
(
!
this
.
userData
.
barList
)
return
[];
if
(
!
this
.
headBar
.
children
)
{
return
this
.
userData
.
barList
.
map
(
item
=>
{
return
[]
const
url
=
item
.
url
?
item
.
url
:
(
item
.
childList
[
0
]
?
(
item
.
childList
[
0
].
url
||
''
)
:
''
);
}
else
{
return
{
return
this
.
headBar
.
children
name
:
item
.
name
,
}
path
:
url
,
// return this.userData.children.map(item=>{
id
:
item
.
id
,
// const url = item.path ? item.url : (item.childList[0] ? (item.childList[0].url || '') : '');
icon
:
item
.
imgPath
,
// return {
children
:
item
.
childList
.
map
(
sub
=>
{
// name: item.name,
return
{
// path: url,
name
:
sub
.
name
,
// id: item.id,
path
:
sub
.
url
?
sub
.
url
:
(
sub
.
childList
[
0
]
?
(
sub
.
childList
[
0
].
url
||
0
)
:
''
),
// icon: item.imgPath,
id
:
sub
.
id
,
// children: item.childList.map(sub=>{
parentId
:
sub
.
parentId
,
// return {
icon
:
sub
.
imgPath
,
// name: sub.name,
isOut
:
/^https
?\:\/\/
/
.
test
(
sub
.
url
)
// path: sub.url ? sub.url : (sub.childList[0] ? (sub.childList[0].url || 0) : ''),
}
// id: sub.id,
})
// parentId: sub.parentId,
}
// icon: sub.imgPath,
})
// isOut: /^https?\:\/\//.test(sub.url)
// }
// })
// }
// })
},
},
submenu
()
{
submenu
()
{
if
(
!
this
.
menu
.
length
)
return
{};
if
(
!
this
.
menu
.
length
)
return
{};
...
@@ -197,14 +198,22 @@ export default {
...
@@ -197,14 +198,22 @@ export default {
})
})
return
matchMenu
return
matchMenu
},
},
userData
()
{
// 二级菜单数据
return
this
.
$store
.
state
.
userData
;
headBar
()
{
}
return
this
.
$store
.
state
.
headBar
;
},
userData
(){
return
this
.
$store
.
state
.
userData
},
},
},
data
()
{
data
()
{
return
{
return
{
showMobileMenu
:
false
,
showMobileMenu
:
false
,
}
}
},
created
(){
console
.
log
(
this
.
userData
,
'
用户数据
'
)
console
.
log
(
this
.
menu
,
'
导航栏数据
'
)
}
}
}
}
</
script
>
</
script
>
...
@@ -213,9 +222,9 @@ export default {
...
@@ -213,9 +222,9 @@ export default {
.layout-header{
.layout-header{
.mobile-menu-list{display: none}
.mobile-menu-list{display: none}
.layout-menu-wrapper{
.layout-menu-wrapper{
height:
50
px;
height:
72
px;
line-height:
50
px;
line-height:
72
px;
font-size: 1
4
px;
font-size: 1
6
px;
color: #eee;
color: #eee;
background: #1848c8;
background: #1848c8;
.layout-logo{
.layout-logo{
...
@@ -253,7 +262,18 @@ export default {
...
@@ -253,7 +262,18 @@ export default {
padding-right: 30px;
padding-right: 30px;
}
}
}
}
.controllBar{
background-color: rgba(170, 170, 170, 0.4);
width: 120px;
height: 44px;
line-height: 44px;
margin-top: 34px;
transform: translateY(-50%);
text-align: center;
border-radius: 5px;
margin-right: 15px;
cursor: pointer;
}
.layout-submenu-wrapper{
.layout-submenu-wrapper{
padding-left: 20px;
padding-left: 20px;
background: #fff;
background: #fff;
...
...
attendance-performance-manager-ui/admin/src/store.js
View file @
a80e27c9
...
@@ -5,11 +5,16 @@ import { normalCallPost } from './assets/utils';
...
@@ -5,11 +5,16 @@ import { normalCallPost } from './assets/utils';
Vue
.
use
(
Vuex
)
Vue
.
use
(
Vuex
)
let
userData
=
{};
let
userData
=
{};
let
currentParentName
=
''
let
headBar
=
[]
try
{
try
{
userData
=
JSON
.
parse
(
window
.
sessionStorage
.
userData
||
'
{}
'
);
userData
=
JSON
.
parse
(
window
.
sessionStorage
.
userData
||
'
{}
'
);
currentParentName
=
window
.
sessionStorage
.
currentParentName
||
''
headBar
=
JSON
.
parse
(
window
.
sessionStorage
.
headBar
||
'
{}
'
)
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
'
未从session中获取到userData
'
)
console
.
log
(
'
未从session中获取到userData
'
)
console
.
log
(
'
未从session中获取到currentParentName
'
)
}
}
function
convertTreeToList
(
root
,
array
)
{
function
convertTreeToList
(
root
,
array
)
{
...
@@ -46,9 +51,12 @@ export default new Vuex.Store({
...
@@ -46,9 +51,12 @@ export default new Vuex.Store({
state
:
{
state
:
{
isLogin
:
false
,
isLogin
:
false
,
isMobile
:
!
isPc
(),
isMobile
:
!
isPc
(),
userData
,
userData
,
//用户数据
group
:
''
,
group
:
''
,
headBar
,
currentParentName
//当前选择菜单
},
},
// 同步存储数据
mutations
:
{
mutations
:
{
setUserData
(
state
,
data
)
{
setUserData
(
state
,
data
)
{
data
.
flat
=
convertTreeToList
(
data
.
barList
,
[]);
data
.
flat
=
convertTreeToList
(
data
.
barList
,
[]);
...
@@ -57,6 +65,10 @@ export default new Vuex.Store({
...
@@ -57,6 +65,10 @@ export default new Vuex.Store({
window
.
sessionStorage
.
userData
=
JSON
.
stringify
(
data
);
window
.
sessionStorage
.
userData
=
JSON
.
stringify
(
data
);
window
.
sessionStorage
.
token
=
data
.
token
;
window
.
sessionStorage
.
token
=
data
.
token
;
},
},
setHeadBar
(
state
,
data
){
state
.
headBar
=
data
window
.
sessionStorage
.
headBar
=
JSON
.
stringify
(
data
)
},
logout
(
state
)
{
logout
(
state
)
{
state
.
userData
=
{};
state
.
userData
=
{};
state
.
isLogin
=
false
;
state
.
isLogin
=
false
;
...
@@ -66,7 +78,12 @@ export default new Vuex.Store({
...
@@ -66,7 +78,12 @@ export default new Vuex.Store({
setGroup
(
state
,
data
)
{
setGroup
(
state
,
data
)
{
state
.
group
=
data
;
state
.
group
=
data
;
},
},
setCurrentParentName
(
state
,
data
){
state
.
currentParentName
=
data
window
.
sessionStorage
.
currentParentName
=
data
}
},
},
// 异步任务
actions
:
{
actions
:
{
login
({
commit
})
{
login
({
commit
})
{
normalCallPost
(
'
/login/index
'
).
then
(({
data
})
=>
{
normalCallPost
(
'
/login/index
'
).
then
(({
data
})
=>
{
...
@@ -79,6 +96,6 @@ export default new Vuex.Store({
...
@@ -79,6 +96,6 @@ export default new Vuex.Store({
normalCallPost
(
'
/login/logout
'
).
then
(
data
=>
{}).
catch
(
error
=>
{}).
then
(()
=>
{
normalCallPost
(
'
/login/logout
'
).
then
(
data
=>
{}).
catch
(
error
=>
{}).
then
(()
=>
{
commit
(
'
logout
'
)
commit
(
'
logout
'
)
})
})
}
,
}
}
}
})
})
attendance-performance-manager-ui/admin/src/views/Home.vue
View file @
a80e27c9
<
template
>
<
template
>
<div
class=
"page page-home"
style=
"min-height: 100vh;"
>
<div
class=
"page page-home"
>
欢迎你,
{{
userData
}}
<!-- 欢迎你,
{{
userData
}}
-->
<el-row
type=
"flex"
align=
"top"
justify=
"space-between"
:gutter=
"40"
>
<el-col
:span=
"6"
>
<el-card>
<div
class=
"data_left"
>
<div
class=
"title"
>
今日数据洞察
</div>
<div
class=
"cell1"
>
<div
class=
"title"
>
人事数据
</div>
<div
class=
"datas flex flex-align-center flex-pack-justify flex_warp"
>
<div
class=
"item"
>
<div>
总人数
</div>
<div>
999
</div>
</div>
<div
class=
"item"
>
<div>
部门人数
</div>
<div>
20
</div>
</div>
</div>
</div>
<div
class=
"cell1"
>
<div
class=
"title"
>
考勤数据
</div>
<div
class=
"datas flex flex-align-center flex-pack-justify flex_warp"
>
<div
class=
"item"
>
<div>
打卡人数
</div>
<div>
999
</div>
</div>
<div
class=
"item"
>
<div>
出勤率
</div>
<div>
20
</div>
</div>
<div
class=
"item"
>
<div>
请假人数
</div>
<div>
20
</div>
</div>
</div>
</div>
</div>
</el-card>
</el-col>
<el-col
:span=
"18"
>
<el-card
class=
"right_card"
>
<div
class=
"data_right"
>
<div
class=
"title"
>
科学化、精细化、以人为本知行合一的管理理念
</div>
<div
class=
"textWord"
>
坚持政治性与人民性的根本遵循、制度化与规范化的根本依托、考人与考事的相互结合
<br>
创新性与技术性的重要支撑以及效能性与发展性的不懈追求
</div>
<div
class=
"selectBars flex flex-align-center flex-pack-justify flex_warp"
>
<div
class=
"Bar_item"
v-for=
"(item,index) in barList"
:key=
"index"
@
click=
"tabChildren(item.barName)"
>
<div
class=
"icon"
>
<img
:src=
"item.icon"
>
</div>
<div
class=
"barnam"
>
{{
item
.
barName
}}
</div>
<div
class=
"des"
v-html=
"item.desc"
></div>
</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
</div>
</div>
</
template
>
</
template
>
...
@@ -8,8 +68,174 @@
...
@@ -8,8 +68,174 @@
export
default
{
export
default
{
computed
:
{
computed
:
{
userData
()
{
userData
()
{
return
this
.
$store
.
state
.
userData
.
currUserName
;
return
this
.
$store
.
state
.
userData
;
},
menu
()
{
if
(
!
this
.
userData
.
barList
)
return
[]
return
this
.
userData
.
barList
.
map
(
item
=>
{
const
url
=
item
.
url
?
item
.
url
:
(
item
.
childList
[
0
]
?
(
item
.
childList
[
0
].
url
||
''
)
:
''
);
return
{
name
:
item
.
name
,
path
:
url
,
id
:
item
.
id
,
icon
:
item
.
imgPath
,
children
:
item
.
childList
.
map
(
sub
=>
{
return
{
name
:
sub
.
name
,
path
:
sub
.
url
?
sub
.
url
:
(
sub
.
childList
[
0
]
?
(
sub
.
childList
[
0
].
url
||
0
)
:
''
),
id
:
sub
.
id
,
parentId
:
sub
.
parentId
,
icon
:
sub
.
imgPath
,
isOut
:
/^https
?\:\/\/
/
.
test
(
sub
.
url
)
}
})
}
})
}
},
data
(){
return
{
barList
:[
{
icon
:
require
(
'
@/assets/images/u148.png
'
),
barName
:
'
智能人事
'
,
desc
:
'
提供包括组织管理、职位管理、人事管理、人事<br>统计报表等相关功能
'
,
navList
:[]
},
},
{
icon
:
require
(
'
@/assets/images/u153.png
'
),
barName
:
'
考勤打卡
'
,
desc
:
'
提供包括组织管理、职位管理、人事管理、人事<br>统计报表等相关功能
'
,
navList
:[]
},
},
};
{
icon
:
require
(
'
@/assets/images/u158.png
'
),
barName
:
'
绩效管理
'
,
desc
:
'
根据部门/个人承担的目标和任务完成情况以及工作<br>评价结果、加减分纪实现考核结果自动生成。
'
,
navList
:[]
},
{
icon
:
require
(
'
@/assets/images/u167.png
'
),
barName
:
'
OA审批
'
,
desc
:
'
无纸化审批流程,轻松完成打卡请假、移动审批等<br>操作,审批资料查找方便
'
,
navList
:[]
},
{
icon
:
require
(
'
@/assets/images/u172.png
'
),
barName
:
'
数据分析
'
,
desc
:
'
完整团队经营状态的数字化,人财物事数据分析<br>展示,为管理提供智能决策依据
'
,
navList
:[]
},
{
icon
:
require
(
'
@/assets/images/u177.png
'
),
barName
:
'
系统设置
'
,
desc
:
'
提供包括RBAC用户-角色-权限管理、版本管理、<br>操作及登录日志管理等功能
'
,
navList
:[]
}
]
}
},
created
(){
this
.
$store
.
commit
(
'
setHeadBar
'
,[])
this
.
$store
.
commit
(
"
setCurrentParentName
"
,
''
)
},
methods
:{
tabChildren
(
name
){
this
.
$store
.
commit
(
"
setCurrentParentName
"
,
name
)
//存储选择路由
let
result
=
this
.
menu
.
find
(
item
=>
item
.
name
===
name
)
this
.
$store
.
commit
(
'
setHeadBar
'
,
result
)
// 路由跳转
if
(
result
.
children
.
length
>
0
){
this
.
$router
.
push
({
path
:
result
.
children
[
0
].
path
})
}
else
{
this
.
$message
.
error
(
'
暂未完成添加
'
);
}
}
}
}
</
script
>
</
script
>
<
style
scoped
lang=
"less"
>
.page-home{
width: 100%;
height: 100vh;
box-sizing: border-box;
padding: 2% 5%;
background-color: #f3f2f2;
.data_left{
.cell1{
font-size: 16px;
.title{
color: #409EFF;
margin-bottom: 20px;
}
.item{
text-align: left;
width: 50%;
margin-bottom: 20px;
}
.item div:first-child{
color: gray;
margin-bottom: 20px;
}
border-bottom: 1px solid rgb(245, 245, 245);
padding: 10px 0;
}
.cell1:last-child{
border:none
}
}
// 数据标题
.data_left>.title,.data_right>.title{
text-align: center;
font-size: 22px;
font-weight: bold;
}
.right_card{
background-image: url('~@/assets/images/u162.svg');
background-repeat: no-repeat;
background-size: 100% auto;
background-position: bottom;
}
// 导航栏
.data_right{
.textWord{
text-align: center;
margin-top: 30px;
font-size: 16px;
line-height: 1.5em;
}
}
.selectBars{
padding: 0 20px;
}
.Bar_item{
width: 30%;
margin-top: 50px;
border-radius: 10px;
padding: 20px 0;
text-align: center;
background: linear-gradient(90deg, rgba(187, 193, 255,0.3), rgb(235, 235, 235));
cursor: pointer;
.icon img{
width: 40px;
height: 40px;
}
.barnam{
font-size: 18px;
margin-top: 10px;
}
.des{
font-size: 14px;
color: #666;
margin-top: 15px;
}
}
}
::v-deep .el-row,::v-deep .el-col{
height: 100%;
}
::v-deep .el-card{
height: 100%;
}
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/login/login.vue
View file @
a80e27c9
...
@@ -3,81 +3,26 @@
...
@@ -3,81 +3,26 @@
<
template
>
<
template
>
<div
class=
"page page-login flex flex-v"
>
<div
class=
"page page-login flex flex-v"
>
<div
class=
"form-wrap flex flex-1"
>
<div
class=
"form-wrap flex flex-1"
>
<el-form
@
submit.prevent=
'onSubmit'
ref=
"form"
:model=
"form"
label-width=
"80px"
size=
"small"
>
<el-form
@
submit.prevent=
'onSubmit'
ref=
"form"
:model=
"form"
label-width=
"0px"
size=
"small"
>
<h1>
考勤绩效管理平台
</h1>
<h1>
智慧政务绩效管理系统
</h1>
<el-form-item
label=
"用户名"
>
<div
class=
"des"
>
数据驱动绩效改善,强化从指标到目标全过程管理
</div>
<el-input
v-model=
"form.loginName"
></el-input>
<el-form-item
label=
""
>
<el-input
v-model=
"form.loginName"
placeholder=
"请输入用户名"
class=
"input"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"
密码
"
>
<el-form-item
label=
""
>
<el-input
v-model=
"form.password"
type=
'password'
></el-input>
<el-input
v-model=
"form.password"
type=
'password'
placeholder=
"请输入密码"
class=
"input"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
size=
"large"
>
<el-form-item
size=
"large"
>
<el-button
type=
"primary"
native-type=
'submit'
:loading=
'loading'
@
click=
'onSubmit'
>
登录
</el-button>
<el-button
type=
"primary"
native-type=
'submit'
:loading=
'loading'
@
click=
'onSubmit'
>
登录
</el-button>
</el-form-item>
</el-form-item>
<div
class=
"tips"
>
温馨提示:请使用谷歌或火狐等非ie内核浏览器,观看效果更佳
</div>
</el-form>
</el-form>
</div>
</div>
<div
class=
"footer"
>
<div
class=
"footer"
>
登陆
©
<a
href=
""
>
信宏翔网络科技有限公司
</a>
出品
登陆
©
<a
href=
""
>
信宏翔网络科技有限公司
</a>
出品
</div>
</div>
<!--
<Map
ref=
"map1"
:markersData=
"originData"
@
choose=
"getDetailData"
/>
-->
<!--
<el-card
:body-style=
"
{ padding: '5px' }" style="width: 300px">
<el-row
type=
"flex"
class=
"row-bg"
justify=
"space-around"
>
<span
style=
"font-size: 18px"
><b>
高新区政务服务中心
</b></span>
<el-button
type=
"text"
size=
"mini"
class=
"button"
>
查看详情
</el-button>
</el-row>
<el-divider></el-divider>
<el-row
type=
"flex"
justify=
"space-around"
>
<el-col
:span=
"4"
>
<span
style=
"font-size: 13px"
><b>
100
</b></span
><br
/>
<span
style=
"font-size: 12px"
>
设备总数
</span>
</el-col>
<el-col
:span=
"4"
>
<span
style=
"font-size: 13px"
><b>
100
</b></span
><br
/>
<span
style=
"font-size: 12px"
>
在线
</span>
</el-col>
<el-col
:span=
"4"
>
<span
style=
"font-size: 13px"
><b>
100
</b></span
><br
/>
<span
style=
"font-size: 12px"
>
离线
</span>
</el-col>
<el-col
:span=
"4"
>
<span
style=
"font-size: 13px"
><b>
100
</b></span
><br
/>
<span
style=
"font-size: 12px"
>
停用
</span>
</el-col>
<el-col
:span=
"4"
>
<span
style=
"font-size: 13px"
><b>
100
</b></span
><br
/>
<span
style=
"font-size: 12px"
>
待激活
</span>
</el-col>
</el-row>
<el-divider></el-divider>
<el-descriptions
:column=
"1"
size=
"small"
>
<el-descriptions-item
label=
"站点编码"
>
kooriookami
</el-descriptions-item
>
<el-descriptions-item
label=
"站点地址"
>
18100000000
</el-descriptions-item
>
<el-descriptions-item
label=
"联系人"
:labelStyle=
"
{ 'text-align': 'right', width: '50px' }"
>苏州市
</el-descriptions-item
>
<el-descriptions-item
label=
"联系电话"
>
<el-tag
size=
"small"
>
学校
</el-tag>
</el-descriptions-item>
<el-descriptions-item
label=
"创建时间"
>
江苏省苏州市吴中区吴中大道 1188 号
</el-descriptions-item
>
</el-descriptions>
</el-card>
-->
</div>
</div>
</
template
>
</
template
>
...
@@ -86,20 +31,7 @@ import { createSocket } from "@/assets/utils/websocket";
...
@@ -86,20 +31,7 @@ import { createSocket } from "@/assets/utils/websocket";
export
default
{
export
default
{
name
:
"
login
"
,
name
:
"
login
"
,
created
()
{
created
()
{},
// let obj = {};
// obj.lng = 104.21;
// obj.lat = 30.56;
// obj.address = "测试站点";
// obj.siteId = 2;
// this.originData.push(obj);
// this.$nextTick(() => {
// this.$refs.map1.refresh(this.originData);
// });
// window.location.href=process.env.VUE_APP_PORTAL_URL=='undefined'?'http://192.168.0.98:11072':process.env.VUE_APP_PORTAL_URL
},
methods
:
{
methods
:
{
login
()
{
login
()
{
this
.
loading
=
true
;
this
.
loading
=
true
;
...
@@ -113,7 +45,7 @@ export default {
...
@@ -113,7 +45,7 @@ export default {
this
.
$store
.
commit
(
"
setUserData
"
,
data
);
this
.
$store
.
commit
(
"
setUserData
"
,
data
);
this
.
$router
.
replace
({
this
.
$router
.
replace
({
path
:
this
.
redirect
,
path
:
this
.
redirect
,
})
;
})
//成功 创建websocket连接 process.env.VUE_WEBSOCKET_BASE_API +
//成功 创建websocket连接 process.env.VUE_WEBSOCKET_BASE_API +
console
.
log
(
"
process
"
,
process
.
env
);
console
.
log
(
"
process
"
,
process
.
env
);
...
@@ -149,10 +81,10 @@ export default {
...
@@ -149,10 +81,10 @@ export default {
form
:
{
form
:
{
loginName
:
""
,
loginName
:
""
,
password
:
""
,
password
:
""
,
}
,
}
}
;
}
}
,
}
}
;
}
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
...
@@ -162,29 +94,63 @@ export default {
...
@@ -162,29 +94,63 @@ export default {
border-top: 2px solid #e8eaec;
border-top: 2px solid #e8eaec;
}
}
.page-login {
.page-login {
background-image: linear-gradient(45deg, #333, #111);
background-image: url('~@/assets/images/login_bg.jpg');
background-size: 40px 40px;
background-repeat: no-repeat;
background-size: cover;
margin: 0;
margin: 0;
height: 100%;
height: 100%;
overflow: hidden;
text-align: center;
.des,.tips{
font-size: 14px;
white-space: nowrap;
margin-bottom: 20px;
margin-top: 10px;
color: #666;
}
.el-form {
.el-form {
margin: auto;
margin: auto;
width: 400px;
width: 640px;
padding: 25px 25px 0 0;
padding: 60px 20px;
background: #fff;
background: rgba(255, 255, 255, 0.9);
border-radius: 15px;
h1 {
h1 {
text-align: center;
text-align: center;
font-size:
2
0px;
font-size:
3
0px;
font-weight: 500;
font-weight: 500;
margin-bottom: 20px;
}
}
button {
button {
margin-top: 10px;
margin-top: 10px;
width: 240px;
width: 240px;
}
}
.el-form-item{
margin-bottom: 28px;
}
.el-input-group__append {
.el-input-group__append {
padding: 0;
padding: 0;
font-size: 0;
font-size: 0;
}
}
.el-input{
width: 80%;
}
.el-input__inner{
border-color: #409EFF;
border-radius: 20px;
}
.el-input--small .el-input__inner{
height: 52px;
line-height: 1em;
font-size: 15px;
}
.el-input__inner::placeholder{
color: #409EFF;
}
button{
width: 80%;
border-radius: 20px;
height: 52px;
background: linear-gradient(90deg, rgba(24, 69, 198, 1) 0%, rgba(41, 153, 255, 1) 100%);
}
}
}
.footer {
.footer {
height: 80px;
height: 80px;
...
@@ -197,5 +163,9 @@ export default {
...
@@ -197,5 +163,9 @@ export default {
}
}
}
}
}
}
// ::v-deep .el-input{
// width: 80%;
// border-color: #409EFF;
// }
</
style
>
</
style
>
attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
View file @
a80e27c9
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<el-row>
<Field
label=
"员工姓名"
prop=
"name"
v-model=
"form.name"
placeholder=
"请输入员工姓名"
/>
<Field
label=
"员工姓名"
prop=
"name"
v-model=
"form.name"
placeholder=
"请输入员工姓名"
/>
<Field
label=
"性别"
prop=
"gender"
v-model=
"form.gender"
type=
"
radio
"
:enumData=
"dict.gender"
placeholder=
"请选择性别"
/>
<Field
label=
"性别"
prop=
"gender"
v-model=
"form.gender"
type=
"
select
"
:enumData=
"dict.gender"
placeholder=
"请选择性别"
/>
<Field
label=
"出生日期"
prop=
"birthday"
v-model=
"form.birthday"
type=
"date"
/>
<Field
label=
"出生日期"
prop=
"birthday"
v-model=
"form.birthday"
type=
"date"
/>
<Field
label=
"照片"
prop=
"photoPath"
v-model=
"form.photoPath"
type=
"textarea"
placeholder=
"请输入照片"
/>
<Field
label=
"照片"
prop=
"photoPath"
v-model=
"form.photoPath"
type=
"textarea"
placeholder=
"请输入照片"
/>
<Field
label=
"联系电话"
prop=
"phoneNumber"
v-model=
"form.phoneNumber"
placeholder=
"请输入联系电话"
/>
<Field
label=
"联系电话"
prop=
"phoneNumber"
v-model=
"form.phoneNumber"
placeholder=
"请输入联系电话"
/>
...
...
attendance-performance-manager-ui/admin/src/views/staff/list.vue
View file @
a80e27c9
<
template
>
<
template
>
<div
class=
"page"
>
<div
class=
"page"
>
<el-row
:gutter=
"20"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
<el-col
:span=
"6"
:xs=
"12"
class=
"mytree"
>
<el-card>
<el-scrollbar
style=
"height: 100%"
>
<el-tree
size=
"mini"
ref=
"siteTree"
:data=
"areaData"
id=
"el-tree"
node-key=
"id"
indent=
"4"
:props=
"treeProps"
:load=
"loadNode"
highlight-current
default-expand-all
:expand-on-click-node=
"false"
:render-content=
"renderContent"
@
node-click=
"handleNodeClick"
>
</el-tree>
</el-scrollbar>
</el-card>
</el-col>
<el-col
:span=
"18"
:xs=
"12"
>
<el-card>
<el-row>
<LayoutTable
notAdd
notDel
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
</LayoutTable>
</el-row>
</el-card>
</el-col>
</el-row>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
</div>
</div>
...
@@ -44,17 +12,13 @@
...
@@ -44,17 +12,13 @@
/** 表单弹出框模式需引入 */
/** 表单弹出框模式需引入 */
import
drawerShow
from
"
./drawershow
"
;
import
drawerShow
from
"
./drawershow
"
;
import
table
from
"
@/assets/mixins/table
"
;
import
table
from
"
@/assets/mixins/table
"
;
import
tree
from
"
@/assets/mixins/tree
"
;
export
default
{
export
default
{
name
:
"
StaffList
"
,
name
:
"
StaffList
"
,
components
:
{
components
:
{
drawerShow
drawerShow
},
},
mixins
:
[
table
,
tree
],
mixins
:
[
table
],
created
()
{
created
()
{
this
.
$get
(
"
/dept/treeselect
"
,
{}).
then
(({
data
})
=>
{
this
.
areaData
=
data
.
result
;
});
},
},
methods
:
{
methods
:
{
/** 重写新增方法 */
/** 重写新增方法 */
...
@@ -70,12 +34,6 @@
...
@@ -70,12 +34,6 @@
this
.
$refs
.
drawerform
.
view
(
row
);
this
.
$refs
.
drawerform
.
view
(
row
);
},
},
handleNodeClick
(
node
)
{
this
.
currentNode
=
node
;
this
.
query
=
{
deptId
:
node
.
id
};
this
.
getData
();
},
},
},
data
()
{
data
()
{
return
{
return
{
...
@@ -142,99 +100,3 @@
...
@@ -142,99 +100,3 @@
}
}
};
};
</
script
>
</
script
>
\ No newline at end of file
<
style
>
.el-card__body
{
padding
:
10px
;
}
.el-calendar-table
.el-calendar-day
{
height
:
70px
;
}
.is-selected
{
color
:
#fa3b19
;
}
</
style
>
<
style
lang=
"scss"
scoped
>
.cardTitle
{
font-size
:
16px
;
color
:
rgb
(
20
,
134
,
248
);
list-style-type
:
none
;
border-bottom
:
3px
solid
rgb
(
20
,
134
,
248
);
padding-bottom
:
2px
;
}
.
mytree
:
:
v-deep
{
.
el-tree--highlight-current
:
:
v-deep
.
el-tree-node
.
is-checked
>
.
el-tree-node__content
{
background-color
:
rgb
(
255
,
255
,
255
);
color
:
rgb
(
64
,
158
,
255
);
}
.
el-tree--highlight-current
:
:
v-deep
.
el-tree-node
.
is-current
>
.
el-tree-node__content
{
background-color
:
rgb
(
255
,
255
,
255
);
color
:
rgb
(
64
,
158
,
255
);
}
.el-tree
>
.el-tree-node
:after
{
border-top
:
none
;
}
.el-tree-node
{
position
:
relative
;
padding-left
:
16px
;
}
//节点有间隙,隐藏掉展开按钮就好了,如果觉得空隙没事可以删掉
.el-tree-node__expand-icon.is-leaf
{
display
:
none
;
}
.el-tree-node__children
{
padding-left
:
16px
;
}
.el-tree-node
:last-child:before
{
height
:
38px
;
}
.el-tree
>
.el-tree-node
:before
{
border-left
:
none
;
}
.el-tree
>
.el-tree-node
:after
{
border-top
:
none
;
}
.el-tree-node
:before
{
content
:
""
;
left
:
-4px
;
position
:
absolute
;
right
:
auto
;
border-width
:
1px
;
}
.el-tree-node
:after
{
content
:
""
;
left
:
-4px
;
position
:
absolute
;
right
:
auto
;
border-width
:
1px
;
}
.el-tree-node
:before
{
border-left
:
1px
dashed
#4386c6
;
bottom
:
0px
;
height
:
100%
;
top
:
-26px
;
width
:
1px
;
}
.el-tree-node
:after
{
border-top
:
1px
dashed
#4386c6
;
height
:
20px
;
top
:
12px
;
width
:
24px
;
}
}
</
style
>
attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
View file @
a80e27c9
...
@@ -113,11 +113,6 @@ export default {
...
@@ -113,11 +113,6 @@ export default {
// toView(row) {
// toView(row) {
// this.$refs.dialogform.view(row);
// this.$refs.dialogform.view(row);
// },
// },
handAdd
(
row
)
{
this
.
$refs
.
dialogform
.
add
(
row
);
},
},
},
data
()
{
data
()
{
return
{
return
{
...
@@ -207,17 +202,6 @@ export default {
...
@@ -207,17 +202,6 @@ export default {
}}
}}
><
/el-link
>
><
/el-link
>
<
el
-
button
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-open
"
onClick
=
{()
=>
{
this
.
handAdd
(
row
);
}}
>
新增
<
/el-button
>
<
table
-
buttons
noView
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onDel
=
{
this
.
toDel
}
/
>
<
table
-
buttons
noView
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onDel
=
{
this
.
toDel
}
/
>
...
...
attendance-performance-manager-ui/admin/yarn.lock
View file @
a80e27c9
This diff is collapsed.
Click to expand it.
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