Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
saas-manage
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chehuidong
saas-manage
Commits
b3757ded
Commit
b3757ded
authored
Feb 10, 2023
by
chehuidong
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'taskManage' into 'dev'
Task manage See merge request
!4
parents
7cab68d9
3e16bd15
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
256 additions
and
819 deletions
+256
-819
src/common/components/element-ui.js
+8
-6
src/common/style/index.scss
+2
-1
src/views/saasManage/indexPage.vue
+5
-2
src/views/taskManage/index.vue
+241
-810
No files found.
src/common/components/element-ui.js
View file @
b3757ded
...
...
@@ -24,6 +24,7 @@ import {
MenuItemGroup
,
Tag
,
Checkbox
,
Tree
,
}
from
'element-ui'
const
components
=
[
...
...
@@ -47,6 +48,7 @@ const components = [
MenuItemGroup
,
Tag
,
Checkbox
,
Tree
,
]
export
default
{
...
...
@@ -58,13 +60,13 @@ export default {
Vue
.
prototype
.
$message
=
(
message
)
=>
typeof
message
===
'string'
?
Message
({
duration
:
2500
,
message
,
})
duration
:
2500
,
message
,
})
:
Message
({
duration
:
2500
,
...
message
,
})
duration
:
2500
,
...
message
,
})
Vue
.
prototype
.
$message
.
success
=
(
message
)
=>
typeof
message
===
'string'
?
Message
.
success
({
duration
:
2500
,
message
})
...
...
src/common/style/index.scss
View file @
b3757ded
...
...
@@ -63,7 +63,8 @@
}
.pagination
{
text-align
:
center
;
padding-top
:
10px
;
padding-top
:
5px
;
padding-bottom
:
5px
;
}
.icon-view
{
font-size
:
18px
;
...
...
src/views/saasManage/indexPage.vue
View file @
b3757ded
...
...
@@ -275,7 +275,9 @@
@
change=
"onChange"
placeholder=
"请输入域名"
>
<
template
slot=
"append"
>
.jomalls.com
</
template
>
<
template
slot=
"append"
>
{{
baseDomain
}}
</
template
>
</el-input>
</el-form-item>
<el-form-item
...
...
@@ -549,6 +551,7 @@ export default {
selection
:
[],
cloneEditForm
:
{},
loading
:
false
,
baseDomain
:
'.jomalls.com'
,
}
},
async
created
()
{
...
...
@@ -627,7 +630,7 @@ export default {
this
.
editForm
.
databaseName
=
'saas_'
+
this
.
editForm
.
databaseName
this
.
editForm
.
domain
=
this
.
editForm
.
domain
+
'.joshine.cn'
this
.
editForm
.
domain
+
this
.
baseDomain
try
{
if
(
this
.
editId
)
{
const
res
=
await
updateManageData
(
this
.
editForm
)
...
...
src/views/taskManage/index.vue
View file @
b3757ded
...
...
@@ -6,8 +6,26 @@
* @LastEditTime: 2020-11-18 09:25:23
-->
<
template
>
<div
class=
"wrap"
style=
"padding-top: 0"
>
<div
class=
"top_wrap"
>
<div
class=
"wraper"
>
<div
class=
"page_left"
>
<el-tree
:data=
"treeData"
:props=
"defaultProps"
highlight-current
:node-key=
"'continentCode'"
current-node-key=
""
@
node-click=
"handleNodeClick"
>
<span
class=
"custom-tree-node"
slot-scope=
"
{ node, data }"
>
<span
v-html=
"node.label"
></span>
<span>
(
{{
data
.
quantity
}}
)
</span>
</span>
</el-tree>
</div>
<div
class=
"page_right"
>
<el-form
v-show=
"is_tab == 1"
:model=
"searchForm"
...
...
@@ -17,41 +35,13 @@
ref=
"form"
class=
"search_form"
>
<el-form-item
label=
""
>
<el-select
style=
"width: 80px"
v-model=
"searchForm.timeProp"
value-key=
""
placeholder=
"时间类型"
clearable
filterable
>
<el-option
label=
"创建时间"
value=
"create_time"
></el-option>
<el-option
label=
"开始时间"
value=
"start_time"
></el-option>
<el-option
label=
"预计完成"
value=
"planned_completion_time"
></el-option>
<el-option
label=
"实际完成"
value=
"actual_completion_time"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-form-item
label=
"创建时间"
>
<choose-time-period
@
change=
"getStatusTree"
v-model=
"periodTime"
></choose-time-period>
</el-form-item>
<el-form-item
label=
"
任务
编号"
>
<el-form-item
label=
"
工单
编号"
>
<el-input
style=
"width: 120px"
v-model=
"searchForm.taskNumber"
...
...
@@ -59,7 +49,7 @@
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"
任务
类型"
>
<el-form-item
label=
"
工单
类型"
>
<el-select
v-model=
"searchForm.taskType"
style=
"width: 120px"
...
...
@@ -76,7 +66,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"
任务
标题"
>
<el-form-item
label=
"
工单
标题"
>
<el-input
style=
"width: 120px"
v-model=
"searchForm.taskTitle"
...
...
@@ -113,7 +103,7 @@
查询
</el-button>
</el-form-item>
<el-form-item
label
>
<
!--
<
el-form-item
label
>
<el-button
@
click=
"showEdit()"
type=
"success"
...
...
@@ -121,7 +111,7 @@
>
新增
</el-button>
</el-form-item>
</el-form-item>
-->
<el-form-item
label
v-if=
"statusCode === '8'"
>
<el-button
@
click=
"archive()"
...
...
@@ -131,52 +121,28 @@
归档
</el-button>
</el-form-item>
<el-form-item
label
>
<el-checkbox
v-model=
"assignMe"
>
抄送给我
</el-checkbox>
</el-form-item>
</el-form>
</div>
<div
class=
"page_content"
>
<div
style=
"
min-width: 150px;
margin-top: -10px;
padding-top: -10px;
"
>
<status-list
:defauntIndex=
"defauntIndex"
:statuslist=
"statusTree"
:isHide=
"true"
@
statusChange=
"handleNodeClick"
></status-list>
<div
class=
"table-wrap"
>
<table-view
:tableColumns=
"tableColumns"
:sourceData=
"sourceData"
:selectionChange=
"selectionChange"
></table-view>
</div>
<div
style=
"flex: 1; overflow: hidden"
>
<div
class=
"table-wrap"
>
<table-view
:tableColumns=
"tableColumns"
:sourceData=
"sourceData"
:selectionChange=
"selectionChange"
></table-view>
</div>
<div
class=
"pagination"
>
<el-pagination
layout=
"sizes, total, prev, pager, next, jumper"
background
:total=
"total"
:page-size=
"pageSize"
:current-page=
"currentPage"
@
size-change=
"sizeChange"
@
current-change=
"onCurrentChange"
>
</el-pagination>
</div>
<div
class=
"pagination"
>
<el-pagination
layout=
"sizes, total, prev, pager, next, jumper"
background
:total=
"total"
:page-size=
"pageSize"
:current-page=
"currentPage"
@
size-change=
"sizeChange"
@
current-change=
"onCurrentChange"
>
</el-pagination>
</div>
</div>
<!-- 编辑 -->
<edit
:editDialog
.
sync=
"editDialog"
...
...
@@ -188,140 +154,7 @@
:employee=
"deptStaff"
ref=
"edit"
></edit>
<!-- 验收 -->
<el-dialog
:title=
"statusCode === '8' ? '评价' : '验收'"
:close-on-click-modal=
"false"
:visible
.
sync=
"commentsVisible"
width=
"30%"
>
<el-form
:model=
"commentsForm"
size=
"mini"
ref=
"commentsForm"
label-width=
"80px"
>
<el-form-item
label=
"验收结果"
v-if=
"statusCode !== '8'"
>
<el-radio
v-model=
"commentsForm.taskRating"
:label=
"true"
>
通过
</el-radio>
<el-radio
v-model=
"commentsForm.taskRating"
:label=
"false"
>
不通过
</el-radio>
</el-form-item>
<el-form-item
label=
"评星"
v-if=
"
statusCode !== '8' && commentsForm.taskRating
"
>
<el-rate
v-model=
"commentsForm.score"
style=
"margin-top: 3px"
show-text
:texts=
"[
'非常糟糕',
'不满意',
'一般',
'满意',
'非常满意',
]"
:colors=
"['#99A9BF', '#FFCC00', '#FF9900']"
></el-rate>
</el-form-item>
<el-form-item
label=
"评星"
v-if=
"statusCode == '8'"
>
<el-rate
v-model=
"commentsForm.score"
style=
"margin-top: 3px"
show-text
:texts=
"[
'非常糟糕',
'不满意',
'一般',
'满意',
'非常满意',
]"
:colors=
"['#99A9BF', '#FFCC00', '#FF9900']"
></el-rate>
</el-form-item>
<el-form-item
label=
"评价"
v-if=
"
statusCode !== '8' &&
(commentsForm.score
<
'
4
'
||
commentsForm
.
taskRating =
=
false
)
"
>
<el-input
type=
"textarea"
:rows=
"4"
placeholder=
"请输入内容"
v-model=
"commentsForm.taskEvaluation"
></el-input>
</el-form-item>
<el-form-item
label=
"描述"
v-if=
"
statusCode !== '8' && commentsForm.score > '3'
"
>
<el-input
type=
"textarea"
:rows=
"4"
placeholder=
"请输入内容"
v-model=
"commentsForm.description"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
>
<el-button
size=
"mini"
@
click=
"commentsVisible = false"
>
取 消
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"commentsSubmit"
>
确 定
</el-button>
</span>
</el-dialog>
<el-dialog
title=
"修改计划"
:visible
.
sync=
"updateVisible"
width=
"360px"
>
<span
style=
"margin-right: 10px"
>
预计开始日期
</span>
<el-date-picker
style=
"width: 200px"
v-model=
"expectedStartDate"
value-format=
"yyyy-MM-dd"
type=
"date"
:picker-options=
"pickerOption"
placeholder=
"选择日期"
></el-date-picker>
<span
slot=
"footer"
>
<el-button
@
click=
"updateVisible = false"
>
取消
</el-button
>
<el-button
type=
"primary"
@
click=
"updateTime"
>
确定
</el-button
>
</span>
</el-dialog>
<!-- 详情 -->
<el-dialog
title=
"详情"
...
...
@@ -329,269 +162,61 @@
width=
"900px"
>
<div
class=
"detail_list"
>
<p
class=
"item"
>
<span
class=
"label"
>
任务编码
</span>
<span
class=
"value"
>
{{
detail
.
taskNumber
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
任务类型
</span>
<span
class=
"value"
>
{{
detail
.
taskType
&&
detail
.
taskType
.
desc
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
任务模块
</span>
<span
class=
"value"
>
{{
detail
.
taskModuleName
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
负责人
</span>
<span
class=
"value"
>
{{
detail
.
taskLeaderName
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
验收人
</span>
<span
class=
"value"
>
{{
detail
.
taskAcceptanceUserName
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
抄送人
</span>
<span
class=
"value"
>
{{
detail
.
ccName
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
紧急程度
</span>
<span
class=
"value"
>
<svg
t=
"1627697200171"
viewBox=
"0 0 1024 1024"
version=
"1.1"
style=
"vertical-align: middle"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"629"
width=
"18"
height=
"18"
>
<title>
{{
detail
.
emergencyLevel
?
detail
.
emergencyLevel
.
desc
:
''
}}
</title>
<path
:fill=
"
setIconColor(
detail.emergencyLevel
? detail.emergencyLevel.value
: '',
)
"
d=
"M444.970667 850.090667l151.978666-64.512a85.290667 85.290667 0 0 1-151.978666 64.512z m231.765333-760.746667c89.002667 48.597333 155.818667 111.018667 199.765333 187.178667 43.946667 76.117333 64.64 165.205333 62.250667 266.581333a32 32 0 0 1-64-1.536c2.133333-90.069333-15.872-167.552-53.674667-233.045333-37.802667-65.536-95.957333-119.850667-175.018666-163.029334a32 32 0 1 1 30.72-56.192z m-390.4 188.629333a248.490667 248.490667 0 0 1 324.266667 117.162667l4.181333 8.917333 54.954667 123.392 72.448 62.72c3.968 3.413333 7.381333 7.381333 11.349333 13.824l2.517333 4.906667a53.333333 53.333333 0 0 1-27.178666 70.357333L288.213333 874.24A53.333333 53.333333 0 0 1 213.333333 825.472l-0.042666-99.968-52.992-119.082667A248.405333 248.405333 0 0 1 286.293333 277.973333z m380.288-34.986666c41.258667 22.442667 74.325333 55.210667 98.816 97.621333 24.490667 42.453333 36.309333 87.466667 35.157333 134.442667a32 32 0 1 1-64-1.578667c0.853333-35.029333-7.893333-68.437333-26.581333-100.864-18.688-32.384-43.264-56.661333-74.026667-73.472a32 32 0 0 1 30.634667-56.192z"
p-id=
"630"
></path>
</svg>
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
重要程度
</span>
<span
class=
"value"
>
<svg
t=
"1627697337193"
style=
"vertical-align: middle"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"937"
width=
"18"
height=
"18"
>
<title>
{{
detail
.
importanceLevel
?
detail
.
importanceLevel
.
desc
:
''
}}
</title>
<path
:fill=
"
setIconColor(
detail.importanceLevel
? detail.importanceLevel.value
: '',
)
"
d=
"M858.1 315l-119 85.9c-15.8 11.4-37.8 7.7-49-8.2L541.6 181.8c-13.9-19.8-43.3-19.7-57.2 0.1L337.8 392.5c-11.1 15.9-33.1 19.7-48.9 8.4l-119.6-85.5c-25.5-18.2-60.2 3.8-54.6 34.6l68.9 380c3 16.6 17.5 28.7 34.3 28.7h598.3c17.1 0 31.7-12.4 34.4-29.3l62.3-380.7c5.1-30.5-29.6-51.9-54.8-33.7zM513.7 620.6c-43.1 0-78-34.9-78-78s34.9-78 78-78 78 34.9 78 78-34.9 78-78 78z"
p-id=
"938"
></path>
</svg>
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
优先级
</span>
<span
class=
"value"
>
<svg
:title=
"
detail.priorityLevel
? detail.priorityLevel.desc
: ''
"
t=
"1627697676079"
style=
"vertical-align: middle"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"1266"
width=
"18"
height=
"18"
>
<title>
{{
detail
.
priorityLevel
?
detail
.
priorityLevel
.
desc
:
''
}}
</title>
<path
d=
"M215.4 160.6H177c-8.9 0-16 7.2-16 16V849c0 8.9 7.2 16 16 16h38.4c8.9 0 16-7.2 16-16V176.7c0.1-8.9-7.1-16.1-16-16.1zM848.1 236c-189 152.5-378-180.6-567.1-28.2-8.8 7.1-16 21.3-16 30.1v430.9c0 8.9 7.2 9 16 1.9 189-152.5 378.1 180.7 567.1 28.2 8.9-7.1 16-21.3 16-30.1V237.9c0.1-8.8-7.1-9-16-1.9z"
:fill=
"
setIconColor(
detail.priorityLevel
? detail.priorityLevel.value
: '',
)
"
p-id=
"1267"
></path>
</svg>
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
任务状态
</span>
<span
class=
"value"
>
{{
detail
.
taskStatus
&&
detail
.
taskStatus
.
desc
}}
</span>
</p>
<div
class=
"item_wrap"
>
<p
class=
"item"
style=
"width: 100%"
>
<span
class=
"label"
>
工单标题
</span>
<span
class=
"value"
style=
"width: 732px"
>
{{
detail
.
taskTitle
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
工单编码
</span>
<span
class=
"value"
>
{{
detail
.
taskNumber
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
工单类型
</span>
<span
class=
"value"
>
{{
detail
.
taskType
&&
detail
.
taskType
.
desc
}}
</span>
</p>
<p
class=
"item"
style=
"width: 60%"
v-if=
"detail.completionSteps"
>
<span
class=
"label"
>
完成步骤
</span>
<span
class=
"value"
>
{{
detail
.
completionSteps
}}
</span>
</p>
<div
class=
"split_line"
v-if=
"detail.taskRating || detail.taskEvaluation"
></div>
<p
class=
"item"
v-if=
"detail.taskRating"
>
<span
class=
"label"
>
验收结果
</span>
<span
class=
"value"
>
{{
detail
.
taskRating
&&
detail
.
taskRating
.
desc
}}
</span>
</p>
<p
class=
"item"
style=
"width: 60%"
v-if=
"detail.taskEvaluation"
>
<span
class=
"label"
>
验收描述
</span>
<span
class=
"value"
>
{{
detail
.
taskEvaluation
}}
</span>
</p>
<div
class=
"split_line"
></div>
<p
class=
"item"
style=
"width: 100%"
>
<span
class=
"label"
>
任务标题
</span>
<span
class=
"value"
style=
"width: 732px"
>
{{
detail
.
taskTitle
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
工单状态
</span>
<span
class=
"value"
>
{{
detail
.
taskStatus
&&
detail
.
taskStatus
.
desc
}}
</span>
</p>
</div>
<div
style=
"
border: 1px solid #ddd;
padding: 5px;
box-shadow: 1px 1px 5px 1px #ddd;
overflow: auto;
"
style=
"padding: 5px; overflow: auto"
v-html=
"detail.taskContent"
@
click=
"fullScreenDisplay"
></div>
<div
style=
"height: 10px"
></div>
<p
class=
"item"
style=
"width: 175px"
>
<span
class=
"label"
style=
"width: auto"
>
期望完成日期
</span
>
<span
class=
"value"
>
{{
detail
.
expectedCompletionTime
}}
</span>
</p>
<p
class=
"item"
style=
"width: 175px"
>
<span
class=
"label"
style=
"width: auto"
>
计划完成日期
</span
>
<span
class=
"value"
>
{{
detail
.
plannedCompletionTime
}}
</span>
</p>
<p
class=
"item"
>
<span
class=
"label"
>
预计工时(h)
</span>
<span
class=
"value"
>
{{
detail
.
planCycle
}}
</span>
</p>
<p
class=
"item"
style=
"width: 175px"
>
<span
class=
"label"
style=
"width: auto"
>
任务开始日期
</span
>
<span
class=
"value"
>
{{
detail
.
startTime
}}
</span>
</p>
<p
class=
"item"
style=
"width: 175px"
>
<span
class=
"label"
style=
"width: auto"
>
实际完成时间
</span
>
<span
class=
"value"
>
{{
detail
.
actualCompletionTime
}}
</span>
</p>
<p
class=
"item"
style=
"width: 175px"
>
<span
class=
"label"
style=
"width: auto"
>
实际工时(h)
</span
>
<span
class=
"value"
>
{{
detail
.
actualCycle
}}
</span>
</p>
<div
class=
"split_line"
v-if=
"detail.logList && detail.logList.length > 0"
></div>
<ul
style=
"
color: #333;
font-size: 12px;
height: 100%;
overflow: auto;
"
>
<li
class=
"log_item"
v-for=
"(item, index) in detail.logList"
:key=
"index"
>
<div>
{{
item
.
createdTime
}}
</div>
<div>
{{
item
.
description
}}
</div>
</li>
</ul>
这里有一段描述
</div>
<div
style=
"margin-top: 10px"
>
<div>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容"
v-model=
"textarea"
>
</el-input>
</div>
<div
style=
"margin-top: 10px"
>
<el-button
size=
"mini"
type=
"success"
>
确认执行
</el-button
>
<el-button
size=
"mini"
type=
"primary"
>
回复
</el-button
>
</div>
</div>
</div>
<span
slot=
"footer"
>
<!-- 确认 -->
...
...
@@ -833,111 +458,7 @@
</span>
</span>
</el-dialog>
<!-- 终止 -->
<el-dialog
:close-on-click-modal=
"false"
:visible
.
sync=
"terminationVisible"
width=
"300px"
>
<el-form>
<el-form-item
label=
"任务耗时"
label-width=
"70px"
style=
"margin-top: 25px"
>
<el-input
v-model=
"timeConsuming"
placeholder=
"请输入任务耗时"
size=
"medium"
></el-input>
</el-form-item>
<el-form-item
label=
"终止原因"
label-width=
"70px"
>
<el-input
v-model=
"terminationReason"
type=
"textarea"
placeholder=
""
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
>
<el-button
@
click=
"terminationVisible = false"
>
取消
</el-button
>
<el-button
type=
"primary"
@
click=
"submitCadence"
>
确定
</el-button
>
</span>
</el-dialog>
<!-- 预计开始时间 -->
<el-dialog
title=
"确认"
:close-on-click-modal=
"false"
:visible
.
sync=
"confimVisible"
width=
"400px"
>
<el-form
:rules=
"addrules"
label-position=
"right"
label-width=
"120px"
:model=
"expectedStartForm"
ref=
"expectedStartForm"
>
<el-form-item
label=
"预计开始日期"
prop=
"expectedStartDate"
>
<el-date-picker
style=
"width: 200px"
v-model=
"expectedStartForm.expectedStartDate"
value-format=
"yyyy-MM-dd"
:picker-options=
"pickerOption"
type=
"date"
placeholder=
"选择日期"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"预计工时(h)"
prop=
"planCycle"
>
<el-input
style=
"width: 200px"
v-model=
"expectedStartForm.planCycle"
clearable
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
>
<el-button
@
click=
"confimVisible = false"
>
取消
</el-button
>
<el-button
type=
"primary"
@
click=
"submitConfim"
>
确定
</el-button
>
</span>
</el-dialog>
<!-- 计划完成日期 -->
<el-dialog
title=
"计划完成日期"
:close-on-click-modal=
"false"
:visible
.
sync=
"expectedEndVisible"
width=
"300px"
>
<el-date-picker
style=
"width: 100%"
v-model=
"expectedEndTime"
value-format=
"yyyy-MM-dd"
type=
"date"
:picker-options=
"pickerOption"
placeholder=
"选择日期"
></el-date-picker>
<span
slot=
"footer"
>
<el-button
@
click=
"expectedEndVisible = false"
>
取消
</el-button
>
<el-button
type=
"primary"
@
click=
"submitExpectedEnd"
>
确定
</el-button
>
</span>
</el-dialog>
<!-- 指派 -->
<el-dialog
title=
"指派给"
...
...
@@ -966,21 +487,19 @@
<
script
>
import
axios
from
'../../common/api/axios'
import
StatusList
from
'../../components/base/status-list.vue'
import
{
emptyArray
,
getIds
}
from
'../../utils/commonUtil'
import
pagination
from
'../../mixins/pagination'
import
Edit
from
'./edit.vue'
import
{
getDictByCateCode
}
from
'../../utils/api'
import
{
mapState
}
from
'vuex'
import
ChooseTimePeriod
from
'../../components/base/chooseTimePeriod.vue'
/*
任务
管理 */
/*
工单
管理 */
import
tableView
from
'@/common/components/base/tableView.vue'
export
default
{
name
:
'task_center'
,
mixins
:
[
pagination
],
components
:
{
StatusList
,
Edit
,
ChooseTimePeriod
,
tableView
,
...
...
@@ -1074,69 +593,84 @@ export default {
confimVisible
:
false
,
defauntIndex
:
0
,
taskTypes
:
[],
treeData
:
[],
defaultProps
:
{
children
:
'children'
,
label
:
'statusName'
,
},
total
:
0
,
pageSize
:
100
,
currentPage
:
1
,
}
},
mounted
()
{
getDictByCateCode
(
'taskType'
).
then
((
res
)
=>
{
this
.
taskTypes
=
res
.
data
})
axios
.
get
(
'financeTaskManagement/enums'
).
then
((
res
)
=>
{
this
.
selectOptions
=
res
.
data
})
let
{
status
,
numbers
,
empId
}
=
this
.
$route
.
query
if
(
status
)
{
this
.
statusCode
=
status
if
(
status
===
-
1
)
{
this
.
assignMe
=
true
}
}
if
(
numbers
)
{
numbers
=
numbers
.
split
(
','
)
if
(
numbers
.
length
===
1
)
{
this
.
$set
(
this
.
searchForm
,
'taskNumber'
,
numbers
[
0
])
}
}
this
.
getStatusTree
()
if
(
empId
)
{
this
.
showEdit
(
null
,
()
=>
{
this
.
$set
(
this
.
editForm
,
'taskLeader'
,
Number
(
empId
),
)
})
}
const
arr
=
[
{
statusCode
:
'all'
,
statusName
:
'全部'
,
quantity
:
35
,
children
:
null
,
},
{
statusCode
:
'preprocessing'
,
statusName
:
'预处理'
,
quantity
:
27
,
children
:
null
,
},
{
statusCode
:
'to_be_dispatched'
,
statusName
:
'待分派'
,
quantity
:
3
,
children
:
null
,
},
{
statusCode
:
'to_be_confirmed'
,
statusName
:
'待确认'
,
quantity
:
0
,
children
:
null
,
},
{
statusCode
:
'processing'
,
statusName
:
'处理中'
,
quantity
:
0
,
children
:
null
,
},
{
statusCode
:
'pending_feedback'
,
statusName
:
'待反馈'
,
quantity
:
0
,
children
:
null
,
},
{
statusCode
:
'closed'
,
statusName
:
'已关闭'
,
quantity
:
0
,
children
:
null
,
},
]
this
.
treeData
=
arr
this
.
getlist
()
},
computed
:
{
...
mapState
([
'deptStaff'
]),
tableColumns
()
{
const
employeeId
=
this
.
employeeId
return
[
{
label
:
'工单编号'
,
key
:
'taskNumber'
,
width
:
90
},
{
label
:
''
,
type
:
'selection'
,
key
:
''
,
fixed
:
'left'
,
},
{
label
:
'序号'
,
type
:
'index'
,
key
:
''
},
{
label
:
'任务编号'
,
key
:
'taskNumber'
,
width
:
90
},
{
label
:
'任务模块'
,
label
:
'工单模块'
,
key
:
'taskModuleName'
,
width
:
110
,
align
:
'left'
,
},
{
label
:
'
任务
类型'
,
label
:
'
工单
类型'
,
key
:
'type'
,
width
:
60
,
render
:
(
item
)
=>
item
.
taskType
?.
desc
,
},
{
label
:
'
任务
标题'
,
label
:
'
工单
标题'
,
key
:
'taskTitle'
,
width
:
120
,
align
:
'left'
,
...
...
@@ -1162,132 +696,23 @@ export default {
key
:
'taskCreatorName'
,
width
:
65
,
},
{
label
:
'紧急程度'
,
key
:
'emergencyLevel'
,
width
:
60
,
render
:
(
item
)
=>
(
<
svg
t
=
"1627697200171"
viewBox
=
"0 0 1024 1024"
version
=
"1.1"
xmlns
=
"http://www.w3.org/2000/svg"
p
-
id
=
"629"
width
=
"18"
style
=
"vertical-align: middle;"
height
=
"18"
>
<
title
>
{
item
.
emergencyLevel
?.
desc
}
<
/title
>
<
path
fill
=
{
this
.
setIconColor
(
item
.
emergencyLevel
?.
value
,
)}
d
=
"M444.970667 850.090667l151.978666-64.512a85.290667 85.290667 0 0 1-151.978666 64.512z m231.765333-760.746667c89.002667 48.597333 155.818667 111.018667 199.765333 187.178667 43.946667 76.117333 64.64 165.205333 62.250667 266.581333a32 32 0 0 1-64-1.536c2.133333-90.069333-15.872-167.552-53.674667-233.045333-37.802667-65.536-95.957333-119.850667-175.018666-163.029334a32 32 0 1 1 30.72-56.192z m-390.4 188.629333a248.490667 248.490667 0 0 1 324.266667 117.162667l4.181333 8.917333 54.954667 123.392 72.448 62.72c3.968 3.413333 7.381333 7.381333 11.349333 13.824l2.517333 4.906667a53.333333 53.333333 0 0 1-27.178666 70.357333L288.213333 874.24A53.333333 53.333333 0 0 1 213.333333 825.472l-0.042666-99.968-52.992-119.082667A248.405333 248.405333 0 0 1 286.293333 277.973333z m380.288-34.986666c41.258667 22.442667 74.325333 55.210667 98.816 97.621333 24.490667 42.453333 36.309333 87.466667 35.157333 134.442667a32 32 0 1 1-64-1.578667c0.853333-35.029333-7.893333-68.437333-26.581333-100.864-18.688-32.384-43.264-56.661333-74.026667-73.472a32 32 0 0 1 30.634667-56.192z"
p
-
id
=
"630"
><
/path
>
<
/svg
>
),
},
{
label
:
'重要程度'
,
key
:
'importanceLevel'
,
width
:
60
,
render
:
(
item
)
=>
(
<
svg
t
=
"1627697337193"
viewBox
=
"0 0 1024 1024"
version
=
"1.1"
xmlns
=
"http://www.w3.org/2000/svg"
p
-
id
=
"937"
width
=
"18"
style
=
"vertical-align: middle;"
height
=
"18"
>
<
title
>
{
item
.
importanceLevel
?.
desc
}
<
/title
>
<
path
fill
=
{
this
.
setIconColor
(
item
.
importanceLevel
?.
value
,
)}
d
=
"M858.1 315l-119 85.9c-15.8 11.4-37.8 7.7-49-8.2L541.6 181.8c-13.9-19.8-43.3-19.7-57.2 0.1L337.8 392.5c-11.1 15.9-33.1 19.7-48.9 8.4l-119.6-85.5c-25.5-18.2-60.2 3.8-54.6 34.6l68.9 380c3 16.6 17.5 28.7 34.3 28.7h598.3c17.1 0 31.7-12.4 34.4-29.3l62.3-380.7c5.1-30.5-29.6-51.9-54.8-33.7zM513.7 620.6c-43.1 0-78-34.9-78-78s34.9-78 78-78 78 34.9 78 78-34.9 78-78 78z"
p
-
id
=
"938"
><
/path
>
<
/svg
>
),
},
{
label
:
'优先级'
,
key
:
'priorityLevel'
,
width
:
60
,
render
:
(
item
)
=>
(
<
svg
t
=
"1627697676079"
viewBox
=
"0 0 1024 1024"
version
=
"1.1"
xmlns
=
"http://www.w3.org/2000/svg"
p
-
id
=
"1266"
width
=
"18"
style
=
"vertical-align: middle;"
height
=
"18"
>
<
title
>
{
item
.
priorityLevel
?.
desc
}
<
/title
>
<
path
d
=
"M215.4 160.6H177c-8.9 0-16 7.2-16 16V849c0 8.9 7.2 16 16 16h38.4c8.9 0 16-7.2 16-16V176.7c0.1-8.9-7.1-16.1-16-16.1zM848.1 236c-189 152.5-378-180.6-567.1-28.2-8.8 7.1-16 21.3-16 30.1v430.9c0 8.9 7.2 9 16 1.9 189-152.5 378.1 180.7 567.1 28.2 8.9-7.1 16-21.3 16-30.1V237.9c0.1-8.8-7.1-9-16-1.9z"
fill
=
{
this
.
setIconColor
(
item
.
priorityLevel
?.
value
,
)}
p
-
id
=
"1267"
><
/path
>
<
/svg
>
),
},
{
label
:
'任务状态'
,
label
:
'工单状态'
,
key
:
'taskStatus'
,
width
:
60
,
render
:
(
item
)
=>
(
<
span
style
=
{{
color
:
this
.
getStatusColor
(
item
.
taskStatus
?.
name
,
item
?
.
taskStatus
?.
name
,
),
}}
>
{
item
.
taskStatus
?.
desc
}
{
item
?
.
taskStatus
?.
desc
}
<
/span
>
),
},
{
label
:
'预计开始时间'
,
key
:
'expectedStartDate'
,
width
:
100
,
},
{
label
:
'期望完成时间'
,
key
:
'expectedCompletionTime'
,
width
:
100
,
},
{
label
:
'计划完成日期'
,
key
:
'plannedCompletionTime'
,
width
:
100
,
},
{
label
:
'预计工时(h)'
,
key
:
'planCycle'
,
width
:
100
,
},
{
label
:
'开始时间'
,
key
:
'startTime'
,
width
:
100
},
{
label
:
'实际完成时间'
,
key
:
'actualCompletionTime'
,
width
:
100
,
},
{
label
:
'实际工时(h)'
,
key
:
'actualCycle'
,
width
:
90
,
align
:
'right'
,
},
{
label
:
'创建时间'
,
...
...
@@ -1301,19 +726,6 @@ export default {
align
:
'left'
,
render
:
(
item
)
=>
(
<
span
>
{
item
.
taskStatus
.
name
===
'NOT_YET_ASSIGNED'
&&
employeeId
===
item
.
taskCreator
&&
(
<
span
title
=
"编辑"
class
=
"icon-view icon-edit-view"
>
<
i
class
=
"el-icon-edit"
onClick
=
{()
=>
this
.
showEdit
(
item
)}
><
/i
>
<
/span
>
)}
<
span
title
=
"详情"
class
=
"icon-view icon-tools-view"
...
...
@@ -1325,7 +737,7 @@ export default {
<
/span
>
{
this
.
statusCode
!==
'-1'
&&
employeeId
===
item
.
taskCreator
&&
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'NOT_YET_ASSIGNED'
&&
item
.
reasonForReject
&&
(
<
span
...
...
@@ -1368,7 +780,7 @@ export default {
<
/span
>
)}
{
this
.
statusCode
!==
'-1'
&&
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'NOT_YET_ASSIGNED'
&&
(
<
span
class
=
"icon-view icon-tools-view"
...
...
@@ -1398,7 +810,7 @@ export default {
item
.
taskCompleteUserId
.
indexOf
(
employeeId
,
)
!==
-
1
&&
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'HAS_NOT_CONFIRM'
&&
(
<
span
class
=
"icon-view icon-tools-view"
...
...
@@ -1414,9 +826,10 @@ export default {
item
.
taskCompleteUserId
.
indexOf
(
employeeId
,
)
!==
-
1
&&
(
item
.
taskStatus
.
name
===
(
item
?.
taskStatus
?
.
name
===
'HAS_NOT_STARTED'
||
item
.
taskStatus
.
name
===
'REJECTED'
)
&&
(
item
?.
taskStatus
?.
name
===
'REJECTED'
)
&&
(
<
span
title
=
"开始"
class
=
"icon-view icon-tools-view"
...
...
@@ -1432,12 +845,12 @@ export default {
item
.
taskCompleteUserId
.
indexOf
(
employeeId
,
)
!==
-
1
&&
(
item
.
taskStatus
.
name
===
(
item
?.
taskStatus
?
.
name
===
'HAS_NOT_CONFIRM'
||
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'HAS_NOT_STARTED'
||
item
.
taskStatus
.
name
===
'REJECTED'
||
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'REJECTED'
||
item
?.
taskStatus
?
.
name
===
'REJECTED_ING'
)
&&
(
<
span
title
=
"驳回"
...
...
@@ -1466,9 +879,9 @@ export default {
)}
{
this
.
statusCode
!==
'-1'
&&
employeeId
===
item
.
taskCreator
&&
(
item
.
taskStatus
.
name
===
'PROCESSING'
||
item
.
taskStatus
.
name
===
'REJECTED'
||
item
.
taskStatus
.
name
===
(
item
?.
taskStatus
?
.
name
===
'PROCESSING'
||
item
?.
taskStatus
?
.
name
===
'REJECTED'
||
item
?.
taskStatus
?
.
name
===
'REJECTED_ING'
)
&&
(
<
span
title
=
"终止"
...
...
@@ -1496,8 +909,8 @@ export default {
<
/span
>
)}
{((
this
.
statusCode
!==
'-1'
&&
item
.
taskStatus
.
name
===
'PROCESSING'
)
||
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'PROCESSING'
)
||
item
?.
taskStatus
?
.
name
===
'REJECTED_ING'
)
&&
(
<
span
title
=
"完成"
...
...
@@ -1512,7 +925,8 @@ export default {
<
/span
>
)}
{
this
.
statusCode
!==
'-1'
&&
item
.
taskStatus
.
name
===
'FOR_ACCEPTANCE'
&&
item
?.
taskStatus
?.
name
===
'FOR_ACCEPTANCE'
&&
employeeId
===
item
.
taskAcceptanceUser
&&
(
<
span
title
=
"验收"
...
...
@@ -1527,7 +941,7 @@ export default {
<
/span
>
)}
{
employeeId
===
item
.
taskCreator
&&
item
.
taskStatus
.
name
===
item
?.
taskStatus
?
.
name
===
'NOT_YET_ASSIGNED'
&&
(
<
span
title
=
"删除"
...
...
@@ -1541,7 +955,7 @@ export default {
)}
{
this
.
statusCode
!==
'-1'
&&
this
.
statusCode
===
'8'
&&
item
.
taskStatus
.
name
===
'COMPLETED'
&&
item
?.
taskStatus
?
.
name
===
'COMPLETED'
&&
employeeId
===
item
.
taskAcceptanceUser
&&
!
item
.
score
&&
(
<
span
...
...
@@ -1563,21 +977,21 @@ export default {
},
planTableColumns
()
{
return
[
{
label
:
'
任务
编号'
,
key
:
'taskNumber'
,
width
:
90
},
{
label
:
'
工单
编号'
,
key
:
'taskNumber'
,
width
:
90
},
{
label
:
'
任务
模块'
,
label
:
'
工单
模块'
,
key
:
'taskModuleName'
,
width
:
120
,
align
:
'left'
,
},
{
label
:
'
任务
类型'
,
label
:
'
工单
类型'
,
key
:
'type'
,
width
:
120
,
render
:
(
item
)
=>
item
.
taskType
?.
desc
,
},
{
label
:
'
任务
标题'
,
label
:
'
工单
标题'
,
key
:
'taskTitle'
,
width
:
425
,
align
:
'left'
,
...
...
@@ -1661,7 +1075,7 @@ export default {
),
},
{
label
:
'
任务
状态'
,
label
:
'
工单
状态'
,
key
:
'taskStatus'
,
width
:
120
,
render
:
(
item
)
=>
item
.
taskStatus
?.
desc
,
...
...
@@ -1707,8 +1121,8 @@ export default {
onClick
=
{()
=>
this
.
showDetail
(
item
)}
><
/i
>
<
/span
>
{(
item
.
taskStatus
.
name
===
'PROCESSING'
||
item
.
taskStatus
.
name
===
{(
item
?.
taskStatus
?
.
name
===
'PROCESSING'
||
item
?.
taskStatus
?
.
name
===
'REJECTED_ING'
)
&&
(
<
span
title
=
"完成"
...
...
@@ -1722,7 +1136,7 @@ export default {
><
/i
>
<
/span
>
)}
{
item
.
taskStatus
.
name
===
{
item
?.
taskStatus
?
.
name
===
'HAS_NOT_STARTED'
&&
(
<
span
title
=
"修改计划"
...
...
@@ -1741,6 +1155,8 @@ export default {
},
},
methods
:
{
sizeChange
()
{},
onCurrentChange
()
{},
getStatusColor
(
type
)
{
if
(
type
===
'NOT_YET_ASSIGNED'
)
{
return
'#CCCCCC'
...
...
@@ -1964,7 +1380,7 @@ export default {
})
},
startTask
(
item
)
{
if
(
item
.
taskStatus
.
name
===
'REJECTED'
)
{
if
(
item
?.
taskStatus
?
.
name
===
'REJECTED'
)
{
this
.
$confirm
(
'确认返工?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
...
...
@@ -1992,7 +1408,7 @@ export default {
let
res
=
null
try
{
res
=
await
axios
.
get
(
'financeTaskManagement/
axios.
get/'
+
v
.
id
,
'financeTaskManagement/get/'
+
v
.
id
,
)
}
catch
(
error
)
{
this
.
$message
.
warning
(
error
.
message
)
...
...
@@ -2000,15 +1416,6 @@ export default {
}
if
(
res
)
{
this
.
editForm
=
res
.
data
this
.
editForm
.
emergencyLevel
=
this
.
editForm
.
emergencyLevel
?.
name
this
.
editForm
.
importanceLevel
=
this
.
editForm
.
importanceLevel
?.
name
this
.
editForm
.
priorityLevel
=
this
.
editForm
.
priorityLevel
?.
name
this
.
editForm
.
taskType
=
this
.
editForm
.
taskType
.
name
this
.
editDialog
=
true
}
}
else
{
...
...
@@ -2023,27 +1430,24 @@ export default {
callback
&&
callback
()
},
getlist
()
{
if
(
this
.
is_tab
===
1
)
{
const
{
pageSize
,
currentPage
}
=
this
.
centerPageOptions
axios
.
post
(
'financeTaskManagement/list_page'
,
{
pageSize
,
currentPage
,
taskStatus
:
this
.
statusCode
,
copyMe
:
this
.
assignMe
,
startTime
:
this
.
periodTime
&&
this
.
periodTime
[
0
],
endTime
:
this
.
periodTime
&&
this
.
periodTime
[
1
],
...
this
.
searchForm
,
})
.
then
((
res
)
=>
{
this
.
sourceData
=
res
.
data
.
records
this
.
centerPageOptions
.
total
=
res
.
data
.
total
})
}
else
{
this
.
planList
()
}
// const { pageSize, currentPage } =
// this.centerPageOptions
// axios
// .post('financeTaskManagement/list_page', {
// pageSize,
// currentPage,
// taskStatus: this.statusCode,
// copyMe: this.assignMe,
// startTime:
// this.periodTime && this.periodTime[0],
// endTime: this.periodTime && this.periodTime[1],
// ...this.searchForm,
// })
// .then((res) => {
// this.sourceData = res.data.records
// this.centerPageOptions.total = res.data.total
// })
this
.
sourceData
=
[{}]
},
planList
()
{
const
{
pageSize
,
currentPage
}
=
this
.
planPageOptions
...
...
@@ -2179,16 +1583,17 @@ export default {
})
},
showDetail
(
item
)
{
axios
.
get
(
'financeTaskManagement/axios.get/'
+
item
.
id
)
.
then
((
res
)
=>
{
this
.
detail
=
res
.
data
this
.
detailVisible
=
true
})
this
.
detailVisible
=
true
// axios
// .get('financeTaskManagement/get/' + item.id)
// .then((res) => {
// this.detail = res.data
// this.detailVisible = true
// })
},
updatePlan
(
item
)
{
axios
.
get
(
'financeTaskManagement/
axios.
get/'
+
item
.
id
)
.
get
(
'financeTaskManagement/get/'
+
item
.
id
)
.
then
((
res
)
=>
{
this
.
expectedStartDate
=
res
.
data
.
expectedStartDate
...
...
@@ -2214,6 +1619,26 @@ export default {
}
</
script
>
<
style
scoped
>
.wraper
{
height
:
100%
;
display
:
flex
;
overflow
:
hidden
;
}
.page_left
{
width
:
200px
;
min-width
:
200px
;
background
:
#fff
;
border-radius
:
5px
;
margin-right
:
10px
;
}
.page_right
{
flex
:
1
;
display
:
flex
;
flex-direction
:
column
;
background
:
#fff
;
border-radius
:
5px
;
overflow
:
hidden
;
}
.top_wrap
{
display
:
flex
;
border-bottom
:
1px
solid
#ddd
;
...
...
@@ -2255,6 +1680,7 @@ export default {
}
.search_form
{
margin-top
:
5px
;
margin-left
:
10px
;
}
.search_form
>>>
.el-form-item
{
margin-bottom
:
5px
;
...
...
@@ -2277,6 +1703,10 @@ export default {
max-height
:
68vh
;
overflow
:
auto
;
}
.item_wrap
{
background
:
#efefef
;
padding-top
:
10px
;
}
.detail_list
.item
{
display
:
inline-block
;
width
:
30%
;
...
...
@@ -2331,5 +1761,6 @@ export default {
background
:
#fff
;
flex
:
1
;
overflow
:
hidden
;
width
:
100%
;
}
</
style
>
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