Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jilinzhongdianrenqun-web
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
吴超
jilinzhongdianrenqun-web
Commits
d3c15121
Commit
d3c15121
authored
Dec 25, 2025
by
zhangtw
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
78fbc068
3a9e709f
全部展开
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
300 行增加
和
99 行删除
+300
-99
src/api/key-dm-stats.js
+0
-35
src/api/key-dm-user.js
+18
-0
src/api/key-dm.js
+50
-49
src/view/key-person/key_dm_conf/dates.js
+42
-0
src/view/key-person/key_dm_conf/index.vue
+0
-0
src/view/key-person/key_dm_inventory/stats.vue
+49
-15
src/view/key-person/key_dm_user/userMultiSelector.vue
+141
-0
没有找到文件。
src/api/key-dm-stats.js
deleted
100644 → 0
View file @
78fbc068
import
axios
from
'@/libs/api.request'
// 使用统计
export
const
getUsageStats
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmStats/selectUsageStats'
,
method
:
'post'
,
data
:
param
})
}
export
const
getUsageDetails
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmStats/selectUsageDetails'
,
method
:
'post'
,
data
:
param
})
}
// 工作量统计
export
const
getWorkloadStats
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadStats'
,
method
:
'post'
,
data
:
param
})
}
export
const
getWorkloadDetails
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadDetails'
,
method
:
'post'
,
data
:
param
})
}
src/api/key-dm-user.js
View file @
d3c15121
...
@@ -26,3 +26,21 @@ export const saveDmUser = (param) => {
...
@@ -26,3 +26,21 @@ export const saveDmUser = (param) => {
data
:
param
data
:
param
})
})
}
}
// 获取人员选择器列表(根据机构和权限过滤)
export
const
getUserSelectorList
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUser/selectUserSelectorList'
,
method
:
'post'
,
data
:
param
})
}
// 获取人员多选器列表(所有在职人员)
export
const
getUserMultiSelectorList
=
(
param
)
=>
{
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUser/selectUserMultiSelectorList'
,
method
:
'post'
,
data
:
param
})
}
src/api/key-dm.js
View file @
d3c15121
import
axios
from
'@/libs/api.request'
import
axios
from
'@/libs/api.request'
// ===== 人员
分类管理
=====
// ===== 人员
权限配置
=====
export
const
get
UserCategoryList
=
(
param
)
=>
{
export
const
get
PermissionConfigList
=
(
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/selectList'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/selectPermissionConfigList'
,
method
:
'post'
,
method
:
'post'
data
:
param
})
})
}
}
export
const
save
UserCategory
=
(
param
)
=>
{
export
const
save
PermissionUsers
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/save'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/save
PermissionUsers
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
deleteUserCategory
=
(
param
)
=>
{
// ===== 请假类型管理 =====
export
const
getLeaveTypeList
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/
delete
'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/
selectLeaveTypeList
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
findUserCategoryList
=
(
param
)
=>
{
export
const
saveLeaveType
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/
findList
'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory/
saveLeaveType
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
// ===== 人员分类权限管理 =====
export
const
deleteLeaveType
=
(
param
)
=>
{
export
const
getUserCategoryPermissionList
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory
Permission/selectList
'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory
/deleteLeaveType
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
saveUserCategoryPermission
=
(
param
)
=>
{
export
const
findLeaveTypeList
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory
Permission/save
'
,
url
:
'/api/ac/jilinsscgsdp/keyDmUserCategory
/findLeaveTypeList
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
// =====
请假类型
管理 =====
// =====
办公用品分类
管理 =====
export
const
get
LeaveType
List
=
(
param
)
=>
{
export
const
get
MaterialCategory
List
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
LeaveType/select
List'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/selectMaterialCategory
List'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
save
LeaveType
=
(
param
)
=>
{
export
const
save
MaterialCategory
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
LeaveType/save
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/saveMaterialCategory
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
delete
LeaveType
=
(
param
)
=>
{
export
const
delete
MaterialCategory
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
LeaveType/delete
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/deleteMaterialCategory
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
find
LeaveType
List
=
(
param
)
=>
{
export
const
find
MaterialCategory
List
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
LeaveType/find
List'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/findMaterialCategory
List'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
// ===== 办公用品
分类
管理 =====
// ===== 办公用品管理 =====
export
const
getMaterial
Category
List
=
(
param
)
=>
{
export
const
getMaterialList
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
MaterialCategory/select
List'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/selectMaterial
List'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
saveMaterial
Category
=
(
param
)
=>
{
export
const
saveMaterial
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
MaterialCategory/save
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/saveMaterial
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
deleteMaterial
Category
=
(
param
)
=>
{
export
const
deleteMaterial
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
MaterialCategory/delete
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/deleteMaterial
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
findMaterialCategoryList
=
(
param
)
=>
{
// 导入物料(Excel)
export
const
importMaterial
=
(
formData
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
MaterialCategory/findList
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/importMaterial
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
formData
})
})
}
}
//
===== 办公用品管理 =====
//
下载物料导入模板
export
const
getMaterialList
=
(
param
)
=>
{
export
const
materialTemplateDownload
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
Material/selectList
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
UserCategory/templateDownload
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
saveMaterial
=
(
param
)
=>
{
// --统计部分---------------------------------------------------------------------------------------------
// 使用统计
export
const
getUsageStats
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
Material/save
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
Stats/selectUsageStats
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
export
const
deleteMaterial
=
(
param
)
=>
{
export
const
getUsageDetails
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
Material/delete
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
Stats/selectUsageDetails
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
}
}
//
导入物料(Excel)
//
工作量统计
export
const
importMaterial
=
(
formData
)
=>
{
export
const
getWorkloadStats
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
Material/import
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
Stats/selectWorkloadStats
'
,
method
:
'post'
,
method
:
'post'
,
data
:
formData
data
:
param
})
})
}
}
// 下载物料导入模板
export
const
getWorkloadDetails
=
(
param
)
=>
{
export
const
materialTemplateDownload
=
(
param
)
=>
{
return
axios
.
request
({
return
axios
.
request
({
url
:
'/api/ac/jilinsscgsdp/keyDm
Material/templateDownload
'
,
url
:
'/api/ac/jilinsscgsdp/keyDm
Stats/selectWorkloadDetails
'
,
method
:
'post'
,
method
:
'post'
,
data
:
param
data
:
param
})
})
...
...
src/view/key-person/key_dm_conf/dates.js
0 → 100644
View file @
d3c15121
/* eslint-disable */
export
function
normalizeVisitTimeValue
(
value
)
{
if
(
!
value
&&
value
!==
0
)
return
''
if
(
value
instanceof
Date
)
{
return
Number
.
isNaN
(
value
.
getTime
())
?
''
:
formatDateSegments
(
value
)
}
if
(
typeof
value
===
'number'
&&
!
Number
.
isNaN
(
value
))
{
const
fromNumber
=
new
Date
(
value
)
return
Number
.
isNaN
(
fromNumber
.
getTime
())
?
''
:
formatDateSegments
(
fromNumber
)
}
if
(
typeof
value
===
'string'
)
{
const
trimmed
=
value
.
trim
()
if
(
!
trimmed
)
return
''
const
direct
=
new
Date
(
trimmed
)
if
(
!
Number
.
isNaN
(
direct
.
getTime
()))
return
formatDateSegments
(
direct
)
const
withSlash
=
new
Date
(
trimmed
.
replace
(
/-/g
,
'/'
))
if
(
!
Number
.
isNaN
(
withSlash
.
getTime
()))
return
formatDateSegments
(
withSlash
)
const
match
=
trimmed
.
match
(
/^
(\d{4})
-
(\d{2})
-
(\d{2})(?:[
T
](\d{2})
:
(\d{2})(?:
:
(\d{2}))?)?
$/
)
if
(
match
)
{
const
[,
y
,
m
,
d
,
hh
=
'00'
,
mm
=
'00'
,
ss
=
'00'
]
=
match
return
`
${
y
}
-
${
m
}
-
${
d
}
${
hh
}
:
${
mm
}
:
${
ss
}
`
}
return
''
}
if
(
value
&&
typeof
value
===
'object'
&&
typeof
value
.
valueOf
===
'function'
)
{
const
timestamp
=
value
.
valueOf
()
if
(
!
Number
.
isNaN
(
timestamp
))
{
const
fromValue
=
new
Date
(
timestamp
)
return
Number
.
isNaN
(
fromValue
.
getTime
())
?
''
:
formatDateSegments
(
fromValue
)
}
}
return
''
}
function
formatDateSegments
(
d
)
{
const
y
=
d
.
getFullYear
()
const
mm
=
String
(
d
.
getMonth
()
+
1
).
padStart
(
2
,
'0'
)
const
dd
=
String
(
d
.
getDate
()).
padStart
(
2
,
'0'
)
const
HH
=
String
(
d
.
getHours
()).
padStart
(
2
,
'0'
)
const
MM
=
String
(
d
.
getMinutes
()).
padStart
(
2
,
'0'
)
const
SS
=
String
(
d
.
getSeconds
()).
padStart
(
2
,
'0'
)
return
`
${
y
}
-
${
mm
}
-
${
dd
}
${
HH
}
:
${
MM
}
:
${
SS
}
`
}
src/view/key-person/key_dm_conf/index.vue
View file @
d3c15121
差异被折叠。
点击展开。
src/view/key-person/key_dm_inventory/stats.vue
View file @
d3c15121
...
@@ -51,16 +51,15 @@
...
@@ -51,16 +51,15 @@
<!-- 使用明细弹窗 -->
<!-- 使用明细弹窗 -->
<Modal
v-model=
"detailModal.visible"
title=
"明细"
width=
"800"
>
<Modal
v-model=
"detailModal.visible"
title=
"明细"
width=
"800"
>
<Table
:data=
"detailModal.rows"
size=
"small"
border
>
<Table
:data=
"detailModal.rows"
:columns=
"detailModal.columns"
size=
"small"
border
/>
<TableColumn
v-for=
"col in detailModal.columns"
:key=
"col.key"
:prop=
"col.key"
:title=
"col.title"
/>
</Table>
<div
slot=
"footer"
><Button
type=
"primary"
@
click=
"detailModal.visible=false"
>
关闭
</Button></div>
<div
slot=
"footer"
><Button
type=
"primary"
@
click=
"detailModal.visible=false"
>
关闭
</Button></div>
</Modal>
</Modal>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
getUsageStats
,
getUsageDetails
,
getWorkloadStats
,
getWorkloadDetails
}
from
'@/api/key-dm-stats'
import
{
getUsageStats
,
getUsageDetails
,
getWorkloadStats
,
getWorkloadDetails
}
from
'@/api/key-dm'
import
{
normalizeVisitTimeValue
}
from
'@/view/key-person/key_dm_conf/dates.js'
export
default
{
export
default
{
name
:
'key-dm-stats-index'
,
name
:
'key-dm-stats-index'
,
...
@@ -91,48 +90,83 @@ export default {
...
@@ -91,48 +90,83 @@ export default {
{
title
:
'请假时长(天)'
,
key
:
'leave_duration'
,
align
:
'center'
},
{
title
:
'请假时长(天)'
,
key
:
'leave_duration'
,
align
:
'center'
},
{
title
:
'操作'
,
slot
:
'action'
,
width
:
160
,
align
:
'center'
}
{
title
:
'操作'
,
slot
:
'action'
,
width
:
160
,
align
:
'center'
}
],
],
detailModal
:
{
visible
:
false
,
rows
:
[],
columns
:
[]
}
detailModal
:
{
visible
:
false
,
rows
:
[],
columns
:
[]
}
}
}
},
},
created
()
{
this
.
loadUsage
()
},
methods
:
{
methods
:
{
handleTabChange
(
name
)
{
handleTabChange
(
name
)
{
this
.
activeTab
=
name
this
.
activeTab
=
name
if
(
name
===
'usage'
)
{
this
.
loadUsage
()
}
else
{
this
.
loadWorkload
()
}
},
},
loadUsage
()
{
loadUsage
()
{
this
.
loading
.
usage
=
true
this
.
loading
.
usage
=
true
const
params
=
{
start
:
this
.
usageStart
,
end
:
this
.
usageEnd
,
material
:
this
.
usageMaterial
}
const
st
=
this
.
usageStart
?
normalizeVisitTimeValue
(
this
.
usageStart
)
:
null
getUsageStats
({
params
}).
then
(
ret
=>
{
const
et
=
this
.
usageEnd
?
normalizeVisitTimeValue
(
this
.
usageEnd
)
:
null
const
params
=
{
start
:
st
,
end
:
et
,
material
:
this
.
usageMaterial
}
getUsageStats
(
params
).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
tables
.
usage
=
ret
.
data
.
data
||
[]
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
tables
.
usage
=
ret
.
data
.
data
||
[]
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
}).
finally
(()
=>
{
this
.
loading
.
usage
=
false
})
}).
finally
(()
=>
{
this
.
loading
.
usage
=
false
})
},
},
resetUsage
()
{
this
.
usageStart
=
null
;
this
.
usageEnd
=
null
;
this
.
usageMaterial
=
''
;
this
.
tables
.
usage
=
[]
},
resetUsage
()
{
this
.
usageStart
=
null
;
this
.
usageEnd
=
null
;
this
.
usageMaterial
=
''
;
this
.
tables
.
usage
=
[]
},
openUsageDetail
(
row
)
{
openUsageDetail
(
row
)
{
this
.
detailModal
.
columns
=
[{
key
:
'user_name'
,
title
:
'人员'
},
{
key
:
'quantity'
,
title
:
'数量'
},
{
key
:
'material_name'
,
title
:
'物料'
},
{
key
:
'department_name'
,
title
:
'部门'
}]
this
.
detailModal
.
columns
=
[
{
title
:
'部门'
,
key
:
'department_name'
,
align
:
'center'
},
{
title
:
'人员'
,
key
:
'user_name'
,
align
:
'center'
},
{
title
:
'物料'
,
key
:
'material_name'
,
align
:
'center'
},
{
title
:
'申请数量'
,
key
:
'apply_quantity'
,
align
:
'center'
},
{
title
:
'已归还数量'
,
key
:
'returned_quantity'
,
align
:
'center'
}
]
this
.
detailModal
.
visible
=
true
this
.
detailModal
.
visible
=
true
getUsageDetails
({
params
:
{
start
:
this
.
usageStart
,
end
:
this
.
usageEnd
,
material
:
this
.
usageMaterial
,
department
:
row
.
department_id
}
}).
then
(
ret
=>
{
const
st
=
this
.
usageStart
?
normalizeVisitTimeValue
(
this
.
usageStart
)
:
null
const
et
=
this
.
usageEnd
?
normalizeVisitTimeValue
(
this
.
usageEnd
)
:
null
getUsageDetails
({
start
:
st
,
end
:
et
,
material
:
row
.
material_id
,
department
:
row
.
department_id
}).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[]
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[]
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
})
})
},
},
loadWorkload
()
{
loadWorkload
()
{
this
.
loading
.
workload
=
true
this
.
loading
.
workload
=
true
const
params
=
{
start
:
this
.
workStart
,
end
:
this
.
workEnd
}
const
st
=
this
.
workStart
?
normalizeVisitTimeValue
(
this
.
workStart
)
:
null
getWorkloadStats
({
params
}).
then
(
ret
=>
{
const
et
=
this
.
workEnd
?
normalizeVisitTimeValue
(
this
.
workEnd
)
:
null
const
params
=
{
start
:
st
,
end
:
et
}
getWorkloadStats
(
params
).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
tables
.
workload
=
ret
.
data
.
data
||
[]
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
this
.
tables
.
workload
=
ret
.
data
.
data
||
[]
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
}).
finally
(()
=>
{
this
.
loading
.
workload
=
false
})
}).
finally
(()
=>
{
this
.
loading
.
workload
=
false
})
},
},
resetWorkload
()
{
this
.
workStart
=
null
;
this
.
workEnd
=
null
;
this
.
tables
.
workload
=
[]
},
resetWorkload
()
{
this
.
workStart
=
null
;
this
.
workEnd
=
null
;
this
.
tables
.
workload
=
[]
},
openWorkloadDetail
(
row
,
type
)
{
openWorkloadDetail
(
row
,
type
)
{
const
st
=
this
.
workStart
?
normalizeVisitTimeValue
(
this
.
workStart
)
:
null
const
et
=
this
.
workEnd
?
normalizeVisitTimeValue
(
this
.
workEnd
)
:
null
if
(
type
===
'leave'
)
{
if
(
type
===
'leave'
)
{
this
.
detailModal
.
columns
=
[{
key
:
'user_name'
,
title
:
'人员'
},
{
key
:
'start_time'
,
title
:
'开始'
},
{
key
:
'end_time'
,
title
:
'结束'
},
{
key
:
'duration'
,
title
:
'时长'
}]
this
.
detailModal
.
columns
=
[
getWorkloadDetails
({
params
:
{
user_id
:
row
.
user_id
,
start
:
this
.
workStart
,
end
:
this
.
workEnd
,
type
:
'leave'
}
}).
then
(
ret
=>
{
{
title
:
'人员'
,
key
:
'user_name'
,
align
:
'center'
},
{
title
:
'开始'
,
key
:
'start_time'
,
align
:
'center'
},
{
title
:
'结束'
,
key
:
'end_time'
,
align
:
'center'
},
{
title
:
'时长'
,
key
:
'duration'
,
align
:
'center'
}
]
getWorkloadDetails
({
user_id
:
row
.
user_id
,
start
:
st
,
end
:
et
,
type
:
'leave'
}).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
{
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[];
this
.
detailModal
.
visible
=
true
}
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
{
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[];
this
.
detailModal
.
visible
=
true
}
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
})
})
}
else
{
}
else
{
this
.
detailModal
.
columns
=
[{
key
:
'application_no'
,
title
:
'申请单号'
},
{
key
:
'material_name'
,
title
:
'物料'
},
{
key
:
'apply_quantity'
,
title
:
'数量'
}]
this
.
detailModal
.
columns
=
[
getWorkloadDetails
({
params
:
{
user_id
:
row
.
user_id
,
start
:
this
.
workStart
,
end
:
this
.
workEnd
,
type
:
'inventory'
}
}).
then
(
ret
=>
{
{
title
:
'申请单号'
,
key
:
'application_no'
,
align
:
'center'
},
{
title
:
'物料'
,
key
:
'material_name'
,
align
:
'center'
},
{
title
:
'数量'
,
key
:
'apply_quantity'
,
align
:
'center'
}
]
getWorkloadDetails
({
user_id
:
row
.
user_id
,
start
:
st
,
end
:
et
,
type
:
'inventory'
}).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
{
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[];
this
.
detailModal
.
visible
=
true
}
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
{
this
.
detailModal
.
rows
=
ret
.
data
.
data
||
[];
this
.
detailModal
.
visible
=
true
}
else
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
})
})
}
}
...
...
src/view/key-person/key_dm_user/userMultiSelector.vue
0 → 100644
View file @
d3c15121
<
template
>
<Modal
v-model=
"visible"
title=
"选择人员"
width=
"900"
:mask-closable=
"false"
>
<div
class=
"search-div"
>
<Row
type=
"flex"
:gutter=
"16"
align=
"middle"
>
<Col
:span=
"12"
>
<span>
姓名:
</span>
<Input
v-model=
"filters.name"
placeholder=
"请输入姓名"
@
on-enter=
"handleSearch"
/>
</Col>
<Col
:span=
"12"
class=
"text-right"
>
<Button
type=
"primary"
class=
"mr10"
@
click=
"handleSearch"
>
搜索
</Button>
<Button
@
click=
"handleReset"
>
重置
</Button>
</Col>
</Row>
</div>
<Table
:data=
"rows"
:loading=
"loading"
:columns=
"columns"
@
on-selection-change=
"onSelectionChange"
border
/>
<Page
class=
"page_style"
:total=
"pager.totalRecord"
:current=
"pager.pageNo"
:page-size=
"pager.pageSize"
show-total
show-sizer
@
on-change=
"pageChange"
@
on-page-size-change=
"sizeChange"
/>
<div
slot=
"footer"
>
<Button
@
click=
"handleCancel"
>
取消
</Button>
<Button
type=
"primary"
:loading=
"confirming"
@
click=
"handleConfirm"
>
确定(
{{
selectedRows
.
length
}}
)
</Button>
</div>
</Modal>
</
template
>
<
script
>
import
{
getUserMultiSelectorList
}
from
'@/api/key-dm-user'
export
default
{
name
:
'user-multi-selector'
,
props
:
{
// v-model: value 控制显示
value
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
visibleInternal
:
false
,
filters
:
{
name
:
''
},
rows
:
[],
loading
:
false
,
pager
:
{
pageNo
:
1
,
pageSize
:
10
,
totalRecord
:
0
},
selectedRows
:
[],
confirming
:
false
,
columns
:
[
{
type
:
'selection'
,
width
:
60
,
align
:
'center'
},
{
title
:
'姓名'
,
key
:
'name'
,
align
:
'center'
,
minWidth
:
100
},
{
title
:
'工号'
,
key
:
'gh'
,
align
:
'center'
,
minWidth
:
120
},
{
title
:
'邮箱'
,
key
:
'email'
,
align
:
'center'
,
minWidth
:
150
},
{
title
:
'电话'
,
key
:
'phone'
,
align
:
'center'
,
minWidth
:
120
},
{
title
:
'手机'
,
key
:
'mobile'
,
align
:
'center'
,
minWidth
:
120
},
{
title
:
'归属部门'
,
key
:
'office_name'
,
align
:
'center'
,
minWidth
:
150
}
]
}
},
computed
:
{
visible
:
{
get
()
{
return
this
.
value
},
set
(
v
)
{
this
.
$emit
(
'input'
,
v
)
}
}
},
watch
:
{
visible
(
v
)
{
if
(
v
)
{
this
.
pager
.
pageNo
=
1
this
.
selectedRows
=
[]
this
.
filters
.
name
=
''
this
.
fetchList
()
}
}
},
methods
:
{
fetchList
()
{
this
.
loading
=
true
const
payload
=
{
pageNo
:
this
.
pager
.
pageNo
,
pageSize
:
this
.
pager
.
pageSize
,
params
:
this
.
filters
}
getUserMultiSelectorList
(
payload
).
then
(
ret
=>
{
if
(
ret
.
data
&&
ret
.
data
.
errcode
===
0
)
{
const
data
=
ret
.
data
.
data
||
{}
this
.
rows
=
data
.
results
||
[]
this
.
pager
.
totalRecord
=
data
.
totalRecord
||
0
}
else
{
this
.
$Notice
.
error
({
title
:
'查询失败'
,
desc
:
ret
.
data
&&
ret
.
data
.
errmsg
})
}
}).
finally
(()
=>
{
this
.
loading
=
false
})
},
handleSearch
()
{
this
.
pager
.
pageNo
=
1
this
.
fetchList
()
},
handleReset
()
{
this
.
filters
=
{
name
:
''
}
this
.
pager
.
pageNo
=
1
this
.
fetchList
()
},
pageChange
(
pageNo
)
{
this
.
pager
.
pageNo
=
pageNo
this
.
fetchList
()
},
sizeChange
(
size
)
{
this
.
pager
.
pageSize
=
size
this
.
pager
.
pageNo
=
1
this
.
fetchList
()
},
onSelectionChange
(
list
)
{
this
.
selectedRows
=
list
||
[]
},
handleCancel
()
{
this
.
$emit
(
'cancel'
)
this
.
$emit
(
'input'
,
false
)
},
handleConfirm
()
{
if
(
this
.
selectedRows
.
length
===
0
)
{
this
.
$Message
.
warning
(
'请先选择人员'
)
return
}
this
.
confirming
=
true
// emit selected users to parent
this
.
$emit
(
'on-ok'
,
this
.
selectedRows
)
this
.
$emit
(
'input'
,
false
)
this
.
confirming
=
false
}
}
}
</
script
>
<
style
scoped
>
.search-div
{
border
:
1px
solid
#dce1e7
;
padding
:
12px
;
margin-bottom
:
12px
;
background-color
:
#f8fbff
;
}
.mr10
{
margin-right
:
10px
;
}
.page_style
{
margin-top
:
12px
;
text-align
:
right
;
}
.text-right
{
text-align
:
right
;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论