06460e78 by lihua

fix产品上架

1 parent 22056987
<script setup lang="tsx">
<script lang="ts" setup name="ApprovalProcess">
import LookBpmn from "./components/LookBpmn.vue";
import useProcessStore from '@/store/modules/process'
import { cloneDeep } from 'lodash-es';
......@@ -14,6 +14,9 @@ const props = defineProps({
default: ''
},
});
const fullscreenLoading = ref(false);
const tableData = ref<any>([])
const lookBpmnRef = ref()
// const contentRef = ref();
......@@ -23,7 +26,9 @@ const renderProcessNodes = () => {
deploymentId: props.deploymentId || null,
processInstanceId: props.processInstanceId || null,
};
fullscreenLoading.value = true;
getProcessNodesPromise(param).then((res:any) => {
fullscreenLoading.value = false;
if (res.code === "00000") {
let data = res.data;
if (data) {
......@@ -151,19 +156,26 @@ const getSpecialEventUserTaskList = () => {
lookBpmnRef.value.getDetailData(props.deploymentId)
};
watch(() => props.processInstanceId, () => {
if (!props.processInstanceId) {
return;
}
renderProcessNodes();
}, {
immediate: true
})
onBeforeRouteLeave((to, from) =>{
processStore.clearStore()
})
onMounted(() => {
renderProcessNodes()
});
defineExpose({
renderProcessNodes
})
</script>
<template>
<div>
<div v-loading="fullscreenLoading">
<!-- <Table :columns="columns" :data="tableData" :border="false"></Table> -->
<el-table tooltip-effect="light" :data="tableData" :border="false" >
<el-table-column type="index" label="节点" :width="140" align="left" >
......
......@@ -1401,40 +1401,6 @@ const panelChange = (scope, row) => {
</template>
<template #file="{ file }">
<div class="file-operate">
<!-- <template
v-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">
<ellipsis-tooltip :content="file.name" class-name="w100f" :refName="'tooltipOver' + file.name"></ellipsis-tooltip>
</div>
<div :style="{ right: '72px' }" class="file-preview"
v-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'png' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
@click="onUploadFilePreview(file, item)">查看</div>
<div :style="{ right: '36px' }" class="file-preview" @click="onUploadFileDownload(file, item)">下载
</div>
<div v-if="!item.disabled" :style="{ right: 0 }" class="file-preview" @click="handleUploadFileRemove(file, item)">删除
</div> -->
<template
v-if="file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'xls' || file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() === 'xlsx'">
<img class="file-img" src="../../assets/images/excel.png" />
......
......@@ -282,6 +282,7 @@ const btnClick = (btn) => {
if (res.data) {
ElMessage.success('该审批流程撤销成功!');
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('该审批流程撤销失败!');
}
......@@ -617,6 +618,7 @@ const passDialogInputChange = (val, item, inlineValue) => {
}
}
const approvalProcessRef = ref();
const submitPromise: any = ref(null);
......@@ -641,6 +643,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -676,6 +679,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -708,6 +712,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -778,6 +783,7 @@ const rejectDialogBtnClick = (btn, info) => {
ElMessage.success('驳回成功');
rejectDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('驳回失败');
}
......@@ -843,6 +849,7 @@ const passCommonDialogBtnClick = (btn, info) => {
ElMessage.success('驳回成功');
passCommonDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('驳回失败');
}
......@@ -1148,7 +1155,7 @@ const handleClick = () => {
<ContentWrap v-if="route.query.type == 'qualityEvaluate' || route.query.type == 'costAssess'" id="id-approveInfo"
title="审批信息" description="" style="margin: 16px 16px 16px">
<ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
<ApprovalProcess ref="approvalProcessRef" v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
</ApprovalProcess>
</ContentWrap>
</div>
......
......@@ -496,6 +496,7 @@ const approveTableInfo: any = ref({
show: false
}
});
const approvalProcessRef = ref();
const deploymentId = ref('');
const processInstanceId = ref('');
const tenantDetail: any = ref({});
......@@ -987,6 +988,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -1020,6 +1022,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -1052,6 +1055,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('审批成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
......@@ -1075,6 +1079,7 @@ const passDialogBtnClick = (btn, info) => {
ElMessage.success('该资产发证确认成功');
passDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error(res.msg);
}
......@@ -1142,6 +1147,7 @@ const rejectDialogBtnClick = (btn, info) => {
ElMessage.success('驳回成功');
rejectDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('驳回失败');
}
......@@ -1225,6 +1231,7 @@ const passCommonDialogBtnClick = (btn, info) => {
ElMessage.success('驳回成功');
passCommonDialogInfo.value.visible = false;
getDetailInfo();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('驳回失败');
}
......@@ -1909,7 +1916,7 @@ const passCommonDialogBtnClick = (btn, info) => {
<ContentWrap id="id-approveInfo" title="审批信息" expandSwicth style="margin-top: 15px"
:isExpand="approveInfoExpand" @expand="(v) => approveInfoExpand = v" v-if="route.query.type != 'certificate'">
<!-- <Table :tableInfo="approveTableInfo" /> -->
<ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
<ApprovalProcess ref="approvalProcessRef" v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
</ApprovalProcess>
</ContentWrap>
<ContentWrap id="id-certificate" v-if="tabsInfo.tabs.find(t => t.name == 'certificate')" title="证件信息"
......
......@@ -9,7 +9,7 @@ import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import useDataAssetStore from "@/store/modules/dataAsset";
import { getListingList, listingDelete, listingUpdateStatus, filterVal, getParamsDataList, getListingCount, productRejectFlowData, listingUpdateGateway, listingSave, listingUpdate } from "@/api/modules/dataProduct";
import { getListingList, listingDelete, listingUpdateStatus, getListingCount, productRejectFlowData } from "@/api/modules/dataProduct";
import { TableColumnWidth } from '@/utils/enum';
import TableTools from "@/components/Tools/table_tools.vue";
......@@ -20,7 +20,7 @@ import {
changeNum,
} from "@/utils/common";
import { chunk } from "@/api/modules/common";
import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService";
import { passFlowData, rejectFlowData, revokeFlowData, isMyFirstNode } from "@/api/modules/workFlowService";
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
......@@ -165,7 +165,7 @@ const tableInfo = ref({
if (approveVO && approveVO.approveState == 'A' && staffGuid == currentStaffGuid) {
isShowCancel = true;
}
if (bizApproveState === 'Y') {
if (bizApproveState === 'Y' && staffGuid == currentStaffGuid) {
if (row.listingStatus === 'Y') {
list.push({ label: "下架", value: "down" });
}
......@@ -305,9 +305,14 @@ const tableSwitchChange = (val, scope, field) => {
})
})
}
let getFirstNodePromise: any = ref({});
let getFirstNodePromise1: any = ref({});
const approveSuggest = ref();
const dialogTitle = ref('通过流程');
const dialogVisible = ref(false);
const dialogBtnLoading = ref(false);
//弹窗类型
const approveType = ref();
const tableBtnClick = (scope, btn) => {
......@@ -380,9 +385,8 @@ const tableBtnClick = (scope, btn) => {
revokeFlowData({
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
approveStaffGuid: userData.staffGuid,
serviceTenantGuid: row.tenantGuid
}).then((res: any) => {
approveStaffGuid: userData.staffGuid
}, row.tenantGuid).then((res: any) => {
if (res.code == '00000') {
ElMessage.success('撤销成功!')
getTableData();
......@@ -395,118 +399,67 @@ const tableBtnClick = (scope, btn) => {
}
if (type == 'pass') {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写通过理由';
if (listingFormRef.value) {
clearFormValues(listingFormRef.value.formInline);
listingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
listingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
if (getFirstNodePromise.value[row.guid]) {
return;
}
getFirstNodePromise.value[row.guid] = isMyFirstNode({
deploymentId: row.approveVO.camundaDeploymentId,
processInstanceId: row.approveVO.camundaInstanceId,
staffGuid: userData.staffGuid
}).then((res: any) => {
getFirstNodePromise.value[row.guid] = null;
if (res?.code == proxy.$passCode) {
if (res.data) {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写通过理由(选填)';
if (listingFormRef.value) {
clearFormValues(listingFormRef.value.formInline);
listingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
listingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
}
approveType.value = 'pass';
dialogTitle.value = '通过流程'
dialogVisible.value = true;
approveType.value = 'pass';
dialogTitle.value = '通过流程'
dialogVisible.value = true;
} else {
passCommonDialogInfo.value.visible = true;
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
if (type == 'reject') {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写驳回理由(必填)';
if (listingFormRef.value) {
clearFormValues(listingFormRef.value.formInline);
listingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
listingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
if (getFirstNodePromise1.value[row.guid]) {
return;
}
approveType.value = 'reject';
dialogTitle.value = '驳回流程'
dialogVisible.value = true;
getFirstNodePromise1.value[row.guid] = isMyFirstNode({
deploymentId: row.approveVO.camundaDeploymentId,
processInstanceId: row.approveVO.camundaInstanceId,
staffGuid: userData.staffGuid
}).then((res: any) => {
getFirstNodePromise1.value[row.guid] = null;
if (res?.code == proxy.$passCode) {
if (res.data) {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写驳回理由(必填)';
if (listingFormRef.value) {
clearFormValues(listingFormRef.value.formInline);
listingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
listingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
}
approveType.value = 'reject';
dialogTitle.value = '驳回流程'
dialogVisible.value = true;
} else {
rejectDialogInfo.value.visible = true;
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
if (type == 'up') {
// tableSwitchChange('Y', scope, 'listingStatus')
// console.log('上架', scope)
// let params: any = {}
// if (scope.row.exchangeGuid) {
// // 数交所上架 [params.commitmentLetterInfo[0].url]
// params = {
// guid: scope.row.guid,
// accreditFile: scope.row.accreditFile,
// caseNumber: scope.row.caseNumber,
// commitmentLetter: scope.row.commitmentLetter,
// content: scope.row.productDesc,
// costAssessmentInstitution: scope.row.costAssessmentInstitution,
// costAssessmentInstitutionGuid: scope.row.costAssessmentInstitutionGuid,
// coverageArea: scope.row.coverageArea,
// damCode: scope.row.damCode,
// damGuid: scope.row.damGuid,
// damName: scope.row.damName,
// damType: scope.row.damType,
// dataScale: scope.row.dataScale,
// deliveryWay: scope.row.deliveryWay,
// evaluationFile: scope.row.evaluationFile,
// exchangeGuid: scope.row.exchangeGuid,
// feeDesc: scope.row.feeDesc,
// immediateApprove: true,
// priceUnit: scope.row.priceUnit,
// pricingWay: scope.row.pricingWay,
// productPic: scope.row.productPic,
// productPrice: scope.row.productPrice,
// qualityEvaluationInstitution: scope.row.qualityEvaluationInstitution,
// qualityEvaluationInstitutionGuid: scope.row.qualityEvaluationInstitutionGuid,
// timeAreaStart: scope.row.timeAreaStart,
// timeAreaEnd: scope.row.timeAreaEnd,
// registrationCertificate: scope.row.registrationCertificate,
// productDetail: scope.row.productDetail,
// assessmentFile: scope.row.assessmentFile,
// }
// listingUpdate(params).then((res: any) => {
// if (res.code == proxy.$passCode) {
// ElMessage({
// type: "success",
// message: '提交成功',
// });
// getTableData();
// } else {
// ElMessage({
// type: "error",
// message: res.msg,
// });
// }
// })
// } else {
// // 门户数据专区上架
// params = {
// guid: scope.row.guid,
// caseNumber: scope.row.caseNumber,
// content: scope.row.productDesc,
// coverageArea: scope.row.coverageArea,
// damGuid: scope.row.damGuid,
// damName: scope.row.damName,
// damType: scope.row.damType,
// dataScale: scope.row.dataScale,
// deliveryWay: scope.row.deliveryWay,
// feeDesc: scope.row.feeDesc,
// immediateApprove: true,
// priceUnit: scope.row.priceUnit,
// pricingWay: scope.row.pricingWay,
// productPic: scope.row.productPic,
// productPrice: scope.row.productPrice,
// timeAreaStart: scope.row.timeAreaStart,
// timeAreaEnd: scope.row.timeAreaEnd,
// }
// listingUpdateGateway(params).then((res: any) => {
// if (res.code == proxy.$passCode) {
// ElMessage({
// type: "success",
// message: '提交成功',
// });
// getTableData();
// } else {
// ElMessage({
// type: "error",
// message: res.msg,
// });
// }
// })
// console.log('上架', scope)
// }
if (row.exchangeGuid) {
router.push({
name: 'productListingDetail',
......@@ -559,8 +512,7 @@ const clearFormValues = (formInline) => {
formInline[key] = '';
});
};
const fullscreenLoading = ref(false);
const dynamicPlaceholder = ref('请填写通过理由');
const dynamicPlaceholder = ref('请填写通过理由(选填)');
const passSubmit = () => {
let row = currTableData.value
listingFormRef.value.ruleFormRef.validate().then((valid) => {
......@@ -573,6 +525,7 @@ const passSubmit = () => {
}
})
})
dialogBtnLoading.value = true;
productRejectFlowData({
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
......@@ -582,8 +535,8 @@ const passSubmit = () => {
approveState: 'Y',
bizGuid: row.approveVO.bizGuid
}, row.tenantGuid).then((res: any) => {
dialogBtnLoading.value = false;
if (res.code == '00000') {
fullscreenLoading.value = false;
ElMessage.success('审批通过!')
dialogVisible.value = false;
getTableData();
......@@ -594,20 +547,6 @@ const passSubmit = () => {
})
}
})
// passFlowData({
// guid: row.approveVO.approveGuid,
// flowType: row.approveVO.flowType,
// approveSuggest: approveSuggest.value,
// approveStaffGuid: userData.staffGuid,
// }).then((res: any) => {
// fullscreenLoading.value = false;
// if (res.code == '00000') {
// ElMessage.success('审批通过!')
// getTableData();
// } else {
// ElMessage.error(res.msg)
// }
// })
}
const listingFormRef = ref<any>();
......@@ -625,6 +564,7 @@ const rejectSubmit = async () => {
}
})
})
dialogBtnLoading.value = true;
productRejectFlowData({
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
......@@ -634,8 +574,8 @@ const rejectSubmit = async () => {
bizGuid: row.approveVO.bizGuid,
approveState: 'R'
}, row.tenantGuid).then((res: any) => {
dialogBtnLoading.value = false;
if (res.code == '00000') {
fullscreenLoading.value = false;
ElMessage.success('驳回成功!')
dialogVisible.value = false;
getTableData();
......@@ -646,65 +586,6 @@ const rejectSubmit = async () => {
})
}
})
// rejectFlowData({
// guid: row.approveVO.approveGuid,
// flowType: row.approveVO.flowType,
// approveSuggest: approveSuggest.value,
// approveStaffGuid: userData.staffGuid,
// }).then((res: any) => {
// if (res.code == '00000') {
// fullscreenLoading.value = false;
// ElMessage.success('驳回成功!')
// getTableData();
// } else {
// ElMessage.error(res.msg)
// }
// })
}
// const tableBtnClick = (scope, btn) => {
// const type = btn.value;
// const row = scope.row;
// currTableData.value = row;
// if (type == "detail" || type === "edit") {
// toPatn(type);
// } else if (type === "delete") {
// open("此操作将永久删除,是否继续?", "warning");
// }
// };
const toPatn = (type) => {
if (type == 'add') {
router.push({
name: "productListingDetail",
query: {
type,
groundingPick: '门户数据专区',
case: '2',
},
});
} else {
router.push({
name: "productListingDetail",
query: {
guid: currTableData.value.guid,
name: currTableData.value.damName,
type
},
});
}
}
const toPatn1 = (type, type1) => {
if (type == 'add') {
router.push({
name: "productListingDetail",
query: {
type,
type1
},
});
}
}
const tablePageChange = (info) => {
......@@ -715,31 +596,6 @@ const tablePageChange = (info) => {
getTableData();
};
const open = (msg, type, isBatch = false) => {
ElMessageBox.confirm(msg, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: type,
}).then(() => {
const guids = [currTableData.value.guid];
listingDelete(guids).then((res: any) => {
if (res.code == proxy.$passCode) {
getFirstPageData();
ElMessage({
type: "success",
message: "删除成功",
});
} else {
ElMessage({
type: "error",
message: res.msg,
});
}
}).catch((res) => {
tableInfo.value.loading = false;
});
});
};
const getFirstPageData = () => {
page.value.curr = 1
......@@ -755,15 +611,6 @@ onActivated(() => {
})
onBeforeMount(() => {
// getParamsDataList({ paramCode: 'DAM-TYPE' }).then((res: any) => {
// if (res.code == proxy.$passCode) {
// damTypes.value = res.data || [];
// let item = searchItemList.value.find(item => item.field == 'damType');
// item && (item.options = damTypes.value);
// } else {
// proxy.$ElMessage.error(res.msg);
// }
// })
getParamsList({
dictType: "资产类型",
}).then((res: any) => {
......@@ -934,6 +781,141 @@ const formInfo = ref<any>({
isPublicData8: [{ required: true, message: '请选择数据内容是否合规', trigger: 'change' }],
}
})
const passCommonDialogInfo = ref({
visible: false,
size: 460,
direction: "column",
header: {
title: "通过",
},
type: '',
contents: [
{
type: 'form',
title: '',
formInfo: {
id: 'batch-pass-form',
items: [
{
label: '',
type: "textarea",
placeholder: "请填写通过理由(选填)",
field: "approveSuggest",
clearable: true,
maxlength: 400,
block: true,
col: 'margin_b_0',
}
]
}
}
],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit", loading: false },
],
},
});
const passCommonDialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
passCommonDialogInfo.value.footer.btns[1].loading = true;
let params = {
guid: currTableData.value.approveVO.approveGuid,
flowType: currTableData.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid
}
passFlowData(params, currTableData.value.tenantGuid).then((res: any) => {
passCommonDialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('审批成功');
passCommonDialogInfo.value.visible = false;
getTableData();
} else {
ElMessage.error('审批失败');
}
} else {
ElMessage.error(res.msg);
}
})
} else if (btn.value == 'cancel') {
passCommonDialogInfo.value.visible = false;
}
}
const rejectDialogInfo = ref({
visible: false,
size: 460,
direction: "column",
header: {
title: "驳回",
},
type: '',
contents: [
{
type: 'form',
title: '',
formInfo: {
id: 'batch-reject-form',
items: [
{
label: '',
type: "textarea",
placeholder: "请填写驳回理由(必填)",
field: "approveSuggest",
clearable: true,
block: true,
col: 'margin_b_0',
}
]
}
}
],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit", loading: false },
],
},
});
const rejectDialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
if (info.approveSuggest == '') {
ElMessage.error('请填写驳回理由');
return
}
let row = currTableData.value;
rejectDialogInfo.value.footer.btns[1].loading = true;
let params = {
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
approveStaffGuid: userData.staffGuid,
approveSuggest: info.approveSuggest
}
rejectFlowData(params, currTableData.value.tenantGuid).then((res: any) => {
rejectDialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('驳回成功');
getTableData();
rejectDialogInfo.value.visible = false;
} else {
ElMessage.error('驳回失败');
}
} else {
ElMessage.error(res.msg);
}
});
} else if (btn.value == 'cancel') {
rejectDialogInfo.value.visible = false;
}
};
</script>
<template>
......@@ -989,23 +971,27 @@ const formInfo = ref<any>({
</div>
</div>
<div class="table_panel_wrap" :style="{
height: demandListData.length > 0 ? 'calc(100% - 230px)' : 'calc(100% - 54px)'
height: demandListData.length > 0 ? 'calc(100% - 291px)' : 'calc(100% - 54px)'
}">
<Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange"
@tableSwitchBeforeChange="tableSwitchBeforeChange" />
</div>
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="510px">
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="550px" :close-on-click-modal="false">
<Form ref="listingFormRef" :itemList="formInfo.items" :rules="formInfo.rules" />
<el-input type="textarea" :rows="3" maxlength="100" v-model="approveSuggest" resize="none"
:placeholder="dynamicPlaceholder" />
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button v-if="approveType == 'pass'" type="primary" @click="passSubmit">通过</el-button>
<el-button v-if="approveType == 'reject'" type="primary" @click="rejectSubmit">驳回</el-button>
<el-button v-if="approveType == 'pass'" type="primary" v-loading="dialogBtnLoading"
@click="passSubmit">通过</el-button>
<el-button v-if="approveType == 'reject'" type="primary" v-loading="dialogBtnLoading"
@click="rejectSubmit">驳回</el-button>
</div>
</template>
</el-dialog>
<Dialog :dialogInfo="passCommonDialogInfo" @btnClick="passCommonDialogBtnClick" />
<Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" />
</div>
</template>
......@@ -1032,7 +1018,7 @@ const formInfo = ref<any>({
}
:deep(.el-carousel) {
margin: 0 -16px 16px;
margin: 0 -8px 16px;
padding: 0 16px;
.card-content {
......@@ -1160,7 +1146,7 @@ const formInfo = ref<any>({
background: #FFFBF2;
border: 1px solid rgba(255, 241, 212, 1);
border-radius: 4px;
margin: 5px 8px 17px 8px;
margin: 5px 8px 12px 8px;
.tip-icon {
width: 16px;
......
......@@ -14,11 +14,14 @@ import useDataAssetStore from "@/store/modules/dataAsset";
import { changeNum } from '@/utils/common';
import { onUploadFilePreview, onUploadFileDownload } from '@/api/modules/common';
import { getAreaData, getServiceTenants, getSingleList } from "@/api/modules/queryService";
import { getApproveList, getTenantApprove, registerApproveAllow, registerApproveBackup, getParamsList, getServiceDetail } from "@/api/modules/dataAsset";
import { getProductList, getFileByDamGuid, getAddedProductList, getListingDetail, listingSave, listingUpdate, listingSavePortal, getParamsDataList, listingUpdateGateway, getDataExchangeProductList, getTemplateFile, getListingList } from "@/api/modules/dataProduct";
import { getApproveList, getTenantApprove, getParamsList, getServiceDetail } from "@/api/modules/dataAsset";
import {
getProductList, getFileByDamGuid, productRejectFlowData,
getListingDetail, listingSave, listingUpdate, listingSavePortal, getParamsDataList, listingUpdateGateway, getDataExchangeProductList, getTemplateFile, getListingList
} from "@/api/modules/dataProduct";
import { getMatchDetail } from "@/api/modules/dataFinance";
import { useValidator } from '@/hooks/useValidator';
import { getCamundaDeploymentId } from "@/api/modules/workFlowService";
import { getCamundaDeploymentId, rejectFlowData, passFlowData, isMyFirstNode, revokeFlowData } from "@/api/modules/workFlowService";
const { required } = useValidator();
......@@ -134,11 +137,6 @@ const approveTableInfo: any = ref({
show: false
}
});
const exchangeName = computed(() => {
return route.query.exchangeName;
})
const listingFormRef = ref();
const subForm = ref({});
const formInfo = ref<any>({
......@@ -684,24 +682,6 @@ const contents = ref({
],
});
const listingDialogRef = ref();
const dialogInfo = ref({
visible: false,
size: 460,
direction: "column",
header: {
title: "",
},
type: '',
contents: [],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit" },
],
},
});
const getProducts = () => {
getProductList({}).then((res: any) => {
if (res.code == proxy.$passCode) {
......@@ -1077,11 +1057,86 @@ const btnClick = (btn) => {
const form = checkForm.formInline;
subForm.value = { ...form };
submitForm(btn, formEl, true);
} else if (btn.value == 'pass' || btn.value == 'reject') {
dialogInfo.value.type = btn.value
dialogInfo.value.header.title = btn.value == 'pass' ? '通过' : '驳回'
dialogInfo.value.contents = contents.value[btn.value]
dialogInfo.value.visible = true
} else if (btn.value == 'pass') {
if (getFirstNodePromise.value) {
return;
}
getFirstNodePromise.value = isMyFirstNode({
deploymentId: flowDetail.value.approveVO.camundaDeploymentId,
processInstanceId: flowDetail.value.approveVO.camundaInstanceId,
staffGuid: userData.staffGuid
}).then((res: any) => {
getFirstNodePromise.value = null;
if (res?.code == proxy.$passCode) {
if (res.data) {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写通过理由(选填)';
if (passListingFormRef.value) {
clearFormValues(passListingFormRef.value.formInline);
passListingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
passListingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
}
approveType.value = 'pass';
dialogTitle.value = '通过流程'
dialogVisible.value = true;
} else {
passCommonDialogInfo.value.visible = true;
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
else if (btn.value == 'reject') {
if (getFirstNodePromise1.value) {
return;
}
getFirstNodePromise1.value = isMyFirstNode({
deploymentId: flowDetail.value.approveVO.camundaDeploymentId,
processInstanceId: flowDetail.value.approveVO.camundaInstanceId,
staffGuid: userData.staffGuid
}).then((res: any) => {
getFirstNodePromise1.value = null;
if (res?.code == proxy.$passCode) {
if (res.data) {
approveSuggest.value = '';
dynamicPlaceholder.value = '请填写驳回理由(必填)';
if (passListingFormRef.value) {
clearFormValues(passListingFormRef.value.formInline);
passListingFormRef.value.ruleFormRef.clearValidate(formInfo.value.items.map(item => item.field))
passListingFormRef.value.ruleFormRef.resetFields(formInfo.value.items.map(item => item.field))
}
approveType.value = 'reject';
dialogTitle.value = '驳回流程'
dialogVisible.value = true;
} else {
rejectDialogInfo.value.visible = true;
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
} else if (btn.value == 'revoke') {
ElMessageBox.confirm(`撤销后,该流程将不再进行审核,确定这样操作吗?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: 'warning',
}).then(() => {
revokeFlowData({
guid: flowDetail.value.approveVO.approveGuid,
flowType: flowDetail.value.approveVO.flowType,
approveStaffGuid: userData.staffGuid
}, flowDetail.value.tenantGuid).then((res: any) => {
if (res.code == '00000') {
ElMessage.success('撤销成功!')
getProductDetail();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error(res.msg)
}
})
});
} else {
if (detailType == 'add' || detailType == 'edit' || detailType == 'redit') {
ElMessageBox.confirm(
......@@ -1288,67 +1343,6 @@ const switchChange = async (val, info, row) => {
}
}
const dialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
let params = { ...info }
params.bizGuid = guid
params.funcCode = flowDetail.value.funcCode;
if (dialogInfo.value.type == 'pass') {
dialogInfo.value.visible = false;
registerApproveAllow(params).then((res: any) => {
if (res.code == proxy.$passCode) {
ElMessage({
type: 'success',
message: '审批成功'
})
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
assetStore.set(true);
router.push({
name: "productListingCheck",
query: {},
});
} else {
ElMessage({
type: 'error',
message: res.msg,
})
}
}).catch(() => {
})
} else if (dialogInfo.value.type == 'reject') {
if (info.approveSuggest == '') {
ElMessage.error('请填写驳回原因')
return
}
dialogInfo.value.visible = false;
registerApproveBackup(params).then((res: any) => {
if (res.code == proxy.$passCode) {
ElMessage({
type: 'success',
message: '驳回成功'
})
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
assetStore.set(true);
router.push({
name: "productListingCheck",
query: {},
});
} else {
ElMessage({
type: 'error',
message: res.msg,
})
}
}).catch(() => {
})
}
} else if (btn.value == 'cancel') {
nextTick(() => {
dialogInfo.value.visible = false;
})
}
};
onActivated(() => {
let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === router.currentRoute.value.fullPath);
......@@ -1376,9 +1370,11 @@ onActivated(() => {
// };
})
const approvalProcessRef = ref();
const deploymentId = ref('');
const qualityEvaluationData = ref<any>('');
const costAssessmentData = ref<any>('');
const assetsSafeInfo: any = ref([]);
onBeforeMount(async () => {
// case 1: 数交易所 case 2: 门户
if (route.query.case == '2') {
......@@ -1388,6 +1384,18 @@ onBeforeMount(async () => {
}
})
}
if (detailType && detailType != 'add') {
getParamsList({
dictType: "数据产品上架审批合规信息",
}).then((res: any) => {
if (res.code == proxy.$passCode) {
assetsSafeInfo.value = res.data || [];
} else {
proxy.$ElMessage.error(res.msg);
}
})
getProductDetail();
}
await getTableData();
if (route.query.exchangeGuid) {
getTableInfo();
......@@ -1400,12 +1408,6 @@ onBeforeMount(async () => {
return parentAreaData.value;
}
})
if (detailType && detailType != 'add') {
getProductDetail();
// if (detailType == 'detail' && dGuid !== undefined) {
// getApplyDeatil();
// }
}
// getApproveData();
getParamsDataList({ dictType: '资产类型' }).then((res: any) => {
if (res.code == proxy.$passCode) {
......@@ -1565,6 +1567,364 @@ const prcieInfo = computed(() => {
return flowDetail.value.productPrice ? `${flowDetail.value.productPrice} ${priceUnitList.value.find(item => item.value == flowDetail.value.priceUnit)?.label}` : '--';
})
const toolBtns: any = computed(() => {
let btnsArr: any = [{
label: "关闭", value: "cancel", plain: true
}];
let approveVO = flowDetail.value.approveVO;
let staffGuid = userData.staffGuid;
if (approveVO && approveVO.approveState == 'A' && approveVO.approveStaffGuids && approveVO.approveStaffGuids.indexOf(staffGuid) > -1) {
btnsArr.push(...[{ label: "通过", value: "pass", type: 'primary' }, { label: "驳回", value: "reject", type: 'danger', plain: true }]);
}
if (approveVO && approveVO.approveState == 'A' && approveVO.staffGuid == staffGuid) {
btnsArr.push({ label: "撤销", value: "revoke" });
}
return btnsArr;
});
/** ------------------ 通过驳回对话框 ----------------------- */
let getFirstNodePromise: any = ref(null);
let getFirstNodePromise1: any = ref(null);
const approveSuggest = ref();
const dialogTitle = ref('通过流程');
const dialogVisible = ref(false);
const dialogBtnLoading = ref(false);
//弹窗类型
const approveType = ref();
const dynamicPlaceholder = ref('请填写通过理由(选填)');
const passFormInfo = ref<any>({
id: 'check-form',
col: 'col2',
items: [
// radio 单选框
{
type: 'radio-group',
label: '是否遵守隐私法律和数据保护法规',
field: 'isPublicData1',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
// radio 单选框
{
type: 'radio-group',
label: '不存在侵犯他人版权的信息',
field: 'isPublicData2',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
// 是否符合研究伦理
{
type: 'radio-group',
label: '是否符合研究伦理',
field: 'isPublicData3',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
//是否遵守道德标准
{
type: 'radio-group',
label: '是否遵守道德标准',
field: 'isPublicData4',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
//数据来源是否合规
{
type: 'radio-group',
label: '数据来源是否合规',
field: 'isPublicData5',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
//相关文档审查是否合规
{
type: 'radio-group',
label: '相关文档审查是否合规',
field: 'isPublicData6',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
//是否符合国家标准及要求
{
type: 'radio-group',
label: '是否符合国家标准及要求',
field: 'isPublicData7',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
//数据内容是否合规
{
type: 'radio-group',
label: '数据内容是否合规',
field: 'isPublicData8',
default: '',
required: true,
options: [
{ label: '是', value: 'Y' },
{ label: '否', value: 'N' },
],
},
],
rules: {
isPublicData1: [{ required: true, message: '请选择是否遵守隐私法律和数据保护法规', trigger: 'change' }],
isPublicData2: [{ required: true, message: '请选择是否存在侵犯他人版权的信息', trigger: 'change' }],
isPublicData3: [{ required: true, message: '请选择是否符合研究伦理', trigger: 'change' }],
isPublicData4: [{ required: true, message: '请选择是否遵守道德标准', trigger: 'change' }],
isPublicData5: [{ required: true, message: '请选择数据来源是否合规', trigger: 'change' }],
isPublicData6: [{ required: true, message: '请选择相关文档审查是否合规', trigger: 'change' }],
isPublicData7: [{ required: true, message: '请选择是否符合国家标准及要求', trigger: 'change' }],
isPublicData8: [{ required: true, message: '请选择数据内容是否合规', trigger: 'change' }],
}
})
const passListingFormRef = ref<any>();
const clearFormValues = (formInline) => {
Object.keys(formInline).forEach(key => {
formInline[key] = '';
});
};
const passSubmit = () => {
passListingFormRef.value.ruleFormRef.validate().then((valid) => {
if (valid) {
let complianceInfoMap = {}
passFormInfo.value.items.forEach((item) => {
assetsSafeInfo.value.forEach((item1) => {
if (item.label == item1.label) {
complianceInfoMap[item1.value] = passListingFormRef.value.formInline[item.field];
}
})
})
dialogBtnLoading.value = true;
productRejectFlowData({
guid: flowDetail.value.approveVO.approveGuid,
flowType: flowDetail.value.approveVO.flowType,
approveSuggest: approveSuggest.value,
approveStaffGuid: userData.staffGuid,
complianceInfoMap: complianceInfoMap,
approveState: 'Y',
bizGuid: flowDetail.value.approveVO.bizGuid
}, flowDetail.value.tenantGuid).then((res: any) => {
dialogBtnLoading.value = false;
if (res.code == '00000') {
ElMessage.success('审批通过!')
dialogVisible.value = false;
getProductDetail();
approvalProcessRef.value?.renderProcessNodes()
} else {
ElMessage.error(res.msg)
}
})
}
})
}
const rejectSubmit = async () => {
if (!approveSuggest.value) return ElMessage.error('请填写驳回理由!')
passListingFormRef.value.ruleFormRef.validate().then((valid) => {
if (valid) {
let complianceInfoMap = {}
passFormInfo.value.items.forEach((item) => {
assetsSafeInfo.value.forEach((item1) => {
if (item.label == item1.label) {
complianceInfoMap[item1.value] = passListingFormRef.value.formInline[item.field];
}
})
})
dialogBtnLoading.value = true;
productRejectFlowData({
guid: flowDetail.value.approveVO.approveGuid,
flowType: flowDetail.value.approveVO.flowType,
approveSuggest: approveSuggest.value,
approveStaffGuid: userData.staffGuid,
complianceInfoMap: complianceInfoMap,
bizGuid: flowDetail.value.approveVO.bizGuid,
approveState: 'R'
}, flowDetail.value.tenantGuid).then((res: any) => {
dialogBtnLoading.value = false;
if (res.code == '00000') {
ElMessage.success('驳回成功!')
dialogVisible.value = false;
//getDetail
getProductDetail();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error(res.msg)
}
})
}
})
}
const passCommonDialogInfo = ref({
visible: false,
size: 460,
direction: "column",
header: {
title: "通过",
},
type: '',
contents: [
{
type: 'form',
title: '',
formInfo: {
id: 'batch-pass-form',
items: [
{
label: '',
type: "textarea",
placeholder: "请填写通过理由(选填)",
field: "approveSuggest",
clearable: true,
maxlength: 400,
block: true,
col: 'margin_b_0',
}
]
}
}
],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit", loading: false },
],
},
});
const passCommonDialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
passCommonDialogInfo.value.footer.btns[1].loading = true;
let params = {
guid: flowDetail.value.approveVO.approveGuid,
flowType: flowDetail.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid
}
passFlowData(params, flowDetail.value.tenantGuid).then((res: any) => {
passCommonDialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('审批成功');
passCommonDialogInfo.value.visible = false;
getProductDetail();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('审批失败');
}
} else {
ElMessage.error(res.msg);
}
})
} else if (btn.value == 'cancel') {
passCommonDialogInfo.value.visible = false;
}
}
const rejectDialogInfo = ref({
visible: false,
size: 460,
direction: "column",
header: {
title: "驳回",
},
type: '',
contents: [
{
type: 'form',
title: '',
formInfo: {
id: 'batch-reject-form',
items: [
{
label: '',
type: "textarea",
placeholder: "请填写驳回理由(必填)",
field: "approveSuggest",
clearable: true,
block: true,
col: 'margin_b_0',
}
]
}
}
],
footer: {
btns: [
{ type: "default", label: "取消", value: "cancel" },
{ type: "primary", label: "确定", value: "submit", loading: false },
],
},
});
const rejectDialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
if (info.approveSuggest == '') {
ElMessage.error('请填写驳回理由');
return
}
let row = flowDetail.value;
rejectDialogInfo.value.footer.btns[1].loading = true;
let params = {
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
approveStaffGuid: userData.staffGuid,
approveSuggest: info.approveSuggest
}
rejectFlowData(params, flowDetail.value.tenantGuid).then((res: any) => {
rejectDialogInfo.value.footer.btns[1].loading = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('驳回成功');
//getTableData();
rejectDialogInfo.value.visible = false;
getProductDetail();
approvalProcessRef.value?.renderProcessNodes();
} else {
ElMessage.error('驳回失败');
}
} else {
ElMessage.error(res.msg);
}
});
} else if (btn.value == 'cancel') {
rejectDialogInfo.value.visible = false;
}
};
</script>
......@@ -1661,40 +2021,20 @@ const prcieInfo = computed(() => {
<span class="item_label">定价金额:</span>
<span class="item_value">{{ prcieInfo || '--' }}</span>
</div>
<!-- <div class="list_item">
<span class="item_label">所属主题:</span>
<span class="item_value">{{ flowDetail.subjectDomainName || '--' }}</span>
</div> -->
<div class="list_item">
<span class="item_label">数据规模(条):</span>
<span class="item_value">{{ flowDetail.dataScale != null ? changeNum(flowDetail.dataScale, 0) : '--'
}}</span>
}}</span>
</div>
<div class="list_item">
<span class="item_label">病例总数(例):</span>
<span class="item_value">{{ flowDetail.caseNumber != null ? changeNum(flowDetail.caseNumber, 0) : '--'
}}</span>
}}</span>
</div>
<!-- <div class="list_item">
<span class="item_label">交易方式:</span>
<span class="item_value">{{ flowDetail.deliveryWayName || '--' }}</span>
</div> -->
<!-- <div class="list_item">
<span class="item_label">产品价格:</span>
<span class="item_value">{{ flowDetail.isDiscussPersonally == 'Y' ? '面议' : (flowDetail.productPrice ||
'--')
}}</span>
</div> -->
<div class="list_item" v-if="route.query.exchangeGuid">
<span class="item_label">登记数交所:</span>
<span class="item_value">{{ flowDetail.exchangeName || '--' }}</span>
</div>
<!-- <div class="list_item is_block">
<span class="item_label">上架交易所:</span>
<span class="item_value">{{ !flowDetail.exchangeGuids?.length ? '--' : flowDetail.exchangeNames.join(',')
}}</span>
</div> -->
<div class="list_item is_block">
<span class="item_label">数据覆盖地域:</span>
<span class="item_value"
......@@ -1703,7 +2043,7 @@ const prcieInfo = computed(() => {
</span>
<span class="item_value" v-else>
<span v-for="(cor, c) in flowDetail.coverageAreaName" :key="c" class="area_text">{{ cor.join('/')
}}</span>
}}</span>
</span>
</div>
<div class="list_item is_block">
......@@ -1743,7 +2083,8 @@ const prcieInfo = computed(() => {
v-else-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.productPic.name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.productPic.name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div :style="{ right: '36px' }"
v-if="flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'png' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.productPic.name.substring(flowDetail.productPic.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(flowDetail.productPic)">查看</div>
......@@ -1791,7 +2132,8 @@ const prcieInfo = computed(() => {
v-else-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.registrationCertificate.name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.registrationCertificate.name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div :style="{ right: '36px' }"
v-if="flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'png' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.registrationCertificate.name.substring(flowDetail.registrationCertificate.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(flowDetail.registrationCertificate)">查看</div>
......@@ -1804,48 +2146,6 @@ const prcieInfo = computed(() => {
</div>
</div>
<div class="list_item1 is_block1">
<!-- <div class="file_item"
v-if="flowDetail.registrationCertificate && flowDetail.registrationCertificate.name">
<span class="item_label">质量评估报告:</span>
<span class="item_value">
<div class="file-operate">
<template
v-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'csv'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.qualityEvaluationFile[0].name }}</div>
<div :style="{ right: '36px' }"
v-if="flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'png' || flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.qualityEvaluationFile[0].name.substring(flowDetail.qualityEvaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(flowDetail.qualityEvaluationFile[0])">查看</div>
<div :style="{ right: '0px' }" class="file-preview"
@click="onUploadFileDownload(flowDetail.qualityEvaluationFile[0])">下载</div>
</div>
</span>
</div> -->
<div class="file_item" v-if="route.query.exchangeGuid">
<span class="item_label">质量评估报告:</span>
<span class="item_value">
......@@ -1863,7 +2163,8 @@ const prcieInfo = computed(() => {
v-else-if="['jpg', 'jpeg'].includes(flowDetail.evaluationFile[0].name?.substring(flowDetail.evaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase())">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.evaluationFile[0].name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.evaluationFile[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div
v-if="['pdf', 'png', 'jpg', 'jpeg'].includes(flowDetail.evaluationFile[0].name?.substring(flowDetail.evaluationFile[0].name.lastIndexOf('.') + 1).toLowerCase())"
:style="{ right: '36px' }" class="file-preview"
......@@ -1891,48 +2192,6 @@ const prcieInfo = computed(() => {
</div>
</div>
<div class="list_item1 is_block1">
<!-- <div class="file_item"
v-if="flowDetail.registrationCertificate && flowDetail.registrationCertificate.name">
<span class="item_label">价值评估报告:</span>
<span class="item_value">
<div class="file-operate">
<template
v-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'csv'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.costAssessmentFile[0].name }}</div>
<div :style="{ right: '36px' }"
v-if="flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'png' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || flowDetail.costAssessmentFile[0].name.substring(flowDetail.costAssessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(flowDetail.costAssessmentFile[0])">查看</div>
<div :style="{ right: '0px' }" class="file-preview"
@click="onUploadFileDownload(flowDetail.costAssessmentFile[0])">下载</div>
</div>
</span>
</div> -->
<div class="file_item" v-if="route.query.exchangeGuid">
<span class="item_label">价值评估报告:</span>
<span class="item_value">
......@@ -1950,7 +2209,8 @@ const prcieInfo = computed(() => {
v-else-if="['jpg', 'jpeg'].includes(flowDetail.assessmentFile[0].name?.substring(flowDetail.assessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase())">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.assessmentFile[0].name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.assessmentFile[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div
v-if="['pdf', 'png', 'jpg', 'jpeg'].includes(flowDetail.assessmentFile[0].name?.substring(flowDetail.assessmentFile[0].name.lastIndexOf('.') + 1).toLowerCase())"
:style="{ right: '36px' }" class="file-preview"
......@@ -1996,7 +2256,8 @@ const prcieInfo = computed(() => {
v-else-if="['jpg', 'jpeg'].includes(flowDetail.commitmentLetter[0].name?.substring(flowDetail.commitmentLetter[0].name.lastIndexOf('.') + 1).toLowerCase())">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.commitmentLetter[0].name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.commitmentLetter[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div
v-if="['pdf', 'png', 'jpg', 'jpeg'].includes(flowDetail.commitmentLetter[0].name?.substring(flowDetail.commitmentLetter[0].name.lastIndexOf('.') + 1).toLowerCase())"
:style="{ right: '36px' }" class="file-preview"
......@@ -2033,7 +2294,8 @@ const prcieInfo = computed(() => {
v-else-if="['jpg', 'jpeg'].includes(flowDetail.accreditFile[0].name?.substring(flowDetail.accreditFile[0].name.lastIndexOf('.') + 1).toLowerCase())">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.accreditFile[0].name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.accreditFile[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div
v-if="['pdf', 'png', 'jpg', 'jpeg'].includes(flowDetail.accreditFile[0].name?.substring(flowDetail.accreditFile[0].name.lastIndexOf('.') + 1).toLowerCase())"
:style="{ right: '36px' }" class="file-preview"
......@@ -2070,7 +2332,8 @@ const prcieInfo = computed(() => {
v-else-if="['jpg', 'jpeg'].includes(flowDetail.productDetail[0].name?.substring(flowDetail.productDetail[0].name.lastIndexOf('.') + 1).toLowerCase())">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ flowDetail.productDetail[0].name }}</div>
<div class="file-name"><ellipsis-tooltip :content="flowDetail.productDetail[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div
v-if="['pdf', 'png', 'jpg', 'jpeg'].includes(flowDetail.productDetail[0].name?.substring(flowDetail.productDetail[0].name.lastIndexOf('.') + 1).toLowerCase())"
:style="{ right: '36px' }" class="file-preview"
......@@ -2123,7 +2386,7 @@ const prcieInfo = computed(() => {
<div class="list_panel">
<div class="table_panel_wrap">
<!-- <Table :tableInfo="approveTableInfo" /> -->
<ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
<ApprovalProcess ref="approvalProcessRef" v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
</ApprovalProcess>
</div>
</div>
......@@ -2173,21 +2436,26 @@ const prcieInfo = computed(() => {
</div>
<div class="tool_btns" v-else-if="detailType == 'detail'">
<div class="btns">
<el-button @click="btnClick({ value: 'cancel' })">关闭</el-button>
<el-button v-for="btn in toolBtns" :type="btn.type" :plain="btn.plain" @click="btnClick(btn)">{{ btn.label
}}</el-button>
</div>
</div>
<div class=" tool_btns" v-else-if="detailType == 'check'">
<div class="btns">
<el-button plain @click="btnClick({ value: 'cancel' })">关闭</el-button>
<el-button type="primary" @click="btnClick({ value: 'pass' })"
v-if="flowDetail.approveState == 'A' && flowDetail.approveTenantGuids?.includes(userData.tenantGuid)">通过</el-button>
<el-button plain type="danger" @click="btnClick({ value: 'reject' })"
v-if="flowDetail.approveState == 'A' && flowDetail.approveTenantGuids?.includes(userData.tenantGuid)">驳回</el-button>
</div>
</div>
<!-- 审核对话框 -->
<Dialog ref="listingDialogRef" :dialogInfo="dialogInfo" @btnClick="dialogBtnClick" />
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="550px" :close-on-click-modal="false" >
<Form ref="passListingFormRef" :itemList="passFormInfo.items" :rules="passFormInfo.rules" />
<el-input type="textarea" :rows="3" maxlength="100" v-model="approveSuggest" resize="none"
:placeholder="dynamicPlaceholder" />
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button v-if="approveType == 'pass'" type="primary" v-loading="dialogBtnLoading"
@click="passSubmit">通过</el-button>
<el-button v-if="approveType == 'reject'" type="primary" v-loading="dialogBtnLoading"
@click="rejectSubmit">驳回</el-button>
</div>
</template>
</el-dialog>
<Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" />
<Dialog :dialogInfo="passCommonDialogInfo" @btnClick="passCommonDialogBtnClick" />
</div>
</template>
......@@ -2292,6 +2560,7 @@ const prcieInfo = computed(() => {
.file-name {
color: var(--el-color-regular);
margin-left: 4px;
width: calc(100% - 120px);
}
.file-preview {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!