Commit 3415c1bc by yangzhi

工单优化

parent e9d3d67e
......@@ -21,7 +21,12 @@ export function workAssigned(data) {
data,
)
}
export function reallocate(data) {
return axios.post(
'platform/platformWorkOrder/reallocate',
data,
)
}
export function startWorder(id, estimateCompleteTime) {
return axios.post('platform/platformWorkOrder/start', {
id: id,
......
......@@ -6,209 +6,225 @@
* @LastEditTime: 2020-11-18 09:25:23
-->
<template>
<div class='wraper'>
<div class='page_left'>
<div class="wraper">
<div class="page_left">
<el-tree
:data='treeData'
:props='defaultProps'
ref='tree'
:data="treeData"
:props="defaultProps"
ref="tree"
highlight-current
:node-key="'statusCode'"
:expand-on-click-node='false'
:expand-on-click-node="false"
default-expand-all
@node-click='handleNodeClick'
@node-click="handleNodeClick"
>
<span
class='custom-tree-node'
slot-scope='{ node, data }'
class="custom-tree-node"
slot-scope="{ node, data }"
>
<span v-html='node.label'></span>
<span v-html="node.label"></span>
<span>({{ data.quantity }})</span>
</span>
</el-tree>
</div>
<div class='page_right'>
<div class="page_right">
<el-form
v-show='is_tab == 1'
:model='searchForm'
size='mini'
v-enter-submit='getlist'
:inline='true'
ref='form'
class='search_form'
v-show="is_tab == 1"
:model="searchForm"
size="mini"
v-enter-submit="getlist"
:inline="true"
ref="form"
class="search_form"
>
<el-form-item>
<el-select
v-model='searchForm.prop'
placeholder='请选择'
v-model="searchForm.prop"
placeholder="请选择"
clearable
style='width: 88px'
style="width: 88px"
>
<el-option
label='开始时间'
value='startTime'
label="开始时间"
value="startTime"
></el-option>
<el-option
label='创建时间'
value='createTime'
label="创建时间"
value="createTime"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<choose-time-period
v-model='periodTime'
v-model="periodTime"
></choose-time-period>
</el-form-item>
<el-form-item label='工单编号'>
<el-form-item label="工单编号">
<el-input
style='width: 110px'
v-model='searchForm.orderNo'
placeholder='请输入'
style="width: 110px"
v-model="searchForm.orderNo"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<el-form-item label='工单标题'>
<el-form-item label="工单标题">
<el-input
style='width: 110px'
v-model='searchForm.title'
placeholder='请输入'
style="width: 110px"
v-model="searchForm.title"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<el-form-item label='工单类型'>
<el-form-item label="工单类型">
<el-select
v-model='searchForm.orderType'
style='width: 110px'
value-key=''
placeholder='请选择'
v-model="searchForm.orderType"
style="width: 110px"
value-key=""
placeholder="请选择"
clearable
filterable
>
<el-option
v-for='(type, index) in orderTypes'
:key='index'
:label='type.value'
:value='type.key'
v-for="(type, index) in orderTypes"
:key="index"
:label="type.value"
:value="type.key"
></el-option>
</el-select>
</el-form-item>
<el-form-item label='负责人/参与人' v-if="!(statusCode=== 'PRE_HANDLING'||statusCode==='TO_BE_ASSIGN')">
<el-form-item
label="负责人/参与人"
v-if="
!(
statusCode === 'PRE_HANDLING' ||
statusCode === 'TO_BE_ASSIGN'
)
"
>
<el-select
style='width: 150px'
placeholder='请选择'
style="width: 150px"
placeholder="请选择"
clearable
multiple
collapse-tags
v-model='searchForm.leaderAndParticipator'
v-model="searchForm.leaderAndParticipator"
>
<el-option
v-for='user in userList'
:key='user.id'
:label='user.realName'
:value='user.id'
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label='验收人' v-if="!(statusCode=== 'PRE_HANDLING'||statusCode==='TO_BE_ASSIGN')">
<el-form-item
label="验收人"
v-if="
!(
statusCode === 'PRE_HANDLING' ||
statusCode === 'TO_BE_ASSIGN'
)
"
>
<el-select
style='width: 110px'
placeholder='请选择'
style="width: 110px"
placeholder="请选择"
clearable
v-model='searchForm.acceptanceUserId'
v-model="searchForm.acceptanceUserId"
>
<el-option
v-for='user in userList'
:key='user.id'
:label='user.realName'
:value='user.id'
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label='优先级'>
<el-form-item label="优先级">
<el-select
style='width: 110px'
style="width: 110px"
filterable
clearable
v-model='searchForm.priorityStatus'
placeholder='请选择'
v-model="searchForm.priorityStatus"
placeholder="请选择"
>
<el-option
v-for="(
priorityStatus, index
) in priorityStatusList"
v-for="(priorityStatus,
index) in priorityStatusList"
:key="index"
:value="priorityStatus.value"
:label="priorityStatus.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item label='沟通状态'>
<el-form-item label="沟通状态">
<el-select
v-model='searchForm.sign'
placeholder='请选择'
style='width: 110px'
v-model="searchForm.sign"
placeholder="请选择"
style="width: 110px"
clearable
>
<el-option
label='待回复'
:value='1'
label="待回复"
:value="1"
></el-option>
<el-option
label='已回复'
:value='0'
label="已回复"
:value="0"
></el-option>
</el-select>
</el-form-item>
<el-form-item label>
<el-button
@click='getlist()'
type='primary'
size='mini'
@click="getlist()"
type="primary"
size="mini"
>
查询
</el-button>
</el-form-item>
<el-form-item v-if="statusCode === 'PRE_HANDLING'">
<el-button
type='success'
size='mini'
@click='addData'
>新增
</el-button
>
type="success"
size="mini"
@click="addData"
>新增
</el-button>
</el-form-item>
</el-form>
<div class='table-wrap' v-loading='loading'>
<div class="table-wrap" v-loading="loading">
<table-view
:tableColumns='tableColumns'
:sourceData='sourceData'
:cellClassName='cellClassName'
:cellStyle='cellStyle'
@sortChange='sortChange'
:tableColumns="tableColumns"
:sourceData="sourceData"
:cellClassName="cellClassName"
:cellStyle="cellStyle"
@sortChange="sortChange"
>
</table-view>
</div>
<div class='pagination'>
<div class="pagination">
<el-pagination
layout='sizes, total, prev, pager, next, jumper'
layout="sizes, total, prev, pager, next, jumper"
background
:total='centerPageOptions.total'
:page-size='centerPageOptions.pageSize'
:current-page='centerPageOptions.currentPage'
@size-change='sizeChange'
@current-change='onCurrentChange'
:total="centerPageOptions.total"
:page-size="centerPageOptions.pageSize"
:current-page="centerPageOptions.currentPage"
@size-change="sizeChange"
@current-change="onCurrentChange"
>
</el-pagination>
</div>
</div>
<!-- 详情 -->
<el-dialog
:close-on-click-modal='false'
:visible.sync='detailVisible'
class='dialogDetail'
:class="[dialogFullScreen ? 'fullscreen' : 'no_fullscreen']"
:fullscreen='dialogFullScreen'
@close='getlist()'
:close-on-click-modal="false"
:visible.sync="detailVisible"
class="dialogDetail"
:class="[
dialogFullScreen ? 'fullscreen' : 'no_fullscreen',
]"
:fullscreen="dialogFullScreen"
@close="getlist()"
>
<!-- <div class="step-bar">
step-pass 已经完成,step-active当前步骤
......@@ -260,46 +276,49 @@
<span>已归档</span>
</div>
</div> -->
<template slot='title'>
<div class='custom_dialog_header'>
<span class='el_dialog_title'>详情</span>
<div class='custom_dialog_menu' @click='dialogFullScreen = !dialogFullScreen'
style='text-align: right;margin-top: 11px'>
<i class='el-icon-full-screen'></i>
<template slot="title">
<div class="custom_dialog_header">
<span class="el_dialog_title">详情</span>
<div
class="custom_dialog_menu"
@click="dialogFullScreen = !dialogFullScreen"
style="text-align: right;margin-top: 11px"
>
<i class="el-icon-full-screen"></i>
</div>
</div>
</template>
<div class='content' v-loading='detailLoading'>
<div class='detail_list'>
<div class='item_wrap'>
<p class='item' style='width: 100%'>
<span class='label'>工单标题</span>
<span class='value' style='width: 732px'>{{
detail.title
}}</span>
<div class="content" v-loading="detailLoading">
<div class="detail_list">
<div class="item_wrap">
<p class="item" style="width: 100%">
<span class="label">工单标题</span>
<span class="value" style="width: 732px">{{
detail.title
}}</span>
</p>
<p class='item'>
<span class='label'>工单编码</span>
<span class='value'>{{
detail.orderNo
}}</span>
<p class="item">
<span class="label">工单编码</span>
<span class="value">{{
detail.orderNo
}}</span>
</p>
<p class='item'>
<span class='label'>工单类型</span>
<span class='value'>
<p class="item">
<span class="label">工单类型</span>
<span class="value">
{{ detail.orderTypeTxt }}
</span>
</p>
<p class='item'>
<span class='label'>工单状态</span>
<span class='value'>
<p class="item">
<span class="label">工单状态</span>
<span class="value">
{{ detail.orderStatusTxt }}
</span>
</p>
<p class='item'>
<span class='label'>优先级</span>
<span class='value'>
<p class="item">
<span class="label">优先级</span>
<span class="value">
{{
handlePriorityStatus(
detail.priorityStatus,
......@@ -308,88 +327,94 @@
</span>
</p>
<p
class='item'
style='width: 100%; display: flex'
class="item"
style="width: 100%; display: flex"
>
<span class='label'>工单内容</span>
<span class="label">工单内容</span>
<span
style='flex: 1; display: inline-block;max-width: 84%;'
class='value'
@click.stop='hanldeImage($event)'
v-html='detail.content'
style="flex: 1; display: inline-block;max-width: 84%;"
class="value"
@click.stop="hanldeImage($event)"
v-html="detail.content"
></span>
<el-image-viewer
v-if='imgPreviewUrl'
:initial-index='subscript'
:src='imgPreviewUrl'
:on-close='closeViewer'
:url-list='imgList'
style='z-index: 3000'
v-if="imgPreviewUrl"
:initial-index="subscript"
:src="imgPreviewUrl"
:on-close="closeViewer"
:url-list="imgList"
style="z-index: 3000"
></el-image-viewer>
</p>
</div>
<div
style='padding: 5px; overflow: auto'
v-html='detail.taskContent'
@click='fullScreenDisplay'
style="padding: 5px; overflow: auto"
v-html="detail.taskContent"
@click="fullScreenDisplay"
></div>
</div>
<div class='record'>
<div class='title'>备注</div>
<ul class='chat_content'>
<div class="record">
<div class="title">备注</div>
<ul class="chat_content">
<el-input
style='width: 95%'
type='textarea'
:rows='4'
v-model='detail.remark'
placeholder='备注'
style="width: 95%"
type="textarea"
:rows="4"
v-model="detail.remark"
placeholder="备注"
></el-input>
<el-button type='success' size='mini' @click='saveRemark' v-if='detail.remark' style='margin-left: 8px'>
<el-button
type="success"
size="mini"
@click="saveRemark"
v-if="detail.remark"
style="margin-left: 8px"
>
保存
</el-button>
</ul>
</div>
<div class='record'>
<div class='title'>沟通记录</div>
<div class="record">
<div class="title">沟通记录</div>
<ul
class='chat_content'
v-if='chatRecord.length > 0'
class="chat_content"
v-if="chatRecord.length > 0"
>
<li
v-for='(item, index) in chatRecord'
:key='index'
class='chat_item'
:class='{ chat_right: item.type === 2 }'
v-for="(item, index) in chatRecord"
:key="index"
class="chat_item"
:class="{ chat_right: item.type === 2 }"
>
<div class='chat_warp' v-if='item.type === 2'>
<div class='chat_user'>
<div class='chat_user_time'>
<div class="chat_warp" v-if="item.type === 2">
<div class="chat_user">
<div class="chat_user_time">
{{
item.createTime
}}&nbsp;&nbsp;&nbsp;&nbsp;客服
</div>
<div class='chat_text'>
<div class="chat_text">
{{ item.msg }}
</div>
</div>
<div class='chat_icon'>
<div class="chat_icon">
<img
width='100%'
src='http://img.alicdn.com/tfs/TB14feR0AL0gK0jSZFAXXcA9pXa-64-64.png'
alt=''
width="100%"
src="http://img.alicdn.com/tfs/TB14feR0AL0gK0jSZFAXXcA9pXa-64-64.png"
alt=""
/>
</div>
</div>
<div v-else class='chat_warp'>
<div class='chat_icon'>
<div v-else class="chat_warp">
<div class="chat_icon">
<img
width='100%'
src='http://img.alicdn.com/tfs/TB14feR0AL0gK0jSZFAXXcA9pXa-64-64.png'
alt=''
width="100%"
src="http://img.alicdn.com/tfs/TB14feR0AL0gK0jSZFAXXcA9pXa-64-64.png"
alt=""
/>
</div>
<div class='chat_user'>
<div class='chat_user_time'>
<div class="chat_user">
<div class="chat_user_time">
{{
item.sendUserName
}}:&nbsp;&nbsp;&nbsp;&nbsp;{{
......@@ -397,210 +422,290 @@
}}
</div>
<div class='chat_text'>
<div class="chat_text">
{{ item.msg }}
</div>
</div>
</div>
</li>
</ul>
<div class='empty-data' v-else>暂无数据</div>
<div class="empty-data" v-else>暂无数据</div>
</div>
</div>
<div style='margin-top: 10px'>
<div style="margin-top: 10px">
<div>
<el-input
type='textarea'
:rows='4'
maxlength='1000'
placeholder='请输入内容'
v-model='textarea'
type="textarea"
:rows="4"
maxlength="1000"
placeholder="请输入内容"
v-model="textarea"
>
</el-input>
</div>
<div style='margin-top: 10px; text-align: right'>
<div style="margin-top: 10px; text-align: right">
<el-button
size='mini'
type='primary'
@click='reply'
>回复
</el-button
>
size="mini"
type="primary"
@click="reply"
>回复
</el-button>
<el-button
size='mini'
type='success'
size="mini"
type="success"
v-if="statusCode === 'PRE_HANDLING'"
@click='confirm'
>受理
</el-button
>
@click="confirm"
>受理
</el-button>
<el-button
size='mini'
type='danger'
size="mini"
type="danger"
v-if="statusCode === 'PRE_HANDLING'"
@click='closeForPendingDialog'
>不受理
</el-button
>
@click="closeForPendingDialog"
>不受理
</el-button>
</div>
</div>
</el-dialog>
<edit
:editDialog.sync='editDialog'
@onSubmit='onSubmit'
@onChangeModule='onChangeModule'
:editForm='editForm'
:orderTypes='orderTypes'
:isEdit='isEdit'
:editFlag='editFlag'
ref='edit'
:editDialog.sync="editDialog"
@onSubmit="onSubmit"
@onChangeModule="onChangeModule"
:editForm="editForm"
:orderTypes="orderTypes"
:isEdit="isEdit"
:editFlag="editFlag"
ref="edit"
></edit>
<!-- 修改参与人 -->
<el-dialog
title="修改参与人"
:close-on-click-modal="false"
:visible.sync="updateVisible"
width="900px"
>
<el-form
:inline="true"
size="mini"
:model="updateForm"
ref="updateForm"
:rules="updateFormRules"
label-width="130px"
>
<el-form-item label="负责人" prop="leaders">
<el-select
style="width: 100%"
size="small"
v-model="updateForm.leaders"
>
<el-option
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="参与人" prop="participator">
<el-select
style="width: 100%"
size="small"
v-model="updateForm.participator"
multiple
>
<el-option
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="验收人"
prop="acceptanceUserId"
>
<el-select
style="width: 100%"
size="small"
v-model="updateForm.acceptanceUserId"
>
<el-option
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer">
<el-button
size="mini"
@click="updateVisible = false"
>取消</el-button
>
<el-button
size="mini"
type="primary"
@click="submitUpdate"
>确定</el-button
>
</span>
</el-dialog>
<!-- 指派 -->
<el-dialog
title='指派给'
:close-on-click-modal='false'
:visible.sync='assignVisible'
width='900px'
title="指派给"
:close-on-click-modal="false"
:visible.sync="assignVisible"
width="900px"
>
<el-form
:inline='true'
size='mini'
:model='assignForm'
ref='assignForm'
:rules='assignFormRules'
label-width='130px'
:inline="true"
size="mini"
:model="assignForm"
ref="assignForm"
:rules="assignFormRules"
label-width="130px"
>
<el-form-item label='负责人' prop='leaders'>
<el-form-item label="负责人" prop="leaders">
<el-select
style='width: 100%'
size='small'
v-model='assignForm.leaders'
style="width: 100%"
size="small"
v-model="assignForm.leaders"
>
<el-option
v-for='user in userList'
:key='user.id'
:label='user.realName'
:value='user.id'
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label='参与人' prop='participator'>
<el-form-item label="参与人" prop="participator">
<el-select
style='width: 100%'
size='small'
v-model='assignForm.participator'
style="width: 100%"
size="small"
v-model="assignForm.participator"
multiple
>
<el-option
v-for='user in userList'
:key='user.id'
:label='user.realName'
:value='user.id'
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label='验收人'
prop='acceptanceUserId'
label="验收人"
prop="acceptanceUserId"
>
<el-select
style='width: 100%'
size='small'
v-model='assignForm.acceptanceUserId'
style="width: 100%"
size="small"
v-model="assignForm.acceptanceUserId"
>
<el-option
v-for='user in userList'
:key='user.id'
:label='user.realName'
:value='user.id'
v-for="user in userList"
:key="user.id"
:label="user.realName"
:value="user.id"
></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot='footer'>
<span slot="footer">
<el-button
size='mini'
@click='assignVisible = false'
>取消</el-button
size="mini"
@click="assignVisible = false"
>取消</el-button
>
<el-button
size='mini'
type='primary'
@click='submitAssign'
>确定</el-button
size="mini"
type="primary"
@click="submitAssign"
>确定</el-button
>
</span>
</el-dialog>
<el-dialog
title='预计完成时间'
:visible.sync='completeVisible'
width='500px'
:close-on-click-modal='false'
title="预计完成时间"
:visible.sync="completeVisible"
width="500px"
:close-on-click-modal="false"
>
<el-form size='mini' :rules='addRules' :model='ruleForm' ref='ruleForm'>
<el-form-item label='预计完成时间' prop='estimateCompleteTime'>
<el-form
size="mini"
:rules="addRules"
:model="ruleForm"
ref="ruleForm"
>
<el-form-item
label="预计完成时间"
prop="estimateCompleteTime"
>
<el-date-picker
style='width: 100%'
v-model='ruleForm.estimateCompleteTime'
value-format='yyyy-MM-dd HH:mm:ss'
type='datetime'
default-time='23:59:59'
placeholder='选择日期'
:picker-options='pickerOptions'
style="width: 100%"
v-model="ruleForm.estimateCompleteTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
default-time="23:59:59"
placeholder="选择日期"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
</el-form>
<span slot='footer'>
<span slot="footer">
<el-button
size='small'
@click='completeVisible = false'
>取消</el-button
size="small"
@click="completeVisible = false"
>取消</el-button
>
<el-button
size='small'
type='primary'
@click='submitTime'
>确认</el-button
size="small"
type="primary"
@click="submitTime"
>确认</el-button
>
</span>
</el-dialog>
<!-- 指派 -->
<el-dialog
title='验收'
:close-on-click-modal='false'
:visible.sync='acceptVisible'
width='800px'
title="验收"
:close-on-click-modal="false"
:visible.sync="acceptVisible"
width="800px"
>
<el-form
:inline='true'
size='mini'
:model='acceptForm'
ref='acceptForm'
:rules='acceptFormRules'
label-width='110px'
:inline="true"
size="mini"
:model="acceptForm"
ref="acceptForm"
:rules="acceptFormRules"
label-width="110px"
>
<el-form-item
label='验收结果'
prop='acceptanceResult'
label="验收结果"
prop="acceptanceResult"
>
<el-radio-group
v-model='acceptForm.acceptanceResult'
size='small'
style='width: 100%'
v-model="acceptForm.acceptanceResult"
size="small"
style="width: 100%"
>
<el-radio
:label='item.value'
v-for='(item, index) in acceptanceResultList'
:key='index'
>{{ item.label }}
</el-radio
>
:label="item.value"
v-for="(item, index) in acceptanceResultList"
:key="index"
>{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label='验收意见'
prop='acceptanceContent'
label="验收意见"
prop="acceptanceContent"
:rules="[
{
required:
......@@ -613,46 +718,46 @@
]"
>
<el-input
type='textarea'
:autosize='{ minRows: 4 }'
style='width:400px'
placeholder='请输入内容'
v-model='acceptForm.acceptanceContent'
type="textarea"
:autosize="{ minRows: 4 }"
style="width:400px"
placeholder="请输入内容"
v-model="acceptForm.acceptanceContent"
>
</el-input>
</el-form-item>
</el-form>
<span slot='footer'>
<span slot="footer">
<el-button
size='mini'
@click='acceptVisible = false'
>取消</el-button
size="mini"
@click="acceptVisible = false"
>取消</el-button
>
<el-button
size='mini'
type='primary'
@click='submitAccept'
>确定</el-button
size="mini"
type="primary"
@click="submitAccept"
>确定</el-button
>
</span>
</el-dialog>
<!-- 不受理 -->
<el-dialog
title='不受理'
:close-on-click-modal='false'
:visible.sync='pendingVisible'
width='800px'
title="不受理"
:close-on-click-modal="false"
:visible.sync="pendingVisible"
width="800px"
>
<el-form
:inline='true'
size='mini'
:model='pendingForm'
ref='pendingForm'
label-width='110px'
:inline="true"
size="mini"
:model="pendingForm"
ref="pendingForm"
label-width="110px"
>
<el-form-item
label='原因'
prop='closeReason'
label="原因"
prop="closeReason"
:rules="[
{
required: true,
......@@ -662,26 +767,26 @@
]"
>
<el-input
type='textarea'
:autosize='{ minRows: 4 }'
style='width:400px'
placeholder='请输入'
v-model='pendingForm.closeReason'
type="textarea"
:autosize="{ minRows: 4 }"
style="width:400px"
placeholder="请输入"
v-model="pendingForm.closeReason"
>
</el-input>
</el-form-item>
</el-form>
<span slot='footer'>
<span slot="footer">
<el-button
size='mini'
@click='pendingVisible = false'
>取消</el-button
size="mini"
@click="pendingVisible = false"
>取消</el-button
>
<el-button
size='mini'
type='primary'
@click='submitPending'
>确定</el-button
size="mini"
type="primary"
@click="submitPending"
>确定</el-button
>
</span>
</el-dialog>
......@@ -698,6 +803,7 @@ import {
getOrderTree,
workConfirmed,
workAssigned,
reallocate,
startWorder,
archiveWorkOrder,
completeWorkOrder,
......@@ -715,6 +821,7 @@ import {
import { getSystemUserList } from '@/common/api/system'
import { mapState } from 'vuex'
// import confirmWork from '@/assets/work/confirm.png'
import updatePatorName from '@/assets/work/PatorName.png'
import assignWork from '@/assets/work/assign.png'
import startWork from '@/assets/work/start.png'
import archiveWork from '@/assets/work/archive.png'
......@@ -762,6 +869,31 @@ export default {
return time.getTime() < Date.now() - 8.64e7
},
},
updateForm: {},
updateVisible: false,
updateFormRules: {
leaders: [
{
required: true,
message: '请选择负责人',
trigger: 'blur',
},
],
fromUser: [
{
required: true,
message: '请选择参与人',
trigger: 'blur',
},
],
acceptanceUserId: [
{
required: true,
message: '请选择验收人',
trigger: 'blur',
},
],
},
assignFormRules: {
leaders: [
{
......@@ -890,14 +1022,14 @@ export default {
key: 'title',
minWidth: 120,
align: 'left',
render: (item) => (
render: item => (
<span style="position: relative;">
<span>{item.title}</span>
{item.sign === 1 &&
item.orderStatus === 'PRE_HANDLING' && (
<i
class='el-icon-info'
title='待回复'
class="el-icon-info"
title="待回复"
></i>
)}
</span>
......@@ -924,27 +1056,27 @@ export default {
? String(item.priorityStatus)
: ''
return (
<div class='priorityStatus-select'>
<div class="priorityStatus-select">
<el-select
v-model={item.priorityStatus}
placeholder=''
placeholder=""
onChange={v => this.setStatus(item, v)}
>
<el-option
label=''
value=''
label=""
value=""
></el-option>
<el-option
label='低'
value='1'
label="低"
value="1"
></el-option>
<el-option
label='中'
value='2'
label="中"
value="2"
></el-option>
<el-option
label='高'
value='3'
label="高"
value="3"
></el-option>
</el-select>
</div>
......@@ -973,13 +1105,19 @@ export default {
{
label: '负责人',
key: 'leaderNames',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 80,
},
{
label: '参与人',
key: 'participatorName',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 80,
},
{
......@@ -989,12 +1127,6 @@ export default {
width: 80,
},
{
label: '验收意见',
key: 'acceptanceContent',
show: this.statusCode === 'ACCEPTANCEING',
width: 80,
},
{
label: '创建时间',
key: 'createTime',
sortable: true,
......@@ -1003,7 +1135,10 @@ export default {
{
label: '开始时间',
key: 'startTime',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 130,
},
{
......@@ -1014,25 +1149,37 @@ export default {
{
label: '预计完成时间',
key: 'estimateCompleteTime',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 130,
},
{
label: '验收时间',
key: 'acceptanceTime',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 130,
},
{
label: '完成时间',
key: 'completeTime',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 130,
},
{
label: '用户评价',
key: 'evaluations',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
width: 140,
},
{
......@@ -1043,12 +1190,19 @@ export default {
{
label: '验收人',
key: 'acceptanceUserName',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN' || this.statusCode === 'ACCEPTANCEING'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN' ||
this.statusCode === 'ACCEPTANCEING'
),
width: 80,
},
{
label: '验收意见',
show: !(this.statusCode === 'PRE_HANDLING' || this.statusCode === 'TO_BE_ASSIGN' || this.statusCode === 'ACCEPTANCEING'),
show: !(
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'TO_BE_ASSIGN'
),
key: 'acceptanceContent',
width: 80,
},
......@@ -1072,54 +1226,54 @@ export default {
fixed: 'right',
width: 120,
align: 'center',
render: (item) => (
render: item => (
<span>
{
<span
title='详情'
class='icon-view icon-tools-view'
title="详情"
class="icon-view icon-tools-view"
>
<i
class='el-icon-tickets'
class="el-icon-tickets"
onClick={() => this.showDetail(item)}
></i>
</span>
}
{(item.orderStatus === 'PRE_HANDLING') && (
<span title='修改' class='icon-view'>
<img
width='24'
height='24'
src={updateWork}
onClick={() => this.update(item)}
/>
</span>
{item.orderStatus === 'PRE_HANDLING' && (
<span title="修改" class="icon-view">
<img
width="24"
height="24"
src={updateWork}
onClick={() => this.update(item)}
/>
</span>
)}
{item.orderStatus === 'TO_BE_ASSIGN' && (
<span title='指派给' class='icon-view'>
<span title="指派给" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={assignWork}
onClick={() => this.showAssign(item)}
/>
</span>
)}
{item.orderStatus === 'IN_PROGRESS' && (
<span title='暂停' class='icon-view'>
<span title="修改参与人" class="icon-view">
<img
width='24'
height='24'
src={pauseWork}
onClick={() => this.pause(item)}
width="24"
height="24"
src={updatePatorName}
onClick={() => this.showUpdate(item)}
/>
</span>
)}
{item.orderStatus === 'PAUSEING' && (
<span title='恢复' class='icon-view'>
<span title="恢复" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={resumetWork}
onClick={() => this.resume(item)}
/>
......@@ -1129,12 +1283,12 @@ export default {
item.leaders &&
item.leaders
.split(',')
.map((e) => +e)
.map(e => +e)
.includes(this.userInfo.id) && (
<span title="开始" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={startWork}
onClick={() =>
this.startWorkOrder(item)
......@@ -1143,41 +1297,42 @@ export default {
</span>
)}
{item.orderStatus === 'CLOSED' && (
<span title='归档' class='icon-view'>
<span title="归档" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={archiveWork}
onClick={() => this.archive(item)}
/>
</span>
)}
{item.orderStatus === 'IN_PROGRESS' && (
<span title='处理完成' class='icon-view'>
<span title="处理完成" class="icon-view icon-tools-view">
<img
width='24'
height='24'
width="24"
height="24"
src={completeWork}
onClick={() => this.complete(item)}
/>
</span>
)}
{item.orderStatus === 'ACCEPTANCEING' && Number(item.acceptanceUserId) ===
this.userInfo.id && (
<span title='已完成' class='icon-view'>
<img
width='24'
height='24'
src={anceingWork}
onClick={() => this.anceing(item)}
/>
</span>
{item.orderStatus === 'ACCEPTANCEING' &&
Number(item.acceptanceUserId) ===
this.userInfo.id && (
<span title="已完成" class="icon-view">
<img
width="24"
height="24"
src={anceingWork}
onClick={() => this.anceing(item)}
/>
</span>
)}
{item.orderStatus === 'IN_COMPLETE' && (
<span title='关闭' class='icon-view'>
<span title="关闭" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={closetWork}
onClick={() => this.close(item)}
/>
......@@ -1187,15 +1342,25 @@ export default {
item.orderStatus === 'TO_BE_CONFIRMED' ||
item.orderStatus === 'IN_PROGRESS' ||
item.orderStatus === 'IN_COMPLETE') && (
<span title='驳回' class='icon-view'>
<span title="驳回" class="icon-view">
<img
width='24'
height='24'
width="24"
height="24"
src={rejectWork}
onClick={() => this.reject(item)}
/>
</span>
)}
{item.orderStatus === 'IN_PROGRESS' && (
<span title="暂停" class="icon-view">
<img
width="24"
height="24"
src={pauseWork}
onClick={() => this.pause(item)}
/>
</span>
)}
</span>
),
},
......@@ -1216,10 +1381,7 @@ export default {
设置优先级
*/
setStatus(data, i) {
const {
id,
priorityStatus,
} = data
const { id, priorityStatus } = data
axios
.post('platform/platformWorkOrder/updatePriority', {
id,
......@@ -1247,10 +1409,10 @@ export default {
this.isEdit = false
this.editDialog = true
this.$refs.editForm &&
this.$refs.editForm.resetFields()
this.$refs.editForm.resetFields()
},
update(v) {
getInfo(v.id).then((res) => {
getInfo(v.id).then(res => {
if (res.code === 200) {
this.editForm = JSON.parse(
JSON.stringify(res.data),
......@@ -1262,7 +1424,7 @@ export default {
this.isEdit = true
this.editDialog = true
this.$refs.editForm &&
this.$refs.editForm.resetFields()
this.$refs.editForm.resetFields()
}
})
},
......@@ -1274,11 +1436,7 @@ export default {
this.getlist()
this.getOrderTree()
},
cellClassName({
row,
columnIndex,
column,
}) {
cellClassName({ row, columnIndex, column }) {
if (
(row.orderStatus === 'TO_BE_ASSIGN' ||
row.orderStatus === 'TO_BE_CONFIRMED' ||
......@@ -1305,10 +1463,7 @@ export default {
return 'order-grey'
}
},
cellStyle({
row,
column,
}) {
cellStyle({ row, column }) {
if (
(row.orderStatus === 'PRE_HANDLING' ||
row.orderStatus === 'TO_BE_ASSIGN' ||
......@@ -1393,6 +1548,26 @@ export default {
window.open(uri)
}
},
// 修改参与人
showUpdate(data) {
const {
id,
leaders,
participator,
acceptanceUserId,
} = data
this.updateForm = {
id,
leaders: Number(leaders),
participator: participator
? participator
.split(',')
.map(item => Number(item))
: '',
acceptanceUserId,
}
this.updateVisible = true
},
showAssign(item) {
this.currentRowId = item.id
this.taskLeader = ''
......@@ -1433,8 +1608,7 @@ export default {
this.getlist()
}
})
} catch (error) {
}
} catch (error) {}
}
})
},
......@@ -1461,7 +1635,28 @@ export default {
this.getlist()
}
})
} catch (error) {
} catch (error) {}
}
})
},
submitUpdate() {
this.$refs.updateForm.validate(v => {
if (v) {
try {
reallocate({
...this.updateForm,
participator: this.updateForm.participator.join(
',',
),
}).then(res => {
if (res.code === 200) {
this.updateVisible = false
this.getOrderTree()
this.getlist()
}
})
} catch (e) {
console.error(e)
}
}
})
......@@ -1509,8 +1704,10 @@ export default {
},
async getlist() {
this.loading = true
const { pageSize, currentPage } =
this.centerPageOptions
const {
pageSize,
currentPage,
} = this.centerPageOptions
axios
.post('platform/platformWorkOrder/list_page', {
pageSize,
......@@ -1519,9 +1716,14 @@ export default {
startTime: this.periodTime && this.periodTime[0],
endTime: this.periodTime && this.periodTime[1],
...this.searchForm,
leaderAndParticipator: this.searchForm.leaderAndParticipator ? this.searchForm.leaderAndParticipator.join(',') : '',
leaderAndParticipator: this.searchForm
.leaderAndParticipator
? this.searchForm.leaderAndParticipator.join(
',',
)
: '',
})
.then((res) => {
.then(res => {
if (res.code !== 200) return
this.sourceData = res.data.records
this.centerPageOptions.total = res.data.total
......@@ -1595,8 +1797,7 @@ export default {
})
}
})
} catch {
}
} catch {}
},
async resume(v) {
try {
......@@ -1629,7 +1830,7 @@ export default {
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
reject(v.id).then((res) => {
reject(v.id).then(res => {
if (res.code === 200) {
this.$message.success('已驳回')
this.getlist()
......@@ -1637,11 +1838,10 @@ export default {
}
})
})
} catch {
}
} catch {}
},
async submitTime() {
this.$refs.ruleForm.validate((valid) => {
this.$refs.ruleForm.validate(valid => {
if (valid) {
startWorder(
this.rowId,
......@@ -1690,41 +1890,55 @@ export default {
document.documentElement.style.overflowY = 'auto'
},
hanldeImage(event) {
if (event.target.nodeName === 'IMG' || event.target.nodeName === 'img') {
this.imgPreviewUrl = decodeURIComponent(event.target.currentSrc)
const subscript = this.imgList.indexOf(this.imgPreviewUrl)
if (
event.target.nodeName === 'IMG' ||
event.target.nodeName === 'img'
) {
this.imgPreviewUrl = decodeURIComponent(
event.target.currentSrc,
)
const subscript = this.imgList.indexOf(
this.imgPreviewUrl,
)
this.subscript = subscript > -1 ? subscript : 0
document.documentElement.style.overflowY = 'hidden'
}
},
saveRemark() {
axios.post('platform/platformWorkOrder/updateRemark', {
id: this.currentRowId,
remark: this.detail.remark,
}).then(res => {
if (res.code === 200) {
this.$message.success('保存成功')
}
})
axios
.post('platform/platformWorkOrder/updateRemark', {
id: this.currentRowId,
remark: this.detail.remark,
})
.then(res => {
if (res.code === 200) {
this.$message.success('保存成功')
}
})
},
async showDetail(item) {
this.currentRowId = item.id
await axios.get(`platform/platformWorkOrder/get?id=${item.id}`,
).then(res => {
if (res.code === 200) {
this.detail = res.data
this.imgList = Object.values(this.getimgsrc(this.detail.content))
const subscript = this.imgList.indexOf(this.imgPreviewUrl)
this.subscript = subscript > -1 ? subscript : 0
} else {
this.detailLoading = false
}
})
await axios
.get(`platform/platformWorkOrder/get?id=${item.id}`)
.then(res => {
if (res.code === 200) {
this.detail = res.data
this.imgList = Object.values(
this.getimgsrc(this.detail.content),
)
const subscript = this.imgList.indexOf(
this.imgPreviewUrl,
)
this.subscript = subscript > -1 ? subscript : 0
} else {
this.detailLoading = false
}
})
await axios
.get(
`platform/platformWorkOrderChat/getByWorkOrder?workOrderId=${item.id}`,
)
.then((res) => {
.then(res => {
if (res.code === 200) {
this.chatRecord = res.data
} else {
......@@ -1734,8 +1948,7 @@ export default {
this.detailVisible = true
this.textarea = ''
},
}
,
},
}
</script>
<style lang='scss' scoped>
......@@ -1836,7 +2049,7 @@ export default {
margin-left: 10px;
}
.search_form > > > .el-form-item {
.search_form > .el-form-item {
margin-bottom: 5px;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment