Files
dvcp_v2_webapp/packages/wechat/AppWorkTask/components/SonDetail.vue
aixianling a8dff862d2 初始化
2021-12-14 18:36:19 +08:00

1066 lines
34 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div style="height:100%">
<ai-detail>
<template #title>
<ai-title
:title="basicInfo.parentTaskCode ? '子任务详情' : '任务详情'"
isShowBottomBorder
isShowBack
@onBackClick="onBack()"
>
<template #rightBtn v-if="detailType == 1">
<el-button
type="primary"
icon="iconfont iconReject"
v-if="basicInfo.status == 0"
@click="closeWork()">关闭任务</el-button
>
<el-button
type="primary"
icon="iconfont iconCorrect"
v-if="basicInfo.status == 0"
@click="markCompleted('1')"
>确认完成</el-button
>
<el-button
icon="iconfont iconDelete"
class="del-btn-list"
v-if="basicInfo.status == 1 || basicInfo.status == 2"
@click="deleteTask()"
>删除任务</el-button
>
</template>
</ai-title>
</template>
<template #content>
<ai-card title="任务进度">
<template #right v-if="basicInfo.parentTaskCode && detailType != 2 && detailType != 3">
<el-button type="primary" @click="toParent()">查看父级任务</el-button>
</template>
<template slot="content">
<ai-wrapper class="mar-t16" label-width="80px" :columnsNumber="2">
<ai-info-item
label="任务状态:"
:class="{
color1: basicInfo.status == 0,
color2: basicInfo.status == 1,
color3: basicInfo.status == 2,
}"
><span>{{
dict.getLabel("workTaskStatus", basicInfo.status) || "-"
}}</span></ai-info-item
>
<ai-info-item label="当前进度:"
><span>{{ basicInfo.percent + "%" }}</span></ai-info-item
>
</ai-wrapper>
<div class="echart" id="echart"></div>
</template>
</ai-card>
<ai-card title="任务执行情况">
<template slot="content">
<el-row
type="flex"
justify="space-between"
align="center"
style="margin-bottom: 8px"
>
<el-col :span="16">
<el-radio-group
v-model="ListType"
size="small"
@change="ListTypeChange"
>
<el-radio-button label="userInfoList">执行人</el-radio-button>
<el-radio-button label="checkUserList">督办人</el-radio-button>
<el-radio-button label="sendUserList">抄送人</el-radio-button>
</el-radio-group>
<el-input
v-model="listName"
placeholder="姓名"
size="small"
style="width: 160px; margin-left: 8px"
@input="filterData"
></el-input>
</el-col>
<el-col
:span="8"
class="icon add-icon"
v-if="basicInfo.status == 0"
>
<ai-wechat-selecter style="display: inline-block;" v-if="ListType == 'userInfoList' && detailType == 1"
:instance="instance"
v-model="addUserList"
:disable="appReportTaskDoInfoList"
:isAdd="false"
@change="confirmAdd(1)"
>
<i
class="iconfont iconAdd"
style="color: #5088ff"
>添加执行人</i
>
</ai-wechat-selecter>
<ai-wechat-selecter style="display: inline-block;" v-if="ListType == 'checkUserList' && detailType == 1"
:instance="instance"
:disable="appReportTaskDoInfoList"
v-model="addUserList"
:isAdd="false"
@change="confirmAdd(2)"
>
<i
class="iconfont iconAdd"
style="color: #5088ff"
>添加督办人</i
>
</ai-wechat-selecter>
<ai-wechat-selecter style="display: inline-block;" v-if="ListType == 'sendUserList' && detailType == 1"
:instance="instance"
v-model="addUserList"
:disable="appReportTaskDoInfoList"
:isAdd="false"
@change="confirmAdd(3)"
>
<i
class="iconfont iconAdd"
style="color: #5088ff"
>添加抄送人</i
>
</ai-wechat-selecter>
<i
class="iconfont iconClock"
style="color: #5088ff; margin-left: 8px"
:style="isAll ? 'opacity:0.5' : ''"
v-if="ListType == 'userInfoList' && detailType != 3"
@click="urgeMessageAll()"
>一键催办</i
>
</el-col>
</el-row>
<ai-table :isShowPagination="false"
class="ai-table"
:tableData="basicInfo[ListType]"
:col-configs="colConfigs"
:dict="dict"
>
<el-table-column slot="status" label="任务状态" align="center" v-if="ListType == 'userInfoList'">
<template slot-scope="{ row }">
<span >{{$dict.getLabel("workTaskStatus", row.doStatus)}}</span>
</template>
</el-table-column>
<el-table-column slot="percent" label="完成时间" align="center" v-if="ListType == 'userInfoList'">
<template slot-scope="{ row }">
<span >{{ row.finishTime|| '-' }}</span>
</template>
</el-table-column>
<el-table-column slot="percent" label="完成进度" align="center" v-if="ListType == 'userInfoList'">
<template slot-scope="{ row }">
<span>{{ row.percent + '%'}}</span>
</template>
</el-table-column>
<el-table-column
slot="options"
label="操作"
align="center"
fixed="right"
width="200"
>
<template slot-scope="{ row }">
<div>
<i
class="iconfont iconClock icon-color89B"
title="催办"
:style="
row.doStatus == 0
? row.isSend
? 'opacity:0.5'
: ''
: 'opacity:0.5'
"
style="cursor: pointer"
v-if="ListType == 'userInfoList' && basicInfo.status == 0 && detailType != 3"
@click="urgeMessage(row)"
></i>
<span
class="iconfont iconShow icon-color89B"
title="详情"
v-if="ListType == 'userInfoList'"
style="cursor: pointer; margin-left: 8px"
@click="getExecute(row)"
></span>
<span
class="iconfont iconRevoke icon-color89B"
title="删除"
style="margin-left: 8px; cursor: pointer"
v-if="basicInfo.status == 0 && detailType == 1"
@click="deleteUnit(row)"
></span>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
<ai-card title="任务信息">
<template slot="content">
<ai-wrapper class="mar-t16" label-width="80px" :columnsNumber="2">
<ai-info-item label="发起人:"
><span>{{ basicInfo.sponsorUserName }}</span></ai-info-item
>
<ai-info-item label="创建人:"
><span>{{ basicInfo.createUserName }}</span></ai-info-item
>
<ai-info-item label="创建时间:"
><span>{{ basicInfo.createTime }}</span></ai-info-item
>
</ai-wrapper>
<ai-wrapper class="mar-t16" label-width="80px" :columnsNumber="2">
<ai-info-item label="任务状态:">
<span>{{
dict.getLabel("workTaskStatus", basicInfo.status) || "-"
}}</span>
</ai-info-item>
<ai-info-item label="任务类型:"
><span>{{
$dict.getLabel("workTaskType", basicInfo.type) || "-"
}}</span></ai-info-item
>
</ai-wrapper>
<ai-wrapper class="mar-t16" label-width="80px" :columnsNumber="2">
<ai-info-item label="截止时间:">
<span
>{{ basicInfo.lastTime
}}<i
:style="
basicInfo.isOverTime == 0
? 'color:#FF8822;'
: 'color:#FF4466;'
"
style="margin-left: 8px; font-style: inherit"
v-if="basicInfo.overTimeStatus"
>({{ basicInfo.overTimeStatus }})</i
></span
>
</ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="80px" :columnsNumber="1">
<ai-info-item label="任务说明:"
><span>{{ basicInfo.taskDescription }}</span></ai-info-item
>
</ai-wrapper>
<ai-bar title="附件">
<template
slot="right"
v-if="basicInfo.fileList && basicInfo.fileList.length"
>
<span class="Edit" @click="downFileAll"
><i class="iconfont iconDownload"></i>下载全部</span
>
</template>
</ai-bar>
<ai-file-list
v-if="basicInfo.fileList && basicInfo.fileList.length"
:fileList="basicInfo.fileList"
:fileOps="{ name: 'name', size: 'fileSizeStr' }"
></ai-file-list>
</template>
</ai-card>
<ai-card title="人员信息">
<template slot="content">
<div class="especial">
<span class="people mar-r40 w80">执行人</span>
<ai-wechat-selecter
slot="append"
isShowUser
:instance="instance"
v-model="basicInfo.userInfoList"
:isAdd="false"
></ai-wechat-selecter>
</div>
<div class="especial">
<span class="people mar-r40 w80">督办人</span>
<ai-wechat-selecter
slot="append"
isShowUser
:instance="instance"
v-model="basicInfo.checkUserList"
:isAdd="false"
></ai-wechat-selecter>
</div>
<div class="especial">
<span class="people mar-r40 w80">抄送人</span>
<ai-wechat-selecter
slot="append"
isShowUser
:instance="instance"
v-model="basicInfo.sendUserList"
:isAdd="false"
></ai-wechat-selecter>
</div>
</template>
</ai-card>
<el-dialog
class="deleteStyle mask execute"
:visible.sync="executeDialog"
width="800px"
title="执行情况"
:close-on-click-modal="false"
>
<el-dialog
width="520px"
title="执行说明:"
class="deleteStyle mask execute"
:visible.sync="innerVisible"
@close="getExecute(executeInfo)"
:close-on-click-modal="false"
append-to-body
>
<div style="width: 480px; margin: auto; padding: 8px 0">
<el-form
:model="sayInfo"
ref="numberValidateForm"
label-width="100px"
class="demo-ruleForm"
>
<el-form-item label="执行说明:" prop="doDescription">
<el-input
maxlength="1000"
show-word-limit
type="textarea"
:rows="3"
v-model="sayInfo.doDescription"
autocomplete="off"
></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" style="text-align: center">
<el-button
style="width: 92px"
size="small"
@click="(innerVisible = false), getExecute(executeInfo)"
> </el-button
>
<el-button
style="width: 92px"
type="primary"
size="small"
@click="updateDescription()"
> </el-button
>
</div>
</el-dialog>
<div
style="
width: 740px;
margin: auto;
padding: 8px 0;
max-height: 600px;
overflow: auto;
"
>
<ai-wrapper class="mar-t16" label-width="80px" :columnsNumber="2">
<ai-info-item label="执行人:"><span>{{ executeInfo.userName }}</span></ai-info-item>
<ai-info-item label="手机号:"><span>{{ executeInfo.phone }}</span></ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="80px" :columnsNumber="1">
<ai-info-item label="所属部门:"><span>{{ executeInfo.unitName }}</span></ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="80px" :columnsNumber="2">
<ai-info-item label="执行状态:">
<p v-if="executeInfo.doStatus == 0" style="color: #ff8822">
未完成
</p>
<p v-if="executeInfo.doStatus == 1" style="color: #2ea222">
已完成
</p>
<p v-if="executeInfo.doStatus == 2">已终止</p>
<p v-if="executeInfo.doStatus == 3">进行中</p>
<p v-if="executeInfo.doStatus == 4">已关闭</p>
<p v-if="executeInfo.doStatus == null">-</p>
</ai-info-item>
<ai-info-item label="完成时间:">
<i style="display: block; font-style: normal">{{
executeInfo.finishTime || "-"
}}</i>
<i
style="color: #ff4466; display: block; font-style: normal"
v-if="executeInfo.overTimeStatus && executeInfo.doStatus == 1"
>({{ executeInfo.overTimeStatus }})</i
>
</ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="80px" :columnsNumber="1">
<ai-info-item label="当前进度:"><span>{{ executeInfo.percent + "%" }}</span></ai-info-item>
</ai-wrapper>
<ai-wrapper label-width="80px" :columnsNumber="1">
<ai-info-item label="执行说明:"><span>{{ executeInfo.doDescription }}</span></ai-info-item>
</ai-wrapper>
<div class="step">
<!-- <el-steps direction="vertical" :active="null" >
<el-step icon="iconfont iconSteps_Finished" v-for="(e,index) in executeInfo.processList" :key="index">
<template v-slot:title>
<p style="color:#333333;">{{e.remarks}}</p>
</template>
<template v-slot:description>
<p style="color:#999999;">完成到 <span :style="e.percent<100 ? 'color:#5088FF':'color:#2EA222' ">{{e.percent}}%</span> | {{e.createDate}}</p>
</template>
</el-step>
</el-steps> -->
<el-timeline>
<el-timeline-item
v-for="(e, index) in executeInfo.processList"
:key="index"
>
<p style="color: #333333">{{ e.remarks }}</p>
<p style="color: #999999">
完成到
<span
:style="e.percent < 100 ? 'color:#5088FF' : 'color:#2EA222'"
>{{ e.percent }}%</span
>
| {{ e.createDate }}
</p>
</el-timeline-item>
</el-timeline>
</div>
</div>
<div slot="footer" style="text-align: center">
<el-button
style="width: 92px"
size="small"
@click="executeDialog = false"
> </el-button
>
<el-button
style="width: 148px"
type="primary"
size="small"
@click="
(innerVisible = true),
(sayInfo.doDescription = executeInfo.doDescription)
"
v-if="basicInfo.status == 0"
>编辑执行说明</el-button
>
</div>
</el-dialog>
</template>
</ai-detail>
<!-- <detail v-else :instance="instance" :dict="dict" @back="showDetail=false" :params="parentInfo" fromType="SonDetail" detailType="1"></detail> -->
</div>
</template>
<script>
import * as echarts from "echarts";
import { mapState } from "vuex";
export default {
name: "SonDetail",
props: {
instance: Function,
params: Object,
dict: Object,
detailType: String
},
data() {
return {
basicInfo: {
userInfoList: [],
checkUserList: [],
sendUserList: [],
},
ListType: "userInfoList",
listName: "",
saveList: [],
suspendDialog: false,
REttitle: "",
writeInfo: {
finishDescription: "",
},
appReportTaskDoInfoList: [],
taskRole: "1",
checkName: "",
sendName: "",
userName: "",
executeDialog: false,
executeInfo: {},
sayInfo: {
doDescription: "",
},
isAll: false,
colConfigs: [
{ prop: "userName", label: "姓名" },
{ prop: "phone", label: "手机号码" },
{ prop: "unitName", label: "所属部门" },
{ slot: "status"},
{ slot: "percent", label: "完成进度" },
{ slot: "finishTime"},
{ slot: "options", label: "操作" },
],
addUserList: [],
innerVisible: false,
showDetail: false,
parentInfo: {}
};
},
computed: {
...mapState(["user"]),
},
mounted() {
this.dict
.load("workTaskType", "workTaskStatus", "workTaskFinishStatus")
.then(() => {
this.searchDetail();
});
},
methods: {
//查详情
searchDetail() {
this.sendName = "";
this.checkName = "";
this.userName = "";
this.instance
.post("/app/appworktaskinfo/queryDetailById", null, {
params: { id: this.params.id },
})
.then((res) => {
if (res.code == 0) {
this.basicInfo = res.data;
this.basicInfo.userInfoList.map((item) => {
item.detailId = item.id
item.name = item.userName
item.id = item.userId
})
if(this.basicInfo.checkUserList.length) {
this.basicInfo.checkUserList.map((item) => {
item.detailId = item.id
item.name = item.userName
item.id = item.userId
})
}
if(this.basicInfo.sponsorUserList.length) {
this.basicInfo.sponsorUserList.map((item) => {
item.detailId = item.id
item.name = item.userName
item.id = item.userId
})
}
if(this.basicInfo.sendUserList.length) {
this.basicInfo.sendUserList.map((item) => {
item.detailId = item.id
item.name = item.userName
item.id = item.userId
})
}
this.parentInfo = res.data.parentTask
this.saveList = JSON.stringify(this.basicInfo[this.ListType]);
if (this.basicInfo.checkUserList.length) {
this.basicInfo.checkUserList.forEach((v) => {
this.checkName += v.userName + "、";
});
this.checkName = this.checkName.substring(
0,
this.checkName.length - 1
);
}
if (this.basicInfo.userInfoList.length) {
this.basicInfo.userInfoList.forEach((v, index) => {
this.userName += v.userName + "、";
this.basicInfo.userInfoList[index].isSend = false;
});
this.userName = this.userName.substring(
0,
this.userName.length - 1
);
}
if (this.basicInfo.sendUserList.length) {
this.basicInfo.sendUserList.forEach((v) => {
this.sendName += v.userName + "、";
});
this.sendName = this.sendName.substring(
0,
this.sendName.length - 1
);
}
//人员选择器去重
this.appReportTaskDoInfoList = [
...this.basicInfo.userInfoList,
...this.basicInfo.checkUserList,
...this.basicInfo.sendUserList,
...this.basicInfo.sponsorUserList,
];
this.showEchartScale();
}
});
},
showEchartScale() {
let myChart = echarts.init(document.getElementById("echart"));
let legendData = ["未完成", "已完成", "逾期完成"];
let seriesData = [
{ value: this.basicInfo.unFinished, name: "未完成" },
{ value: this.basicInfo.finishedOnTime, name: "按时完成" },
{ value: this.basicInfo.finishedOutOfTime, name: "逾期完成" },
];
let option = {
backgroundColor: "#fff",
tooltip: {
trigger: "item",
formatter: "{a} <br/>{b} : {c} ({d}%)",
},
legend: {
orient: "vertical",
right: 340,
top: 70,
bottom: 20,
itemWidth: 8,
itemHeight: 8,
formatter: (name) => {
let item = seriesData.find((e) => e.name == name);
return `{title|${name}}{content|${
item ? item.value.toLocaleString() : 0
}}`;
},
// data: legendData
textStyle: {
fontSize: 14,
rich: {
title: {
width: 100,
color: "#AAA",
paddingLeft: 6,
fontSize: 14,
},
content: {
color: "#333",
width: 50,
align: "right",
fontSize: 14,
},
},
},
},
series: [
{
name: "完成情况比例",
type: "pie",
radius: ["40%", "75%"],
center: ["14%", "45%"],
avoidLabelOverlap: false,
label: {
position: "inside",
formatter: (params) => {
if (params.value == 0) {
return "";
} else {
return `${params.percent}%`;
}
},
},
data: seriesData,
itemStyle: {
normal: {
color: function (params) {
//自定义颜色
var colorList = ["#FFAA44", "#2EA222", "#3D94FB"];
return colorList[params.dataIndex];
},
},
},
},
],
};
myChart.setOption(option);
},
ListTypeChange(val) {
this.saveList = JSON.stringify(this.basicInfo[val]);
this.listName = "";
if (val == "userInfoList") this.taskRole = "1";
if (val == "checkUserList") this.taskRole = "2";
if (val == "sendUserList") this.taskRole = "3";
this.searchDetail(this.params.id);
},
//删除任务
deleteTask() {
this.$confirm("是否确认删除本次任务,删除后无法恢复?", {
type: "error",
}).then(() => {
this.instance
.post("/app/appworktaskinfo/delete", null, {
params: {
id: this.params.id,
},
})
.then((res) => {
if (res.code == 0) {
this.$message.success("删除成功");
this.onBack();
}
});
});
},
filterData(val) {
if (val) {
let list = JSON.parse(this.saveList).filter(
(e) => e.userName.indexOf(val) !== -1
);
this.$set(this.basicInfo, this.ListType, list);
} else {
this.$set(this.basicInfo, this.ListType, JSON.parse(this.saveList));
}
},
//催办多人
urgeMessageAll() {
if (!this.isAll) {
this.$confirm("是否向全部执行人发送催办提醒?", {
type: "warning",
title: "发送催办提醒",
}).then(() => {
this.instance
.post("/app/appworktaskuserinfo/sendMesage", null, {
params: {
id: this.params.id,
},
})
.then((res) => {
if (res.code == 0) {
this.$message.success("催办消息已发送");
this.isAll = true;
this.basicInfo.userInfoList.forEach((e, index) => {
e.isSend = true;
this.$set(this.basicInfo.userInfoList, index, e);
});
}
});
});
}
},
//催办单人
urgeMessage(row) {
if (row.doStatus == 0 && !row.isSend) {
this.$confirm(`是否向【执行人:${row.userName}】发送催办提醒?`, {
type: "warning",
title: "发送催办提醒",
}).then(() => {
this.instance
.post("/app/appworktaskuserinfo/sendMesageOne", null, {
params: {
id: row.detailId,
},
})
.then((res) => {
if (res.code == 0) {
this.$message.success("催办消息已发送");
row.isSend = true;
let index = this.basicInfo.userInfoList.findIndex(
(e) => e.id == row.id
);
if (index > -1)
this.$set(this.basicInfo.userInfoList, index, row);
}
});
});
}
},
//执行情况
getExecute(row) {
this.instance
.post("/app/appworktaskuserinfo/queryDetailById", null, {
params: {
id: row.detailId,
},
})
.then((res) => {
if (res.code == 0) {
this.executeDialog = true;
this.executeInfo = res.data;
this.executeInfo.detailId = this.executeInfo.id
}
});
},
updateDescription() {
this.instance
.post(`/app/appworktaskuserinfo/updateDoDescription`, {
id: this.executeInfo.detailId,
doDescription: this.sayInfo.doDescription,
})
.then((res) => {
if (res.code == 0) {
this.innerVisible = false;
}
});
},
//中止任务-取消任务-退回任务
overTask(formName) {
let url = ``;
if (this.REttitle == "任务完成情况") {
url = `/app/appworktaskuserinfo/confirm`;
var obj = {
taskCode: this.params.taskCode,
finishDescription: this.writeInfo.finishDescription,
lastTime: this.basicInfo.lastTime,
};
} else if (this.REttitle == "关闭任务") {
url = `/app/appworktaskinfo/stopOrFinish`;
var obj = {
id: this.params.id,
status: "2",
closeDescription: this.writeInfo.finishDescription,
};
} else if (this.REttitle == "取消任务") {
url = `/app/appreporttaskinfo/cancelTaskById`;
var obj = {
id: this.params.id,
...this.writeInfo,
};
}
this.instance
.post(
url,
{
...obj,
},
null
)
.then((res) => {
if (res.code == 0) {
this.$message.success(this.REttitle + "成功");
if (this.REttitle == "退回任务") {
this.searchDetail(this.params.id);
} else {
this.onBack();
}
this.suspendDialog = false;
}
});
},
//确认完成
markCompleted(type) {
this.$confirm(
"标记完成后,本次任务变成已完成,任务结果将锁定无法修改,请确保所有执行人已经完成任务,是否继续?",
{
type: "success",
title: "标记完成",
}
).then(() => {
this.instance
.post(
"/app/appworktaskinfo/stopOrFinish",
{
id: this.params.id,
status: type,
},
null
)
.then((res) => {
if (res.code == 0) {
this.$message.success("已标记完成");
this.onBack();
}
});
});
},
//删掉执行单位
deleteUnit(row) {
this.$confirm("是否确认删除此人?", {
type: "warning",
}).then(() => {
this.instance
.post("/app/appworktaskuserinfo/delete", null, {
params: {
ids: row.detailId,
},
})
.then((res) => {
if (res.code == 0) {
this.$message.success("删除成功");
this.searchDetail(this.params.id);
}
});
});
},
surePersonalFn() {
this.lastPersonalList = this.tags;
this.lastPersonalList.forEach((item, index) => {
this.lastPersonalList[index].taskCode = this.params.taskCode;
this.lastPersonalList[index].taskRole = this.taskRole;
});
if (this.lastPersonalList.length > 0) {
this.instance
.post(
`/app/appworktaskuserinfo/addUserInfos`,
this.lastPersonalList
)
.then((res) => {
if (res.code == 0) {
this.$message.success("保存成功");
this.showSelectPer = false;
this.searchDetail(this.params.id);
}
});
} else {
this.$message.error("增加人数不能为空");
}
},
surePersonal() {
debounce(this.surePersonalFn(), 3000);
},
downFileAll () {
if (this.basicInfo.fileList.length > 0) {
this.instance.post('/app/appofficialdocumentinfo/downLoadAllFileForDetail', null, {
responseType: 'blob',
params: {
id: this.basicInfo.id
}
}).then((res) => {
const link = document.createElement('a')
let blob = new Blob([res], { type: 'application/vnd.ms-excel' })
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
var num = ''
for (let i = 0; i < 10; i++) {
num += Math.ceil(Math.random() * 10)
}
link.setAttribute('download', '工作文件' + '.zip')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
} else {
this.$message.error('暂无附件提供下载')
}
},
downFile(item) {
window.open(item.url);
},
onBack() {
if(this.detailType == 'detail') { //从父任务
this.$emit("back");
}else { //列表
this.$emit('change', {
type: 'list',
})
}
},
toParent() {
if(this.detailType == 'detail') { //从父任务
this.$emit("back");
}else { //列表
this.$emit('change', {
type: 'Detail',
params: {
type: 'Detail',
id: this.parentInfo.id,
fromType: 'SonDetail',
sonDetailId: this.params.id
}
})
}
},
confirmAdd(type) {
if(this.addUserList.length>0){
this.addUserList.map((item) => {
item.taskRole = type
item.taskCode = this.basicInfo.taskCode;
})
this.instance.post(`/app/appworktaskuserinfo/addUserInfos`,this.addUserList).then(res => {
if(res.code==0){
this.addUserList = []
this.$message.success('保存成功');
this.searchDetail();
}
});
}else{
this.$message.error("增加人数不能为空")
}
},
closeWork() {
this.$confirm("任务关闭后无法恢复,确定关闭?", {
type: "error",
}).then(() => {
this.REttitle = "关闭任务"
this.overTask()
});
}
},
};
</script>
<style scoped lang="scss">
.especial {
margin-bottom: 12px;
.icon {
vertical-align: top;
display: inline-block;
padding-top: 5px;
margin-left: 20px;
color: #f46;
}
.people {
display: inline-block;
font-size: 14px;
color: #666;
margin-right: 16px;
vertical-align: top;
}
.AiWechatSelecter {
display: inline-block;
margin-left: 3px;
}
.hint {
font-size: 14px;
color: #999;
margin-left: 16px;
}
.mar-r40 {
margin-right: 40px;
}
.w80 {
width: 80px;
text-align: right;
color: #888;
}
}
.add-icon {
text-align: right;
cursor: pointer;
i {
font-size: 14px;
}
}
.color1 {
color: #4b87fe;
}
.color2 {
color: #2ea222;
}
.color3 {
color: #999999;
}
.echart {
width: 100%;
height: 240px;
}
.AiWechatSelecter{
width: calc(100% - 150px);
}
</style>