cma_search/client/src/views/ability/qualityTaskDo.vue

595 lines
19 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 class="filterTop">
<div slot="header" class="clearfix">
<span>任务详情</span>
</div>
<div style="margin-left: 10px; margin-right: 10px">
<el-row :gutter="20">
<el-col :span="8">
<div style="margin-bottom: 6px">
<span class="term">任务名称</span>
<span class="desc"> {{ qtask.name }}</span>
</div>
</el-col>
<el-col :span="8">
<div style="margin-bottom: 6px">
<span class="term">截止日期</span>
<span class="desc"> {{ qtask.end_date }}</span>
</div>
</el-col>
<el-col :span="8">
<div style="margin-bottom: 6px">
<span class="term">任务状态</span>
<span class="desc">
<el-tag
effect="plain"
v-if="qtask.state == '待发布'"
type="primary"
>
{{ qtask.state }}
</el-tag>
<el-tag
effect="plain"
v-else-if="qtask.state == '执行中'"
type="success"
>{{ qtask.state }}
</el-tag>
<el-tag effect="plain" v-else type="warning">
{{qtask.state}}
</el-tag>
</span>
</div>
</el-col>
</el-row>
<div style="margin-top: 4px">
<el-button
type="primary"
@click="handleQtaskStart()"
v-if="qtask.state == '待发布'"
size="small"
>
发布任务
</el-button>
</div>
</div>
</el-card>
<el-card style="margin-top: 2px">
<div slot="header" class="clearfix">
<span>执行组织</span>
</div>
<el-table
v-loading="listLoading"
:data="qtaskDepts"
border
fit
stripe
highlight-current-row
:height="tableHeight"
@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.org_">
<span style="color:darkblue">{{scope.row.org_.sort}}</span>-
{{scope.row.org_.name}}
</template>
</el-table-column>
<el-table-column label="报送数">
<template slot-scope="scope"> {{ scope.row.count }}</template>
</el-table-column>
<el-table-column label="确认数">
<template slot-scope="scope">
{{ scope.row.count_confirmed }}
</template>
</el-table-column>
<!--<el-table-column
align="center"
label="操作"
width="240px"
fixed="right"
>
<template slot-scope="scope">
<el-link
type="primary"
size="small"
@click="handleConfirmFK(scope)"
>反馈
</el-link
>
<el-link
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">
<div slot="header" class="clearfix">
<span>执行详情</span>
</div>
<el-table
v-loading="listLoading2"
:data="recordList"
border
fit
stripe
highlight-current-row
:height="tableHeight"
style="margin-top:2px"
@selection-change="handleSelectRecords"
>
<el-table-column label="序号" type="index" align="center" width="55"/>
<el-table-column label="报送类型">
<template slot-scope="scope">
<span v-if="scope.row.action==='ablity:create'">新增能力</span>
<span v-else-if="scope.row.action==='service:update'">更新服务</span>
<span v-else-if="scope.row.action==='quali:update'">更新资质</span>
<span v-else-if="scope.row.action==='quali:create'">新增资质</span>
<span v-else-if="scope.row.action==='ability:nochange'">能力无新增</span>
<span v-else-if="scope.row.action==='quali:nochange'">资质无新增</span>
</template>
</el-table-column>
<el-table-column label="确认情况">
<template slot-scope="scope">
<el-tag v-if="scope.row.confirmed" effect="plain">已确认</el-tag>
<el-tag type="danger" effect="plain" v-else>未确认</el-tag>
</template>
</el-table-column>
<el-table-column label="操作人">
<template slot-scope="scope">
<span v-if=" scope.row.create_by_">{{ scope.row.create_by_.name }}</span>
</template>
</el-table-column>
<el-table-column label="操作时间">
<template slot-scope="scope">{{ scope.row.update_time }}</template>
</el-table-column>
<el-table-column label="文件">
<template slot-scope="scope">
<el-link v-if="scope.row.file_" :href="scope.row.file_.file" target="_blank" type="primary">
{{scope.row.file_.name}}
</el-link>
<span v-if="scope.row.value1">
<el-link v-if="scope.row.value1.file_" :href="scope.row.value1.file_.file" target="_blank" type="primary">
{{scope.row.value1.file_.name}}
</el-link>
</span>
</template>
</el-table-column>
<el-table-column
align="center"
label="操作"
width="240px"
fixed="right"
>
<template slot-scope="scope">
<el-link
v-if="!scope.row.confirmed"
type="success"
size="small"
@click="handleRecord('confirm', scope.row )"
>确认
</el-link>
<el-link
size="small"
@click="handleRecord( 'view', scope.row )"
>查看
</el-link>
<el-link
v-if="!scope.row.confirmed"
type="danger"
size="small"
@click="handleDelete( scope.row.id )"
>删除
</el-link>
</template>
</el-table-column>
</el-table>
</el-card>
<el-drawer
title="记录"
:visible.sync="drawer"
:with-header="false"
size="40%"
>
<div
v-if="showData.type==='quali:nochange'"
style="padding: 10px 20px;position: relative"
>
<p style="font-size: 20px;font-weight: bold;">资质无新增</p>
<el-button
v-if="actionType==='confirm'"
style="position: absolute;right:40px;margin-top: 20px"
type="primary"
@click="confirmClick"
>
确认
</el-button>
</div>
<div
v-if="showData.type==='ability:nochange'"
style="padding: 10px 20px;position: relative"
>
<p style="font-size: 20px;font-weight: bold;">能力无新增</p>
<el-button
v-if="actionType==='confirm'"
style="position: absolute;right:40px;margin-top: 20px"
type="primary"
@click="confirmClick"
>
确认
</el-button>
</div>
<div
v-if="showData.type==='service:update'"
style="padding: 10px 20px;position: relative"
>
<p style="font-size: 20px;font-weight: bold;">更新服务</p>
<p><span style="display: inline-block;width: 100px;font-weight: bold;">原始内容</span>{{showData.data.value1}}</p>
<p><span style="display: inline-block;width: 100px;font-weight: bold;">更新内容</span>{{showData.data.value2}}</p>
<el-divider></el-divider>
<el-button
v-if="actionType==='confirm'"
style="position: absolute;right:40px;margin-top: 20px"
type="primary"
@click="confirmClick"
>
确认
</el-button>
</div>
<div
v-if="showData.type==='ablity:create'"
style="padding: 10px 20px;position: relative"
>
<p style="font-size: 20px;font-weight: bold;">新增能力</p>
<p><span style="display: inline-block;width: 100px;font-weight: bold;">能力类型 </span>{{atype_name}}</p>
<p><span style="display: inline-block;width: 100px;font-weight: bold;">能力领域</span>{{afield_name}}</p>
<p><span style="display: inline-block;width: 160px;font-weight: bold;">新增对象数量</span>{{item.num}}</p>
<p><span style="display: inline-block;width: 160px;font-weight: bold;">新增参数数量</span>{{item.num2}}</p>
<p><span style="display: inline-block;width: 160px;font-weight: bold;">新增方法标准数量</span>{{item.num3}}</p>
<p><span style="display: inline-block;width: 160px;font-weight: bold;">新增产品标准数量</span>{{item.num4}}</p>
<p><span style="display: inline-block;width: 100px;font-weight: bold;">上传文件</span>{{showData.data.file_.name}}</p>
<el-link :href="showData.data.file_.file" target="_blank" type="primary">{{showData.data.file_.name}}</el-link>
<el-divider></el-divider>
<el-button
v-if="actionType==='confirm'"
style="position: absolute;right:40px;margin-top: 20px"
type="primary"
@click="confirmClick"
>
确认
</el-button>
</div>
<quliShow
v-if="drawer&&showData.type==='quali:create'"
ref="quliShow"
:showData="showData"
@handleDo="handleDo"
></quliShow>
<quliShow
v-if="drawer&&showData.type==='quali:update'"
ref="quliShow"
:showData="showData"
:fieldList2="fieldList2"
@handleDo="handleDo"
></quliShow>
</el-drawer>
</div>
</template>
<script>
import {
qtaskStart, qactionList, qtaskDetail,
qactionDelete, qactionItem, qactionConfirm
} from "@/api/ability";
import {getRecordList, updateRecords} from "@/api/record";
import Pagination from "@/components/Pagination";
import checkPermission from "@/utils/permission";
import quliShow from "@/views/ability/quliShow";
import {upUrl, upHeaders} from "@/api/file";
import {getDictList} from "@/api/dict";
export default {
name: 'qualityTaskDo',
components: {Pagination, quliShow},
data() {
return {
dialogVisible: false,
dialogVisibles: false,
dialogType: "new",
activeName: "contenttab",
contents: [],
depts: [],
listLoading: false,
listLoading2: false,
recordList: [],
nowcontent: {},
nowdept: {},
drawer: false,
data: {},
showData: {},
listQuery: {},
selectRecords: [],
dgaction: {
action: 'init',
name: '初始化任务'
},
upHeaders: upHeaders(),
upUrl: upUrl(),
fileList: [],
Taskdept: {is_yes: true},
qtaskId: null,
qtaskDepts: [],
qtask: {},
detailItem: {},
actionType: null,
tableHeight: null,
fieldList2: [],
atypeOptions: {},
afieldOptions: {},
atype_name:'',
afield_name:'',
item:{}
};
},
created() {
this.qtaskId = sessionStorage.getItem('qtaskId');
},
mounted() {
let height1 = document.getElementsByClassName('app-main')[0].clientHeight;
let height2 = document.getElementsByClassName('filterTop')[0].clientHeight;
let computedHeight = height1-height2;
this.tableHeight = computedHeight/2-54;
this.qtaskId = sessionStorage.getItem('qtaskId');
this.getOptions();
this.getQtaskDept();
},
methods: {
//领域类型和领域名称
getOptions() {
getDictList({type__code: "field_type", is_used: true}).then((res) => {
let obj = new Object();
res.data.forEach(item=>{
obj[item.id]=item.name;
});
this.afieldOptions = obj;
debugger;
console.log(this.afieldOptions)
});
getDictList({type__code: "quality_type", is_used: true}).then((res) => {
// this.atypeOptions = res.data;
let obj1 = new Object();
res.data.forEach(item1=>{
obj1[item1.id]=item1.name;
});
this.atypeOptions = obj1;
});
},
checkPermission,
getQtaskDept() {
qtaskDetail({page:1,page_size:9999,qtask: this.qtaskId}).then((res) => {
this.qtaskDepts = res.data.results;
this.qtask = res.data.results[0].qtask_;
});
},
handleQtaskStart() {
this.$confirm("确认发布任务吗?", "提示")
.then(async () => {
await qtaskStart(this.qtaskId);
location.reload();
this.$message.success("成功");
})
.catch((err) => {
console.error(err);
});
},
//操作处理
handleRecord(type, item) {
this.item = item
this.showData.id = item.id;
this.showData.data = item;
this.showData.type = item.action;
this.showData.action = type;
this.actionType = type;
this.fieldList2 =[];
if(item.afield){
debugger;
this.afield_name = this.afieldOptions[item.afield];
}
if(item.atype){
debugger;
this.atype_name = this.atypeOptions[item.atype];
}
qactionItem(item.id).then(res=>{
if (res.code>=200) {
let updateDetail = res.data.update_detail;//更改字段
updateDetail.forEach(item=>{
this.fieldList2.push(item.field);//所有字段
})
this.drawer = true;
}
console.log(this.fieldList2)
})
},
handleDelete(id) {
this.$confirm("确认删除该操作吗?", "提示")
.then(async () => {
await qactionDelete(id).then(res=>{
if(res.code>=200&&res.code<400){
this.getQactionList();
this.$message.success("成功");
}
});
})
.catch((err) => {
console.error(err);
});
},
//操作确认
confirmClick() {
qactionConfirm(this.showData.id).then(res => {
if (res.code>=200) {
this.drawer = false;
this.getQactionList();
}
})
},
handleDo(data) {
console.log(data);
this.drawer = data;
this.getQactionList();
},
getQactionList() {
qactionList(this.listQuery)
.then((res) => {
this.listLoading2 = false;
this.recordList = res.data;
})
.catch((e) => {
this.listLoading2 = false;
});
},
clickRow(row, col, e) {
this.listLoading2 = true;
this.detailItem = row;
this.listQuery = {pageoff: true, qtask: row.qtask, belong_dept: row.org};
this.getQactionList();
},
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.getQactionList();
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) {
deleteTaskdept(scope.row.id).then(res => {
this.gettaskdeptall()
})
},
handleUp2() {
if (this.selectRecords.length) {
this.$prompt('请输入备注内容', '提示').then(({value}) => {
updateRecords({note: value, ids: this.selectRecords}).then(res => {
this.$message.success('成功')
this.getQactionList();
})
}).catch(() => {
});
} else {
this.$message({
message: "请先选择",
type: "warning",
});
}
}
},
};
</script>
<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>