cma_search/client/src/views/supervisionNew/taskdo.vue

1137 lines
40 KiB
Python
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 class="app-container">
<!-- 任务详情 -->
<el-card>
<div slot="header" class="clearfix">
<span>任务详情</span>
</div>
<div style="margin-left: 10px; margin-right: 10px">
<el-row :gutter="20">
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">任务类型</span>
<span class="desc" v-if="task.type==10">目标制定</span>
<span class="desc" v-else>日常监督</span>
</div>
</el-col>
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">年份</span>
<span class="desc"> {{ task.year }}</span>
</div>
</el-col>
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">周期</span>
<span class="desc"> {{ cycleOptions[task.cycle] }}</span>
</div>
</el-col>
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">截止日期</span>
<span class="desc"> {{ task.end_date }}</span>
</div>
</el-col>
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">任务状态</span>
<span class="desc">
<el-tag
effect="plain"
v-if="task.state == 10"
type="warning"
>创建中
</el-tag>
<el-tag
effect="plain"
v-else-if="task.state == 20"
type="primary"
>执行中
</el-tag>
<el-tag effect="plain" v-else type="success">已关闭</el-tag>
</span>
</div>
</el-col>
<el-col :span="6">
<div style="margin-bottom: 6px">
<span class="term">创建人</span>
<span class="desc">{{ task.create_by_name }}</span>
</div>
</el-col>
<el-col :span="8">
<!-- 功能按钮 -->
<div style="margin-top: 4px">
<el-button
type="primary"
@click="startTask()"
v-if="task.state != 30"
size="small"
>发布任务</el-button>
<el-button
type="primary"
@click="append()"
v-if="task.state ==10 || task.state == 20"
size="small"
>添加执行部门</el-button>
<el-button
type="primary"
@click="handleExportAll()"
v-loading="isSaving"
size="small"
>导出记录</el-button>
</div>
</el-col>
</el-row>
</div>
</el-card>
<!-- 执行组织 -->
<el-card style="margin-top: 2px">
<div slot="header" class="clearfix">
<span>执行组织</span>
</div>
<el-table
v-loading="listLoading"
:data="taskdeptall"
border
fit
stripe
highlight-current-row
max-height="300px"
@row-click="clickRow"
>
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="公司名称">
<template slot-scope="scope" v-if="scope.row.belong_dept_">
<span style="color:darkblue">{{scope.row.belong_dept_.type_name}}</span>-
{{scope.row.belong_dept_.name}}
</template>
</el-table-column>
<el-table-column label="执行进度">
<template slot-scope="scope">
{{ scope.row.pross }}%
</template>
</el-table-column>
<el-table-column label="是否完成">
<template slot-scope="scope">
<el-tag v-if="scope.row.count_up<scope.row.count_all " type="danger" effect="plain"></el-tag>
<el-tag v-else effect="plain"></el-tag>
</template>
</el-table-column>
<el-table-column
align="center"
label="操作"
width="240px"
fixed="right"
>
<template slot-scope="scope">
<!--
<el-link
v-if="
scope.row.confirm_rate == 100 &&
checkPermission(['task_update'])
"
type="primary"
size="small"
@click="handleConfirmFK(scope)"
>反馈</el-link
> -->
<el-link
type="primary"
size="small"
@click.stop="handleExport(scope.row)"
>导出报表</el-link>
<el-link
v-if="
checkPermission(['task2'])
"
type="danger"
size="small"
@click="handleDeleteDept(scope)"
>删除</el-link
>
</template>
</el-table-column>
</el-table>
<el-dialog
:visible.sync="dialogVisibles"
>
<el-form
ref="Forms"
:model="Taskdept"
label-width="80px"
label-position="right"
>
<el-form-item label="反馈文件" prop="template" v-if="dialogVisibles">
<el-upload
ref="upload"
:action="upUrl"
:on-preview="handlePreview"
:on-success="handleUpSuccess"
:on-remove="handleRemove"
:headers="upHeaders"
:file-list="fileList"
:limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx"
>
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisibles = false">取消</el-button>
<el-button type="primary" @click="confirmfk('Forms')">确认</el-button>
</div>
</el-dialog>
</el-card>
<!-- 执行详情 -->
<el-card style="margin-top: 2px" v-if="task.type==10">
<div slot="header" class="clearfix">
<span>执行详情</span>
</div>
<el-table
v-loading="listLoading2"
:data="recordList"
border
fit
stripe
highlight-current-row
max-height="400px"
style="margin-top:2px"
id="tableGoal"
@selection-change="handleSelectRecords"
>
<!-- <el-table-column type="selection" align="center" width="55" /> -->
<el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="名称">
<template slot-scope="scope">{{ scope.row.goal_name }}</template>
</el-table-column>
<el-table-column label="基础值">
<template slot-scope="scope">{{ scope.row.goal_value_a }}</template>
</el-table-column>
<el-table-column label="目标值">
<template slot-scope="scope">{{ scope.row.goal_value_b }}</template>
</el-table-column>
<el-table-column label="文件">
<template slot-scope="scope" v-if="scope.row.goal_file_">
<el-link :href="scope.row.goal_file_.path" target="_blank" type="primary">
{{scope.row.goal_file_.name}}</el-link>
</template>
</el-table-column>
</el-table>
</el-card>
<div style="margin-top: 2px" v-else>
<el-card>
<div>
<span>执行详情</span>
</div>
<p>
<el-col :span="4">
<p>重大事故{{ task2doItem.num_acc }} </p>
<p>风险识别{{ task2doItem.num_risk }} </p>
</el-col>
<el-col :span="4">
<p>应发报告{{ task2doItem.num_expect }} </p>
<p>已发报告{{ task2doItem.num_issue }} </p>
</el-col>
<el-col :span="4">
<p>不准确报告{{ task2doItem.num_error }} </p>
<p>超期报告{{ task2doItem.num_overdue }} </p>
</el-col>
<el-col :span="4">
<p>能力验证结果{{ task2doItem.num_pt }} </p>
<p>验证结果满意{{ task2doItem.num_pt_10 }} </p>
</el-col>
<el-col :span="4">
<p>客户投诉{{ task2doItem.num_complaint }} </p>
<p>投诉结果满意{{ task2doItem.num_complaint_10 }} </p>
</el-col>
<el-col :span="4">
<p>外部监督检查{{ task2doItem.num_oinspect }} </p>
</el-col>
</p>
</el-card>
<el-row :gutter="5">
<el-col :span="12" style="margin-top: 5px;">
<el-card >
<div class="cardHead">
<span class="cardTitle">不准确报告</span>
</div>
<el-table
:data="rcList"
fit
stripe
highlight-current-row
height="250px"
id="table1"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="报告/证书编号" prop="number"></el-table-column>
<el-table-column label="更改后报告/证书编号" prop="number_correct"></el-table-column>
<el-table-column label="出错原因" prop="reason_error"></el-table-column>
<el-table-column label="更改报告/证书发放日期" prop="date_issue"></el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="12" style="margin-top: 5px;">
<el-card>
<div class="cardHead">
<span class="cardTitle">超期报告</span>
</div>
<el-table
:data="rc2List.results"
fit
stripe
highlight-current-row
height="219px"
id="table2"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="超期报告/证书编号" prop="number"></el-table-column>
<el-table-column label="业务受理日期" prop="date_accept"></el-table-column>
<el-table-column label="报告/证书应发日期" prop="date_expect"></el-table-column>
<el-table-column label="报告/证书实际发放日期" prop="date_issue"></el-table-column>
</el-table>
<pagination
:total="rc2List.count"
:page-sizes="pageSizes"
:page.sync="rc2ListQuery.page"
:limit.sync="rc2ListQuery.page_size"
@pagination="getRc2List"
/>
</el-card>
</el-col>
<el-col :span="12" style="margin-top: 5px;">
<el-card>
<div class="cardHead">
<span class="cardTitle">能力验证结果</span>
</div>
<el-table
:data="ptList"
fit
stripe
highlight-current-row
height="250px"
id="table3"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="能力验证名称" prop="name"></el-table-column>
<el-table-column label="项目编号" prop="number"></el-table-column>
<el-table-column label="组织方" prop="organizer"></el-table-column>
<el-table-column label="参加参数名称" prop="params"></el-table-column>
<el-table-column label="结果">
<template slot-scope="scope">
<span>{{ resultsOptions[scope.row.result] }}</span>
</template>
</el-table-column>
<el-table-column label="处理结果">
<template slot-scope="scope">
<span>{{ handleOptions[scope.row.handle_result] }}</span>
</template>
</el-table-column>
<el-table-column label="证书日期" prop="certificate_date"></el-table-column>
<el-table-column label="领域">
<template slot-scope="scope">
<span>{{ fileOptions[scope.row.field] }}</span>
</template>
</el-table-column>
<el-table-column label="是否A类">
<template slot-scope="scope">
<el-tag v-if="scope.row.a_class" type="primary"></el-tag>
<el-tag v-else type="warning"></el-tag>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="12" style="margin-top: 5px;">
<el-card>
<div class="cardHead">
<span class="cardTitle">客户投诉</span>
</div>
<el-table
:data="complaintList"
fit
stripe
highlight-current-row
height="250px"
id="table4"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="投诉人/机构" prop="complainant"></el-table-column>
<el-table-column label="投诉内容" prop="content"></el-table-column>
<el-table-column label="投诉日期" prop="date_occurrence"></el-table-column>
<el-table-column label="处理结果反馈日期" prop="date_feedback"></el-table-column>
<el-table-column label="客户是否满意">
<template slot-scope="scope">
<el-tag v-if="scope.row.is_satisfied" type="primary">满意</el-tag>
<el-tag v-else type="warning">不满意</el-tag>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="12" style="margin-top: 5px;">
<el-card>
<div class="cardHead">
<span class="cardTitle">风险识别</span>
</div>
<el-table
:data="riskList"
fit
stripe
highlight-current-row
height="250px"
id="table5"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="风险事实描述" prop="content"></el-table-column>
<el-table-column label="风险类别">
<template slot-scope="scope">
<span>{{ levelOptions[scope.row.level] }}</span>
</template>
</el-table-column>
<el-table-column label="风险代码" prop="code"></el-table-column>
<el-table-column label="整改情况">
<template slot-scope="scope">
<span>{{ codeOptions[scope.row.state] }}</span>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="12" style="margin-top: 5px;">
<el-card>
<div class="cardHead">
<span class="cardTitle">外部监督检查</span>
</div>
<el-table
:data="oinspectList"
fit
stripe
highlight-current-row
height="250px"
id="table6"
>
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="检查分类">
<template slot-scope="scope">
<span>{{ cateOptions[scope.row.cate] }}</span>
</template>
</el-table-column>
<el-table-column label="检查机构" prop="checker"></el-table-column>
<el-table-column label="检查日期" prop="date_inspect"></el-table-column>
<el-table-column label="检查结果" prop="result"></el-table-column>
<el-table-column label="结果日期" prop="result_date"></el-table-column>
<el-table-column label="检查通知单" prop="notification_form"></el-table-column>
<el-table-column label="检查结果告知单" prop="result_form">
<template slot-scope="scope">
<el-link
type="primary"
@click = "openPDF(scope.row.result_form)"
v-if="scope.row.result_form">
查看PDF
</el-link>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</div>
<!-- 添加执行组织 -->
<el-dialog
:visible.sync="dialogVisible"
:title="dgaction.name"
:close-on-click-modal="false"
width="1100px"
>
<el-transfer
v-model="depts"
:data="deptOptions"
:titles="['单位列表', '选择的单位']"
:props="{ key : 'id' , label: 'name' }"
>
<span slot-scope="{ option }">{{ option.sort }} - {{ option.name }}</span>
</el-transfer>
<div style="text-align: right">
<el-button type="primary" @click="confirm()">确认</el-button>
</div>
</el-dialog>
<!-- 记录 -->
<el-drawer
title="记录"
:visible.sync="drawer"
:with-header="false"
size="40%"
>
<recorddo
ref="recorddo"
:data="data"
@handleDo="handleDo"
v-if="drawer"
></recorddo>
</el-drawer>
</div>
</template>
<style >
.term {
color: rgba(0, 0, 0, 0.85);
font-weight: bold;
font-size: 16px;
}
.desc {
color: rgba(0, 0, 0, 0.65);
font-weight: bold;
font-size: 16px;
}
.litem {
margin-bottom: 4px;
margin-left: 2px;
cursor: pointer;
color: #409eff;
}
</style>
<script>
import { getOrgList } from "@/api/org";
import { getTask2, addDeptsTask2, getTask2Do, startTask2, confirmTaskdept ,deleteTask2Do,
getPgoalDeptList,getRcList,getPtList,getRiskList,getComplaintList,getOinspectList} from "@/api/task";
import Pagination from "@/components/Pagination";
import checkPermission from "@/utils/permission";
import recorddo from "@/views/supervision/recorddo";
import { upUrl, upHeaders } from "@/api/file";
import FileSaver from "file-saver";
import * as XLSX from "xlsx";
export default {
components: { Pagination, recorddo },
data() {
return {
task: { id: 0 },
dialogVisible: false,
dialogVisibles: false,
dialogType: "new",
activeName: "contenttab",
contents: [],
depts: [],
isSaving:false,
listLoading: false,
listLoading2: false,
recordList: [],
nowcontent: {},
nowdept: {},
drawer: false,
data: {},
taskdeptall: [],
listQuery:{},
selectRecords:[],
dgaction:{
action:'start',
name:'开始任务'
}
,
upHeaders: upHeaders(),
upUrl: upUrl(),
fileList:[],
Taskdept:{is_yes:true},
statusOptios:{
10:'创建中',
20:'进行中',
30:'已关闭',
},
cycleOptions:{
0:'',
1:'1-2月',
2:'3-4月',
3:'5-6月',
4:'7-8月',
5:'9-10月',
6:'11-12月',
},
resultsOptions:{
10:'满意',
20:'有问题',
30:'不满意'
},
fileOptions:{
0:'建工',
10:'建材',
20:'环境',
30:'食农',
},
handleOptions:{
0:'/',
10:'已整改',
20:'被暂停',
30:'已被撤销认可资格',
},
levelOptions:{
10:'主要风险',
20:'严重风险',
30:'重大风险'
},
codeOptions:{
10:'未整改',
20:'整改中',
30:'整改完成'
},
cateOptions:{
10:'市场监管部门检查',
20:'行业主管部门检查',
30:'其他检查'
},
task2do:'',
depts: [],
deptOptions: [],
task2doItem:{},
rcList:[],//报告证书{应发/超期}
rc2List:{},
ptList:[],//能力验证
riskList:[],//风险
complaintList:[],//投诉
oinspectList:[],//外部监查
rc2ListQuery:{
page: 1,
page_size: 20,
},
};
},
created() {
this.task.id = this.$route.params.id;
this.gettask();
},
mounted(){
this.gettaskdeptall();
},
methods: {
checkPermission,
gettask() {
getTask2(this.task.id).then((res) => {
this.task = res.data;
if (this.task.state == "创建中") {
this.dialogVisible = true;
}
});
},
openPDF(path) {
if(path){
window.open(path);
}else{
this.$message.warning("无效文件路径");
}
},
getOrgList() {
getOrgList({can_supervision:true}).then((res) => {
this.deptOptions = res.data;
});
},
gettaskdeptall() {
this.listLoading = true;
getTask2Do({task2:this.task.id,page:0})
.then((res) => {
this.listLoading = false;
this.taskdeptall = [];
let taskdept = res.data;
taskdept.forEach(item=>{
let obj = item;
let pross = Number((item.count_up/item.count_all).toFixed(4))
obj.pross = parseFloat((pross*100).toPrecision(12));
this.taskdeptall.push(obj);
})
})
.catch((e) => {
this.listLoading = false;
});
},
append() {
this.dgaction ={
action:'append',
name:'追加执行组织'
}
this.getOrgList();
this.dialogVisible = true;
},
startTask() {
this.$confirm("确认发布任务吗?", "提示")
.then(async () => {
await startTask2(this.task.id);
location.reload();
this.$message.success("成功");
})
.catch((err) => {
console.error(err);
});
},
handleRecord(data) {
this.data = data;
this.drawer = true;
},
handleDo(data) {
this.drawer = false;
this.gettask();
this.gettaskdeptall();
this.getRecordList();
},
getRecordList() {
getPgoalDeptList(this.listQuery)
.then((res) => {
this.listLoading2 = false;
let data = res.data.results;
for(let i=0;i<data.length;i++){
if(data[i].goal_key!=="pgoal_1"){
let value_a = data[i].goal_value_a+'';
let value_b = data[i].goal_value_b+'';
if(value_a!=='null'){
data[i].goal_value_a=value_a.indexOf('.')>-1?value_a:value_a+'.0';
}else{
data[i].goal_value_a=''
}
if(value_b!='null'){
data[i].goal_value_b=value_b.indexOf('.')>-1?value_b:value_b+'.0';
}else{
data[i].goal_value_b='';
}
}
}
this.recordList = data;
})
.catch((e) => {
this.listLoading2 = false;
});
},
clickRow(row) {
this.listLoading2 = true;
this.listQuery = { task2do: row.id };
if(this.task.type==10){
this.getRecordList();
}else if(this.task.type==20){
this.task2doItem = row;
this.task2do = row.id;
this.getPtList();
this.getRcList();
this.getRc2List();
this.getRiskList();
this.getComplaintList();
this.getOinspectList();
}
},
handleExport(row){
let name = row.belong_dept_.name;
let filename = name+'.xlsx';
this.listQuery = { task2do: row.id };
if(this.task.type==10){
getPgoalDeptList(this.listQuery).then((res) => {
this.recordList = res.data.results;
setTimeout(function(){
let wb = XLSX.utils.table_to_book(document.getElementById('tableGoal'),{row:true})
XLSX.writeFile(wb, filename)
},100)
}).catch((e) => {});
}else if(this.task.type==20){
this.task2doItem = row;
this.task2do = row.id;
this.getPtList();
this.getRcList();
this.getRc2List();
this.getRiskList();
this.getComplaintList();
this.getOinspectList();
setTimeout(function(){
let str = `重大事故,风险识别,应发报告,已发报告,不准确报告,超期报告,能力验证结果,验证结果满意,客户投诉,投诉结果满意,外部监督检查\n`;
str+=row.num_acc+'\t,';
str+=row.num_risk+'\t,';
str+=row.num_expect+'\t,';
str+=row.num_issue+'\t,';
str+=row.num_error+'\t,';
str+=row.num_overdue+'\t,';
str+=row.num_pt+'\t,';
str+=row.num_pt_10+'\t,';
str+=row.num_complaint+'\t,';
str+=row.num_complaint_10+'\t,';
str+=row.num_oinspect+'\t';
let uri = 'data:application/vnd.ms-excel;charset=utf-8,\ufeff' + encodeURIComponent(str);
const link = document.createElement("a");
link.href = uri;
// 对下载的文件命名
link.download = row.belong_dept_.name+"统计.xls";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
let wb = XLSX.utils.book_new();
let sheet = XLSX.utils.table_to_sheet(document.getElementById('table1'), {row:true});
let sheet2 = XLSX.utils.table_to_sheet(document.getElementById('table2'), {row:true});
let sheet3 = XLSX.utils.table_to_sheet(document.getElementById('table3'), {row:true});
let sheet4 = XLSX.utils.table_to_sheet(document.getElementById('table4'), {row:true});
let sheet5 = XLSX.utils.table_to_sheet(document.getElementById('table5'), {row:true});
let sheet6 = XLSX.utils.table_to_sheet(document.getElementById('table6'), {row:true});
XLSX.utils.book_append_sheet(wb, sheet,'不准确报告')
XLSX.utils.book_append_sheet(wb, sheet2,'超期报告')
XLSX.utils.book_append_sheet(wb, sheet3,'能力验证结果')
XLSX.utils.book_append_sheet(wb, sheet4,'客户投诉')
XLSX.utils.book_append_sheet(wb, sheet5,'风险识别')
XLSX.utils.book_append_sheet(wb, sheet6,'外部监督检查')
let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${filename}`)
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
},500)
}
},
handleExportAll(){
let that = this;
that.isSaving = true;
let filename = '任务统计.xlsx';
let wb = XLSX.utils.book_new();
getRcList({task2do__task2:that.task.id,etype:10,page:0}).then((res) => {
let rcList =res.data;
let sheetObject1 = [{
'序号': '',
'报告/证书编号': '',
'更改后报告/证书编号': '',
'出错原因': '',
'更改报告/证书发放日期': '',
'单位名称': '',
}];
if (rcList.length > 0) {
sheetObject1 = rcList.map((item1, index1) => {
return {
'序号': index1 + 1,
'报告/证书编号': item1.number,
'更改后报告/证书编号': item1.number_correct,
'出错原因': item1.reason_error,
'更改报告/证书发放日期': item1.date_issue,
'单位名称': item1.belong_dept_name,
};
});
}
let sheet1 = XLSX.utils.json_to_sheet(sheetObject1);
XLSX.utils.book_append_sheet(wb, sheet1, "不准确报告");
getRcList({task2do__task2:that.task.id,etype:20,page:0}).then((res) => {
let rc2List =res.data;
let sheetObject2 = [{
'序号': '',
'超期报告/证书编号': '',
'业务受理日期': '',
'报告/证书应发日期': '',
'报告/证书实际发放日期': '',
'单位名称': '',
}];
if (rc2List.length > 0) {
sheetObject2 = rc2List.map((item2, index2) => {
return {
'序号': index2 + 1,
'超期报告/证书编号': item2.number,
'业务受理日期': item2.date_accept,
'报告/证书应发日期': item2.date_expect,
'报告/证书实际发放日期': item2.date_issue,
'单位名称': item2.belong_dept_name,
};
});
}
let sheet2 = XLSX.utils.json_to_sheet(sheetObject2);
XLSX.utils.book_append_sheet(wb, sheet2, "超期报告");
getPtList({task2do__task2:that.task.id,page:0}).then((res) => { //能力验证结果
let ptList =res.data;
let sheetObject3 = [{
'序号': '',
'能力验证名称': '',
'项目编号': '',
'组织方': '',
'参加参数名称': '',
'结果': '',
'处理结果': '',
'单位名称': '',
'证书日期': '',
'领域': '',
'是否A类': '',
}];
if (ptList.length > 0) {
sheetObject3 = ptList.map((item3, iindex3) => {
let result = item3.result==10?'满意':item3.result==20?'有问题':'不满意';
let handle_result = item3.result==0?'/':item3.result==10?'已整改':item3.result==20?'被暂停':'已被撤销认可资格';
return {
'序号': iindex3 + 1,
'能力验证名称': item3.name,
'项目编号': item3.number,
'组织方': item3.organizer,
'参加参数名称': item3.params,
'结果': result,
'处理结果': handle_result,
'单位名称': item3.belong_dept_name,
'证书日期': item3.certificate_date,
'领域': item3.field,
'是否A类': item3.a_class
};
});
}
let sheet3 = XLSX.utils.json_to_sheet(sheetObject3);
XLSX.utils.book_append_sheet(wb, sheet3, "能力验证结果");
getComplaintList({task2do__task2:that.task.id,page:0}).then((res) => {
let complaintList =res.data;
let sheetObject4 = [{
'序号': '',
'投诉人/机构': '',
'投诉内容': '',
'投诉日期': '',
'处理结果反馈日期': '',
'客户是否满意': '',
'单位名称': '',
}];
if (complaintList.length > 0) {
sheetObject4 = complaintList.map((item4, index4) => {
let is_satisfied = item4.is_satisfied?'满意':'不满意';
return {
'序号': index4 + 1,
'投诉人/机构': item4.complainant,
'投诉内容': item4.content,
'投诉日期': item4.date_occurrence,
'处理结果反馈日期': item4.date_feedback,
'客户是否满意':is_satisfied,
'单位名称': item4.belong_dept_name,
};
});
}
let sheet4 = XLSX.utils.json_to_sheet(sheetObject4);
XLSX.utils.book_append_sheet(wb, sheet4, "客户投诉");
getRiskList({task2do__task2:that.task.id,page:0}).then((res) => {
let riskList =res.data;
let sheetObject5 = [{
'序号': '',
'风险事实描述': '',
'风险类别': '',
'风险代码': '',
'整改情况': '',
'单位名称': '',
}];
if (riskList.length > 0) {
sheetObject5 = riskList.map((item5, index5) => {
let level = item5.level==10?'主要风险':item5.level==20?'严重风险':'重大风险';
let state = item5.state==10?'未整改':item5.level==20?'整改中':'整改完成';
return {
'序号': index5 + 1,
'风险事实描述': item5.content,
'风险类别': level,
'风险代码': item5.code,
'整改情况': state,
'单位名称': item5.belong_dept_name,
};
});
}
let sheet5 = XLSX.utils.json_to_sheet(sheetObject5);
XLSX.utils.book_append_sheet(wb, sheet5, "风险识别");
getOinspectList({task2do:that.task2do,page:0}).then((res) => {
let oinspectList =res.data;
let sheetObject6 = [{
'序号': '',
'检查分类': '',
'检查机构': '',
'检查日期': '',
'检查结果': '',
'检查日期': '',
'单位名称': '',
}];
if (oinspectList.length > 0) {
sheetObject6 = oinspectList.map((item6, index6) => {
let cate = item6.cate==10?'市场监管部门检查':item6.cate==20?'行业主管部门检查':'其他检查';
return {
'序号': index6 + 1,
'检查分类': cate,
'检查机构': item6.checker,
'检查日期': item6.date_inspect,
'检查结果': item6.result,
'结果日期': item6.result_date,
'单位名称': item6.belong_dept_name,
};
});
}
let sheet6 = XLSX.utils.json_to_sheet(sheetObject6);
XLSX.utils.book_append_sheet(wb, sheet6, "外部监督检查");
let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${filename}`)
that.isSaving = false;
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
return wbout
});
});
});
});
});
});
},
getRcList(){
let that = this;
getRcList({task2do:that.task2do,etype:10,page:0}).then((res) => {
that.rcList =res.data;
});
},
getRc2List(){
let that = this;
let obj = {};
obj.task2do = that.task2do;
obj.etype = 20;
obj.page = that.rc2ListQuery.page;
obj.page_size = that.rc2ListQuery.page_size;
getRcList(obj).then((res) => {
if (res.code >= 200) {
that.rc2List =res.data;
}
});
},
getPtList(){
let that = this;
getPtList({task2do:that.task2do,page:0}).then((res) => {
if (res.code >= 200) {
that.ptList=res.data;
}
});
},
getRiskList(){
let that = this;
getRiskList({task2do:that.task2do,page:0}).then((res) => {
if (res.code >= 200) {
that.riskList = res.data;
}
});
},
getComplaintList(){
let that = this;
getComplaintList({task2do:that.task2do,page:0}).then((res) => {
if (res.code >= 200) {
that.complaintList = res.data;
}
});
},
getOinspectList(){
let that = this;
getOinspectList({task2do:that.task2do,page:0}).then((res) => {
if (res.code >= 200) {
that.oinspectList=res.data;
}
});
},
handleSelectRecords(val){
let selects = [];
for (var i = 0; i < val.length; i++) {
selects.push(val[i].id);
}
this.selectRecords = selects;
},
// handleConfirmDept(scope){
// confirmTaskdept(scope.row.id).then(res=>{
// this.getRecordList()
// this.gettaskdeptall()
// })
// },
//反馈意见
handlePreview(file) {
if ("url" in file) {
window.open(file.url);
} else {
window.open(file.response.data.path);
}
},
handleUpSuccess(res, file, filelist) {
this.Taskdept.file = res.data.path;
this.filename = res.data.name;
},
handleRemove(file, filelist){
this.Taskdept.file = null;
},
handleConfirmFK(scope){
this.Taskdept = Object.assign({}, scope.row); // copy obj
this.dialogVisibles = true;
if (this.Taskdept.file) {
this.fileList = [
{
name:"反馈文件",
url: this.Taskdept.file,
},
];
}
this.$nextTick(() => {
this.$refs["Forms"].clearValidate();
});
},
async confirmfk(form) {
this.$refs[form].validate((valid) => {
console.log(this.Taskdept)
this.Taskdept.is_yes=true;
updateTaskdept(this.Taskdept.id,this.Taskdept).then((res) => {
if (res.code >= 200) {
this.gettaskdeptall()
this.dialogVisibles = false;
this.$message.success("成功");
}
});
});
},
handleDeleteDept(scope){
this.$confirm("确认删除该部门吗?", "提示")
.then(async () => {
deleteTask2Do(scope.row.id).then(res=>{
this.gettaskdeptall();
this.$message.success("成功");
})
})
.catch((err) => {
console.error(err);
});
},
handleUp2(){
if (this.selectRecords.length) {
this.$prompt('请输入备注内容', '提示').then(({ value }) => {
updateRecords({note:value, ids:this.selectRecords}).then(res=>{
this.$message.success('成功')
this.getRecordList();
})
}).catch(() => {
});
} else {
this.$message({
message: "请先选择",
type: "warning",
});
}
},
confirm(){
if(this.depts.length>0){
let data = {ids:this.depts}
// this.task.depts = this.depts;
this.chooseComplete(data)
}else{
this.$message.error('请选择清单和单位!')
}
},
chooseComplete(data) {
this.dialogVisible = false;
const rLoading = this.openLoading("正在添加执行组织,请稍等...");
addDeptsTask2(this.task.id, data).then((res) => {
rLoading.close();
this.$message.success("成功");
this.$router.go(0);
}).catch(e=>{rLoading.close();});
},
},
};
</script>