You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
598 lines
17 KiB
598 lines
17 KiB
<template>
|
|
<div>
|
|
|
|
<el-dialog
|
|
:before-close="handleClose"
|
|
:modal="true"
|
|
:modal-append-to-body="false"
|
|
:visible.sync="dialogVisible"
|
|
class="dissatisfied-detail"
|
|
title=""
|
|
width="1118px"
|
|
>
|
|
<div class="content">
|
|
<div class="main-title main-title2">
|
|
<Title text="事件派单"/>
|
|
</div>
|
|
<div class="contents" v-if="dialogVisible">
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<div class="items">
|
|
<div class="label">事件类型:</div>
|
|
<div class="value">{{ detail.categoryName }}</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<div class="items">
|
|
<div class="label">接收时间:</div>
|
|
<div class="value">{{ detail.happenTime }}</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<div class="items">
|
|
<div class="label">发生地点:</div>
|
|
<div class="value">{{ detail.address }}</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<div class="items">
|
|
<div class="label">事件描述:</div>
|
|
<div class="value">
|
|
{{ detail.eventContent }}
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<div class="items" style="align-items: center">
|
|
<div class="label">处理方式:</div>
|
|
<el-radio-group v-model="form.operationType" class="select" popper-class="selectPopClass"
|
|
text-color="#fff">
|
|
<el-radio label="5" value="5">指派</el-radio>
|
|
<!-- <el-radio disabled label="" value="">转财务</el-radio>-->
|
|
</el-radio-group>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<div class="items" style="align-items: center">
|
|
<div class="label">事件分类:</div>
|
|
<el-cascader
|
|
:key="iscascaderShow"
|
|
ref="myCascader"
|
|
v-model="selCategoryArray"
|
|
:options="casOptions"
|
|
:props="optionProps"
|
|
:show-all-levels="false"
|
|
class="select"
|
|
clearable
|
|
popper-class="selectPopClass"
|
|
@change="handleChangeCate"
|
|
/>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<div class="items">
|
|
<div class="label">处理部门:</div>
|
|
<el-cascader
|
|
ref="agencyIdArray"
|
|
v-model="agencyIdArray"
|
|
:options="orgOptions"
|
|
:props="orgOptionProps"
|
|
:show-all-levels="false"
|
|
class="select"
|
|
popper-class="selectPopClass"
|
|
@change="handleChangeAgency"
|
|
/>
|
|
<!-- <div class="value">{{ detail.gridName }} {{ detail.name }}</div>-->
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
|
|
<div class="items">
|
|
<div class="label">转办意见:</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<div class="items">
|
|
<el-input
|
|
v-model="form.content"
|
|
:autosize="{ minRows: 5, maxRows: 10}"
|
|
class="input"
|
|
maxlength="500"
|
|
placeholder="请输入转办意见"
|
|
type="textarea"/>
|
|
</div>
|
|
</el-col>
|
|
|
|
<el-col :span="24">
|
|
<div class="items">
|
|
<div class="label">图片/附件:</div>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<div class="items">
|
|
<!-- <el-upload
|
|
:auto-upload="false"
|
|
action="#"
|
|
list-type="picture-card">
|
|
<div slot="default">
|
|
<i class="el-icon-plus"></i>
|
|
<div class="text">添加图片</div>
|
|
</div>
|
|
|
|
<div slot="file" slot-scope="{file}">
|
|
<img
|
|
:src="file.url"
|
|
alt="" class="el-upload-list__item-thumbnail"
|
|
>
|
|
<span class="el-upload-list__item-actions">
|
|
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
|
|
<i class="el-icon-zoom-in"></i>
|
|
</span>
|
|
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleDownload(file)">
|
|
<i class="el-icon-download"></i>
|
|
</span>
|
|
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file)">
|
|
<i class="el-icon-delete"></i>
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</el-upload>-->
|
|
<el-upload
|
|
:action="uploadUlr"
|
|
:before-upload="beforeUpload"
|
|
:file-list="fileList"
|
|
:headers="$getElUploadHeaders()"
|
|
:limit="3"
|
|
:on-preview="handleFileDownload"
|
|
:on-remove="handleFileRemove"
|
|
:on-success="handleFileSuccess"
|
|
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
|
|
class="upload-demo">
|
|
<el-button :disabled="fileList.length === 3" size="small" type="primary">点击上传</el-button>
|
|
<div slot="tip" class="el-upload__tip">支持图片、word、pdf</div>
|
|
</el-upload>
|
|
</div>
|
|
</el-col>
|
|
<el-col :span="24">
|
|
<div class="items">
|
|
<div class="label">办结时限:</div>
|
|
<el-date-picker
|
|
v-model="form.timeLimit"
|
|
:append-to-body="false"
|
|
format="yyyy-MM-dd"
|
|
placeholder="开始日期"
|
|
popper-class="date-current-weiyi"
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
/>
|
|
</div>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
|
|
<div class="btn-group">
|
|
<el-button class="cancel" plain round type="success" @click="handleCancel">取消</el-button>
|
|
<el-button class="sure" plain round type="warning" @click="handleSure">确定</el-button>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
<el-dialog :visible.sync="imageVisible" append-to-body width="300px">
|
|
<img :src="dialogImageUrl" alt="" width="100%">
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
|
|
import CallPhone from "@/views/dataBoard/cpts/CallPhone";
|
|
import {requestPost} from "@/js/dai/request";
|
|
|
|
export default {
|
|
name: "EventDispatchOrder",
|
|
components: {Title, CallPhone},
|
|
data() {
|
|
return {
|
|
dialogVisible: false,
|
|
form: {
|
|
operationType: "5", //处理方式[0:已回复 5、指派 6、完成并回复]
|
|
content: "",//转办意见
|
|
timeLimit: "",//办结时限
|
|
categoryId: "",//事件分类
|
|
deptId: "", //指派部门
|
|
deptName: "",
|
|
categoryList: [],
|
|
files: [] //附件
|
|
},
|
|
dialogImageUrl: '',
|
|
imageVisible: false,
|
|
disabled: false,
|
|
detail: {},
|
|
|
|
|
|
orgOptions: [],
|
|
orgOptionProps: {
|
|
multiple: false,
|
|
value: 'agencyId',
|
|
label: 'agencyName',
|
|
children: 'subAgencyList',
|
|
checkStrictly: true
|
|
},
|
|
agencyIdArray: [],
|
|
status: false,
|
|
okflag: false,
|
|
eventDetailCopy: {},
|
|
selCategoryArray: [],
|
|
casOptions: [],
|
|
fileList: [],
|
|
uploadUlr: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadvariedfile",
|
|
iscascaderShow: 0,
|
|
optionProps: {
|
|
multiple: false,
|
|
value: "id",
|
|
label: "categoryName",
|
|
children: "children",
|
|
checkStrictly: true
|
|
},
|
|
dataRule: {
|
|
content: [
|
|
{required: true, message: "回复内容不能为空", trigger: "blur"},
|
|
],
|
|
categoryId: [
|
|
{required: true, message: "事件分类不能为空", trigger: "blur"},
|
|
],
|
|
deptId: [
|
|
{required: true, message: "处理部门不能为空", trigger: "blur"},
|
|
],
|
|
timeLimit: [
|
|
{required: true, message: "办结时限不能为空", trigger: "blur"},
|
|
],
|
|
categoryList: [
|
|
{required: true, message: '事件分类不能为空', trigger: 'blur'},
|
|
]
|
|
},
|
|
selCateObj: {
|
|
id: ""
|
|
},
|
|
|
|
};
|
|
},
|
|
async mounted() {
|
|
|
|
},
|
|
methods: {
|
|
|
|
handleClose(done) {
|
|
this.dialogVisible = false;
|
|
this.$emit('close')
|
|
},
|
|
open(detail) {
|
|
this.dialogVisible = true;
|
|
this.detail = detail
|
|
const {user} = this.$store.state;
|
|
this.agencyId = user.agencyId;
|
|
this.getOrgTreeList();
|
|
this.getCategoryList();
|
|
},
|
|
handleCancel() {
|
|
this.handleClose()
|
|
},
|
|
handleSure() {
|
|
console.log(this.form)
|
|
this.$http.post('/governance/icEventOld/reply', {
|
|
...this.form,
|
|
files: this.fileList,
|
|
icEventId: this.detail.icEventId,
|
|
status:"processing",
|
|
}).then(res => {
|
|
this.handleClose()
|
|
this.$message.success('操作成功')
|
|
this.$emit('ok')
|
|
})
|
|
},
|
|
|
|
beforeUpload(file) {
|
|
const array = file.name.split(".");
|
|
const extension = array[array.length - 1];
|
|
const formatarray = [
|
|
"jpg",
|
|
"png",
|
|
"jpeg",
|
|
"bmp",
|
|
"mp4",
|
|
"wma",
|
|
"m4a",
|
|
"mp3",
|
|
"doc",
|
|
"docx",
|
|
"xls",
|
|
"xlsx",
|
|
"pdf",
|
|
];
|
|
if (formatarray.indexOf(extension) === -1) {
|
|
this.$message.error("只支持图片、word、pdf");
|
|
return false;
|
|
}
|
|
},
|
|
handleFileRemove(file) {
|
|
if (file && file.status === "success") {
|
|
this.fileList.splice(
|
|
this.fileList.findIndex((item) => item.uid === file.uid),
|
|
1
|
|
);
|
|
}
|
|
},
|
|
handleFileSuccess(res, file) {
|
|
if (res.code === 0 && res.msg === "success") {
|
|
const array = file.name.split(".");
|
|
const fileType = array[array.length - 1];
|
|
const picArray = ["jpg", "png", "jpeg", "bmp"];
|
|
const videoarray = ["mp4", "wma", "m4a"];
|
|
const docArray = ["doc", "docx", "xls", "xlsx", "pdf"];
|
|
const mp3Array = ["mp3"];
|
|
|
|
if (picArray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = "image";
|
|
} else if (videoarray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = "video";
|
|
} else if (docArray.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = "doc";
|
|
} else if (mp3Array.indexOf(fileType) > -1) {
|
|
file.attachmentFormat = "voice";
|
|
}
|
|
|
|
file.url = res.data.url;
|
|
file.type = fileType;
|
|
|
|
file.attachmentName = file.name;
|
|
file.attachmentType = file.type;
|
|
file.attachmentUrl = file.url;
|
|
|
|
this.fileList.push(file);
|
|
} else this.$message.error(res.msg);
|
|
},
|
|
//下载
|
|
handleFileDownload(file) {
|
|
var a = document.createElement("a");
|
|
var event = new MouseEvent("click");
|
|
a.download = file.name;
|
|
a.target = '_blank';
|
|
a.href = file.url;
|
|
a.dispatchEvent(event);
|
|
},
|
|
handleChangeCate() {
|
|
if (this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]) {
|
|
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
|
|
this.form.categoryList = this.selCateObj
|
|
this.form.categoryId = this.selCateObj.id
|
|
} else {
|
|
this.selCateObj = {}
|
|
}
|
|
},
|
|
handleChangeAgency(val) {
|
|
let obj = this.$refs["agencyIdArray"].getCheckedNodes()[0].data
|
|
if (obj) {
|
|
this.form.orgType = obj.level === 'grid' ? 'grid' : 'agency'
|
|
this.form.deptId = obj.agencyId
|
|
this.form.deptName = obj.agencyName
|
|
} else {
|
|
this.form.orgType = ''
|
|
this.form.orgId = ''
|
|
}
|
|
},
|
|
//组织机构树
|
|
async getOrgTreeList() {
|
|
const url = "/gov/org/customeragency/agencygridtree"
|
|
let params = {
|
|
agencyId: this.agencyId,
|
|
purpose: "query"
|
|
}
|
|
const {data, code, msg} = await requestPost(url, params)
|
|
if (code === 0) {
|
|
this.orgOptions = []
|
|
this.orgOptions.push(data)
|
|
} else {
|
|
this.$message.error(msg)
|
|
}
|
|
},
|
|
async getCategoryList() {
|
|
const url = '/governance/icEvent/getCategoryTree';
|
|
let params = {};
|
|
const {data, code, msg} = await requestPost(url, params);
|
|
if (code === 0) {
|
|
let treeDataNew = this.deepTree(data, "children");
|
|
++this.iscascaderShow;
|
|
this.casOptions = [];
|
|
this.casOptions = treeDataNew;
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
if (this.eventDetailCopy.parentCategoryId) {
|
|
const pids = this.eventDetailCopy.parentCategoryId.split(',');
|
|
pids.push(this.eventDetailCopy.categoryId);
|
|
let nodes = this.casOptions;
|
|
for (let i = 0; i < pids.length; i++) {
|
|
nodes = this.buildNode(nodes, pids[i])
|
|
}
|
|
if (nodes) {
|
|
this.form.categoryList.push(nodes)
|
|
this.selCateObj = nodes
|
|
}
|
|
}
|
|
},
|
|
|
|
//重构树,去除网格
|
|
deepTree(arr, children) {
|
|
if (Array.isArray(arr) && arr.length > 0) {
|
|
return arr.map((item) => {
|
|
return {
|
|
...item,
|
|
[children]:
|
|
(item[children] &&
|
|
item[children].length > 0 &&
|
|
this.deepTree(item[children], children)) ||
|
|
null,
|
|
};
|
|
});
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "~@/assets/scss/dataBoard/dialog.scss";
|
|
|
|
.contents {
|
|
padding: 40px 50px;
|
|
|
|
.items {
|
|
font-size: 14px;
|
|
line-height: 34px;
|
|
position: relative;
|
|
display: flex;
|
|
align-items: flex-start;
|
|
margin-bottom: 17px;
|
|
|
|
.label {
|
|
white-space: nowrap;
|
|
color: #9CB4D3;
|
|
}
|
|
|
|
.value {
|
|
color: #FFFFFF;
|
|
}
|
|
}
|
|
}
|
|
|
|
.hr {
|
|
height: 1px;
|
|
margin: 25px 0;
|
|
opacity: .4;
|
|
border-bottom: 1px #0E79D6 dashed;
|
|
}
|
|
|
|
|
|
.btn-group {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-top: 20px;
|
|
|
|
.green {
|
|
color: #00CD96;
|
|
border: 1px solid #00CD96;
|
|
background: rgba(39, 189, 127, 0.3);
|
|
}
|
|
|
|
.el-button {
|
|
width: 136px;
|
|
height: 36px;
|
|
margin: 0 20px;
|
|
}
|
|
|
|
.orange {
|
|
color: #FD8904;
|
|
border: 1px solid #FD8904;
|
|
background: rgba(253, 137, 4, 0.3);
|
|
}
|
|
|
|
.sure {
|
|
color: #8ED3FF;
|
|
border: 1px solid #006CFF;
|
|
background: rgba(0, 108, 255, 0.5);
|
|
}
|
|
|
|
.cancel {
|
|
color: #B6D2FF;
|
|
border: 1px solid #6496E8;
|
|
background: rgba(116, 146, 194, 0.6);
|
|
}
|
|
|
|
}
|
|
|
|
.select {
|
|
margin-right: 16px;
|
|
}
|
|
|
|
/deep/ .el-date-editor .el-range-separator {
|
|
color: #fff;
|
|
}
|
|
|
|
/deep/ .el-radio {
|
|
color: #fff;
|
|
}
|
|
|
|
/deep/ .el-input__inner {
|
|
width: 360px;
|
|
height: 40px;
|
|
color: #fff;
|
|
border: 1px solid #0E3978;
|
|
border-radius: 20px;
|
|
background: rgba(0, 23, 66, 0.72);
|
|
}
|
|
|
|
/deep/ .el-range-editor .el-range-input {
|
|
color: #fff;
|
|
background: none;
|
|
}
|
|
|
|
::v-deep .date-current-weiyi {
|
|
border-color: #006cff;
|
|
background: rgba(3, 19, 51, 0.9);
|
|
box-shadow: inset 0px 0px 16px 0px rgba(0, 145, 255, 1);
|
|
|
|
.el-date-picker__header-label {
|
|
color: #ffffff;
|
|
}
|
|
|
|
.el-picker-panel__icon-btn {
|
|
color: #ffffff;
|
|
}
|
|
|
|
.el-month-table {
|
|
td {
|
|
.cell {
|
|
color: #ffffff;
|
|
}
|
|
}
|
|
}
|
|
|
|
.el-month-table td.current:not(.disabled) .cell {
|
|
color: #fff;
|
|
background-color: #409eff;
|
|
}
|
|
|
|
.el-month-table td.today:not(.disabled) .cell {
|
|
color: #0056d6;
|
|
}
|
|
|
|
.el-date-picker__header--bordered {
|
|
border-bottom: solid 1px #006cff;
|
|
}
|
|
}
|
|
|
|
/deep/ .el-textarea__inner {
|
|
color: #fff;
|
|
border: 1px solid #0E3978;
|
|
border-radius: 2px;
|
|
background: rgba(0, 23, 66, 0.72);
|
|
}
|
|
|
|
/deep/ .el-upload--picture-card {
|
|
line-height: normal;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
text-align: center;
|
|
opacity: 0.72;
|
|
color: #fff;
|
|
border: 1px solid #0E3978;
|
|
border-radius: 2px;
|
|
background: rgb(0, 23, 66);
|
|
|
|
.text {
|
|
margin-top: 10px;
|
|
}
|
|
}
|
|
</style>
|
|
|