You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-cpt-vue/src/views/purchase/company/supCompanyAduditDialog.vue

865 lines
25 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<el-form
:model="inputQuery"
:rules="rules"
ref="inputQuery"
label-width="100px"
>
<el-card class="el-card" style="margin-top: -25px">
<div style="display: flex;">
<el-button v-if="editType==2" type="primary" size="mini" icon="search" @click="onPassSubmit">审核通过</el-button>
<el-button v-if="editType==2" type="primary" size="mini" @click="onRejectSubmit">审核拒绝</el-button>
<el-button v-if="editType==1 && auditType!=1" type="primary" size="mini" icon="search"
@click="printSupCertAll">打印
</el-button>
</div>
<el-row :gutter="20" class="el-row" type="flex" style="margin-top: 20px">
<el-col :span="10" class="el-col">
<el-form-item label="企业名称:" label-width="150px" prop="companyName">
<el-input
size="small"
splaceholder="请输入内容"
disabled
v-model="inputQuery.companyName"
></el-input>
</el-form-item>
</el-col>
<el-col :span="10" class="el-col">
<el-form-item label="统一社会信用代码:" label-width="150px" prop="creditNum">
<el-input
size="small"
splaceholder="请输入内容" disabled
v-model="inputQuery.creditNum"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" class="el-row" type="flex" style="margin-top: 0px">
<el-col :span="10" class="el-col">
<el-form-item label="企业类别:" label-width="150px" prop="classes">
<el-select
size="small"
v-model="inputQuery.classes" disabled
placeholder="生产企业"
style="width: 100%;"
>
<el-option v-if="classesDisplay" label="医院" value="1"></el-option>
<el-option label="经营企业" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10" class="el-col">
<el-form-item label="所属地区:" label-width="150px" prop="area">
<el-cascader
size="small"
:options="options"
v-model="selectedOptions" disabled
placeholder="请选择所属地区"
style="width: 100%"
@change="handleChange"
>
</el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" class="el-row" type="flex" style="margin-top: 0px">
<el-col :span="10" class="el-col">
<el-form-item label="联系人:" label-width="150px" prop="contacts">
<el-input
size="small"
placeholder="请输入内容" disabled
v-model="inputQuery.contacts"
></el-input>
</el-form-item>
</el-col>
<el-col :span="10" class="el-col">
<el-form-item label="详细地址:" label-width="150px" prop="detailAddr">
<el-input
size="small"
placeholder="请输入内容" disabled
v-model="inputQuery.detailAddr"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" class="el-row" type="flex" style="margin-top: 0px">
<el-col :span="10" class="el-col">
<el-form-item label="联系电话:" label-width="150px" prop="mobile">
<el-input
size="small"
placeholder="请输入内容" disabled
v-model="inputQuery.mobile"
></el-input>
</el-form-item>
</el-col>
<el-col :span="10" class="el-col">
<el-form-item label="邮箱:" label-width="150px" prop="email">
<el-input
size="small"
placeholder="请输入内容" disabled
v-model="inputQuery.email"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" class="el-row" type="flex" style="margin-top: 0px">
<el-col :span="10" class="el-col">
<el-form-item label="角色:" label-width="150px" prop="roleId">
<el-select v-model="inputQuery.roleId" placeholder="请选择角色" style="width: 90%" clearable>
<el-option
v-for="item in roleList"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId">
<span style="float: left">{{ item.roleName }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card>
<div style=" float: right;
text-align: right;
margin-bottom: 8px;"
>
<!-- <el-button type="primary" size="mini" icon="search" @click="addCert"-->
<!-- style="text-align:right"-->
<!-- >添加电子档-->
<!-- </el-button-->
<!-- >-->
</div>
<el-table v-loading="certLoading" :data="certList" ref="certTable" style="width: 100%" border
highlight-current-row>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column type="index" label="序号" width="50"></el-table-column>
<el-table-column label="证书名称" prop="name"></el-table-column>
<el-table-column label="证书编号" prop="code" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="生效期" prop="validDate"></el-table-column>
<el-table-column label="失效期" prop="expireDate"></el-table-column>
<el-table-column label="证书状态" prop="checkStatus">
<template slot-scope="scope">
{{ supStatus[scope.row.checkStatus] }}
</template>
</el-table-column>
<el-table-column label="确认状态" prop="status" width="120">
<template slot-scope="scope">
<el-tag :type="(scope.row.status) | statusFilterType">
{{ checkFlag[scope.row.status] }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark"></el-table-column>
<!-- <el-table-column label="确认说明" prop="auditComment" show-overflow-tooltip></el-table-column>-->
<el-table-column label="操作">
<template slot-scope="scope">
<el-button v-if="editType==1 && auditType!=1" type="text" size="small"
@click.native="printSupCert(scope.row)">打印
</el-button>
<el-button type="text" size="small" v-if="editType==2" @click.native="auditCert(scope.row)">编辑</el-button>
<el-button type="text" size="small" v-if="scope.row.auditStatus==1" @click.native="revoke(scope.row)">
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:page-size="certQuery.limit"
@current-change="certHandleCurrentChange"
layout="prev, pager, next"
:total="certTotal"
>
</el-pagination>
</el-card>
</el-form>
<el-dialog width="60%" :visible.sync="certAuditVisible" append-to-body title="配送企业资质证书确认">
<el-form :model="currentAudit" label-width="120px">
<el-row>
<el-col :span="11">
<el-form-item label="证书名称:" prop="name">
<el-input v-model="currentAudit.name" auto-complete="off"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="证书编号:" prop="code">
<el-input v-model="currentAudit.code" auto-complete="off"
disabled
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="生效期:" prop="validDate">
<el-date-picker
v-model="currentAudit.validDate"
type="date"
disabled
value-format="yyyy-MM-dd"
style="width: 100%"
placeholder="请选择生效期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="失效期:" prop="expireDate">
<el-date-picker
v-model="currentAudit.expireDate"
type="date"
disabled
value-format="yyyy-MM-dd"
style="width: 100%"
placeholder="请选择失效期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="证书状态:" prop="checkStatus">
<el-select v-model="currentAudit.checkStatus" :disabled="isOpen!=1" style="width: 100%">
<el-option label="失效" :value=0></el-option>
<el-option label="有效" :value=1></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item label="确认状态:" prop="status">
<el-select v-model="status" :disabled="isOpen==1" style="width: 100%">
<el-option label="符合" :value="1"></el-option>
<el-option label="不符合" :value="2"></el-option>
<el-option label="未确认" :value="6"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="证书文件:">
<el-button type="primary" size="mini" @click.native="showImgViewer(currentAudit)">证书预览</el-button>
<el-image-viewer v-if="imgViewerVisible" style="z-index:9999" :on-close="closeImgViewer"
:url-list="imgList"/>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-top: 12px">
<el-col :span="22">
<el-form-item label="结果说明:">
<el-input type="textarea" :disabled="isOpen==1" v-model="currentAudit.auditComment" autocomplete="off"
autosize></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirm"></el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
modifyCompany,
auditCompany,
printSupCert,
verifyTemplateFile,
getRoId,
previewImage
} from '../../../api/purchase/supCompany'
import {
provinceAndCityData,
regionData,
provinceAndCityDataPlus,
regionDataPlus,
CodeToText,
TextToCode,
} from "element-china-area-data";
import {filterCompanyCert, deleteCompanyCert, auditSupCert, revokeSupCert} from "../../../api/purchase/companyCert";
import draggable from "vuedraggable";
import {customerlist} from '@/api/system/role'
import store from '@/store'
import ElImageViewer from "element-ui/packages/image/src/image-viewer"
export default {
name: "supCompanyEdit",
props: {
closeDialog: {
type: Function,
required: true,
},
inputQuery: {
type: Object,
required: true,
},
editType: {//1查询页面2:审核页面,
type: Object,
required: true,
},
auditType: {
type: Object,
required: true
}
},
data() {
return {
BASE_URL: process.env.VUE_APP_BASE_API,
headers: {},
imgViewerVisible: false,
imgList: [],
classesDisplay: false,
selectedOptions: [],
options: regionDataPlus,
rules: {
companyName: [
{
required: true,
message: "请输入企业名称",
trigger: "blur"
}
],
creditNum: [
{
required: true,
message: "请输入统一社会信用代码",
trigger: "blur"
}
],
classes: [
{
required: true,
message: "请选择企业类别",
trigger: "change"
}
],
area: [
{
required: true,
message: "请选择所属地区",
trigger: "change"
}
],
detailAddr: [
{
required: true,
message: "请输入详细地址",
trigger: "change"
}
],
contacts: [
{
required: true,
message: "请输入联系人",
trigger: "change"
}
],
mobile: [
{
required: true,
message: "请输入联系电话",
trigger: "change"
}
],
email: [
{
required: true,
message: "请输入邮箱",
trigger: "change"
}
],
updateCause: [
{
required: true,
message: "请输入变更原因",
trigger: "change"
}
],
},
uploadUrl: "",
fileUrl: "",
certFileUrl: "",
url: 'http://127.0.0.1:9996/udiwms/image/register/file/getImage?type=image1&name=t11111.jpg',
certQuery: {
page: 1,
limit: 20
},
certList: [],
roleList: [],
certTotal: 0,
certLoading: false,
addCertVisible: false,
salesmanQuery: {
name: "",
page: 1,
limit: 20
},
salesmanList: [],
salesmanTotal: 0,
salesmanLoading: false,
addSalesmanVisible: false,
certTypeMap: {
1: '身份证'
},
status: null,
selectLocalVisible: false,
productQuery: {
ylqxzcrbarmc: "",
cpmctymc: "",
ggxh: "",
page: 1,
limit: 20
},
productList: [],
productTotal: 0,
productLoading: false,
uuid: null,
companyApplyUpdateVisible: false,
isOpen: false,
companyEditDisabled: true,
companyEditButtonStr: "编辑",
checkFlag: {
0: "草稿",
1: "已确认",
2: "已拒绝",
3: "变更未确认",
6: "未确认",
},
checkSupFlage: {
0: "草稿",
1: "已审核",
2: "已拒绝",
3: "变更未审核",
6: "未审核",
},
supStatus: {
1: "有效",
0: "失效",
},
certAuditVisible: false,
currentAudit: {},
};
},
created() {
this.getRoIds();
this.getCompanyCertList();
this.customerlist();
this.selectedOptions = this.inputQuery.areaCode.split(",");
},
components: {
draggable,
ElImageViewer
},
methods: {
onPassSubmit(val) {
this.inputQuery.auditStatus = 1;
this.$confirm("是否审核通过?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.loading = true;
auditCompany(this.inputQuery).then(response => {
this.loading = false;
if (response.code === 20000) {
this.$message.success("提交成功");
this.closeDialog();
} else {
this.$message.error(response.message);
}
});
}).catch(() => {
});
},
onRejectSubmit() {
this.$prompt('请输入结果说明', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({value}) => {
this.inputQuery.auditComment = value;
this.inputQuery.auditStatus = 2;
auditCompany(this.inputQuery).then(response => {
this.loading = false;
if (response.code === 20000) {
this.$message.success("提交成功");
this.closeDialog();
} else {
this.$message.error(response.message);
}
});
}).catch(() => {
});
}
,
isAssetTypeAnImage(ext) {
return [
'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].indexOf(ext.toLowerCase()) !== -1;
},
showImgViewer(row) {
this.certFileUrl = this.BASE_URL + "/udiwms/image/register/file/getImage?type=image2&name=";
this.imgList = [];
previewImage({imageUrl: row.filePath, certFileUrl: this.certFileUrl}).then(response => {
if (response.code === 20000) {
this.imgList = response.data;
}
});
this.imgViewerVisible = true;
const m = (e) => {
e.preventDefault()
};
document.body.style.overflow = 'hidden';
document.addEventListener("touchmove", m, false); // 禁止页面滑动
},
closeImgViewer() {
this.imgViewerVisible = false;
const m = (e) => {
e.preventDefault()
};
document.body.style.overflow = 'auto';
document.removeEventListener("touchmove", m, true);
},
cancelDialog() {
this.closeDialog();
}
,
closeLocalDialog() {
this.addCertVisible = false;
this.getCompanyCertList();
}
,
handleChange(value) {
this.inputQuery.area =
CodeToText[value[0]] + CodeToText[value[1]] + CodeToText[value[2]];
this.inputQuery.areaCode = value.toString();
}
,
addCert(index, row) {
this.inputQuery.id = '';
if (this.$isNotBlank(row) && this.$isNotBlank(row.id)) {
this.inputQuery.id = row.id;
this.inputQuery.formData = row;
}
this.addCertVisible = true;
}
,
toViewCompanyCert(row) {
this.certFileUrl = this.BASE_URL + "/udiwms/image/register/file/getImage?type=image2&name=";
window.open(this.certFileUrl + row.filePath);
},
auditCert(row) {
this.certAuditVisible = true;
this.currentAudit = row;
this.isOpen = this.currentAudit.auditStatus;
this.status = this.currentAudit.auditStatus;
},
passAuditCert() {
this.currentAudit.auditStatus = 1;
this.auditSupCert(this.currentAudit);
},
rejectAuditCert() {
this.currentAudit.auditStatus = 2;
this.auditSupCert(this.currentAudit);
},
notAuditCert() {
this.currentAudit.auditStatus = 6;
this.auditSupCert(this.currentAudit);
},
auditSupCert(inputQuery) {
auditSupCert(inputQuery).then(response => {
this.loading = false;
if (response.code === 20000) {
this.getCompanyCertList();
this.certAuditVisible = false;
} else {
this.$message.error(response.message);
}
});
},
rejectInfo(row) {
this.$confirm(row.auditComment, "审核备注", {
confirmButtonText: "确定",
type: "warning",
showCancelButton: false,
})
.then(() => {
});
},
certHandleCurrentChange(val) {
this.certQuery.page = val;
this.getCompanyCertList();
}
,
getRoIds() {
let params = {companyId: this.inputQuery.id}
getRoId(params).then((res) => {
this.inputQuery.roleId = res.data.roleId;
})
},
getCompanyCertList() {
this.certLoading = true;
this.certQuery.customerId = this.inputQuery.customerId;
this.certQuery.type = 1;
// this.certQuery.auditStatus = 25;
this.certQuery.businessId=this.inputQuery.id;
filterCompanyCert(this.certQuery)
.then((response) => {
this.certLoading = false;
this.certList = response.data.list || [];
this.certTotal = response.data.total
})
.catch(() => {
this.certLoading = false;
this.certList = [];
});
}
,
printSupCert(row) {
var selectIds = [row.id];
let query = {id: 1};
this.loading = true;
verifyTemplateFile(query).then((res) => {
if (res.code === 20000) {
let printParams = {
templateId: res.data,
ids: selectIds,
customerId: row.customerId
};
printSupCert(printParams).then((response) => {
//将pdf文件转换为url。
const binaryData = [];
binaryData.push(response);
//获取blob链接。
let url = window.URL.createObjectURL(
new Blob(binaryData, {type: "application/pdf"})
);
this.loading = false;
window.open(url);//打开新标签页预览pdf。
})
} else {
this.loading = false;
this.$message.error(res.message);
}
}).catch((error) => {
this.loading = false;
this.$message.error(error.message);
})
},
printSupCertAll() {
var certLists = this.$refs.certTable.selection;
var selectIds = [];
certLists.forEach(item => {
selectIds.push(item.id);
})
if (selectIds.length == 0) {
this.$message.error("请先选择打印的证书!");
return
}
let query = {id: 1};
this.loading = true;
verifyTemplateFile(query).then((res) => {
if (res.code === 20000) {
let printParams = {
templateId: res.data,
ids: selectIds,
customerId: this.inputQuery.customerId
};
printSupCert(printParams).then((response) => {
//将pdf文件转换为url。
const binaryData = [];
binaryData.push(response);
//获取blob链接。
let url = window.URL.createObjectURL(
new Blob(binaryData, {type: "application/pdf"})
);
this.loading = false;
window.open(url);//打开新标签页预览pdf。
})
} else {
this.loading = false;
this.$message.error(res.message);
}
}).catch((error) => {
this.loading = false;
this.$message.error(error.message);
})
},
deleteCompanyCert(row) {
this.$confirm("是否删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.certLoading = true;
let tquery = {
id: row.id,
filePath: row.filePath,
};
deleteCompanyCert(tquery)
.then((response) => {
this.certLoading = false;
if (response.code === 20000) {
this.getCompanyCertList();
this.$message({
type: "success",
message: "删除成功!",
});
} else {
this.$message.error(response.message);
}
})
.catch(() => {
this.certLoading = false;
});
}).catch(() => {
});
}
,
customerlist() {
customerlist().then((response) => {
if (response.code === 20000) {
this.roleList = response.data;
}
})
.catch(() => {
this.roleList = null;
});
},
confirm() {
if (this.status == null) {
this.$message.error("请选择确认状态");
return;
}
if (this.status == 1) {
this.passAuditCert();
} else if (this.status == 2) {
this.rejectAuditCert();
} else if (this.status == 6) {
this.notAuditCert();
}
},
revoke(inputQuery) {
this.$confirm("是否确定撤回证书状态至未确认?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.certLoading = true;
inputQuery.auditStatus = 6
revokeSupCert(inputQuery)
.then((response) => {
this.certLoading = false;
if (response.code === 20000) {
this.getCompanyCertList();
} else {
this.$message.error(response.message);
}
})
.catch(() => {
this.certLoading = false;
});
}).catch(() => {
});
},
cancel() {
this.certAuditVisible = false;
},
},
filters: {
statusFilterType(status) {
const statusMap = {
0: "warning",
1: "success",
2: "danger",
6: "warning",
};
return statusMap[status];
},
},
}
</script>
<style>
.itemTag {
float: left;
text-align: left;
margin-top: 10px;
width: 120px;
}
.text {
width: 100%;
font-size: 13px;
font-family: "Microsoft YaHei";
}
.el-card {
margin-right: 20px;
margin-top: 15px;
/*transition: all .5s;*/
}
.el-row {
display: flex;
flex-wrap: wrap;
}
.el-col {
border-radius: 4px;
flex-wrap: wrap;
}
</style>