Browse Source

Merge branch 'dev_shequzhili' of http://git.elinkit.com.cn:7070/r/epmet-oper-gov into dev_shequzhili

shibei_master
jiangyy 3 years ago
parent
commit
232c63ee28
  1. 30
      src/assets/scss/modules/shequzhili/project-info.scss
  2. 6
      src/views/modules/shequzhili/xiangmu/cpts/event-info.vue
  3. 6
      src/views/modules/shequzhili/xiangmu/cpts/project-evaluation.vue
  4. 504
      src/views/modules/shequzhili/xiangmu/cpts/project-info.vue
  5. 16
      src/views/modules/shequzhili/xiangmu/index.vue

30
src/assets/scss/modules/shequzhili/project-info.scss

@ -20,6 +20,36 @@
} }
.m-fm { .m-fm {
.avatar-uploader {
margin: 0 0 0 20px;
::v-deep .el-upload {
cursor: pointer;
position: relative;
overflow: hidden;
}
img {
object-fit: cover;
}
.el-upload:hover {
border-color: #409eff;
}
.avatar {
width: 36px;
height: 36px;
display: block;
}
.avatar-uploader-icon {
border: 1px dashed #d9d9d9;
border-radius: 6px;
font-size: 28px;
color: #8c939d;
width: 36px;
height: 36px;
line-height: 36px;
text-align: center;
}
}
} }
.m-btns { .m-btns {

6
src/views/modules/shequzhili/xiangmu/cpts/event-info.vue

@ -3,8 +3,6 @@
<div class="g-page" v-show="pageType == 'info'"> <div class="g-page" v-show="pageType == 'info'">
<div class="g-left"> <div class="g-left">
<el-card> <el-card>
<h3>事件详情</h3>
<div class="m-row"> <div class="m-row">
<div class="m-info"> <div class="m-info">
<div class="info-title">事件内容</div> <div class="info-title">事件内容</div>
@ -60,7 +58,7 @@ function iniData() {
return { return {
pageType: "info", pageType: "info",
eventInfo: { info: {
eventTime: "", eventTime: "",
eventContent: "", eventContent: "",
eventAddress: "", eventAddress: "",
@ -126,7 +124,7 @@ export default {
const url = "/gov/project/resievent/eventdetail-icdata"; const url = "/gov/project/resievent/eventdetail-icdata";
const { data, code, msg } = await requestPost(url, { const { data, code, msg } = await requestPost(url, {
resiEventId: this.projectInfo.originId, resiEventId: this.eventId,
}); });
if (code === 0) { if (code === 0) {

6
src/views/modules/shequzhili/xiangmu/cpts/project-evaluation.vue

@ -123,9 +123,9 @@ export default {
}, },
async getTableData() { async getTableData() {
// const url = "/gov/project/project/satisfaction-evaluation-list"; const url = "/gov/project/project/satisfaction-evaluation-list";
const url = // const url =
"http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list"; // "http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list";
const { pageSize, pageNo, fmData } = this; const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, { const { data, code, msg } = await requestPost(url, {
pageSize, pageSize,

504
src/views/modules/shequzhili/xiangmu/cpts/project-info.vue

@ -22,6 +22,7 @@
<span>内部备注</span> <span>内部备注</span>
<span>{{ projectInfo.internalRemark || "--" }}</span> <span>{{ projectInfo.internalRemark || "--" }}</span>
</div> </div>
<div <div
class="info-prop" class="info-prop"
v-if="projectInfo.departmentNameList.length > 0" v-if="projectInfo.departmentNameList.length > 0"
@ -29,18 +30,27 @@
<span>当前处理部门</span> <span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span> <span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div> </div>
<div class="info-prop">
<div
class="info-prop"
v-if="
projectInfo.origin == 'issue' ||
projectInfo.origin == 'resi_event'
"
>
<span>项目来源</span> <span>项目来源</span>
<a style="cursor: pointer" @click="handleWatchOrigin" <a style="cursor: pointer" @click="handleWatchOrigin"
>查看项目来源</a >查看项目来源</a
> >
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>项目评价</span> <span>项目评价</span>
<a style="cursor: pointer" @click="showedEvaluation=true" <a style="cursor: pointer" @click="showedEvaluation = true"
>查看项目评价</a >查看项目评价</a
> >
</div> </div>
<div class="info-prop" v-if="projectCate.length > 0"> <div class="info-prop" v-if="projectCate.length > 0">
<span>分类</span> <span>分类</span>
<fold-text style="width: 300px" :row="3"> <fold-text style="width: 300px" :row="3">
@ -59,28 +69,168 @@
</div> </div>
</div> </div>
<div class="m-btns" v-if="type == 'info'"> <div
class="m-btns"
v-if="type == 'info' || projectInfo.projectStatus != 'pending'"
>
<el-button size="" @click="handleClose">关闭</el-button> <el-button size="" @click="handleClose">关闭</el-button>
</div> </div>
</el-card> </el-card>
<el-card v-if="type == 'edit'"> <el-card
v-if="type == 'edit' && projectInfo.projectStatus == 'pending'"
>
<h3>处理</h3> <h3>处理</h3>
<div class="m-fm"> <div class="m-fm">
<el-form <el-form
:inline="true" ref="fm"
:inline="false"
:model="fmData" :model="fmData"
:rules="dataRule" :rules="dataRule"
label-position="left" label-position="left"
label-width="100px" label-width="100px"
> >
<el-form-item label="处理:" prop="operateType"> <el-form-item label="处理方式:" prop="operateType">
<el-radio-group v-model="fmData.operateType"> <el-radio-group v-model="fmData.operateType">
<el-radio :label="3">处理/响应</el-radio> <el-radio label="dispose">处理/响应</el-radio>
<el-radio :label="6">结案</el-radio> <el-radio label="close">结案</el-radio>
<el-radio :label="9">转其他机关/科室</el-radio> <el-radio label="turn">转其他机关/科室</el-radio>
<el-radio :label="10">退回</el-radio> <el-radio label="back" v-if="projectInfo.returnable"
>退回</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="处理部门:" prop="projectStaffId">
<el-select
v-model.trim="fmData.projectStaffId"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in myDepartmentList"
:key="item.projectStaffId"
:label="item.departmentName"
:value="item.projectStaffId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'back'"
label="协办单位:"
prop="assistanceUnitIndex"
>
<el-select
v-model.trim="fmData.assistanceUnitIndex"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="(item, index) in assistanceUnitList"
:key="item.assistanceUnitId"
:label="item.assistanceUnitName"
:value="index"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'back'"
label="退回到:"
prop="projectProcessId"
>
<el-select
v-model.trim="fmData.projectProcessId"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in returnableList"
:key="item.projectProcessId"
:label="item.processor"
:value="item.projectProcessId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'close'"
label="结案状态:"
prop="closedStatus"
>
<el-select
v-model.trim="fmData.closedStatus"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in resolveTypeList"
:key="item.closedStatus"
:label="item.name"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'close'"
label="结案说明:"
prop="publicReply"
>
<el-input
type="textarea"
:rows="2"
placeholder="您输入的结案说明会向居民公开展示"
v-model="fmData.publicReply"
>
</el-input>
</el-form-item>
<el-form-item label="内部备注:" prop="internalRemark">
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.internalRemark"
>
</el-input>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'close'"
label="图片/附件:"
prop="internalFile"
>
<el-upload
class="avatar-uploader"
:action="uploadUlr"
:data="{ customerId: customerId }"
:show-file-list="true"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:before-upload="beforeImgUpload"
>
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'close'"
label="公开回复:"
prop="publicReply"
>
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply"
>
</el-input>
</el-form-item>
</el-form> </el-form>
</div> </div>
<div class="m-btns"> <div class="m-btns">
@ -196,15 +346,46 @@ import dateFormat from "dai-js/tools/dateFormat";
function iniData() { function iniData() {
return { return {
pageType: "info", pageType: "info",
uploadUlr: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadqrcodeV2",
showedEvaluation: false, showedEvaluation: false,
projectIdCopy: this.projectId, projectIdCopy: this.projectId,
customerId: localStorage.getItem("customerId"),
fmData: { fmData: {
operateType: "", operateType: "",
assistanceUnitIndex: "",
assistanceUnitId: "",
assistanceUnitType: "",
internalRemark: "",
publicReply: "",
internalFile: [],
departmentName: "",
projectStaffId: "",
projectProcessId: "",
closedStatus: "",
}, },
myDepartmentList: [],
assistanceUnitList: [],
returnableList: [],
resolveTypeList: [
{
name: "已解决",
value: "resolved",
},
{
name: "无需解决",
value: "unresolved",
},
],
projectProcess: [], projectProcess: [],
projectInfo: { projectInfo: {
@ -223,7 +404,7 @@ function iniData() {
platformIds: [], platformIds: [],
processable: false, processable: false,
projectId: "", projectId: "",
projectStatus: "pending", projectStatus: "",
projectTitle: "", projectTitle: "",
publicReply: "", publicReply: "",
returnable: false, returnable: false,
@ -276,7 +457,7 @@ export default {
props: { props: {
projectId: { projectId: {
type: String, type: String,
default: "64502a8f1048a7240295527a9b32e513", default: "",
}, },
type: { type: {
type: String, type: String,
@ -295,11 +476,42 @@ export default {
computed: { computed: {
dataRule() { dataRule() {
return { const {
operateType: [ fmData: { operateType },
{ required: true, message: "处理方式不能为空", trigger: "blur" }, } = this;
], let obj = (() => {
}; return {
operateType: [
{ required: true, message: "处理方式不能为空", trigger: "blur" },
],
projectStaffId: [
{ required: true, message: "请选择处理部门", trigger: "blur" },
],
};
})();
if (operateType != "") {
if (operateType == "close") {
obj.publicReply = [
{ required: true, message: "请填写结案说明", trigger: "blur" },
];
obj.closedStatus = [
{ required: true, message: "请选择结案状态", trigger: "blur" },
];
} else {
obj.internalRemark = [
{ required: true, message: "请填写内部备注", trigger: "blur" },
];
}
}
console.log(obj);
if (this.$refs && this.$refs.fm) {
this.$nextTick(() => {
this.$refs["fm"].clearValidate();
});
}
return obj;
}, },
}, },
@ -311,9 +523,26 @@ export default {
}); });
this.getApiData(); this.getApiData();
}, },
// projectIdCopy () { "fmData.assistanceUnitIndex": function (val) {
if (val === "") {
// }, this.fmData.assistanceUnitId = "";
this.fmData.assistanceUnitType = "";
} else {
this.fmData.assistanceUnitId =
this.assistanceUnitList[val].assistanceUnitId;
this.fmData.assistanceUnitType =
this.assistanceUnitList[val].assistanceUnitType;
}
},
"fmData.projectStaffId": function (val) {
if (val === "") {
this.fmData.departmentName = "";
} else {
this.fmData.departmentName = this.myDepartmentList.find(
(item) => item.projectStaffId == val
)["departmentName"];
}
},
}, },
mounted() { mounted() {
@ -322,6 +551,40 @@ export default {
}, },
methods: { methods: {
beforeImgUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 10;
if (!isLt1M) {
this.$message.error("上传文件大小不能超过 10MB!");
}
return isLt1M;
},
handleImgSuccess(res, file, fileList) {
console.log("res.data.url", file);
if (res.code === 0 && res.msg === "success") {
console.log("res.data.url", res.data.url);
this.fmData.internalFile.push({
format: file.name.split(".").pop(),
name: file.name,
size: file.size,
type: file.raw.type,
url: res.data.url,
});
console.log(this.fmData.internalFile);
} else {
this.$message.error(res.msg);
}
},
handleImgRemove(file) {
let index = this.fmData.internalFile.findIndex(
(item) => item.url == file.response.data.url
);
this.fmData.internalFile.splice(index, 1);
console.log(this.fmData.internalFile);
},
watchImg(src) { watchImg(src) {
window.open(src); window.open(src);
}, },
@ -331,7 +594,29 @@ export default {
}, },
handleSubmit() { handleSubmit() {
this.$emit("afterEdit"); this.$refs["fm"].validate((valid, messageObj) => {
if (valid) {
this.beforeSubmit();
} else {
}
});
},
beforeSubmit() {
const {
fmData: { operateType },
} = this;
if (operateType == "dispose") {
this.submitDispose();
} else if (operateType == "close") {
this.submitClose();
} else if (operateType == "trun") {
this.submitTurn();
} else if (operateType == "back") {
this.submitBack();
} else {
return this.$message.error("请先选择处理方式");
}
}, },
handleWatchOrigin() { handleWatchOrigin() {
@ -341,6 +626,131 @@ export default {
this.pageType = "info"; this.pageType = "info";
}, },
//
async submitBack() {
const url = "/gov/project/trace/return-v2";
const { fmData } = this;
const loading = this.$loading({
lock: true,
text: "Loading",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.5)",
});
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
projectProcessId: fmData.projectProcessId,
departmentName: fmData.departmentName,
internalRemark: fmData.internalRemark,
projectStaffId: fmData.projectStaffId,
publicReply: fmData.publicReply,
internalFile: fmData.internalFile,
});
loading.close();
if (code === 0) {
this.$emit("afterEdit");
} else {
this.$message.error(msg);
}
},
//
async submitClose() {
const url = "/gov/project/trace/closeproject-v2";
const { fmData } = this;
const loading = this.$loading({
lock: true,
text: "Loading",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.5)",
});
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
closedStatus: fmData.closedStatus,
departmentName: fmData.departmentName,
internalRemark: fmData.internalRemark,
projectStaffId: fmData.projectStaffId,
publicReply: fmData.publicReply,
internalFile: fmData.internalFile,
});
loading.close();
if (code === 0) {
this.$emit("afterEdit");
} else {
this.$message.error(msg);
}
},
//
async submitTurn() {
const url = "/gov/project/trace/return-v2";
const { fmData } = this;
const loading = this.$loading({
lock: true,
text: "Loading",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.5)",
});
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
projectProcessId: fmData.projectProcessId,
departmentName: fmData.departmentName,
internalRemark: fmData.internalRemark,
projectStaffId: fmData.projectStaffId,
publicReply: fmData.publicReply,
internalFile: fmData.internalFile,
});
loading.close();
if (code === 0) {
this.$emit("afterEdit");
} else {
this.$message.error(msg);
}
},
//
async submitDispose() {
const url = "/gov/project/trace/response-v2";
const { fmData } = this;
const loading = this.$loading({
lock: true,
text: "Loading",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.5)",
});
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
departmentName: fmData.departmentName,
internalRemark: fmData.internalRemark,
projectStaffId: fmData.projectStaffId,
publicReply: fmData.publicReply,
internalFile: fmData.internalFile,
assistanceUnitId: fmData.assistanceUnitId,
assistanceUnitType: fmData.assistanceUnitType,
});
loading.close();
if (code === 0) {
this.$emit("afterEdit");
} else {
this.$message.error(msg);
}
},
async getApiData() { async getApiData() {
await this.getProjectInfo(); await this.getProjectInfo();
this.getProjectCate(); this.getProjectCate();
@ -357,6 +767,58 @@ export default {
if (code === 0) { if (code === 0) {
this.projectInfo = data; this.projectInfo = data;
if (data.projectStatus == "pending") {
this.getMyDepartmentList();
this.getAssistanceUnitList();
if (data.returnable) {
this.getReturnableList();
}
}
} else {
this.$message.error(msg);
}
},
//
async getReturnableList() {
const url = "/gov/project/trace/returnablelist";
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
});
if (code === 0) {
this.returnableList = data;
} else {
this.$message.error(msg);
}
},
//
async getMyDepartmentList() {
const url = "/gov/project/trace/mydepartmentlist";
const { data, code, msg } = await requestPost(url, {
projectId: this.projectIdCopy,
});
if (code === 0) {
this.myDepartmentList = data;
} else {
this.$message.error(msg);
}
},
//
async getAssistanceUnitList() {
const url = "/heart/icpartyunit/assistanceUnitList";
const { data, code, msg } = await requestPost(url, {
// projectId: this.projectIdCopy,
});
if (code === 0) {
this.assistanceUnitList = data;
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }

16
src/views/modules/shequzhili/xiangmu/index.vue

@ -277,11 +277,11 @@ export default {
optionsStatus: [ optionsStatus: [
{ {
value: "1", value: "pending",
label: "未结案", label: "未结案",
}, },
{ {
value: "0", value: "closed",
label: "已结案", label: "已结案",
}, },
], ],
@ -315,11 +315,11 @@ export default {
watch: { watch: {
"fmData.date": function (val) { "fmData.date": function (val) {
if (Array.isArray(val) && val.length == 2) { if (Array.isArray(val) && val.length == 2) {
this.fmData.birthdayStart = val[0]; this.fmData.startDate = val[0];
this.fmData.birthdayEnd = val[1]; this.fmData.endDate = val[1];
} else { } else {
this.fmData.birthdayStart = ""; this.fmData.startDate = "";
this.fmData.birthdayEnd = ""; this.fmData.endDate = "";
} }
}, },
}, },
@ -552,8 +552,8 @@ export default {
}, },
async getTableData() { async getTableData() {
const url = "http://yapi.elinkservice.cn/mock/245/gov/project/project/project-list"; // const url = "http://yapi.elinkservice.cn/mock/245/gov/project/project/project-list";
// const url = "/gov/project/project/project-list"; const url = "/gov/project/project/project-list";
const { pageSize, pageNo, fmData } = this; const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, { const { data, code, msg } = await requestPost(url, {
pageSize, pageSize,

Loading…
Cancel
Save