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
98d7c875
Commit
98d7c875
authored
Apr 11, 2023
by
dll
Browse files
Options
Browse Files
Download
Plain Diff
提交 4-11 接口未对
parents
563a7146
79aa82eb
Changes
41
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1162 additions
and
360 deletions
+1162
-360
attendance-performance-manager-ui/admin/src/assets/mixins/table.js
...e-performance-manager-ui/admin/src/assets/mixins/table.js
+1
-1
attendance-performance-manager-ui/admin/src/assets/mixins/tree.js
...ce-performance-manager-ui/admin/src/assets/mixins/tree.js
+5
-2
attendance-performance-manager-ui/admin/src/assets/utils/dateFormat.js
...rformance-manager-ui/admin/src/assets/utils/dateFormat.js
+6
-1
attendance-performance-manager-ui/admin/src/components/FormField.vue
...performance-manager-ui/admin/src/components/FormField.vue
+1
-2
attendance-performance-manager-ui/admin/src/components/SearchForm.vue
...erformance-manager-ui/admin/src/components/SearchForm.vue
+5
-4
attendance-performance-manager-ui/admin/src/components/insertData.vue
...erformance-manager-ui/admin/src/components/insertData.vue
+61
-0
attendance-performance-manager-ui/admin/src/views/attendance/group/list.vue
...ance-manager-ui/admin/src/views/attendance/group/list.vue
+8
-2
attendance-performance-manager-ui/admin/src/views/attendance/group/view.vue
...ance-manager-ui/admin/src/views/attendance/group/view.vue
+92
-28
attendance-performance-manager-ui/admin/src/views/attendance/record/error/list.vue
...nager-ui/admin/src/views/attendance/record/error/list.vue
+63
-22
attendance-performance-manager-ui/admin/src/views/attendance/record/hik/list.vue
...manager-ui/admin/src/views/attendance/record/hik/list.vue
+195
-15
attendance-performance-manager-ui/admin/src/views/attendance/record/list.vue
...nce-manager-ui/admin/src/views/attendance/record/list.vue
+287
-15
attendance-performance-manager-ui/admin/src/views/attendance/staff/stat/list.vue
...manager-ui/admin/src/views/attendance/staff/stat/list.vue
+2
-3
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
...mance-manager-ui/admin/src/views/attendance/stat/list.vue
+152
-194
attendance-performance-manager-ui/admin/src/views/dept/list.vue
...ance-performance-manager-ui/admin/src/views/dept/list.vue
+1
-3
attendance-performance-manager-ui/admin/src/views/job/list.vue
...dance-performance-manager-ui/admin/src/views/job/list.vue
+20
-2
attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
...rformance-manager-ui/admin/src/views/staff/drawershow.vue
+6
-2
attendance-performance-manager-ui/admin/src/views/staff/list.vue
...nce-performance-manager-ui/admin/src/views/staff/list.vue
+3
-4
attendance-performance-manager-ui/admin/src/views/staff/view.vue
...nce-performance-manager-ui/admin/src/views/staff/view.vue
+3
-1
attendance-performance-manager-ui/admin/src/views/system/menu/dialogshow.vue
...nce-manager-ui/admin/src/views/system/menu/dialogshow.vue
+7
-3
attendance-performance-manager/pom.xml
attendance-performance-manager/pom.xml
+4
-3
attendance-performance-manager/src/main/java/com/mortals/xhx/ManagerApplication.java
...ger/src/main/java/com/mortals/xhx/ManagerApplication.java
+1
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/menu/service/impl/MenuServiceImpl.java
...ls/xhx/base/system/menu/service/impl/MenuServiceImpl.java
+5
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/hik/ArtemisPostTest.java
.../main/java/com/mortals/xhx/busiz/hik/ArtemisPostTest.java
+4
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/AttendanceTypeEnum.java
.../java/com/mortals/xhx/common/code/AttendanceTypeEnum.java
+1
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
...in/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+11
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceClassServiceImpl.java
...e/attendance/service/impl/AttendanceClassServiceImpl.java
+8
-5
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/dao/ibatis/DeptDaoImpl.java
...a/com/mortals/xhx/module/dept/dao/ibatis/DeptDaoImpl.java
+2
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/StaffDao.java
.../main/java/com/mortals/xhx/module/staff/dao/StaffDao.java
+25
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/StaffLeaveDao.java
.../java/com/mortals/xhx/module/staff/dao/StaffLeaveDao.java
+4
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/ibatis/StaffDaoImpl.java
...com/mortals/xhx/module/staff/dao/ibatis/StaffDaoImpl.java
+28
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/ibatis/StaffLeaveDaoImpl.java
...ortals/xhx/module/staff/dao/ibatis/StaffLeaveDaoImpl.java
+6
-5
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/StaffInfoVo.java
...va/com/mortals/xhx/module/staff/model/vo/StaffInfoVo.java
+20
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/StaffVo.java
...n/java/com/mortals/xhx/module/staff/model/vo/StaffVo.java
+2
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/holidayInfoVo.java
.../com/mortals/xhx/module/staff/model/vo/holidayInfoVo.java
+0
-11
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/StaffService.java
...va/com/mortals/xhx/module/staff/service/StaffService.java
+3
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
...rtals/xhx/module/staff/service/impl/StaffServiceImpl.java
+34
-13
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
...ava/com/mortals/xhx/module/staff/web/StaffController.java
+5
-9
attendance-performance-manager/src/main/resources/sqlmap/module/staff/StaffLeaveMapper.xml
...c/main/resources/sqlmap/module/staff/StaffLeaveMapper.xml
+3
-0
attendance-performance-manager/src/main/resources/sqlmap/module/staff/StaffMapper.xml
...er/src/main/resources/sqlmap/module/staff/StaffMapper.xml
+16
-0
attendance-performance-manager/src/test/java/com/mortals/httpclient/dept/DeptController.http
...test/java/com/mortals/httpclient/dept/DeptController.http
+62
-0
attendance-performance-manager/src/test/java/com/mortals/httpclient/staff/StaffController.http
...st/java/com/mortals/httpclient/staff/StaffController.http
+0
-1
No files found.
attendance-performance-manager-ui/admin/src/assets/mixins/table.js
View file @
98d7c875
...
...
@@ -58,6 +58,7 @@ export default {
this
.
tableData
=
this
.
beforeRender
(
Object
.
assign
({},
this
.
tableData
,
data
)
)
console
.
log
(
this
.
tableData
,
''
)
this
.
afterRender
(
this
.
tableData
);
})
.
catch
(
error
=>
{
...
...
@@ -70,7 +71,6 @@ export default {
this
.
tableData
.
loading
=
false
;
},
300
);
})
},
// 复制一个数组或对象
util_copy
(
data
)
{
...
...
attendance-performance-manager-ui/admin/src/assets/mixins/tree.js
View file @
98d7c875
...
...
@@ -30,12 +30,15 @@ export default {
<
span
>
<
i
style
=
"
font-size:16px;color:#409EFF
"
class
=
{
data
.
icon
}
><
/i
>
<
span
style
=
"
padding-left: 2px;font-size:14px
"
>
{
node
.
label
}
<
/span
>
<
span
style
=
"
padding-left: 2px;font-size:14px;margin-left:20px
"
>
({
data
.
children
.
length
})
<
/span
>
<
/span
>
);
},
async
loadNode
(
node
,
resolve
)
{
console
.
log
(
node
)
if
(
node
.
level
===
0
)
{
return
;
}
...
...
@@ -52,7 +55,7 @@ export default {
let
node
=
this
.
$refs
.
areaTree
.
getNode
(
this
.
currentNode
.
id
);
// 通过节点id找到对应树节点对象
node
.
loaded
=
false
;
node
.
expand
();
// 主动调用展开节点方法,重新查询该节点下的所有子节点
this
.
toView
(
this
.
currentNode
);
this
.
toView
(
this
.
currentNode
);
},
},
...
...
attendance-performance-manager-ui/admin/src/assets/utils/dateFormat.js
View file @
98d7c875
export
const
timestampToTime
=
(
timestamp
)
=>
{
// 时间戳为10位需*1000,时间戳为13位不需乘1000
var
date
=
new
Date
(
timestamp
*
1000
);
var
date
=
null
if
(
timestamp
.
length
<
13
){
date
=
new
Date
(
timestamp
*
1000
);
}
else
{
date
=
new
Date
(
timestamp
);
}
var
Y
=
date
.
getFullYear
()
+
"
-
"
;
var
M
=
(
date
.
getMonth
()
+
1
<
10
...
...
attendance-performance-manager-ui/admin/src/components/FormField.vue
View file @
98d7c875
...
...
@@ -9,7 +9,6 @@
<el-input-number
:disabled=
'disabled'
v-model=
"field"
size=
"small"
:placeholder=
'placeholder'
@
change=
"emit"
@
input=
"emit"
v-if=
'type === "num"'
></el-input-number>
<el-input
:disabled=
'disabled'
:placeholder=
'placeholder'
v-model=
"field"
@
change=
"emit"
:rows=
'rows'
@
input=
"emit"
v-if=
'type === "textarea"'
type=
'textarea'
:autosize=
"textareaSize"
:class=
"inputClass"
></el-input>
<el-select
:disabled=
'disabled'
v-model=
"field"
@
change=
"emit"
:multiple=
'multiple'
:filterable=
'filterable'
:clearable=
'clearable'
v-if=
'type === "select"'
>
...
...
@@ -125,7 +124,7 @@ export default {
emit
()
{
this
.
$emit
(
'
input
'
,
this
.
newVal
)
this
.
$emit
(
'
change
'
,
this
.
newVal
)
this
.
$emit
(
''
)
this
.
$emit
(
'
focus
'
)
}
},
computed
:
{
...
...
attendance-performance-manager-ui/admin/src/components/SearchForm.vue
View file @
98d7c875
...
...
@@ -35,6 +35,7 @@
clearable=
"true"
@
change=
"item.change"
@
clear=
"item.clear"
:placeholder=
"item.label?item.label:'请选择'"
v-if=
"item.type === 'select'"
>
<el-option
...
...
@@ -110,7 +111,7 @@
v-if=
"item.type === 'date' && !item.valueFormat"
type=
"date"
value-format=
"yyyy-MM-dd"
placeholder=
"选择日期
"
:placeholder=
"item.label?item.label:'选择日期'
"
>
</el-date-picker>
...
...
@@ -119,7 +120,7 @@
v-if=
"item.type === 'date' && item.valueFormat"
type=
"date"
:value-format=
"item.valueFormat"
placeholder=
"选择日期
"
:placeholder=
"item.label?item.label:'选择日期'
"
>
</el-date-picker>
...
...
@@ -128,7 +129,7 @@
v-if=
"item.type === 'month' && !item.valueFormat"
type=
"month"
value-format=
"yyyy-MM"
placeholder=
"选择月份
"
:placeholder=
"item.label?item.label:'选择月份'
"
>
</el-date-picker>
...
...
@@ -137,7 +138,7 @@
v-if=
"item.type === 'month' && item.valueFormat"
type=
"month"
:value-format=
"item.valueFormat"
placeholder=
"选择月份
"
:placeholder=
"item.label?item.label:'选择月份'
"
>
</el-date-picker>
...
...
attendance-performance-manager-ui/admin/src/components/insertData.vue
0 → 100644
View file @
98d7c875
<
template
>
<el-dialog
:title=
"upload.title"
:visible.sync=
"upload.open"
width=
"400px"
append-to-body
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?updateSupport=' + upload.updateSupport"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的数据
<el-link
type=
"primary"
style=
"font-size: 14px"
@
click=
"downloadTemplate"
>
下载模板
</el-link
>
</div>
<div
class=
"el-upload__tip"
style=
"color: red"
slot=
"tip"
>
提示:仅允许导入“xls”或“xlsx”格式文件!
</div>
</el-upload>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitFileForm"
>
确 定
</el-button>
<el-button
@
click=
"upload.open = false"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
export
default
{
props
:{
type
:
Object
,
default
:{}
},
methods
:{
submitFileForm
(){
this
.
$refs
.
upload
.
submit
();
this
.
$emit
(
'
submitFileForm
'
,
true
)
}
}
}
</
script
>
<
style
>
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/attendance/group/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
></LayoutTable>
<LayoutTable
:data=
"tableData"
notDel
:config=
"tableConfig"
></LayoutTable>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
</div>
</
template
>
...
...
@@ -72,6 +72,12 @@
config
:
{
isshowTabPane
:
true
,
search
:
[
{
name
:
"
staffName
"
,
type
:
"
text
"
,
label
:
"
考勤组名称
"
,
fuzzy
:
true
},
],
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
...
...
@@ -113,7 +119,7 @@
width
:
240
,
formatter
:
row
=>
{
return
(
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
<
table
-
buttons
noAdd
noView
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
);
}
}
...
...
attendance-performance-manager-ui/admin/src/views/attendance/group/view.vue
View file @
98d7c875
<
template
>
<div
class=
"container"
>
<el-card
style=
"min-height:80vh;padding:15px"
>
<div
class=
"flex flex_end"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"$router.back()"
>
返回上一级
</el-button>
</div>
<tab-pane
:activeName=
"activeName"
:thirdList=
"thirdList"
></tab-pane>
<div
class=
"mt20"
>
<div>
考勤组名称
</div>
<el-input
placeholder=
"请输入考勤组名称"
style=
"width:220px"
class=
"mt10"
></el-input>
...
...
@@ -80,26 +82,26 @@
direction=
"rtl"
:before-close=
"handleClose"
>
<!-- 考勤人员 -->
<div>
参与考勤人员(0)
</div>
<div>
无需考勤人员(0)
</div>
<div>
<div>
参与考勤人员(0)
</div>
<el-input
@
focus=
"selectGroup()"
size=
"mini"
placeholder=
"请选择"
></el-input>
</div>
<div>
<div>
无需考勤人员(0)
</div>
<el-input
@
focus=
"selectGroup()"
size=
"mini"
placeholder=
"请选择"
></el-input>
</div>
<!-- 考勤组 -->
<div>
<span>
考勤组负责人:
</span>
<el-select>
<el-option></el-option>
</el-select>
<el-select></el-select>
</div>
<div>
<span>
主负责人:
</span>
<el-select>
<el-option></el-option>
</el-select>
<el-select></el-select>
</div>
<div>
<span>
子负责人:
</span>
<el-select>
<el-option></el-option>
</el-select>
<el-select></el-select>
</div>
<div>
<span>
子负责人权限:
</span>
...
...
@@ -138,11 +140,53 @@
<div>
<div>
特殊日期
</div>
</div>
<div
class=
"mt10"
>
<el-button>
+新增必须打卡的日期
</el-button>
</div>
<div
class=
"mt10"
>
<el-button>
+新增无需打卡的日期
</el-button>
</div>
<div>
<div>
考勤方式
</div>
<el-checkbox-group
v-model=
"type"
>
<el-checkbox
label=
"地点打卡"
></el-checkbox>
<el-checkbox
label=
"Wi-Fi打卡"
></el-checkbox>
<el-checkbox
label=
"蓝牙打卡"
></el-checkbox>
<el-checkbox
label=
"考勤机打卡"
></el-checkbox>
</el-checkbox-group>
</div>
</div>
</el-drawer>
<!-- 选择biao -->
<!-- 选择成员 -->
<el-dialog
:visible.sync=
"isshowgroup"
title=
"选择人员"
>
<div>
<div
class=
"titles"
>
选择部门
</div>
<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>
</div>
</el-dialog>
<!-- 选择班次 -->
<el-dialog
:visible.sync=
"isshowBanci"
title=
"选择班次"
>
<div>
选择班次
</div>
</el-dialog>
</div>
</template>
...
...
@@ -156,6 +200,9 @@
changeBanci
(
row
){
console
.
log
(
row
)
this
.
isshowBanci
=
true
},
selectGroup
(){
this
.
isshowgroup
=
true
}
},
data
()
{
...
...
@@ -192,22 +239,39 @@
},
drawer
:
true
,
weekList
:[],
isshowBanci
:
false
//班次展示
isshowBanci
:
false
,
//班次展示
isshowgroup
:
false
,
areaData
:[],
type
:[]
}
}
}
</
script
>
<
style
lang=
"less"
>
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
.titles{
color: #409EFF;
font-size: 16px;
display: flex;
align-items: center;
}
.titles::before{
content: '';
width:6px;
height: 16px;
background-color: #409EFF;
display: inline-block;
margin-right: 10px;
}
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/attendance/record/error/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notDel
notAdd
>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
size=
"mini"
type=
"primary"
@
click=
"morehandle"
>
批量处理
</el-button>
</LayoutTable>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</div>
</
template
>
...
...
@@ -33,28 +38,69 @@
toView
(
row
)
{
this
.
$refs
.
dialogform
.
view
(
row
);
},
morehandle
(){
console
.
log
(
this
.
selection
)
}
},
data
()
{
return
{
config
:
{
isshowTabPane
:
true
,
search
:
[
{
name
:
"
staffName
"
,
type
:
"
tex
t
"
,
label
:
"
员工姓名
"
,
name
:
"
deptId
"
,
type
:
"
selec
t
"
,
label
:
"
全部部门
"
,
fuzzy
:
true
},
{
name
:
"
deptId
"
,
type
:
"
text
"
,
label
:
"
所属部门
"
,
type
:
"
select
"
,
label
:
"
全部考勤组
"
,
fuzzy
:
true
},
{
name
:
"
deptId
"
,
type
:
"
select
"
,
label
:
"
全部班次
"
,
fuzzy
:
true
},
{
name
:
"
errorStatus
"
,
type
:
"
select
"
,
label
:
"
全部异常状态
"
,
fuzzy
:
true
},
{
name
:
"
errorStatus
"
,
type
:
"
select
"
,
label
:
"
异常状态
"
,
label
:
"
全部处理状态
"
,
fuzzy
:
true
},
{
name
:
'
startTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤开始时间
"
,
fuzzy
:
true
},
{
name
:
'
endTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤结束时间
"
,
fuzzy
:
true
},
{
name
:
"
staffName
"
,
type
:
"
text
"
,
label
:
"
员工姓名
"
,
fuzzy
:
true
},
{
name
:
"
phoneNumber
"
,
type
:
"
text
"
,
label
:
"
手机号
"
,
fuzzy
:
true
},
],
...
...
@@ -63,26 +109,21 @@
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
上下班时间
"
,
prop
:
"
goOffDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
异常状态
"
,
prop
:
"
errorStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
异常时间
"
,
prop
:
"
errorDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理结果
"
,
prop
:
"
errorDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
上下班时间
"
,
prop
:
"
goOffDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
实际打卡时间
"
,
prop
:
"
actualAttendanceDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理时间
"
,
prop
:
"
operDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
异常状态
"
,
prop
:
"
errorStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
处理状态
"
,
prop
:
"
processStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
创建用户
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
{
label
:
"
处理人
"
,
prop
:
"
processStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
备注
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
{
label
:
"
操作
"
,
width
:
240
,
formatter
:
row
=>
{
return
(
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
<
table
-
buttons
noAdd
noEdit
noView
noDel
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
);
}
}
...
...
attendance-performance-manager-ui/admin/src/views/attendance/record/hik/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
></LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notDel
notAdd
>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
@
click=
"handleImport"
>
导入
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"primary"
@
click=
"doExport"
:disabled=
"isExport"
>
导出
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"success"
@
click=
"lookexportHis"
>
导出记录
</el-button>
</LayoutTable>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
<el-dialog
:title=
"upload.title"
:visible.sync=
"upload.open"
width=
"400px"
append-to-body
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?updateSupport=' + upload.updateSupport"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的数据
<el-link
type=
"primary"
style=
"font-size: 14px"
@
click=
"downloadTemplate"
>
下载模板
</el-link
>
</div>
<div
class=
"el-upload__tip"
style=
"color: red"
slot=
"tip"
>
提示:仅允许导入“xls”或“xlsx”格式文件!
</div>
</el-upload>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitFileForm"
>
确 定
</el-button>
<el-button
@
click=
"upload.open = false"
>
取 消
</el-button>
</div>
</el-dialog>
<!-- 导出记录查看 -->
<el-drawer
title=
"导出记录"
:visible.sync=
"drawerhistory"
:direction=
"direction"
>
<div
class=
"hisList"
>
<div
class=
"list mt10"
v-for=
"item in 10"
:key=
"item"
>
<div
class=
"flex flex-align-center flex-pack-justify"
>
<div>
打卡记录汇总
</div>
<el-button
type=
"text"
>
导出成功
</el-button>
</div>
<div
class=
"times"
>
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
</div>
</
template
>
...
...
@@ -16,8 +98,54 @@
},
mixins
:
[
table
],
created
()
{
// console.log(this.$route.query,'sssss')
},
methods
:
{
lookexportHis
(){
// 导出记录
this
.
drawerhistory
=
true
},
/** 导入 */
handleImport
()
{
this
.
upload
.
title
=
"
打卡记录导入
"
;
this
.
upload
.
open
=
true
;
},
/** 下载模板操作 */
downloadTemplate
()
{
this
.
isExport
=
true
;
this
.
$download
(
"
/attendance/record/hik/downloadTemplate
"
,
{},
{
type
:
"
excel
"
})
.
then
(()
=>
(
this
.
isExport
=
false
))
.
catch
((
error
)
=>
{
this
.
isExport
=
false
;
this
.
$message
.
error
(
error
.
message
);
})
},
/** 文件上传中处理 */
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
this
.
upload
.
isUploading
=
true
;
},
/** 文件上传成功处理 */
handleFileSuccess
(
response
,
file
,
fileList
)
{
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
();
this
.
$alert
(
response
.
msg
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
});
this
.
getData
();
},
/** 提交上传文件 */
submitFileForm
()
{
this
.
$refs
.
upload
.
submit
();
},
/** 导出Excel */
doExport
()
{
this
.
isExport
=
true
;
this
.
$download
(
"
/attendance/record/hik/exportExcel
"
,
{
"
idList
"
:
this
.
selection
,
},
{
type
:
"
excel
"
}).
then
(()
=>
this
.
isExport
=
false
).
catch
(
error
=>
{
this
.
isExport
=
false
;
this
.
$message
.
error
(
error
.
message
);
})
},
/** 重写新增方法 */
toAdd
(
row
)
{
this
.
$refs
.
dialogform
.
add
(
row
);
...
...
@@ -34,6 +162,18 @@
},
data
()
{
return
{
upload
:
{
// 是否显示弹出层(员工关怀信息导入)
open
:
false
,
// 弹出层标题(员工关怀信息导入)
title
:
"
导入员工关怀信息数据
"
,
// 是否禁用上传
isUploading
:
false
,
// 是否更新已经存在的数据
updateSupport
:
0
,
// 上传的地址
url
:
"
/attendance/record/hik/importData
"
,
},
config
:
{
isshowTabPane
:
true
,
search
:
[
...
...
@@ -43,46 +183,86 @@
label
:
"
员工姓名
"
,
fuzzy
:
true
},
{
name
:
'
workName
'
,
type
:
'
text
'
,
label
:
'
工号
'
,
fuzzy
:
true
},
{
name
:
"
deptId
"
,
type
:
"
tex
t
"
,
type
:
"
selec
t
"
,
label
:
"
所属部门
"
,
fuzzy
:
true
},
{
name
:
"
attendanceGroupId
"
,
type
:
"
tex
t
"
,
label
:
"
所属考勤组
ID
"
,
type
:
"
selec
t
"
,
label
:
"
所属考勤组
"
,
fuzzy
:
true
},
{
name
:
"
shiftsId
"
,
type
:
"
text
"
,
label
:
"
班次ID
"
,
type
:
"
select
"
,
label
:
"
班次
"
,
fuzzy
:
true
},
{
name
:
'
startTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤开始时间
"
,
fuzzy
:
true
},
{
name
:
'
endTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤结束时间
"
,
fuzzy
:
true
}
],
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤日期
"
,
prop
:
"
attendanceDate
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
创建用户
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
{
label
:
"
工号
"
,
prop
:
"
staffName
"
},
{
label
:
"
部门
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤组
"
,
prop
:
"
staffName
"
},
{
label
:
"
职位
"
,
prop
:
"
staffName
"
},
{
label
:
"
班次
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤时间
"
,
prop
:
"
attendanceDate
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
考勤点名称
"
,
prop
:
"
staffName
"
},
{
label
:
"
事件源
"
,
prop
:
"
staffName
"
},
{
label
:
"
操作
"
,
width
:
240
,
formatter
:
row
=>
{
return
(
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
);
<
table
-
buttons
noAdd
noDel
noEdit
noView
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
)
}
}
]
}
},
drawerhistory
:
false
};
}
};
</
script
>
\ No newline at end of file
</
script
>
<
style
scoped
lang=
"scss"
>
.hisList
{
padding
:
15px
;
.list
{
background-color
:
rgba
(
64
,
158
,
255
,
0
.1
);
font-size
:
14px
;
border-radius
:
10px
;
padding
:
10px
;
.times
{
font-size
:
12px
;
color
:
#999
;
}
}
}
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/attendance/record/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
<div
style=
"margin:10px 0"
>
<tab-pane
:thirdList=
"thirdList"
:activeName=
"activeName"
@
handleClick=
"handleClick"
></tab-pane>
</div>
<div
class=
"totalNum flex"
>
<div
class=
"item flex"
>
<div>
需要打卡人数
<span
class=
"num"
>
{{
1
}}
</span></div>
<div>
未出勤
<span
class=
"num"
>
{{
1
}}
</span></div>
<div>
出勤率
<span
class=
"num"
>
{{
1
}}
</span></div>
</div>
<div
class=
"item flex"
>
<div>
迟到
<span
class=
"num"
>
{{
1
}}
</span></div>
<div>
早退
<span
class=
"num"
>
{{
1
}}
</span></div>
<div>
缺卡
<span
class=
"num"
>
{{
1
}}
</span></div>
</div>
</div>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notDel
notAdd
>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
@
click=
"handleImport"
>
导入
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"primary"
@
click=
"doExport"
:disabled=
"isExport"
>
导出
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"success"
@
click=
"lookexportHis"
>
导出记录
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
@
click=
"setdialog"
>
表格设置
</el-button>
</LayoutTable>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
<!-- 导出记录查看 -->
<el-drawer
title=
"导出记录"
:visible.sync=
"drawerhistory"
:direction=
"direction"
>
<div
class=
"hisList"
>
<div
class=
"list mt10"
v-for=
"item in 10"
:key=
"item"
>
<div
class=
"flex flex-align-center flex-pack-justify"
>
<div>
打卡记录汇总
</div>
<el-button
type=
"text"
>
导出成功
</el-button>
</div>
<div
class=
"times"
>
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
<!-- 表格设置 -->
<el-dialog
:visible.sync=
"isdialog"
title=
"导出表格设置"
>
<div
class=
"tipsword"
>
请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。
</div>
<el-checkbox-group
v-model=
"checkList"
>
<el-checkbox
v-for=
"(item,index) in setcolum"
:key=
"index"
:label=
"item.label"
>
</el-checkbox>
</el-checkbox-group>
<div
class=
"mt20"
style=
"text-align:right"
>
<el-button>
取消
</el-button>
<el-button
type=
"primary"
>
确定
</el-button>
</div>
</el-dialog>
<!-- 上传 -->
<el-dialog
:title=
"upload.title"
:visible.sync=
"upload.open"
width=
"400px"
append-to-body
>
<el-upload
ref=
"upload"
:limit=
"1"
accept=
".xlsx, .xls"
:headers=
"upload.headers"
:action=
"upload.url + '?updateSupport=' + upload.updateSupport"
:disabled=
"upload.isUploading"
:on-progress=
"handleFileUploadProgress"
:on-success=
"handleFileSuccess"
:auto-upload=
"false"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__tip"
slot=
"tip"
>
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的数据
<el-link
type=
"primary"
style=
"font-size: 14px"
@
click=
"downloadTemplate"
>
下载模板
</el-link
>
</div>
<div
class=
"el-upload__tip"
style=
"color: red"
slot=
"tip"
>
提示:仅允许导入“xls”或“xlsx”格式文件!
</div>
</el-upload>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitFileForm"
>
确 定
</el-button>
<el-button
@
click=
"upload.open = false"
>
取 消
</el-button>
</div>
</el-dialog>
</div>
</
template
>
...
...
@@ -12,15 +127,74 @@
/** 表单弹出框模式需引入 */
import
drawerShow
from
"
./drawershow
"
;
import
table
from
"
@/assets/mixins/table
"
;
import
TabPane
from
"
@/components/tabPane.vue
"
export
default
{
name
:
"
AttendanceRecordList
"
,
components
:
{
drawerShow
},
drawerShow
,
TabPane
,
},
mixins
:
[
table
],
computed
:{
thirdList
(){
if
(
!
this
.
$store
.
state
.
CurrentThirdArr
)
return
[]
return
this
.
$store
.
state
.
CurrentThirdArr
},
activeName
(){
return
this
.
$store
.
state
.
ThirdPath
}
},
created
()
{
},
methods
:
{
/** 导入 */
handleImport
()
{
this
.
upload
.
title
=
"
打卡记录导入
"
;
this
.
upload
.
open
=
true
;
},
/** 下载模板操作 */
downloadTemplate
()
{
this
.
isExport
=
true
;
this
.
$download
(
"
/attendance/record/downloadTemplate
"
,
{},
{
type
:
"
excel
"
})
.
then
(()
=>
(
this
.
isExport
=
false
))
.
catch
((
error
)
=>
{
this
.
isExport
=
false
;
this
.
$message
.
error
(
error
.
message
);
})
},
/** 文件上传中处理 */
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
this
.
upload
.
isUploading
=
true
;
},
/** 文件上传成功处理 */
handleFileSuccess
(
response
,
file
,
fileList
)
{
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
();
this
.
$alert
(
response
.
msg
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
});
this
.
getData
();
},
/** 提交上传文件 */
submitFileForm
()
{
this
.
$refs
.
upload
.
submit
();
},
/** 导出Excel */
doExport
()
{
this
.
isExport
=
true
;
this
.
$download
(
"
/attendance/record/exportExcel
"
,
{
"
idList
"
:
this
.
selection
,
},
{
type
:
"
excel
"
}).
then
(()
=>
this
.
isExport
=
false
).
catch
(
error
=>
{
this
.
isExport
=
false
;
this
.
$message
.
error
(
error
.
message
);
})
},
setdialog
(){
this
.
isdialog
=
true
this
.
setcolum
=
this
.
config
.
columns
.
filter
(
item
=>
item
.
label
&&
item
.
prop
)
},
lookexportHis
(){
this
.
drawerhistory
=
true
},
renderTable
(
tableData
)
{
return
(
<
el
-
table
stripe
data
=
{
tableData
}
class
=
"
total-table
"
>
...
...
@@ -50,10 +224,28 @@
toView
(
row
)
{
this
.
$refs
.
drawerform
.
view
(
row
);
},
handleClick
(
key
){
console
.
log
(
key
)
this
.
$store
.
commit
(
'
setThirdPath
'
,
key
)
this
.
$router
.
push
({
path
:
key
})
}
},
data
()
{
return
{
upload
:
{
// 是否显示弹出层(员工关怀信息导入)
open
:
false
,
// 弹出层标题(员工关怀信息导入)
title
:
"
每日打卡记录
"
,
// 是否禁用上传
isUploading
:
false
,
// 是否更新已经存在的数据
updateSupport
:
0
,
// 上传的地址
url
:
"
/attendance/record/importData
"
,
},
/** 子表列元素 */
columnSet
:[
{
prop
:
"
recordId
"
,
label
:
"
考勤记录ID
"
,
width
:
100
},
...
...
@@ -73,16 +265,54 @@
label
:
"
员工姓名
"
,
fuzzy
:
true
},
{
name
:
"
phone
"
,
type
:
"
text
"
,
label
:
"
手机号
"
,
fuzzy
:
true
},
{
name
:
"
deptId
"
,
type
:
"
select
"
,
label
:
"
所属部门
"
,
fuzzy
:
true
},
{
name
:
"
attendanceGroupId
"
,
type
:
"
select
"
,
label
:
"
所属考勤组
"
,
fuzzy
:
true
},
{
name
:
"
shiftsId
"
,
type
:
"
select
"
,
label
:
"
班次
"
,
fuzzy
:
true
},
{
name
:
'
startTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤开始时间
"
,
fuzzy
:
true
},
{
name
:
'
endTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤结束时间
"
,
fuzzy
:
true
}
],
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
打卡日期
"
,
prop
:
"
attendanceDate
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
创建用户
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤组
"
,
prop
:
"
staffName
"
},
{
label
:
"
部门
"
,
prop
:
"
staffName
"
},
{
label
:
"
职位
"
,
prop
:
"
staffName
"
},
{
label
:
"
班次
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤打卡记录详细信息
"
,
width
:
120
,
prop
:
"
subColumns
"
,
...
...
@@ -103,13 +333,55 @@
width
:
240
,
formatter
:
row
=>
{
return
(
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
<
table
-
buttons
noAdd
noEdit
noView
noDel
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
);
}
}
]
}
};
},
drawerhistory
:
false
,
isdialog
:
false
,
setcolum
:[],
checkList
:[]
}
}
};
</
script
>
\ No newline at end of file
</
script
>
<
style
scoped
lang=
"less"
>
.totalNum{
background: rgba(64, 158, 255,0.2);
padding: 15px;
border-left: 4px solid rgb(20, 134, 248);
color: rgb(100, 100, 100);
.item{
padding: 0 10px;
border-right: 1px solid gray;
}
.item:last-child{
border: none;
}
.num{
color: #409EFF;
margin-left: 10px;
margin-right: 20px;
}
}
.hisList{
padding: 15px;
.list{
background-color: rgba(64, 158, 255, 0.1);
font-size: 14px;
border-radius: 10px;
padding: 10px;
.times{
font-size: 12px;
color: #999;
}
}
}
.tipsword{
margin: 20px 0;
color: #999;
}
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/attendance/staff/stat/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
></LayoutTable>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</div>
...
...
@@ -38,6 +36,7 @@
data
()
{
return
{
config
:
{
isshowTabPane
:
true
,
search
:
[
{
name
:
"
staffName
"
,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notAdd
notDel
>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"primary"
@
click=
"doExport"
:disabled=
"isExport"
>
导出
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
type=
"success"
@
click=
"lookexportHis"
>
导出记录
</el-button>
<el-button
slot=
"table-head-left2"
style=
"margin-left: 10px"
icon=
"el-icon-tickets"
size=
"mini"
@
click=
"setdialog"
>
表格设置
</el-button>
</LayoutTable>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
<!-- 表格设置 -->
<el-dialog
:visible.sync=
"isdialog"
title=
"导出表格设置"
>
<div
class=
"tipsword"
>
请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。
</div>
<el-checkbox-group
v-model=
"checkList"
>
<el-checkbox
v-for=
"(item,index) in setcolum"
:key=
"index"
:label=
"item.label"
>
</el-checkbox>
</el-checkbox-group>
<div
class=
"mt20"
style=
"text-align:right"
>
<el-button>
取消
</el-button>
<el-button
type=
"primary"
>
确定
</el-button>
</div>
</el-dialog>
<!-- 导出记录查看 -->
<el-drawer
title=
"导出记录"
:visible.sync=
"drawerhistory"
:direction=
"direction"
>
<div
class=
"hisList"
>
<div
class=
"list mt10"
v-for=
"item in 10"
:key=
"item"
>
<div
class=
"flex flex-align-center flex-pack-justify"
>
<div>
打卡记录汇总
</div>
<el-button
type=
"text"
>
导出成功
</el-button>
</div>
<div
class=
"times"
>
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
</div>
</
template
>
...
...
@@ -33,192 +84,73 @@
toView
(
row
)
{
this
.
$refs
.
dialogform
.
view
(
row
);
},
setdialog
(){
this
.
isdialog
=
true
this
.
setcolum
=
this
.
config
.
columns
.
filter
(
item
=>
item
.
label
&&
item
.
prop
)
},
lookexportHis
(){
this
.
drawerhistory
=
true
},
/** 导出Excel */
doExport
()
{
this
.
isExport
=
true
;
this
.
$download
(
"
/attendance/stat/exportExcel
"
,
{
"
idList
"
:
this
.
selection
,
},
{
type
:
"
excel
"
}).
then
(()
=>
this
.
isExport
=
false
).
catch
(
error
=>
{
this
.
isExport
=
false
;
this
.
$message
.
error
(
error
.
message
);
})
}
},
data
()
{
return
{
config
:
{
isshowTabPane
:
true
,
search
:
[
{
name
:
"
windowCategory
"
,
type
:
"
text
"
,
label
:
"
窗口类别
"
,
fuzzy
:
true
},
{
name
:
"
staffName
"
,
type
:
"
text
"
,
label
:
"
员工姓名
"
,
fuzzy
:
true
},
{
{
name
:
"
deptId
"
,
type
:
"
text
"
,
label
:
"
所属部门
"
,
fuzzy
:
true
},
{
name
:
"
backToUnit
"
,
type
:
"
text
"
,
label
:
"
回单位
"
,
fuzzy
:
true
},
{
name
:
"
onDutyLeave
"
,
type
:
"
text
"
,
label
:
"
因公请假
"
,
fuzzy
:
true
},
{
name
:
"
outOfOffice
"
,
type
:
"
text
"
,
label
:
"
外出勘验
"
,
fuzzy
:
true
},
{
name
:
"
shiftCompensation
"
,
type
:
"
text
"
,
label
:
"
值班补班
"
,
fuzzy
:
true
},
{
name
:
"
physicalExamination
"
,
type
:
"
text
"
,
label
:
"
体检
"
,
fuzzy
:
true
},
{
name
:
"
quarantine
"
,
type
:
"
text
"
,
label
:
"
隔离
"
,
fuzzy
:
true
},
{
name
:
"
businessTrip
"
,
type
:
"
text
"
,
label
:
"
因公外出
"
,
fuzzy
:
true
},
{
name
:
"
publicHoliday
"
,
type
:
"
text
"
,
label
:
"
公休
"
,
fuzzy
:
true
},
{
name
:
"
sickLeave
"
,
type
:
"
text
"
,
label
:
"
病假
"
,
fuzzy
:
true
},
{
name
:
"
funeralLeave
"
,
type
:
"
text
"
,
label
:
"
丧假
"
,
type
:
"
select
"
,
label
:
"
全部部门
"
,
fuzzy
:
true
},
{
name
:
"
marriageLeave
"
,
type
:
"
text
"
,
label
:
"
婚假
"
,
fuzzy
:
true
},
{
name
:
"
childRearingLeave
"
,
type
:
"
text
"
,
label
:
"
育儿假
"
,
fuzzy
:
true
},
{
name
:
"
maternityLeave
"
,
type
:
"
text
"
,
label
:
"
产假
"
,
fuzzy
:
true
},
{
name
:
"
transferBack
"
,
type
:
"
text
"
,
label
:
"
调回单位
"
,
fuzzy
:
true
},
{
name
:
"
homeLeave
"
,
type
:
"
text
"
,
label
:
"
探亲假
"
,
fuzzy
:
true
},
{
name
:
"
personalLeave
"
,
type
:
"
text
"
,
label
:
"
事假
"
,
fuzzy
:
true
},
{
name
:
"
absenteeismDays
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-旷工
"
,
fuzzy
:
true
},
{
name
:
"
otherDays
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-其他
"
,
fuzzy
:
true
},
{
name
:
"
attendanceRate
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-出勤率
"
,
fuzzy
:
true
},
{
name
:
"
nonCompliancePunch
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-未按规定打卡
"
,
fuzzy
:
true
},
{
name
:
"
lateTimes
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-迟到
"
,
fuzzy
:
true
},
{
name
:
"
surfingMobileTimes
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-上网耍手机
"
,
name
:
"
deptId
"
,
type
:
"
select
"
,
label
:
"
全部考勤组
"
,
fuzzy
:
true
},
{
name
:
"
overtimeTimes
"
,
type
:
"
tex
t
"
,
label
:
"
考勤汇总-溜班
"
,
name
:
"
deptId
"
,
type
:
"
selec
t
"
,
label
:
"
全部班次
"
,
fuzzy
:
true
},
{
name
:
"
vacancy
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-空岗
"
,
name
:
'
startTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤开始时间
"
,
fuzzy
:
true
},
{
name
:
"
nonStandardDressTimes
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-未规范着装
"
,
name
:
'
endTime
'
,
type
:
"
date
"
,
valueFormat
:
'
YYYY-dd-MM
'
,
label
:
"
考勤结束时间
"
,
fuzzy
:
true
},
{
name
:
"
unexcusedMeetingAbsenc
e
"
,
name
:
"
staffNam
e
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-无故缺席会议
"
,
label
:
"
员工姓名
"
,
fuzzy
:
true
},
{
name
:
"
earlyLeaveMeeting
"
,
name
:
"
phoneNumber
"
,
type
:
"
text
"
,
label
:
"
考勤汇总-会议早退
"
,
label
:
"
手机号
"
,
fuzzy
:
true
}
,
}
],
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
...
...
@@ -226,75 +158,101 @@
{
label
:
"
窗口类别
"
,
prop
:
"
windowCategory
"
},
{
label
:
"
部门
"
,
prop
:
"
bumentId
"
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
回单位
"
,
prop
:
"
backToUnit
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
回单位
(天)
"
,
prop
:
"
backToUnit
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
因公请假
"
,
prop
:
"
onDutyLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
因公请假
(天)
"
,
prop
:
"
onDutyLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
外出勘验
"
,
prop
:
"
outOfOffice
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
外出勘验
(天)
"
,
prop
:
"
outOfOffice
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
值班补班
"
,
prop
:
"
shiftCompensation
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
值班补班
(天)
"
,
prop
:
"
shiftCompensation
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
体检
"
,
prop
:
"
physicalExamination
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
体检
(天)
"
,
prop
:
"
physicalExamination
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
隔离
"
,
prop
:
"
quarantine
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
隔离
(天)
"
,
prop
:
"
quarantine
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
因公外出
"
,
prop
:
"
businessTrip
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
因公外出
(与窗口工作无关/天)
"
,
prop
:
"
businessTrip
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
公休
"
,
prop
:
"
publicHoliday
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
公休
(天)
"
,
prop
:
"
publicHoliday
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
病假
"
,
prop
:
"
sickLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
病假
(天)
"
,
prop
:
"
sickLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
丧假
"
,
prop
:
"
funeralLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
丧假
(天)
"
,
prop
:
"
funeralLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
婚假
"
,
prop
:
"
marriageLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
婚假
(天)
"
,
prop
:
"
marriageLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
育儿假
"
,
prop
:
"
childRearingLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
育儿假
(天)
"
,
prop
:
"
childRearingLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
产假
"
,
prop
:
"
maternityLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
产假
(陪护假/天)
"
,
prop
:
"
maternityLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
调回单位
"
,
prop
:
"
transferBack
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
调回单位
(或离职/天)
"
,
prop
:
"
transferBack
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
探亲假
"
,
prop
:
"
homeLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
探亲假
(天)
"
,
prop
:
"
homeLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
事假
"
,
prop
:
"
personalLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
事假
(天)
"
,
prop
:
"
personalLeave
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-旷工
"
,
prop
:
"
absenteeismDays
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
旷工(天)
"
,
prop
:
"
absenteeismDays
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-其他
"
,
prop
:
"
otherDays
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
其他(天)
"
,
prop
:
"
otherDays
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-出勤率
"
,
prop
:
"
attendanceRate
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
出勤率%
"
,
prop
:
"
attendanceRate
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-未按规定打卡
"
,
prop
:
"
nonCompliancePunch
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
未按规定打卡(含忘记打卡)
"
,
prop
:
"
nonCompliancePunch
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-迟到
"
,
prop
:
"
lateTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
迟到(次)
"
,
prop
:
"
lateTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤汇总-上网耍手机
"
,
prop
:
"
surfingMobileTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
上网耍手机(次)
"
,
prop
:
"
surfingMobileTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤汇总-溜班
"
,
prop
:
"
overtimeTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
溜班(次)
"
,
prop
:
"
overtimeTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤汇总-空岗
"
,
prop
:
"
vacancy
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
空岗(次)
"
,
prop
:
"
vacancy
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-未规范着装
"
,
prop
:
"
nonStandardDressTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
未规范着装(次)
"
,
prop
:
"
nonStandardDressTimes
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤汇总-无故缺席会议
"
,
prop
:
"
unexcusedMeetingAbsence
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
无故缺席会议(次)
"
,
prop
:
"
unexcusedMeetingAbsence
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
考勤汇总-
会议早退
"
,
prop
:
"
earlyLeaveMeeting
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
会议早退
"
,
prop
:
"
earlyLeaveMeeting
"
,
formatter
:
this
.
formatterMoney
},
{
label
:
"
创建用户
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
//
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label
:
"
操作
"
,
width
:
240
,
formatter
:
row
=>
{
return
(
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
<
table
-
buttons
noAdd
noEdit
noView
noDel
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
);
}
}
]
}
},
setcolum
:[],
isdialog
:
false
,
checkList
:[],
drawerhistory
:
false
};
}
};
</
script
>
\ No newline at end of file
</
script
>
<
style
scoped
lang=
"less"
>
.hisList{
padding: 15px;
.list{
background-color: rgba(64, 158, 255, 0.1);
font-size: 14px;
border-radius: 10px;
padding: 10px;
.times{
font-size: 12px;
color: #999;
}
}
}
.tipsword{
margin: 20px 0;
color: #999;
}
</
style
>
\ No newline at end of file
attendance-performance-manager-ui/admin/src/views/dept/list.vue
View file @
98d7c875
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
></LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notSearch
></LayoutTable>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
</div>
</
template
>
...
...
@@ -54,9 +54,7 @@
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
// {label: "祖级列表", prop: "ancestors"},
{
label
:
"
部门名称
"
,
prop
:
"
deptName
"
},
{
label
:
"
成员数量
"
,
prop
:
"
deptName
"
},
{
label
:
"
负责人
"
,
prop
:
"
deptName
"
},
...
...
attendance-performance-manager-ui/admin/src/views/job/list.vue
View file @
98d7c875
...
...
@@ -29,7 +29,7 @@
</el-scrollbar>
</el-col>
<el-col
:span=
"18"
:xs=
"12"
class=
"mytree"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notSearch
>
<el-button
type=
"primary"
@
click=
"doExport"
:disabled=
"isExport"
size=
"mini"
slot=
"table-head-left2"
>
导出
</el-button>
</LayoutTable>
...
...
@@ -65,9 +65,27 @@
}
},
methods
:
{
renderContent
:
function
(
h
,
{
node
,
data
,
store
})
{
return
(
<
span
>
<
i
style
=
"
font-size:16px;color:#409EFF
"
class
=
{
data
.
icon
}
><
/i
>
<
span
style
=
"
padding-left: 2px;font-size:14px
"
>
{
node
.
label
}
<
/span
>
<
span
>
<
i
style
=
"
font-size:16px;color:#409EFF
"
class
=
'
el-icon-edit-outline
'
><
/i
>
<
i
style
=
"
font-size:16px;color:#409EFF
"
class
=
'
el-icon-delete
'
><
/i
>
<
/span
>
<
/span
>
)
},
async
loadNode
(
node
,
resolve
)
{
if
(
node
.
level
===
0
)
{
return
;
}
resolve
(
data
.
result
);
},
doExport
(){
this
.
isExport
=
true
;
this
.
$download
(
"
/
staff/list
/exportExcel
"
,
{
this
.
$download
(
"
/
job
/exportExcel
"
,
{
"
idList
"
:
this
.
selection
,
'
name
'
:
this
.
$route
.
query
[
'
name
'
],
},
{
type
:
"
excel
"
}).
then
(()
=>
this
.
isExport
=
false
).
catch
(
error
=>
{
...
...
attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
View file @
98d7c875
...
...
@@ -24,8 +24,12 @@
<Field
label=
"所属部门"
prop=
"deptName"
v-model=
"form.deptName"
placeholder=
"请选择所属部门"
@
focus=
"ishowBumen = true"
/>
<Field
label=
"职位"
prop=
"positionId"
v-model=
"form.positionId"
:enumData=
"dict.politicalstatus"
type=
"select"
placeholder=
"请选择职位"
/>
<!--
<Field
label=
"职位"
prop=
"positionId"
v-model=
"form.positionId"
:enumData=
"dict.politicalstatus"
type=
"select"
placeholder=
"请选择职位"
/>
-->
<el-form-item
label=
"职位"
prop=
"positionId"
>
<el-select
v-model=
"form.positionId"
placeholder=
"请选择职位"
>
<el-option></el-option>
</el-select>
</el-form-item>
<Field
label=
"工号"
prop=
"workNum"
v-model=
"form.workNum"
placeholder=
"请输入工号"
/>
<!--
<Field
label=
"是否在政务大厅"
prop=
"positionId"
v-model=
"form.positionId"
placeholder=
"请选择"
type=
"select"
/>
-->
...
...
attendance-performance-manager-ui/admin/src/views/staff/list.vue
View file @
98d7c875
...
...
@@ -3,14 +3,14 @@
<div
style=
"margin:10px 0"
>
<tab-pane
:thirdList=
"thirdList"
:activeName=
"activeName"
@
handleClick=
"handleClick"
></tab-pane>
</div>
<div
class=
"totalNum flex"
>
<div
class=
"totalNum flex"
v-if=
"tableData.staff"
>
<div
class=
"item"
>
在职员工
<span
class=
"num"
>
{{
tableData
.
staff
.
inWorkStaff
}}
</span></div>
<div
class=
"item flex"
>
<div>
全职
<span
class=
"num"
>
{{
tableData
.
staff
.
fullStaff
}}
</span></div>
<div>
实习
<span
class=
"num"
>
{{
tableData
.
staff
.
pricateStaff
}}
</span></div>
<!-- 兼职未对 -->
<div>
兼职
<span
class=
"num"
>
{{
tableData
.
staff
.
inWork
Staff
}}
</span></div>
<div>
兼职
<span
class=
"num"
>
{{
tableData
.
staff
.
concurrently
Staff
}}
</span></div>
</div>
<div
class=
"item flex"
>
...
...
@@ -29,7 +29,6 @@
:data=
"areaData"
id=
"el-tree"
node-key=
"id"
indent=
"4"
:props=
"treeProps"
:load=
"loadNode"
highlight-current
...
...
@@ -133,7 +132,7 @@
methods
:
{
/** 导入 */
handleImport
()
{
this
.
upload
.
title
=
"
员工
关怀信息
导入
"
;
this
.
upload
.
title
=
"
员工导入
"
;
this
.
upload
.
open
=
true
;
},
handleClick
(
key
){
...
...
attendance-performance-manager-ui/admin/src/views/staff/view.vue
View file @
98d7c875
...
...
@@ -18,7 +18,7 @@
<span
class=
"tags"
>
{{
info
.
workStatus
}}
</span>
</div>
<div
class=
"c2"
>
<span>
{{
info
.
workDept
}}
</span>
<span>
{{
allinfo
.
deptName
}}
-
{{
allinfo
.
positionName
}}
</span>
<span
style=
"margin:0 10px"
>
|
</span>
<span>
{{
info
.
workLimit
}}
天
</span>
</div>
...
...
@@ -112,6 +112,8 @@
if
(
res
.
code
==
1
){
this
.
info
=
res
.
data
.
holidayLists
[
0
]
this
.
allinfo
=
res
.
data
//总
this
.
info
.
workBeginDay
=
timestampToTime
(
Number
(
this
.
info
.
workBeginDay
))
this
.
info
.
workFormalDay
=
timestampToTime
(
Number
(
this
.
info
.
workFormalDay
))
}
})
.
catch
(
err
=>
{
...
...
attendance-performance-manager-ui/admin/src/views/system/menu/dialogshow.vue
View file @
98d7c875
...
...
@@ -13,9 +13,8 @@
/>
</el-form-item>
</el-col>
<!--
<Field
label=
"ID"
prop=
"id"
v-model=
"form.id"
v-if=
'pageInfo.type !== "add"'
disabled
/>
-->
<Field
label=
"名称"
prop=
"name"
v-model=
"form.name"
/>
<!--
<Field
label=
"ID"
prop=
"id"
v-model=
"form.id"
v-if=
'pageInfo.type !== "add"'
disabled
/>
-->
<Field
label=
"名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"权限类型"
prop=
"authType"
v-model=
"form.authType"
:enumData=
'dict.authType'
type=
'select'
/>
<Field
label=
"访问地址"
prop=
"url"
v-model=
"form.url"
/>
<Field
label=
"状态"
prop=
"status"
v-model=
"form.status"
:enumData=
'dict.status'
type=
'radio'
/>
...
...
@@ -50,6 +49,7 @@ export default {
data
()
{
return
{
fileContent
:
""
,
id
:
null
,
icons
:
[
'
info
'
,
'
error
'
,
'
success
'
,
'
warning
'
,
'
question
'
,
'
tickets
'
,
'
document
'
,
'
goods
'
,
'
sold-out
'
,
'
news
'
,
...
...
@@ -102,6 +102,7 @@ export default {
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
if
(
row
.
id
){
this
.
id
=
row
.
id
this
.
form
.
parentId
=
row
.
id
}
this
.
menuOptions
=
menuOptions
;
...
...
@@ -121,6 +122,9 @@ export default {
},
/**获取数据后弹框 */
afterRender
(
data
)
{
if
(
this
.
id
){
this
.
form
.
parentId
=
this
.
id
}
this
.
open
=
true
;
},
afterSubmit
(
data
)
{
...
...
attendance-performance-manager/pom.xml
View file @
98d7c875
...
...
@@ -17,9 +17,7 @@
<profiles>
<profile>
<id>
develop
</id>
<activation>
<activeByDefault>
true
</activeByDefault>
</activation>
<properties>
<profiles.active>
develop
</profiles.active>
<profiles.server.port>
17500
</profiles.server.port>
...
...
@@ -36,6 +34,9 @@
</profile>
<profile>
<id>
test
</id>
<activation>
<activeByDefault>
true
</activeByDefault>
</activation>
<properties>
<profiles.active>
test
</profiles.active>
<profiles.server.port>
17500
</profiles.server.port>
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/ManagerApplication.java
View file @
98d7c875
...
...
@@ -19,6 +19,7 @@ public class ManagerApplication extends BaseWebApplication {
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ManagerApplication
.
class
,
args
);
System
.
out
.
println
(
123465
);
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/base/system/menu/service/impl/MenuServiceImpl.java
View file @
98d7c875
...
...
@@ -166,12 +166,16 @@ public class MenuServiceImpl extends AbstractCRUDServiceImpl<MenuDao, MenuEntity
MenuQuery
query
=
new
MenuQuery
();
query
.
setParentId
(
entity
.
getParentId
());
Comparator
<
Integer
>
comparator
=
Comparator
.
comparing
(
Integer:
:
intValue
);
Optional
<
Integer
>
maxOptional
=
this
.
find
(
query
).
stream
().
map
(
MenuEntity:
:
getOrderId
).
filter
(
f
->
f
!=
9999
).
max
(
comparator
);
Optional
<
Integer
>
maxOptional
=
this
.
find
(
query
).
stream
().
map
(
item
->{
if
(
ObjectUtils
.
isEmpty
(
item
.
getOrderId
()))
return
1
;
return
item
.
getOrderId
();
}).
filter
(
f
->
f
!=
9999
).
max
(
comparator
);
maxOptional
.
ifPresent
(
e
->
{
e
=
e
+
1
;
entity
.
setOrderId
(
e
);
});
MenuEntity
parentMenuEntity
=
this
.
get
(
entity
.
getParentId
());
if
(!
ObjectUtils
.
isEmpty
(
parentMenuEntity
)
&&
SatusEnum
.
DISENABLE
.
getValue
()
==
parentMenuEntity
.
getStatus
())
{
throw
new
AppException
(
"菜单信息停用,不允许新增"
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/hik/ArtemisPostTest.java
View file @
98d7c875
...
...
@@ -218,9 +218,11 @@ public class ArtemisPostTest {
// System.out.println(VechicleDataResult);
String
result
=
callPostApiGetPersonList
();
System
.
out
.
println
(
result
);
//
String result = callPostApiGetPersonList();
//
System.out.println(result);
//callPostApiGetPersonList
String
result
=
callPostApiGetDeptList
();
System
.
out
.
println
(
result
);
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/AttendanceTypeEnum.java
View file @
98d7c875
...
...
@@ -64,4 +64,4 @@ public enum AttendanceTypeEnum {
}
return
resultMap
;
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
View file @
98d7c875
...
...
@@ -58,6 +58,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
staffEntity1
.
setDeptName
(
list
.
getOrgName
());
staffEntity1
.
setDeptId
(
Long
.
valueOf
(
list
.
getOrgIndexCode
()));
staffEntity1
.
setDeptName
(
list
.
getOrgName
());
staffEntity1
.
setSource
(
1
);
if
(
list
.
getBirthday
()!=
null
){
staffEntity1
.
setBirthday
((
Date
)
list
.
getBirthday
());
}
...
...
@@ -74,8 +75,18 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
if
(
staffEntity
.
getRemark
().
equals
(
list
.
getPersonId
()))
{
//执行修改
staffEntity
.
setName
(
list
.
getPersonName
());
staffEntity
.
setRemark
(
list
.
getPersonId
());
staffEntity
.
setPhotoPath
(
list
.
getPersonPhoto
().
getPicUri
());
staffEntity
.
setDeptName
(
list
.
getOrgName
());
staffEntity
.
setDeptId
(
Long
.
valueOf
(
list
.
getOrgIndexCode
()));
staffEntity
.
setDeptName
(
list
.
getOrgName
());
staffEntity
.
setSource
(
1
);
if
(
list
.
getBirthday
()==
null
&&
staffEntity
.
getBirthday
()!=
null
){
staffEntity
.
setBirthday
(
staffEntity
.
getBirthday
());
}
if
(
list
.
getPhoneNo
()!=
null
&&
staffEntity
.
getPhoneNumber
()!=
null
){
staffEntity1
.
setPhoneNumber
(
staffEntity
.
getPhoneNumber
());
}
staffDao
.
update
(
staffEntity
);
}
for
(
ListItem
item
:
personHikData
.
getList
()){
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceClassServiceImpl.java
View file @
98d7c875
package
com.mortals.xhx.module.attendance.service.impl
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.xhx.module.attendance.dao.AttendanceClassDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassDetailEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassDetailQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassDetailService
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Arrays
;
import
java.util.List
;
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/dao/ibatis/DeptDaoImpl.java
View file @
98d7c875
...
...
@@ -24,7 +24,8 @@ public class DeptDaoImpl extends BaseCRUDDaoMybatis<DeptEntity,Long> implements
@Override
public
List
<
DeptEntity
>
queryAllList
()
{
return
null
;
return
this
.
getList
(
new
DeptEntity
());
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/StaffDao.java
View file @
98d7c875
...
...
@@ -21,4 +21,29 @@ public interface StaffDao extends ICRUDDao<StaffEntity,Long>{
* */
List
<
StaffEntity
>
queryAllList
();
/**
* 所有在职员工
* */
int
queryInWork
();
/**
* 在职
* */
int
queryFull
();
/**
* 实习
* */
int
queryPricate
();
/**
* 试用
* */
int
queryOnTrial
();
/**
* 正式
* */
int
queryFormal
();
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/StaffLeaveDao.java
View file @
98d7c875
...
...
@@ -2,7 +2,6 @@ package com.mortals.xhx.module.staff.dao;
import
com.mortals.framework.dao.ICRUDDao
;
import
com.mortals.xhx.module.staff.model.StaffLeaveEntity
;
import
java.util.List
;
/**
* 员工离职信息Dao
* 员工离职信息 DAO接口
...
...
@@ -13,5 +12,8 @@ import java.util.List;
public
interface
StaffLeaveDao
extends
ICRUDDao
<
StaffLeaveEntity
,
Long
>{
/**
* 待离职
* */
int
queryResignation
();
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/ibatis/StaffDaoImpl.java
View file @
98d7c875
...
...
@@ -19,6 +19,33 @@ public class StaffDaoImpl extends BaseCRUDDaoMybatis<StaffEntity,Long> implement
@Override
public
List
<
StaffEntity
>
queryAllList
()
{
return
null
;
return
this
.
getList
(
new
StaffEntity
())
;
}
@Override
public
int
queryInWork
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryInWork"
));
}
@Override
public
int
queryFull
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryFull"
));
}
@Override
public
int
queryPricate
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryPricate"
));
}
@Override
public
int
queryOnTrial
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryOnTrial"
));
}
@Override
public
int
queryFormal
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryFormal"
));
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/dao/ibatis/StaffLeaveDaoImpl.java
View file @
98d7c875
package
com.mortals.xhx.module.staff.dao.ibatis
;
import
org.springframework.stereotype.Repository
;
import
com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis
;
import
com.mortals.xhx.module.staff.dao.StaffLeaveDao
;
import
com.mortals.xhx.module.staff.model.StaffLeaveEntity
;
import
java.util.Date
;
import
com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis
;
import
java.util.List
;
import
org.springframework.stereotype.Repository
;
/**
* 员工离职信息DaoImpl DAO接口
*
...
...
@@ -17,5 +15,8 @@ import java.util.List;
public
class
StaffLeaveDaoImpl
extends
BaseCRUDDaoMybatis
<
StaffLeaveEntity
,
Long
>
implements
StaffLeaveDao
{
@Override
public
int
queryResignation
()
{
return
this
.
getSqlSession
().
selectOne
(
this
.
getSqlId
(
"queryResignation"
));
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/StaffInfoVo.java
0 → 100644
View file @
98d7c875
package
com.mortals.xhx.module.staff.model.vo
;
import
lombok.Data
;
@Data
public
class
StaffInfoVo
{
//在职员工
private
Integer
inWorkStaff
;
//全职
private
Integer
fullStaff
;
//实习
private
Integer
pricateStaff
;
//试用
private
Integer
onTrialStaff
;
//正式
private
Integer
formalStaff
;
//待离职
private
Integer
resignationStaff
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/StaffVo.java
View file @
98d7c875
...
...
@@ -15,4 +15,6 @@ public class StaffVo extends BaseEntityLong {
private
List
<
Long
>
idList
;
private
List
<
HolidayListVo
>
holidayLists
;
private
List
<
StaffInfoVo
>
staffInfoVos
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/model/vo/holidayInfoVo.java
deleted
100644 → 0
View file @
563a7146
package
com.mortals.xhx.module.staff.model.vo
;
import
lombok.Data
;
@Data
public
class
holidayInfoVo
{
//调休
//private Integer
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/StaffService.java
View file @
98d7c875
package
com.mortals.xhx.module.staff.service
;
import
com.mortals.framework.service.ICRUDCacheService
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.vo.StaffInfoVo
;
/**
* StaffService
*
...
...
@@ -12,4 +13,5 @@ import com.mortals.xhx.module.staff.model.StaffEntity;
*/
public
interface
StaffService
extends
ICRUDCacheService
<
StaffEntity
,
Long
>
{
StaffInfoVo
queryAll
();
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
View file @
98d7c875
package
com.mortals.xhx.module.staff.service.impl
;
import
com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.xhx.module.staff.dao.StaffDao
;
import
com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl
;
import
com.mortals.xhx.module.staff.dao.ibatis.StaffLeaveDaoImpl
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.vo.StaffInfoVo
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* StaffService
* 员工基本信息 service实现
*
* @author zxfei
* @date 2023-04-07
*/
* StaffService
* 员工基本信息 service实现
*
* @author zxfei
* @date 2023-04-07
*/
@Service
(
"staffService"
)
public
class
StaffServiceImpl
extends
AbstractCRUDCacheServiceImpl
<
StaffDao
,
StaffEntity
,
Long
>
implements
StaffService
{
@
Override
pr
otected
String
getExtKey
(
StaffEntity
data
)
{
@
Autowired
pr
ivate
StaffDaoImpl
staffDao
;
@Autowired
private
StaffLeaveDaoImpl
staffLeaveDao
;
//工号作为redis 扩展key
@Override
protected
String
getExtKey
(
StaffEntity
data
)
{
//工号作为redis 扩展key
return
data
.
getWorkNum
();
}
@Override
public
StaffInfoVo
queryAll
()
{
StaffInfoVo
staffInfoVo
=
new
StaffInfoVo
();
staffInfoVo
.
setInWorkStaff
(
staffDao
.
queryInWork
());
staffInfoVo
.
setFullStaff
(
staffDao
.
queryFull
());
//有值
staffInfoVo
.
setFormalStaff
(
staffDao
.
queryFormal
());
staffInfoVo
.
setOnTrialStaff
(
staffDao
.
queryOnTrial
());
staffInfoVo
.
setPricateStaff
(
staffDao
.
queryPricate
());
staffInfoVo
.
setResignationStaff
(
staffLeaveDao
.
queryResignation
());
return
staffInfoVo
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
View file @
98d7c875
...
...
@@ -6,7 +6,7 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.vo.HolidayListVo
;
import
com.mortals.xhx.module.staff.model.vo.StaffVo
;
import
com.mortals.xhx.module.staff.model.vo.Staff
Info
Vo
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -51,12 +51,10 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
@Override
protected
int
doListAfter
(
StaffEntity
query
,
Map
<
String
,
Object
>
model
,
Context
context
)
throws
AppException
{
//
model
.
put
(
"stat"
,
new
StaffVo
());
//todo 员工信息统计--员工关系统计
StaffInfoVo
staffInfoVo
=
this
.
service
.
queryAll
();
System
.
out
.
println
(
"ssss"
+
staffInfoVo
);
model
.
put
(
"staff"
,
staffInfoVo
);
return
super
.
doListAfter
(
query
,
model
,
context
);
}
...
...
@@ -89,6 +87,4 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
return
super
.
infoAfter
(
id
,
model
,
entity
,
context
);
}
}
\ No newline at end of file
attendance-performance-manager/src/main/resources/sqlmap/module/staff/StaffLeaveMapper.xml
View file @
98d7c875
...
...
@@ -1258,4 +1258,7 @@
</trim>
</if>
</sql>
<select
id=
"queryResignation"
resultType=
"integer"
>
select count(1) resignationStaff from mortals_xhx_staff_leave where auditStatus = 1
</select>
</mapper>
\ No newline at end of file
attendance-performance-manager/src/main/resources/sqlmap/module/staff/StaffMapper.xml
View file @
98d7c875
...
...
@@ -1318,4 +1318,20 @@
</trim>
</if>
</sql>
<select
id=
"queryInWork"
resultType=
"integer"
>
select count(1) inWorkStaff from mortals_xhx_staff where status
<![CDATA[<>]]>
3
</select>
<select
id=
"queryFull"
resultType=
"integer"
>
select count(1) fullStaff from mortals_xhx_staff where staffType = 1
</select>
<select
id=
"queryPricate"
resultType=
"integer"
>
select count(1) pricateStaff from mortals_xhx_staff where staffType = 3
</select>
<select
id=
"queryOnTrial"
resultType=
"integer"
>
select count(1) onTrialStaff from mortals_xhx_staff where status = 2
</select>
<select
id=
"queryFormal"
resultType=
"integer"
>
select count(1) formalStaff from mortals_xhx_staff where status = 1
</select>
</mapper>
\ No newline at end of file
attendance-performance-manager/src/test/java/com/mortals/httpclient/dept/DeptController.http
0 → 100644
View file @
98d7c875
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###职位信息列表
POST {{baseUrl}}/job/list
Authorization: {{authToken}}
Content-Type: application/json
{
"page":1,
"size":10
}
###职位信息更新与保存
POST {{baseUrl}}/job/save
Authorization: {{authToken}}
Content-Type: application/json
{
"groupId":243,
"groupName":"2g2sug",
"jobCode":"p0m3o4",
"jobName":"3dnfdt",
"remark":"brj4yu",
}
> {%
client.global.set("Job_id", JSON.parse(response.body).data.id);
%}
###职位信息查看
GET {{baseUrl}}/job/info?id={{Job_id}}
Authorization: {{authToken}}
Accept: application/json
###职位信息编辑
GET {{baseUrl}}/job/edit?id={{Job_id}}
Authorization: {{authToken}}
Accept: application/json
###职位信息删除
GET {{baseUrl}}/job/delete?id={{Job_id}}
Authorization: {{authToken}}
Accept: application/json
attendance-performance-manager/src/test/java/com/mortals/httpclient/staff/StaffController.http
View file @
98d7c875
...
...
@@ -18,7 +18,6 @@ POST {{baseUrl}}/staff/list
Content-Type: application/json
{
"idList": [1,3],
"page":1,
"size":10
}
...
...
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