Commit b9eddc46 by qinjianhui

Merge branch 'master' into 'dev'

# Conflicts:
#   src/router/index.js
#   src/views/home/navMenu.vue
parents eda103d4 9e843d08

1007 Bytes | W: | H:

594 Bytes | W: | H:

src/assets/work/complete.png
src/assets/work/complete.png
src/assets/work/complete.png
src/assets/work/complete.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -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,
......
......@@ -34,6 +34,7 @@ import {
DropdownItem,
DropdownMenu,
Tooltip,
ColorPicker,
} from 'element-ui'
const components = [
......@@ -67,6 +68,7 @@ const components = [
DropdownItem,
DropdownMenu,
Tooltip,
ColorPicker,
]
export default {
......
<template>
<div class="announce-manage card">
<el-form
ref="form"
:model="searchForm"
size="mini"
v-enter-submit="search"
@submit.native.prevent
:inline="true"
>
<el-form-item label="创建时间">
<el-date-picker
style="width: 164px"
v-model="searchForm.time"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
></el-date-picker>
<!-- <el-input v-model="searchForm.time"></el-input> -->
</el-form-item>
<el-form-item label="创建人">
<el-select
v-model="searchForm.creator"
placeholder="请选择"
clearable
filterable
>
<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>
<el-button
type="primary"
native-type="submit"
@click="search()"
>
查询
</el-button>
</el-form-item>
<el-form-item label>
<el-button type="success" @click="editDialog()"
>新增</el-button
>
</el-form-item>
</el-form>
<div class="table_wrap" style="padding: 0">
<table-view
:sourceData="sourceData"
:serialNumber="false"
:tableColumns="tableColumns"
></table-view>
</div>
<pagination
:setValue="setpaginationOptions"
:options="paginationOptions"
/>
<el-dialog
:title="isEdit ? '编辑' : '新增'"
:close-on-click-modal="false"
:visible.sync="dialogVisible"
width="900px"
>
<el-form
:model="editForm"
:inline="true"
label-width="80px"
:rules="addrules"
size="mini"
ref="editForm"
>
<el-form-item
label="标题"
size="small"
prop="title"
>
<el-input
style="width: 530px"
v-model="editForm.title"
></el-input>
<el-checkbox
style="margin-left: 20px"
v-model="editForm.titleWeight"
label="粗体"
></el-checkbox>
</el-form-item>
<el-form-item label>
<el-color-picker
style="vertical-align: text-top"
v-model="editForm.titleColor"
></el-color-picker>
</el-form-item>
<br />
<el-form-item label="置顶">
<el-switch
v-model="editForm.priority"
></el-switch>
</el-form-item>
</el-form>
<v-editor
filename="files"
v-model="editForm.content"
ref="wangeditor"
height="300px"
/>
<div slot="footer">
<el-button
@click="dialogVisible = false"
size="mini"
>取 消</el-button
>
<el-button
type="primary"
@click="submit"
size="mini"
>确 定</el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
import Editor from '@/components/wangeditor/index.vue'
import tableView from '@/common/components/base/tableView.vue'
import { get, post } from '@/common/api/axios'
import { getSystemUserList } from '@/common/api/system'
export default {
name: 'system_announce_manage',
components: { 'v-editor': Editor, tableView },
data() {
return {
userList: [],
pageSize: 50,
currentPage: 1,
total: 1,
paginationOptions: {
pageSize: 100,
currentPage: 1,
total: 0,
},
addrules: {
title: [
{
required: true,
message: '请输入标题',
trigger: 'blur',
},
],
},
sourceData: [],
searchForm: {},
isEdit: false,
dialogVisible: false,
editForm: {
title: '',
},
defaultEditFrom: {
title: '',
enableFlag: false,
content: '',
priority: false,
},
}
},
mounted() {
this.getList()
this.getSystemUserList()
},
computed: {
tableColumns() {
return [
{
label: '标题',
key: 'title',
align: 'left',
render: (item) => (
<span
style={{
color: item.titleColor,
fontWeight: item.titleWeight ? 'bold' : '',
}}
>
{item.title}
</span>
),
},
{ label: '创建人', key: 'creatorName' },
{ label: '创建时间', key: 'creationTime' },
{ label: '更新时间', key: 'updateTime' },
{
label: '是否发布',
key: 'enableFlag',
width: 100,
render: (item) => (
<span>
{item.enableFlag ? '已发布' : '未发布'}
</span>
),
},
{
label: '操作',
width: 100,
render: (item) => (
<div>
<span
class="icon-view icon-edit-view"
title="编辑"
onClick={() => this.editDialog(item)}
>
<i class="el-icon-edit"></i>
</span>
{!item.enableFlag && (
<span
class="icon-view icon-primary-view"
title="发布"
onClick={() => this.release(item)}
>
<i class="el-icon-s-promotion"></i>
</span>
)}
</div>
),
},
]
},
},
methods: {
search() {
this.getList()
},
async getSystemUserList() {
try {
const res = await getSystemUserList()
this.userList = res.data
} catch (e) {
console.error(e)
}
},
setpaginationOptions(opt) {
for (const key in opt) {
this.paginationOptions[key] = opt[key]
}
this.getList()
},
async getList() {
try {
const { pageSize, currentPage } =
this.paginationOptions
const res = await post('sys/announcement/list', {
pageSize,
currentPage,
...this.searchForm,
})
if (res.code !== 200) return
this.sourceData = res.data.records
this.paginationOptions.total = res.data.total
} catch (e) {
console.error(e)
}
},
currentChange(i) {
this.currentPage = i
this.getList()
},
async editDialog(item) {
if (item) {
try {
const res = await get(
'sys/announcement/get/' + item.id,
)
if (res.code !== 200) return
this.editForm = {
...this.editForm,
...res.data,
}
this.isEdit = true
} catch (e) {
console.error(e)
}
} else {
this.editForm = JSON.parse(
JSON.stringify(this.defaultEditFrom),
)
this.$nextTick(() => {
this.$refs.editForm.clearValidate()
})
this.isEdit = false
}
this.dialogVisible = true
},
async submit() {
try {
await this.$refs.editForm.validate()
} catch {
return
}
try {
const url = this.isEdit
? 'sys/announcement/edit'
: 'sys/announcement/add'
const res = await post(url, { ...this.editForm })
if (res.code !== 200) return
this.$message.success(res.message)
this.dialogVisible = false
this.getList()
} catch (e) {
console.error(e)
}
},
async enableChange(item, val) {
try {
const res = await post('sys/announcement/edit', {
id: item.id,
enableFlag: val,
})
if (res.code !== 200) return
this.$message.success(res.message)
this.getList()
} catch (e) {
console.error(e)
}
},
async release(item) {
try {
const res = await get(
'sys/announcement/publish/' + item.id,
)
if (res.code !== 200) return
this.$message.success(res.message)
this.getList()
} catch (e) {
console.error(e)
}
},
},
}
</script>
<style scoped>
.announce-manage {
height: 100%;
display: flex;
flex-direction: column;
padding: 10px 20px 0;
overflow: hidden;
}
</style>
......@@ -6,208 +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'
:key='index'
:value='priorityStatus.value'
:label='priorityStatus.name'
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当前步骤
......@@ -259,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,
......@@ -307,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: 94%"
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;{{
......@@ -396,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:
......@@ -612,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,
......@@ -661,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>
......@@ -697,6 +803,7 @@ import {
getOrderTree,
workConfirmed,
workAssigned,
reallocate,
startWorder,
archiveWorkOrder,
completeWorkOrder,
......@@ -714,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'
......@@ -761,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: [
{
......@@ -892,13 +1025,13 @@ export default {
minWidth: 120,
align: 'left',
render: item => (
<span style='position: relative;'>
<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>
......@@ -925,27 +1058,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>
......@@ -974,13 +1107,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,
},
{
......@@ -990,12 +1129,6 @@ export default {
width: 80,
},
{
label: '验收意见',
key: 'acceptanceContent',
show: this.statusCode === 'ACCEPTANCEING',
width: 80,
},
{
label: '创建时间',
key: 'createTime',
sortable: true,
......@@ -1004,7 +1137,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,
},
{
......@@ -1015,25 +1151,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,
},
{
......@@ -1044,12 +1192,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,
},
......@@ -1077,68 +1232,71 @@ export default {
{
label: '操作',
fixed: 'right',
width: 120,
width: this.columnWidth(),
align: 'center',
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)}
/>
</span>
)}
{item.orderStatus === 'TO_BE_CONFIRMED' &&
Number(item.leaders) ===
this.userInfo.id && (
<span title='开始' class='icon-view'>
item.leaders &&
item.leaders
.split(',')
.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)
......@@ -1147,41 +1305,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">
<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)}
/>
......@@ -1191,15 +1350,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>
),
},
......@@ -1207,6 +1376,22 @@ export default {
},
},
methods: {
columnWidth() {
if (this.statusCode === 'IN_PROGRESS') {
return '160'
} else if (this.statusCode === 'ARCHIVE') {
return '70'
} else if (
this.statusCode === 'PRE_HANDLING' ||
this.statusCode === 'PAUSEING' ||
this.statusCode === 'ACCEPTANCEING' ||
this.statusCode === 'CLOSED'
) {
return '90'
} else {
return '120'
}
},
// 排序
sortChange(column) {
if (column.order === 'asc') {
......@@ -1220,10 +1405,7 @@ export default {
设置优先级
*/
setStatus(data, i) {
const {
id,
priorityStatus,
} = data
const { id, priorityStatus } = data
axios
.post('platform/platformWorkOrder/updatePriority', {
id,
......@@ -1251,7 +1433,7 @@ 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 => {
......@@ -1266,7 +1448,7 @@ export default {
this.isEdit = true
this.editDialog = true
this.$refs.editForm &&
this.$refs.editForm.resetFields()
this.$refs.editForm.resetFields()
}
})
},
......@@ -1278,11 +1460,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' ||
......@@ -1309,10 +1487,7 @@ export default {
return 'order-grey'
}
},
cellStyle({
row,
column,
}) {
cellStyle({ row, column }) {
if (
(row.orderStatus === 'PRE_HANDLING' ||
row.orderStatus === 'TO_BE_ASSIGN' ||
......@@ -1397,6 +1572,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 = ''
......@@ -1437,8 +1632,7 @@ export default {
this.getlist()
}
})
} catch (error) {
}
} catch (error) {}
}
})
},
......@@ -1465,7 +1659,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)
}
}
})
......@@ -1525,7 +1740,12 @@ 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 => {
if (res.code !== 200) return
......@@ -1601,8 +1821,7 @@ export default {
})
}
})
} catch {
}
} catch {}
},
async resume(v) {
try {
......@@ -1643,11 +1862,10 @@ export default {
}
})
})
} catch {
}
} catch {}
},
async submitTime() {
this.$refs.ruleForm.validate((valid) => {
this.$refs.ruleForm.validate(valid => {
if (valid) {
startWorder(
this.rowId,
......@@ -1696,36 +1914,50 @@ 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}`,
......@@ -1740,8 +1972,7 @@ export default {
this.detailVisible = true
this.textarea = ''
},
}
,
},
}
</script>
<style lang='scss' scoped>
......@@ -1842,7 +2073,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