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
a760226d
Commit
a760226d
authored
Apr 14, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
93941c96
fbafa87d
Changes
35
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
643 additions
and
373 deletions
+643
-373
attendance-performance-manager-ui/admin/.env.development
attendance-performance-manager-ui/admin/.env.development
+3
-0
attendance-performance-manager-ui/admin/.env.test
attendance-performance-manager-ui/admin/.env.test
+1
-0
attendance-performance-manager-ui/admin/src/assets/mixins/form.js
...ce-performance-manager-ui/admin/src/assets/mixins/form.js
+1
-0
attendance-performance-manager-ui/admin/src/assets/mixins/table.js
...e-performance-manager-ui/admin/src/assets/mixins/table.js
+61
-2
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
...nce-performance-manager-ui/admin/src/assets/utils/ajax.js
+5
-3
attendance-performance-manager-ui/admin/src/assets/utils/common.js
...e-performance-manager-ui/admin/src/assets/utils/common.js
+36
-1
attendance-performance-manager-ui/admin/src/components/FormField.vue
...performance-manager-ui/admin/src/components/FormField.vue
+16
-0
attendance-performance-manager-ui/admin/src/components/ImageUpload.vue
...rformance-manager-ui/admin/src/components/ImageUpload.vue
+8
-3
attendance-performance-manager-ui/admin/src/router.js
attendance-performance-manager-ui/admin/src/router.js
+3
-3
attendance-performance-manager-ui/admin/src/views/attendance/class/list.vue
...ance-manager-ui/admin/src/views/attendance/class/list.vue
+16
-16
attendance-performance-manager-ui/admin/src/views/attendance/group/list.vue
...ance-manager-ui/admin/src/views/attendance/group/list.vue
+5
-5
attendance-performance-manager-ui/admin/src/views/attendance/group/responsible/dialogshow.vue
...min/src/views/attendance/group/responsible/dialogshow.vue
+59
-11
attendance-performance-manager-ui/admin/src/views/attendance/group/responsible/list.vue
...-ui/admin/src/views/attendance/group/responsible/list.vue
+18
-4
attendance-performance-manager-ui/admin/src/views/attendance/group/view.vue
...ance-manager-ui/admin/src/views/attendance/group/view.vue
+130
-78
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/dialogshow.vue
...ui/admin/src/views/attendance/leave/record/dialogshow.vue
+2
-2
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/drawershow.vue
...ui/admin/src/views/attendance/leave/record/drawershow.vue
+25
-25
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/list.vue
...nager-ui/admin/src/views/attendance/leave/record/list.vue
+5
-5
attendance-performance-manager-ui/admin/src/views/attendance/record/error/list.vue
...nager-ui/admin/src/views/attendance/record/error/list.vue
+8
-8
attendance-performance-manager-ui/admin/src/views/attendance/record/hik/list.vue
...manager-ui/admin/src/views/attendance/record/hik/list.vue
+7
-7
attendance-performance-manager-ui/admin/src/views/attendance/record/list.vue
...nce-manager-ui/admin/src/views/attendance/record/list.vue
+4
-4
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
...mance-manager-ui/admin/src/views/attendance/stat/list.vue
+6
-2
attendance-performance-manager-ui/admin/src/views/dept/drawershow.vue
...erformance-manager-ui/admin/src/views/dept/drawershow.vue
+6
-35
attendance-performance-manager-ui/admin/src/views/dept/list.vue
...ance-performance-manager-ui/admin/src/views/dept/list.vue
+22
-22
attendance-performance-manager-ui/admin/src/views/job/drawershow.vue
...performance-manager-ui/admin/src/views/job/drawershow.vue
+2
-1
attendance-performance-manager-ui/admin/src/views/staff/list.vue
...nce-performance-manager-ui/admin/src/views/staff/list.vue
+1
-1
attendance-performance-manager-ui/admin/src/views/staff/view.vue
...nce-performance-manager-ui/admin/src/views/staff/view.vue
+9
-5
attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
...rformance-manager-ui/admin/src/views/system/menu/list.vue
+1
-2
attendance-performance-manager-ui/admin/src/views/workman/dialogshow.vue
...ormance-manager-ui/admin/src/views/workman/dialogshow.vue
+77
-16
attendance-performance-manager-ui/admin/src/views/workman/list.vue
...e-performance-manager-ui/admin/src/views/workman/list.vue
+4
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
...in/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+96
-63
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/service/DeptService.java
...java/com/mortals/xhx/module/dept/service/DeptService.java
+0
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/service/impl/DeptServiceImpl.java
...mortals/xhx/module/dept/service/impl/DeptServiceImpl.java
+0
-8
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
...ava/com/mortals/xhx/module/staff/web/StaffController.java
+0
-20
attendance-performance-manager/src/test/java/com/mortals/httpclient/dept/DeptController.http
...test/java/com/mortals/httpclient/dept/DeptController.http
+6
-6
attendance-performance-manager/src/test/java/com/mortals/httpclient/job/JobController.http
...c/test/java/com/mortals/httpclient/job/JobController.http
+0
-3
No files found.
attendance-performance-manager-ui/admin/.env.development
0 → 100644
View file @
a760226d
#开发环境
NODE_ENV = "development"
VUE_APP_API_BASE_URL=http://192.168.0.98:11039
\ No newline at end of file
attendance-performance-manager-ui/admin/.env.test
View file @
a760226d
...
...
@@ -6,3 +6,4 @@ VUE_APP_API_BASE_URL=/basics_api
VUE_APP_PORTAL_URL
=
/
portal_home
VUE_APP_PORTAL_PORT
=
11039
VUE_APP_API_BASE_URL
=
http
://
192.168
.
0.98
:
11039
attendance-performance-manager-ui/admin/src/assets/mixins/form.js
View file @
a760226d
...
...
@@ -36,6 +36,7 @@ export default {
res
.
entity
=
this
.
util_toDateStr
(
res
.
entity
,
this
.
toDate
);
this
.
form
=
Object
.
assign
({},
this
.
form
,
res
.
entity
);
this
.
dict
=
Object
.
assign
({},
this
.
dict
,
res
.
dict
);
// 部门格式化处理
this
.
afterRender
(
res
);
})
.
catch
(
error
=>
{
...
...
attendance-performance-manager-ui/admin/src/assets/mixins/table.js
View file @
a760226d
...
...
@@ -7,7 +7,7 @@ const tagsMap = {
1
:
'
danger
'
,
0
:
'
success
'
};
const
baseUrl
=
process
.
env
.
VUE_APP_API_BASE_URL
+
'
/
'
export
default
{
mounted
()
{
this
.
getData
();
...
...
@@ -58,7 +58,7 @@ export default {
this
.
tableData
=
this
.
beforeRender
(
Object
.
assign
({},
this
.
tableData
,
data
)
)
console
.
log
(
this
.
tableData
,
''
)
console
.
log
(
this
.
tableData
,
'
fffff
'
)
this
.
afterRender
(
this
.
tableData
);
})
.
catch
(
error
=>
{
...
...
@@ -280,6 +280,65 @@ export default {
return
val
}
},
// 格式化处理异常状态
formattereErrorStatus
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
<
el
-
tag
size
=
"
mini
"
type
=
"
danger
"
>
{
this
.
util_formatter
(
'
errorStatus
'
,
val
)}
<
/el-tag
>
}
else
{
return
val
}
},
// 格式化处理状态
formattereDealStatus
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
<
el
-
tag
size
=
"
mini
"
>
{
this
.
util_formatter
(
'
processStatus
'
,
val
)}
<
/el-tag
>
}
else
{
return
val
}
},
// 考勤组人数
formatterGroupPerson
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
Number
(
row
.
personNum
)
+
Number
(
row
.
personNumNo
)
}
else
{
return
val
}
},
// 考勤类型
formatterattendType
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
<
el
-
tag
size
=
"
mini
"
>
{
this
.
util_formatter
(
'
type
'
,
val
)}
<
/el-tag
>
}
else
{
return
val
}
},
// 请假类型
formatterLeaveType
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
<
el
-
tag
size
=
"
mini
"
>
{
this
.
util_formatter
(
'
leaveType
'
,
val
)}
<
/el-tag
>
}
else
{
return
val
}
},
// 格式化图片展示
formatterPic
(
row
,
column
,
val
){
const
content
=
formatter
(
this
.
tableData
,
column
,
val
)
if
(
content
)
{
return
<
el
-
image
src
=
{
val
.
indexOf
(
'
http
'
)
==
-
1
?
baseUrl
+
val
:
val
}
preview
-
src
-
list
=
{
val
.
indexOf
(
'
http
'
)
==
-
1
?
baseUrl
+
val
:
val
}
style
=
"
width: 100px
"
><
/el-image
>
}
else
{
return
val
}
},
// 多选表格行
handleSelectionChange
(
val
)
{
this
.
selection
=
val
.
map
(
i
=>
i
.
id
);
...
...
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
View file @
a760226d
...
...
@@ -32,11 +32,13 @@ instance.interceptors.request.use(config => {
// 测试用
//http://192.168.0.98:11039/
const
hostname
=
'
192.168.0.98
'
const
port
=
'
11039
'
// 温
// http://192.168.0.116/17500
const
hostname
=
'
192.168.0.116
'
const
port
=
'
17500
'
// 动态修改请求地址
console
.
log
(
hostname
,
baseURL
,
port
)
if
(
config
.
url
.
startsWith
(
'
/
'
))
{
// 字符串以 / 开头
config
.
url
=
`http://
${
hostname
}
:
${
port
}${
baseURL
}${
config
.
url
}
`
;
...
...
attendance-performance-manager-ui/admin/src/assets/utils/common.js
View file @
a760226d
...
...
@@ -174,4 +174,39 @@ export const getTreeIds = (tree, nodeId, config) => {
}
/**
* 根据树子节点ID查找所有父节点ID
* @param {array} dataSource 树形结构数据源
* @param {number} nodeId 子节点ID
* @returns {array} 包含所有父节点ID的数组,按照从根节点到直接父节点的顺序排序
*/
export
const
findParentIds
=
(
dataSource
,
nodeId
)
=>
{
const
parentIds
=
[];
// 用于存储所有父节点ID的数组
// 定义一个递归函数,用于遍历整棵树并查找子节点的所有父节点
function
traverse
(
node
,
nodeId
)
{
if
(
node
.
id
===
nodeId
)
{
// 如果当前节点的ID等于子节点的ID,则表示已经找到了子节点,可以开始向上查找父节点
return
true
;
// 返回true表示已经找到了子节点
}
if
(
node
.
children
)
{
// 如果当前节点有子节点,则继续遍历子节点
for
(
const
childNode
of
node
.
children
)
{
if
(
traverse
(
childNode
,
nodeId
))
{
// 如果在子节点中找到了子节点的父节点,则将当前节点的ID添加到父节点ID数组中,并返回true表示已经找到了子节点
parentIds
.
push
(
node
.
id
);
return
true
;
}
}
}
return
false
;
// 如果当前节点不是子节点的父节点,则返回false
}
// 从根节点开始遍历整棵树,并调用递归函数查找子节点的所有父节点
for
(
const
node
of
dataSource
)
{
if
(
traverse
(
node
,
nodeId
))
{
// 如果在当前节点的子树中找到了子节点的父节点,则直接退出循环
break
;
}
else
{
if
(
node
.
children
&&
node
.
children
.
length
>
0
){
traverse
(
node
.
children
,
nodeId
)
}
}
}
return
parentIds
;
// 返回所有父节点ID的数组
}
attendance-performance-manager-ui/admin/src/components/FormField.vue
View file @
a760226d
...
...
@@ -11,6 +11,7 @@
<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"'
>
<el-option
v-for=
"($label, $value) in enumData"
...
...
@@ -20,6 +21,16 @@
></el-option>
</el-select>
<!-- 多级 -->
<el-cascader
:disabled=
'disabled'
v-model=
"field"
@
change=
"emit"
:options=
"enumData"
:clearable=
'clearable'
:props=
"
{label:'label',value:'id',multiple:multiple}"
v-if='type === "cascader"'>
</el-cascader>
<!-- 联级选择 -->
<el-cascader-panel
:disabled=
'disabled'
v-model=
"field"
@
change=
"emit"
:options=
"enumData"
:clearable=
'clearable'
:props=
"
{label:'label',value:'id',multiple:multiple}" v-if='type === "cascaderpanel"'>
</el-cascader-panel>
<el-radio-group
:disabled=
'disabled'
v-model=
"field"
@
change=
"emit"
v-if=
'type === "radio"'
>
<el-radio
v-for=
'($label, $value) in enumData'
...
...
@@ -81,6 +92,10 @@ export default {
type
:
String
,
default
:
''
,
},
multiple
:{
type
:
Boolean
,
default
:
false
,
},
// 字段所需的枚举类型
enumData
:
{
type
:
Object
,
...
...
@@ -125,6 +140,7 @@ export default {
this
.
$emit
(
'
input
'
,
this
.
newVal
)
this
.
$emit
(
'
change
'
,
this
.
newVal
)
this
.
$emit
(
'
focus
'
)
this
.
$emit
(
'
cascaderChange
'
,
this
.
newVal
)
}
},
computed
:
{
...
...
attendance-performance-manager-ui/admin/src/components/ImageUpload.vue
View file @
a760226d
...
...
@@ -18,7 +18,8 @@
</div>
</el-image>
<div
v-else
class=
"image"
>
<el-image
:src=
"value"
:style=
"`width:150px;height:150px;`"
fit=
"fill"
/>
<el-image
:src=
"value.indexOf('http') == -1?baseUrl+value:value"
:style=
"`width:150px;height:150px;`"
fit=
"fill"
/>
<div
class=
"mask"
>
<div
class=
"actions"
>
<span
title=
"预览"
@
click.stop=
"dialogVisible = true"
>
...
...
@@ -32,7 +33,7 @@
</div>
</el-upload>
<el-dialog
:visible.sync=
"dialogVisible"
title=
"预览"
width=
"800"
append-to-body
>
<img
:src=
"value"
style=
"display: block; max-width: 100%; margin: 0 auto;"
>
<img
:src=
"value
.indexOf('http') == -1?baseUrl+value:value
"
style=
"display: block; max-width: 100%; margin: 0 auto;"
>
</el-dialog>
</div>
</
template
>
...
...
@@ -41,8 +42,9 @@
export
default
{
data
()
{
return
{
baseUrl
:
process
.
env
.
VUE_APP_API_BASE_URL
+
'
/
'
,
dialogVisible
:
false
,
uploadImgUrl
:
"
/m
/file/commonupload
"
,
// 上传的图片服务器地址
uploadImgUrl
:
process
.
env
.
VUE_APP_API_BASE_URL
+
"
/attendance
/file/commonupload
"
,
// 上传的图片服务器地址
};
},
props
:
{
...
...
@@ -55,6 +57,9 @@ export default {
type
:
String
,
default
:
''
,
}
},
mounted
(){
},
methods
:
{
removeImage
()
{
...
...
attendance-performance-manager-ui/admin/src/router.js
View file @
a760226d
...
...
@@ -37,6 +37,8 @@ const router = new Router({
...
restBuilder
(
'
user
'
,
'
system/user
'
),
// 用户管理 -- 管理用户
...
restBuilder
(
'
param
'
,
'
system/param
'
),
// 系统管理--参数管理
// ...restBuilder('task', 'system/task'), // 系统管理--任务管理
// 绩效负责人
...
restBuilder
(
'
workman
'
,
'
workman
'
),
//部门
...
restBuilder
(
'
dept
'
,
'
dept
'
),
//部门
...
...
@@ -63,9 +65,7 @@ const router = new Router({
...
restBuilder
(
'
attendance/class
'
,
'
attendance/class
'
),
// 考勤班次信息
...
restBuilder
(
'
attendance/leave/record
'
,
'
attendance/leave/record
'
),
// 请假记录信息
...
restBuilder
(
'
attendance/vacation/balance
'
,
'
attendance/vacation/balance
'
),
// 员工假期余额信息
// 绩效负责人
...
restBuilder
(
'
attendance/group/responsible
'
,
'
attendance/group/responsible
'
),
//以下为基础路由配置
builder
(
'
blank
'
,
'
blank
'
),
...
...
attendance-performance-manager-ui/admin/src/views/attendance/class/list.vue
View file @
a760226d
...
...
@@ -77,22 +77,22 @@
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
班次名称
"
,
prop
:
"
className
"
},
{
label
:
"
考勤时间
"
,
prop
:
"
className
"
},
//
{label: "考勤班次详细信息",
//
width: 120,
//
prop: "subColumns",
//
formatter: (row) => {
//
let widthsize = this.columnSet.reduce((pre, cur) => {
//
return pre + Number(cur.width);
//
}, 50);
//
return (
//
<
el
-
popover
placement
=
"
right
"
width
=
{
widthsize
}
trigger
=
"
click
"
>
//
{this.renderTable(row.attendanceClassDetailList)}
//
<
el
-
button
type
=
"
text
"
slot
=
"
reference
"
>
详细
<
/el-button
>
//
<
/el-popover
>
//
);
//
},
//
},
//
{label: "考勤时间", prop: "className"},
{
label
:
"
考勤班次详细信息
"
,
width
:
120
,
prop
:
"
subColumns
"
,
formatter
:
(
row
)
=>
{
let
widthsize
=
this
.
columnSet
.
reduce
((
pre
,
cur
)
=>
{
return
pre
+
Number
(
cur
.
width
);
},
50
);
return
(
<
el
-
popover
placement
=
"
right
"
width
=
{
widthsize
}
trigger
=
"
click
"
>
{
this
.
renderTable
(
row
.
attendanceClassDetailList
)}
<
el
-
button
type
=
"
text
"
slot
=
"
reference
"
>
详细
<
/el-button
>
<
/el-popover
>
);
},
},
{
label
:
"
操作
"
,
width
:
240
,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/group/list.vue
View file @
a760226d
...
...
@@ -83,13 +83,13 @@
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
考勤组名称
"
,
prop
:
"
personNum
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤组名称
"
,
prop
:
"
groupName
"
},
{
label
:
"
人数
"
,
prop
:
"
personNum
"
,
formatter
:
this
.
formatter
},
{
label
:
"
人数
"
,
prop
:
"
personNum
"
,
formatter
:
this
.
formatter
GroupPerson
},
{
label
:
"
负责人
"
,
prop
:
"
personNum
"
,
formatter
:
this
.
formatter
},
{
label
:
"
负责人
"
,
prop
:
"
personNum
"
},
//未
{
label
:
"
类型
"
,
prop
:
"
type
"
,
formatter
:
this
.
formatter
},
{
label
:
"
类型
"
,
prop
:
"
type
"
,
formatter
:
this
.
formatter
attendType
},
// {label: "创建用户", prop: "createUserId", formatter: this.formatter},
...
...
@@ -97,7 +97,7 @@
// {label: "考勤方式", prop: "attendanceType"},
{
label
:
"
考勤时间
"
,
prop
:
"
attendanceType
"
},
{
label
:
"
考勤时间
"
,
prop
:
"
attendanceType
"
},
//未
// {label: "考勤组人员信息",
// width: 120,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/group/responsible/dialogshow.vue
View file @
a760226d
...
...
@@ -4,15 +4,27 @@
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<Field
label=
"姓名"
prop=
"responsibleName"
v-model=
"form.responsibleName"
placeholder=
"请输入负责人名称"
/>
<Field
label=
"电话号码"
prop=
"responsibleName"
v-model=
"form.responsibleName"
placeholder=
"请输入电话号码"
/>
<Field
label=
"考勤组"
prop=
"groupId"
v-model=
"form.groupId"
placeholder=
"请输入考勤组"
/>
<Field
label=
"考勤组名称"
prop=
"groupName"
v-model=
"form.groupName"
placeholder=
"请输入考勤组名称"
/>
<Field
label=
"负责人ID"
prop=
"responsibleId"
v-model=
"form.responsibleId"
placeholder=
"请输入负责人ID"
/>
<Field
label=
"负责人类型"
prop=
"responsibleType"
v-model=
"form.responsibleType"
type=
"select"
:enumData=
"dict.responsibleType"
placeholder=
"请选择负责人类型"
/>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/>
<Field
label=
"电话号码"
prop=
"phoneNumber"
v-model=
"form.phoneNumber"
placeholder=
"请输入电话号码"
/>
<Field
label=
"工号"
prop=
"workNum"
v-model=
"form.workNum"
placeholder=
"请输入工号"
/>
<Field
label=
"所属部门"
prop=
"deptId"
v-model=
"form.deptId"
type=
"select"
/>
<!--
<Field
label=
"考勤组"
prop=
"groupId"
v-model=
"form.groupId"
placeholder=
"请输入考勤组"
/>
-->
<!--
<Field
label=
"考勤组名称"
prop=
"groupName"
v-model=
"form.groupName"
placeholder=
"请输入考勤组名称"
/>
-->
<!--
<Field
label=
"负责人ID"
prop=
"responsibleId"
v-model=
"form.responsibleId"
placeholder=
"请输入负责人ID"
/>
-->
<!--
<Field
label=
"负责人类型"
prop=
"responsibleType"
v-model=
"form.responsibleType"
type=
"select"
:enumData=
"dict.responsibleType"
placeholder=
"请选择负责人类型"
/>
-->
<!--
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/>
-->
</el-row>
<el-form-item
label=
"上传图片"
prop=
"photoPath"
>
<el-upload
class=
"avatar-uploader"
action=
"https://jsonplaceholder.typicode.com/posts/"
:show-file-list=
"false"
:on-success=
"handleAvatarSuccess"
:before-upload=
"beforeAvatarUpload"
>
<img
v-if=
"form.photoPath"
:src=
"form.photoPath"
class=
"avatar"
>
<i
v-else
class=
"el-icon-plus avatar-uploader-icon"
></i>
</el-upload>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button>
...
...
@@ -27,7 +39,7 @@
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
dialogShow
},
data
()
{
return
{
...
...
@@ -40,14 +52,15 @@
toString
:[
"
responsibleType
"
,
],
imageUrl
:
''
,
// 表单校验
rules
:
{
responsibleName
:
[
{
required
:
true
,
message
:
"
请输入负责人名称
"
,
trigger
:
"
blur
"
},
{
max
:
64
,
message
:
"
最多只能录入64个字符
"
,
trigger
:
"
blur
"
,},
],
createTime
:
[
{
required
:
true
,
message
:
"
请
选择创建时间
"
},
phoneNumber
:
[
{
required
:
true
,
message
:
"
请
输入电话号码
"
,
trigger
:
"
blur
"
},
],
}
};
...
...
@@ -111,6 +124,41 @@
this
.
$refs
[
refName
].
resetFields
();
}
},
uploadFn
(
val
){
console
.
log
(
val
)
},
handleAvatarSuccess
(
file
){
},
beforeAvatarUpload
(
file
){
}
},
}
;
}
</
script
>
<
style
scoped
lang=
'less'
>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 150px;
height: 150px;
line-height: 150px;
text-align: center;
border: 1px dashed #d9d9d9;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</
style
>
attendance-performance-manager-ui/admin/src/views/attendance/group/responsible/list.vue
View file @
a760226d
...
...
@@ -46,23 +46,37 @@
label
:
"
负责人名称
"
,
fuzzy
:
true
},
{
name
:
"
deptId
"
,
type
:
"
select
"
,
label
:
"
请选择部门
"
,
fuzzy
:
true
},
],
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
照片
"
,
prop
:
"
photoPath
"
},
{
label
:
"
负责人名称
"
,
prop
:
"
responsibleName
"
},
{
label
:
"
负责人类型
"
,
prop
:
"
responsibleType
"
,
formatter
:
this
.
formatter
},
{
label
:
"
工号
"
,
prop
:
"
workNum
"
},
{
label
:
"
所属部门
"
,
prop
:
"
deptName
"
},
{
label
:
"
电话号码
"
,
prop
:
"
phoneNumber
"
},
// {label: "负责人类型", prop: "responsibleType",formatter: this.formatter},
{
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
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 @
a760226d
This diff is collapsed.
Click to expand it.
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/dialogshow.vue
View file @
a760226d
...
...
@@ -13,8 +13,8 @@
<Field
label=
"结束时间"
prop=
"endTime"
v-model=
"form.endTime"
type=
"date"
/>
<Field
label=
"时长,单位秒"
prop=
"duration"
v-model=
"form.duration"
placeholder=
"请输入时长,单位秒"
/>
<Field
label=
"请假事由"
prop=
"reason"
v-model=
"form.reason"
type=
"textarea"
placeholder=
"请输入请假事由"
/>
<
Field
label=
"审批负责人Id"
prop=
"approverId"
v-model=
"form.approverId"
placeholder=
"请输入审批负责人Id"
/
>
<Field
label=
"审批负责人"
prop=
"approver"
v-model=
"form.approver"
placeholder=
"请输入
审批负责人"
/>
<
!--
<Field
label=
"审批负责人Id"
prop=
"approverId"
v-model=
"form.approverId"
placeholder=
"请输入审批负责人Id"
/>
--
>
<Field
label=
"审批负责人"
prop=
"approver"
v-model=
"form.approver"
type=
"select"
placeholder=
"请选择
审批负责人"
/>
<Field
label=
"附件"
prop=
"attachment"
v-model=
"form.attachment"
type=
"textarea"
placeholder=
"请输入附件"
/>
<Field
label=
"附件路径"
prop=
"attachmentPath"
v-model=
"form.attachmentPath"
type=
"textarea"
placeholder=
"请输入附件路径"
/>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/>
...
...
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/drawershow.vue
View file @
a760226d
...
...
@@ -4,31 +4,31 @@
:title=
"title"
:visible.sync=
"open"
:direction=
"direction"
size=
"
5
0%"
>
<
el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120
px"
>
<el-
row
>
<Field
label=
"请假人"
prop=
"leavePersonId"
v-model=
"form.leavePersonId"
placeholder=
"请输入请假人id"
/
>
<!--
<Field
label=
"请假人"
prop=
"leavePerson"
v-model=
"form.leavePerson
"
placeholder=
"请输入请假人"
/>
-->
<Field
label=
"所属部门"
prop=
"deptId"
v-model=
"form.deptId"
placeholder=
"请输入所属部门id
"
/>
<!--
<Field
label=
"所属部门"
prop=
"deptName"
v-model=
"form.deptName"
type=
"textarea"
placeholder=
"请输入所属部门"
/>
--
>
<Field
label=
"电话号码"
prop=
"phoneNumber"
v-model=
"form.phoneNumber"
placeholder=
"请输入电话号码"
/
>
<Field
label=
"请假类型"
prop=
"leaveType"
v-model=
"form.leaveType"
type=
"select"
:enumData=
"dict.leaveType"
placeholder=
"请选择请假类型
"
/>
<Field
label=
"开始时间"
prop=
"startTime"
v-model=
"form.startTime"
type=
"date"
/>
<Field
label=
"结束时间"
prop=
"endTime"
v-model=
"form.end
Time"
type=
"date"
/>
<Field
label=
"时长"
prop=
"duration"
v-model=
"form.duration"
placeholder=
"请输入时长,单位秒"
/>
<Field
label=
"请假事由"
prop=
"reason"
v-model=
"form.reason"
type=
"textarea"
placeholder=
"请输入请假事由
"
/>
<Field
label=
"审批负责人"
prop=
"approverId"
v-model=
"form.approverId"
placeholder=
"请输入审批负责人Id
"
/>
<!--
<Field
label=
"审批负责人"
prop=
"approver"
v-model=
"form.approver"
placeholder=
"请输入审批负责人"
/>
--
>
<!--
<Field
label=
"附件"
prop=
"attachment"
v-model=
"form.attachment"
type=
"textarea"
placeholder=
"请输入附件
"
/>
-->
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/
>
</el-row>
<el-form-item
label=
"附件路径"
prop=
"attachmentPath"
>
<FileUpload
@
input=
"uploadFn"
/>
</el-form-item>
<form-buttons
@
submit=
'submitForm'
noCancelBtn
/>
</el-form>
size=
"
6
0%"
>
<
div
style=
"padding:15
px"
>
<el-
form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row
>
<!--
<Field
label=
"请假人"
prop=
"leavePersonId"
v-model=
"form.leavePersonId
"
placeholder=
"请输入请假人"
/>
-->
<Field
label=
"请假人"
prop=
"leavePerson"
v-model=
"form.leavePerson"
placeholder=
"请输入请假人
"
/>
<Field
label=
"所属部门"
prop=
"deptId"
v-model=
"form.deptId"
type=
"select"
placeholder=
"请选择所属部门"
/
>
<!--
<Field
label=
"所属部门"
prop=
"deptName"
v-model=
"form.deptName"
type=
"textarea"
placeholder=
"请输入所属部门"
/>
--
>
<Field
label=
"电话号码"
prop=
"phoneNumber"
v-model=
"form.phoneNumber"
placeholder=
"请输入电话号码
"
/>
<Field
label=
"请假类型"
prop=
"leaveType"
v-model=
"form.leaveType"
type=
"select"
:enumData=
"dict.leaveType"
placeholder=
"请选择请假类型"
/>
<Field
label=
"开始时间"
prop=
"startTime"
v-model=
"form.start
Time"
type=
"date"
/>
<Field
label=
"结束时间"
prop=
"endTime"
v-model=
"form.endTime"
type=
"date"
/>
<Field
label=
"时长"
prop=
"duration"
v-model=
"form.duration"
placeholder=
"请输入时长
"
/>
<Field
label=
"请假事由"
prop=
"reason"
v-model=
"form.reason"
type=
"textarea"
placeholder=
"请输入请假事由
"
/>
<Field
label=
"审批负责人"
prop=
"approverId"
type=
"select"
v-model=
"form.approverId"
placeholder=
"请选择审批负责人"
/
>
<!--
<Field
label=
"审批负责人"
prop=
"approver"
v-model=
"form.approver"
placeholder=
"请输入审批负责人
"
/>
-->
<!--
<Field
label=
"附件"
prop=
"attachment"
v-model=
"form.attachment"
type=
"textarea"
placeholder=
"请输入附件"
/>
--
>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/>
</el-row>
<el-form-item
label=
"附件路径"
prop=
"attachmentPath"
>
<FileUpload
@
input=
"uploadFn"
/>
</el-form-item>
<form-buttons
@
submit=
'submitForm'
noCancelBtn
/>
</el-form>
</div>
</el-drawer>
</
template
>
...
...
attendance-performance-manager-ui/admin/src/views/attendance/leave/record/list.vue
View file @
a760226d
...
...
@@ -91,25 +91,25 @@
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
请假人id
"
,
prop
:
"
leavePersonId
"
,
formatter
:
this
.
formatter
},
//
{label: "请假人id", prop: "leavePersonId", formatter: this.formatter},
{
label
:
"
请假人
"
,
prop
:
"
leavePerson
"
},
{
label
:
"
所属部门id
"
,
prop
:
"
deptId
"
,
formatter
:
this
.
formatter
},
//
{label: "所属部门id", prop: "deptId", formatter: this.formatter},
{
label
:
"
所属部门
"
,
prop
:
"
deptName
"
},
{
label
:
"
电话号码
"
,
prop
:
"
phoneNumber
"
},
{
label
:
"
请假类型
"
,
prop
:
"
leaveType
"
,
formatter
:
this
.
formatter
},
{
label
:
"
请假类型
"
,
prop
:
"
leaveType
"
,
formatter
:
this
.
formatter
LeaveType
},
{
label
:
"
开始时间
"
,
prop
:
"
startTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
结束时间
"
,
prop
:
"
endTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
时长
,单位秒
"
,
prop
:
"
duration
"
,
formatter
:
this
.
formatter
},
{
label
:
"
时长
"
,
prop
:
"
duration
"
,
formatter
:
this
.
formatter
},
{
label
:
"
审批负责人Id
"
,
prop
:
"
approverId
"
,
formatter
:
this
.
formatter
},
//
{label: "审批负责人Id", prop: "approverId", formatter: this.formatter},
{
label
:
"
审批负责人
"
,
prop
:
"
approver
"
},
...
...
attendance-performance-manager-ui/admin/src/views/attendance/record/error/list.vue
View file @
a760226d
...
...
@@ -117,19 +117,19 @@
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
工号
"
,
prop
:
"
staffName
"
},
{
label
:
"
工号
"
,
prop
:
"
workNum
"
},
{
label
:
"
部门
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤组
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
taff
Name
"
},
{
label
:
"
异常状态
"
,
prop
:
"
errorStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
考勤组
"
,
prop
:
"
dept
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
hifts
Name
"
},
{
label
:
"
异常状态
"
,
prop
:
"
errorStatus
"
,
formatter
:
this
.
formatter
eErrorStatus
},
{
label
:
"
异常时间
"
,
prop
:
"
errorDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理结果
"
,
prop
:
"
errorDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理结果
"
,
prop
:
"
processResult
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
上下班时间
"
,
prop
:
"
goOffDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
实际打卡时间
"
,
prop
:
"
actualAttendanceDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理时间
"
,
prop
:
"
operDateTime
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
处理状态
"
,
prop
:
"
processStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
处理人
"
,
prop
:
"
processStatus
"
,
formatter
:
this
.
formatter
},
{
label
:
"
备注
"
,
prop
:
"
createUserId
"
,
formatter
:
this
.
formatter
},
{
label
:
"
处理状态
"
,
prop
:
"
processStatus
"
,
formatter
:
this
.
formatter
eDealStatus
},
{
label
:
"
处理人
"
,
prop
:
"
opertor
"
},
{
label
:
"
备注
"
,
prop
:
"
remark
"
},
{
label
:
"
操作
"
,
width
:
240
,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/record/hik/list.vue
View file @
a760226d
...
...
@@ -226,14 +226,14 @@
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
工号
"
,
prop
:
"
staffName
"
},
{
label
:
"
部门
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
考勤组
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
职位
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
taff
Name
"
},
{
label
:
"
工号
"
,
prop
:
"
workNum
"
},
{
label
:
"
部门
"
,
prop
:
"
dept
Name
"
},
{
label
:
"
考勤组
"
,
prop
:
"
attendanceGroup
Name
"
},
{
label
:
"
职位
"
,
prop
:
"
position
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
hifts
Name
"
},
{
label
:
"
考勤时间
"
,
prop
:
"
attendanceDate
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
考勤点名称
"
,
prop
:
"
staffName
"
},
{
label
:
"
事件源
"
,
prop
:
"
staffNam
e
"
},
{
label
:
"
考勤点名称
"
,
prop
:
"
attendanceAddress
"
},
{
label
:
"
事件源
"
,
prop
:
"
eventSourc
e
"
},
{
label
:
"
操作
"
,
width
:
240
,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/record/list.vue
View file @
a760226d
...
...
@@ -309,10 +309,10 @@
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
{
label
:
"
打卡日期
"
,
prop
:
"
attendanceDate
"
,
formatter
:
this
.
formatterDate
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
{
label
:
"
考勤组
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
部门
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
职位
"
,
prop
:
"
staff
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
taff
Name
"
},
{
label
:
"
考勤组
"
,
prop
:
"
attendanceGroup
Name
"
},
{
label
:
"
部门
"
,
prop
:
"
dept
Name
"
},
{
label
:
"
职位
"
,
prop
:
"
position
Name
"
},
{
label
:
"
班次
"
,
prop
:
"
s
hifts
Name
"
},
{
label
:
"
考勤打卡记录详细信息
"
,
width
:
120
,
prop
:
"
subColumns
"
,
...
...
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
View file @
a760226d
...
...
@@ -158,7 +158,7 @@
{
label
:
"
窗口类别
"
,
prop
:
"
windowCategory
"
},
{
label
:
"
部门
"
,
prop
:
"
bumentId
"
},
{
label
:
"
部门
"
,
prop
:
"
deptName
"
},
{
label
:
"
员工姓名
"
,
prop
:
"
staffName
"
},
...
...
@@ -232,7 +232,11 @@
setcolum
:[],
isdialog
:
false
,
checkList
:[],
drawerhistory
:
false
drawerhistory
:
false
,
// 动态新增列表
addColumn
:[
]
};
}
};
...
...
attendance-performance-manager-ui/admin/src/views/dept/drawershow.vue
View file @
a760226d
...
...
@@ -7,28 +7,9 @@
size=
"50%"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<!--
<Field
label=
"父id"
prop=
"parentId"
v-model=
"form.parentId"
placeholder=
"请输入父id"
/>
-->
<!--
<Field
label=
"祖级列表"
prop=
"ancestors"
v-model=
"form.ancestors"
type=
"textarea"
placeholder=
"请输入祖级列表"
/>
-->
<!--
<Field
label=
"部门名称"
prop=
"deptName"
v-model=
"form.deptName"
type=
"textarea"
placeholder=
"请输入部门名称"
/>
-->
<!--
<Field
label=
"上级部门"
prop=
"deptStatus"
v-model=
"form.deptStatus"
type=
"select"
:enumData=
"dict.deptStatus"
placeholder=
"请选择上级部门"
/>
-->
<!--
<Field
label=
"负责人"
prop=
"deptStatus"
v-model=
"form.deptStatus"
type=
"select"
:enumData=
"dict.deptStatus"
placeholder=
"请选择员工"
/>
-->
<!--
<Field
label=
"部门状态"
prop=
"deptStatus"
v-model=
"form.deptStatus"
type=
"select"
:enumData=
"dict.deptStatus"
placeholder=
"请选择部门状态"
/>
-->
<!--
<Field
label=
"顺序"
prop=
"orderNum"
v-model=
"form.orderNum"
placeholder=
"请输入顺序"
/>
-->
<!--
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入备注"
/>
-->
<el-form-item
label=
"部门名称"
prop=
"deptName"
>
<el-input
placeholder=
"请输入部门名称"
clearable
v-model=
"form.deptName"
></el-input>
</el-form-item>
<el-form-item
label=
"上级部门"
>
<el-select
placeholder=
"请选择上级部门"
clearable
v-model=
"form"
>
<el-option></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"负责人"
>
<el-select
placeholder=
"请选择员工"
clearable
>
<el-option></el-option>
</el-select>
</el-form-item>
<Field
label=
"部门名称"
prop=
"deptName"
v-model=
"form.deptName"
type=
"textarea"
placeholder=
"请输入部门名称"
/>
<Field
label=
"上级部门"
prop=
"parentId"
v-model=
"form.parentId"
type=
"select"
:enumData=
"dict.deptName"
placeholder=
"请选择上级部门"
/>
<Field
label=
"负责人"
prop=
"workId"
v-model=
"form.workId"
type=
"select"
:enumData=
"dict.workName"
placeholder=
"请选择员工"
/>
</el-row>
<form-buttons
@
submit=
'submitForm'
noCancelBtn
/>
...
...
@@ -64,23 +45,13 @@
],
// 表单校验
rules
:
{
ancestors
:
[
{
required
:
true
,
message
:
"
请输入祖级列表
"
,
trigger
:
"
blur
"
},
{
max
:
256
,
message
:
"
最多只能录入256个字符
"
,
trigger
:
"
blur
"
,},
],
deptName
:
[
{
required
:
true
,
message
:
"
请输入部门名称
"
,
trigger
:
"
blur
"
},
{
max
:
256
,
message
:
"
最多只能录入256个字符
"
,
trigger
:
"
blur
"
,},
],
deptStatus
:
[
{
required
:
true
,
message
:
"
请输入部门状态
"
,
trigger
:
"
blur
"
},
],
orderNum
:
[
{
required
:
true
,
message
:
"
请输入顺序
"
,
trigger
:
"
blur
"
},
],
createTime
:
[
{
required
:
true
,
message
:
"
请选择创建时间
"
},
],
parentId
:
[
{
required
:
true
,
message
:
"
请输入部门
"
,
trigger
:
"
change
"
},
]
}
};
},
...
...
attendance-performance-manager-ui/admin/src/views/dept/list.vue
View file @
a760226d
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
notSearch
></LayoutTable>
<div
className=
"page"
>
<el-card
style=
"height:80vh"
>
<LayoutTable
notPagination
:data=
"tableData"
ref=
"layoutTable"
:config=
"tableConfig"
notSearch
></LayoutTable>
</el-card>
<drawer-show
ref=
"drawerform"
@
ok=
"getData"
/>
</div>
</
template
>
<
script
>
/** 表单弹出框模式需引入 */
import
{
handleTree
}
from
"
@/assets/utils/table
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
drawerShow
from
"
./drawershow
"
;
import
table
from
"
@/assets/mixins/table
"
;
export
default
{
name
:
"
DeptList
"
,
components
:
{
drawerShow
},
drawerShow
,
Treeselect
},
mixins
:
[
table
],
created
()
{
this
.
query
=
{
"
page
"
:
1
,
"
size
"
:
-
1
}
},
methods
:
{
/** 重写新增方法 */
toAdd
(
row
)
{
this
.
$refs
.
drawerform
.
add
(
row
);
this
.
$refs
.
drawerform
.
add
(
row
,
this
.
menuOptions
);
},
/** 重写编辑方法 */
toEdit
(
row
)
{
this
.
$refs
.
drawerform
.
edit
(
row
);
this
.
$refs
.
drawerform
.
edit
(
row
,
this
.
menuOptions
);
},
/** 重写查看方法 */
toView
(
row
)
{
this
.
$refs
.
drawerform
.
view
(
row
);
this
.
$refs
.
drawerform
.
view
(
row
,
this
.
menuOptions
);
},
afterRender
(
data
)
{
data
.
data
=
handleTree
(
data
.
data
,
"
id
"
,
"
parentId
"
);
console
.
log
(
"
tree data:
"
,
data
.
data
)
this
.
menuOptions
=
data
.
data
;
this
.
$refs
.
layoutTable
.
showType
=
"
treetable
"
},
},
data
()
{
return
{
config
:
{
// search: [
// {
// name: "orderNum",
// type: "text",
// label: "顺序",
// fuzzy: true
// },
// {
// name: "createUserId",
// type: "text",
// label: "创建用户",
// fuzzy: true
// },
// ],
showType
:
'
treetable
'
,
isshowTabPane
:
true
,
/** 树表是否默认展开 */
expand
:
false
,
columns
:
[
{
type
:
"
selection
"
,
width
:
60
},
{
type
:
"
index
"
,
label
:
"
序号
"
,
width
:
50
},
...
...
attendance-performance-manager-ui/admin/src/views/job/drawershow.vue
View file @
a760226d
...
...
@@ -7,7 +7,8 @@
size=
"50%"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
style=
"padding:20px"
>
<el-row>
<Field
label=
"分组"
prop=
"groupId"
v-model=
"form.groupId"
type=
"select"
placeholder=
"请选择分组"
/>
<Field
v-if=
"title == '新增职位信息'"
label=
"分组"
prop=
"groupId"
v-model=
"form.groupId"
type=
"select"
placeholder=
"请选择分组"
/>
<Field
label=
"分组名称"
prop=
"groupName"
v-model=
"form.groupName"
placeholder=
"请输入分组名称"
/>
<Field
label=
"职位编码"
prop=
"jobCode"
v-model=
"form.jobCode"
placeholder=
"请输入职位编码"
/>
<Field
label=
"职位名称"
prop=
"jobName"
v-model=
"form.jobName"
placeholder=
"请输入职位名称"
/>
...
...
attendance-performance-manager-ui/admin/src/views/staff/list.vue
View file @
a760226d
...
...
@@ -20,6 +20,7 @@
<el-row
:gutter=
"20"
>
<el-col
:span=
"6"
:xs=
"12"
class=
"mytree"
>
<div
class=
"titles"
>
选择部门
</div>
<!-- default-expand-all -->
<el-scrollbar
style=
"height: 100%"
>
<el-tree
size=
"mini"
...
...
@@ -30,7 +31,6 @@
:props=
"treeProps"
:load=
"loadNode"
highlight-current
default-expand-all
:expand-on-click-node=
"false"
:render-content=
"renderContent"
@
node-click=
"handleNodeClick"
...
...
attendance-performance-manager-ui/admin/src/views/staff/view.vue
View file @
a760226d
...
...
@@ -15,10 +15,12 @@
<div
class=
"content ml20"
>
<div
class=
"c1"
>
<span>
{{
info
.
workName
}}
</span>
<span
class=
"tags"
>
{{
info
.
workStatus
}}
</span>
<!-- 格式 -->
<span
class=
"tags"
>
{{
dict
.
status
[
allinfo
.
status
]
}}
</span>
</div>
<div
class=
"c2"
>
<span>
{{
allinfo
.
deptName
}}
-
{{
allinfo
.
positionName
}}
</span>
<!-- -
{{
allinfo
.
positionName
}}
-->
<span>
{{
allinfo
.
deptName
}}
</span>
<span
style=
"margin:0 10px"
>
|
</span>
<span>
{{
info
.
workLimit
}}
天
</span>
</div>
...
...
@@ -111,9 +113,10 @@
this
.
$get
(
'
/staff/info
'
,{
id
}).
then
(
res
=>
{
if
(
res
.
code
==
1
){
this
.
info
=
res
.
data
.
holidayLists
[
0
]
this
.
dict
=
res
.
dict
this
.
allinfo
=
res
.
data
//总
this
.
info
.
workBeginDay
=
t
imestampToTime
(
Number
(
this
.
info
.
workBeginDay
))
this
.
info
.
workFormalDay
=
t
imestampToTime
(
Number
(
this
.
info
.
workFormalDay
))
this
.
info
.
workBeginDay
=
t
his
.
info
.
workBeginDay
?
timestampToTime
(
Number
(
this
.
info
.
workBeginDay
)):
'
-
'
this
.
info
.
workFormalDay
=
t
his
.
info
.
workFormalDay
?
timestampToTime
(
Number
(
this
.
info
.
workFormalDay
)):
'
-
'
}
})
.
catch
(
err
=>
{
...
...
@@ -124,7 +127,8 @@
data
()
{
return
{
info
:{},
allinfo
:{}
allinfo
:{},
dict
:[]
}
},
created
(){
...
...
attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
View file @
a760226d
...
...
@@ -23,7 +23,6 @@ export default {
},
methods
:
{
afterRender
(
data
)
{
console
.
log
(
data
)
data
.
data
=
handleTree
(
data
.
data
,
"
id
"
,
"
parentId
"
);
console
.
log
(
"
tree data:
"
,
data
.
data
)
this
.
menuOptions
=
data
.
data
;
...
...
@@ -82,7 +81,7 @@ export default {
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
})
;
})
},
/** 重写查看方法 */
toView
(
row
)
{
...
...
attendance-performance-manager-ui/admin/src/views/workman/dialogshow.vue
View file @
a760226d
...
...
@@ -3,15 +3,21 @@
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"90%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-row>
<Field
label=
"部门id号"
prop=
"deptId"
v-model=
"form.deptId"
placeholder=
"请输入部门id号"
/>
<Field
label=
"部门名称"
prop=
"deptName"
v-model=
"form.deptName"
placeholder=
"请输入部门名称"
/>
<Field
label=
"姓名"
prop=
"name"
v-model=
"form.name"
placeholder=
"请输入姓名"
/>
<Field
label=
"工号"
prop=
"number"
v-model=
"form.number"
placeholder=
"请输入工号"
/>
<Field
label=
"电话号码"
prop=
"phone"
v-model=
"form.phone"
placeholder=
"请输入电话号码"
/>
<Field
label=
"照片"
prop=
"photoPath"
v-model=
"form.photoPath"
type=
"textarea"
placeholder=
"请输入照片"
/>
<Field
label=
"姓名"
prop=
"name"
v-model=
"form.name"
placeholder=
"请输入姓名"
/>
<Field
label=
"电话号码"
prop=
"phone"
v-model=
"form.phone"
placeholder=
"请输入电话号码"
/>
<Field
label=
"工号"
prop=
"number"
v-model=
"form.number"
placeholder=
"请输入工号"
/>
</el-row>
<el-form-item
label=
"所属部门"
prop=
"deptId"
>
<el-cascader
v-model=
"deptList"
style=
"width:50%"
@
change=
"cascaderChange"
:options=
"dict.deptId"
clearable
:props=
"
{label:'label',value:'id'}">
</el-cascader>
</el-form-item>
<el-form-item
label=
"照片"
prop=
"photoPath"
>
<ImageUpload
:value=
"form.photoPath"
@
input=
"replaceImage"
></ImageUpload>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button>
...
...
@@ -23,6 +29,7 @@
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
import
{
findParentIds
}
from
"
@/assets/utils/common.js
"
export
default
{
mixins
:
[
form
],
components
:
{
...
...
@@ -40,11 +47,33 @@
],
// 表单校验
rules
:
{
}
};
name
:
[
{
required
:
true
,
message
:
"
请输入姓名
"
,
trigger
:
"
blur
"
},
{
max
:
20
,
message
:
"
最多只能录入20个字符
"
,
trigger
:
"
blur
"
,},
],
phone
:
[
{
required
:
true
,
message
:
"
请输入电话号码
"
,
trigger
:
"
blur
"
},
{
max
:
11
,
message
:
"
最多只能录入个字符
"
,
trigger
:
"
blur
"
,},
]
},
deptList
:[]
}
},
methods
:
{
// formSelect(){
// let treeId = getTreeIds(this.dict.deptId,this.form.deptId)
// },
cascaderChange
(
val
){
if
(
this
.
deptList
.
length
>
0
){
this
.
form
.
deptId
=
this
.
deptList
[
this
.
deptList
.
length
-
1
]
}
else
{
this
.
form
.
deptId
=
''
}
console
.
log
(
this
.
form
.
deptId
,
'
当前选择
'
)
},
replaceImage
(
val
){
this
.
form
.
photoPath
=
val
},
/** 编辑 */
edit
(
row
)
{
this
.
reset
()
...
...
@@ -52,7 +81,7 @@
this
.
urls
.
currUrl
=
"
workman/edit
"
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
this
.
title
=
"
修改工作人员
"
;
this
.
title
=
"
编辑
"
;
},
/** 新增 */
add
(
row
)
{
...
...
@@ -60,7 +89,8 @@
this
.
urls
.
currUrl
=
"
workman/add
"
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
this
.
title
=
"
新增工作人员
"
;
this
.
title
=
"
新增
"
;
},
/** 查看*/
view
(
row
)
{
...
...
@@ -74,14 +104,21 @@
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
this
.
deptList
=
[]
},
/**获取数据后弹框 */
afterRender
(
data
)
{
this
.
open
=
true
;
this
.
deptList
=
findParentIds
(
this
.
dict
.
deptId
,
this
.
form
.
deptId
).
reverse
()
this
.
deptList
=
this
.
deptList
.
concat
(
this
.
form
.
deptId
)
console
.
log
(
this
.
deptList
,
'
ddd
'
)
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
reset
()
this
.
deptList
=
[]
this
.
$emit
(
"
ok
"
);
},
...
...
@@ -89,7 +126,6 @@
reset
()
{
this
.
form
=
{
deptId
:
0
,
deptName
:
""
,
name
:
""
,
number
:
""
,
phone
:
""
,
...
...
@@ -101,7 +137,32 @@
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
}
,
}
,
}
;
}
}
}
</
script
>
<
style
scoped
>
.avatar-uploader
.el-upload
{
border
:
1px
dashed
#d9d9d9
;
border-radius
:
6px
;
cursor
:
pointer
;
position
:
relative
;
overflow
:
hidden
;
}
.avatar-uploader
.el-upload
:hover
{
border-color
:
#409EFF
;
}
.avatar-uploader-icon
{
font-size
:
28px
;
color
:
#8c939d
;
width
:
178px
;
height
:
178px
;
line-height
:
178px
;
text-align
:
center
;
}
.avatar
{
width
:
178px
;
height
:
178px
;
display
:
block
;
}
</
style
>
attendance-performance-manager-ui/admin/src/views/workman/list.vue
View file @
a760226d
<
template
>
<div
class=
"page"
>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
>
</LayoutTable>
<LayoutTable
:data=
"tableData"
:config=
"tableConfig"
></LayoutTable>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</div>
</
template
>
...
...
@@ -38,6 +35,7 @@
data
()
{
return
{
config
:
{
isshowTabPane
:
true
,
search
:
[
{
name
:
"
name
"
,
...
...
@@ -58,7 +56,7 @@
{
label
:
"
电话号码
"
,
prop
:
"
phone
"
},
{
label
:
"
照片
"
,
prop
:
"
photoPath
"
},
{
label
:
"
照片
"
,
prop
:
"
photoPath
"
,
formatter
:
this
.
formatterPic
},
{
label
:
"
创建时间
"
,
prop
:
"
createTime
"
,
formatter
:
this
.
formatterDate
},
{
...
...
@@ -66,7 +64,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/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
View file @
a760226d
This diff is collapsed.
Click to expand it.
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/service/DeptService.java
View file @
a760226d
...
...
@@ -49,13 +49,7 @@ public interface DeptService extends ICRUDService<DeptEntity,Long>{
*/
List
<
DeptTreeSelect
>
getListByParentId
(
Long
parentId
,
Context
context
);
/**
* 查询部门人数
* */
DeptEntity
queryDept
(
String
deptCode
);
DeptEntity
queryParent
(
String
parentCode
);
int
queryParentId
(
Long
deptId
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/service/impl/DeptServiceImpl.java
View file @
a760226d
...
...
@@ -191,15 +191,7 @@ public class DeptServiceImpl extends AbstractCRUDServiceImpl<DeptDao, DeptEntity
return
collect
;
}
@Override
public
DeptEntity
queryDept
(
String
deptCode
)
{
return
dao
.
queryDept
(
deptCode
);
}
@Override
public
DeptEntity
queryParent
(
String
parentCode
)
{
return
dao
.
queryDeptParient
(
parentCode
);
}
@Override
public
int
queryParentId
(
Long
deptId
)
{
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
View file @
a760226d
...
...
@@ -4,7 +4,6 @@ import com.mortals.framework.exception.AppException;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.job.model.JobQuery
;
import
com.mortals.xhx.module.job.service.JobService
;
...
...
@@ -102,23 +101,4 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
}
@Override
protected
int
saveAfter
(
StaffEntity
entity
,
Map
<
String
,
Object
>
model
,
Context
context
)
throws
AppException
{
//统计当前部门
DeptEntity
deptEntity
=
deptService
.
get
(
entity
.
getDeptId
());
int
personNumcount
=
service
.
queryDeptNum
(
entity
.
getDeptId
());
deptEntity
.
setPersonNum
(
personNumcount
);
deptService
.
update
(
deptEntity
);
//统计上级部门
int
personNumId
=
deptService
.
queryParentId
(
entity
.
getDeptId
());
if
(
personNumId
!=
0
){
DeptEntity
deptEntity1
=
deptService
.
get
(
entity
.
getDeptId
());
int
personParentNumcount
=
service
.
queryDeptNum
(
deptEntity1
.
getParentId
());
deptEntity1
.
setPersonNum
(
personParentNumcount
);
deptService
.
update
(
deptEntity1
);
}
return
super
.
saveAfter
(
entity
,
model
,
context
);
}
}
\ No newline at end of file
attendance-performance-manager/src/test/java/com/mortals/httpclient/dept/DeptController.http
View file @
a760226d
...
...
@@ -13,18 +13,18 @@ client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###
职位
信息列表
###
部门
信息列表
POST {{baseUrl}}/dept/list
Authorization: {{authToken}}
Content-Type: application/json
{
"page":1,
"size":
1
0
"size":
3
0
}
###
职位
信息更新与保存
###
部门
信息更新与保存
POST {{baseUrl}}/dept/save
Authorization: {{authToken}}
Content-Type: application/json
...
...
@@ -41,18 +41,18 @@ Content-Type: application/json
client.global.set("Dept_id", JSON.parse(response.body).data.id);
%}
###
职位
信息查看
###
部门
信息查看
GET {{baseUrl}}/dept/info?id=1
Authorization: {{authToken}}
Accept: application/json
###
职位
信息编辑
###
部门
信息编辑
GET {{baseUrl}}/dept/edit?id={{Job_id}}
Authorization: {{authToken}}
Accept: application/json
###
职位
信息删除
###
部门
信息删除
GET {{baseUrl}}/dept/delete?id={{Job_id}}
Authorization: {{authToken}}
Accept: application/json
...
...
attendance-performance-manager/src/test/java/com/mortals/httpclient/job/JobController.http
View file @
a760226d
...
...
@@ -19,9 +19,6 @@ Authorization: {{authToken}}
Content-Type: application/json
{
"groupName":"7knq8z",
"jobCode":"mmnj82",
"jobName":"z8f2k5",
"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