|
|
@ -14,43 +14,75 @@ |
|
|
|
<div class="main-title main-title2"> |
|
|
|
<Title text="事件派单"/> |
|
|
|
</div> |
|
|
|
<div class="contents"> |
|
|
|
<div class="contents" v-if="dialogVisible"> |
|
|
|
<el-row> |
|
|
|
<el-col :span="12"> |
|
|
|
<div class="items"> |
|
|
|
<div class="label">需求类别:</div> |
|
|
|
<div class="value">教育讲座类-健康知识专业讲座</div> |
|
|
|
<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">教育讲座类共性需求</div> |
|
|
|
<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="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.noticeType" class="select" popper-class="selectPopClass" |
|
|
|
<el-radio-group v-model="form.operationType" class="select" popper-class="selectPopClass" |
|
|
|
text-color="#fff"> |
|
|
|
<el-radio label="指派" value="1"/> |
|
|
|
<el-radio label="转财务" value="2"/> |
|
|
|
<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> |
|
|
|
<div class="value">XX社区第一网格 杨军(网格员)</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"> |
|
|
@ -62,7 +94,7 @@ |
|
|
|
<el-col :span="24"> |
|
|
|
<div class="items"> |
|
|
|
<el-input |
|
|
|
v-model="form.explain" |
|
|
|
v-model="form.content" |
|
|
|
:autosize="{ minRows: 5, maxRows: 10}" |
|
|
|
class="input" |
|
|
|
maxlength="500" |
|
|
@ -78,46 +110,59 @@ |
|
|
|
</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 |
|
|
|
: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> |
|
|
|
: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.date" |
|
|
|
v-model="form.timeLimit" |
|
|
|
:append-to-body="false" |
|
|
|
format="yyyy-MM-dd" |
|
|
|
placeholder="开始日期" |
|
|
|
popper-class="date-current-weiyi" |
|
|
|
value-format="yyyy-MM-dd" |
|
|
|
value-format="yyyy-MM-dd HH:mm:ss" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</el-col> |
|
|
@ -141,6 +186,7 @@ |
|
|
|
<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", |
|
|
@ -149,45 +195,246 @@ export default { |
|
|
|
return { |
|
|
|
dialogVisible: false, |
|
|
|
form: { |
|
|
|
roles: "", |
|
|
|
user: "", |
|
|
|
operationType: "5", //处理方式[0:已回复 5、指派 6、完成并回复] |
|
|
|
content: "",//转办意见 |
|
|
|
timeLimit: "",//办结时限 |
|
|
|
categoryId: "",//事件分类 |
|
|
|
deptId: "", //指派部门 |
|
|
|
deptName: "", |
|
|
|
categoryList: [], |
|
|
|
files: [] //附件 |
|
|
|
}, |
|
|
|
dialogImageUrl: '', |
|
|
|
imageVisible: false, |
|
|
|
disabled: 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(id) { |
|
|
|
open(detail) { |
|
|
|
this.dialogVisible = true; |
|
|
|
this.getDetail(id); |
|
|
|
}, |
|
|
|
getDetail(id) { |
|
|
|
|
|
|
|
}, |
|
|
|
handleSupervision() { |
|
|
|
this.$refs.supervision.open() |
|
|
|
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/icEvent/reply', { |
|
|
|
...this.form, |
|
|
|
files: this.fileList, |
|
|
|
icEventId: this.detail.icEventId |
|
|
|
}).then(res => { |
|
|
|
this.handleClose() |
|
|
|
this.$message.success('操作成功') |
|
|
|
this.$emit('ok') |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
handleRemove(file) { |
|
|
|
console.log(file); |
|
|
|
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; |
|
|
|
} |
|
|
|
}, |
|
|
|
handlePictureCardPreview(file) { |
|
|
|
this.dialogImageUrl = file.url; |
|
|
|
this.imageVisible = true; |
|
|
|
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, |
|
|
|
}; |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
handleDownload(file) { |
|
|
|
console.log(file); |
|
|
|
} |
|
|
|
}, |
|
|
|
}; |
|
|
|
</script> |
|
|
@ -332,16 +579,17 @@ export default { |
|
|
|
} |
|
|
|
|
|
|
|
/deep/ .el-upload--picture-card { |
|
|
|
color: #fff; |
|
|
|
border: 1px solid #0E3978; |
|
|
|
border-radius: 2px; |
|
|
|
background: rgb(0, 23, 66); |
|
|
|
line-height: normal; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
text-align: center; |
|
|
|
opacity: 0.72; |
|
|
|
opacity: 0.72; |
|
|
|
color: #fff; |
|
|
|
border: 1px solid #0E3978; |
|
|
|
border-radius: 2px; |
|
|
|
background: rgb(0, 23, 66); |
|
|
|
|
|
|
|
.text { |
|
|
|
margin-top: 10px; |
|
|
|
} |
|
|
|