9fbd7335 by xukangle

Merge branch 'develop' into dev_20241202_xukangle

2 parents fc2f9600 e12d0c17
......@@ -37,7 +37,7 @@ VITE_BPMN_URL = https://workflow-swzl-test.csbr.cn
VITE_APP_WORK_FLOW_URL = 'ms-daop-workflow-service'
# 数据标准、元数据、数据目录 接口地址
VITE_APP_PLAN_BASEURL = ms-daop-zcgl-data-plan-service
VITE_APP_PLAN_BASEURL = ms-daop-data-plan-service
#数据质量接口地址
VITE_APP_QUALITY_BASEURL = ms-daop-data-quality-service
......
......@@ -71,7 +71,7 @@ VITE_BPMN_URL = https://workflow-swzl-test.csbr.cn
VITE_APP_WORK_FLOW_URL = 'ms-daop-workflow-service'
# 数据标准、元数据、数据目录 接口地址
VITE_APP_PLAN_BASEURL = ms-daop-zcgl-data-plan-service
VITE_APP_PLAN_BASEURL = ms-daop-data-plan-service
#数据质量接口地址
VITE_APP_QUALITY_BASEURL = ms-daop-data-quality-service
......
......@@ -84,9 +84,8 @@ export const getProduct = (params) => request({
})
// 查看平台会员详情
export const getTenantDetailInfo = (params) => request({
url: `${import.meta.env.VITE_APP_API_BASEURL}/tenant/data/detail`,
method: 'get',
params
url: `${import.meta.env.VITE_APP_PERSONAL_URL}/tenant/getByGuid/${params}`,
method: 'get'
})
......@@ -123,7 +122,7 @@ export const getServiceTenants = (params) => request({
/** 获取会员的附件模板 */
export const getTenantAttach = (params) => request({
url: `${import.meta.env.VITE_APP_API_BASEURL}/attachment-template/list-attachment?tenantGuid=${params}`,
url: `${import.meta.env.VITE_APP_PERSONAL_URL}/attachment-template/list-attachment?tenantGuid=${params}`,
method: 'get'
})
......
......@@ -35,7 +35,7 @@ const routes: RouteRecordRaw[] = [
reuse: true
},
beforeEnter: (to, from) => {
to.meta.title = to.query.type == 'edit' ? `编辑-${to.query.name}` : '新建资产登记';
to.meta.title = to.query.type == 'create' ? '新建资产登记' : `编辑-${to.query.name}`;
to.meta.editPage = true;
}
},
......
......@@ -4,7 +4,7 @@ import router from '@/router'
import { ElMessage } from 'element-plus'
import apiUser from '@/api/modules/user'
import { getCurrentTime } from '@/utils/common'
import { getSystemMenu, getUserInfo, getTokenByCode, loginOut, refreshToken, editPasswordInterface, getCurrentUserInfo, getCurrentUserInfo } from '@/api/modules/queryService'
import { getSystemMenu, getUserInfo, getTokenByCode, loginOut, refreshToken, editPasswordInterface, getCurrentUserInfo } from '@/api/modules/queryService'
const useUserStore = defineStore(
// 唯一ID
......
......@@ -27,6 +27,7 @@ import {
getTenantDetailInfo,
getImageContent
} from "@/api/modules/queryService";
import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService";
import useDataAssetStore from "@/store/modules/dataAsset";
import { changeNum, getDownloadUrl, download } from '@/utils/common';
......@@ -256,16 +257,10 @@ const getDetailInfo = () => {
fullscreenLoading.value = false;
if (res.code == proxy.$passCode) {
const data = res.data || {};
let { approveVO } = data;
detailInfo.value = data;
assetDetailInfo.value = data;
deploymentId.value = data.camundaDeploymentId;
// if (fullPath === route.fullPath) {
// document.title = `详情-${data.daName}`;
// }
// let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === fullPath);
// if (tab) {
// tab.meta.title = `详情-${data.daName}`;
// }
deploymentId.value = approveVO.camundaDeploymentId;
isTextTruncated();
} else {
ElMessage.error(res.msg);
......@@ -290,7 +285,7 @@ const handleExpand = () => {
onBeforeMount(() => {
getDetailInfo();
getTenantDetail();
daTenantGuid.value && getTenantDetail();
});
onActivated(() => {
......@@ -405,7 +400,7 @@ const tenantDetail: any = ref({});
/** 获取当前登录会员,服务商,企业等详情。 */
const getTenantDetail = () => {
getTenantDetailInfo({ guid: daTenantGuid.value }).then((res: any) => {
getTenantDetailInfo(daTenantGuid.value).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data ?? {};
tenantDetail.value = data;
......@@ -502,10 +497,11 @@ const btnClick = (btn) => {
type: 'warning',
}).then(() => {
let params = {
bizGuid: detailInfo.value.guid,
funcCode: detailInfo.value.funcCode
guid: detailInfo.value.approveVO.approveGuid,
flowType: detailInfo.value.approveVO.flowType,
approveStaffGuid: userData.staffGuid,
}
registerApproveCancel(params).then((res: any) => {
revokeFlowData(params).then((res: any) => {
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('该审批流程撤销成功!');
......@@ -849,11 +845,12 @@ const passDialogBtnClick = (btn, info) => {
return;
}
let params = {
bizGuid: detailInfo.value.guid,
funcCode: detailInfo.value.funcCode,
approveSuggest: info.approveSuggest
guid: detailInfo.value.approveVO.approveGuid,
flowType: detailInfo.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid,
}
submitPromise.value = registerApproveAllow(params).then((res: any) => {
submitPromise.value = passFlowData(params).then((res: any) => {
submitPromise.value = null;
if (res?.code == proxy.$passCode) {
if (res.data) {
......@@ -986,11 +983,12 @@ const rejectDialogBtnClick = (btn, info) => {
}
//资产登记的驳回。
let params = {
bizGuid: detailInfo.value.guid,
funcCode: detailInfo.value.funcCode,
approveSuggest: info.approveSuggest
guid: detailInfo.value.approveVO.approveGuid,
flowType: detailInfo.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid,
}
registerApproveBackup(params).then((res: any) => {
rejectFlowData(params).then((res: any) => {
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('驳回成功');
......@@ -1136,17 +1134,22 @@ const handleClickDamCatalogDetail = () => {
assetDetailInfo.isPersonalInfo == 'Y' ? '涉及个人信息' : '不涉及个人信息' }}</div>
</div>
<div style="display: flex">
<div v-if="tabsInfo.tabs.find(t => t.name == 'qualityEvaluate')" class="right-label" :style="{ 'margin-right': tabsInfo.tabs.find(t => t.name == 'costAssess') ? '8px' : '0px' }">评分:<span
style="color: var(--el-color-primary);font-weight: 600;font-size: 16px;">{{ evaDetailInfo.qualityScore + '分' }}</span>
<div v-if="tabsInfo.tabs.find(t => t.name == 'qualityEvaluate')" class="right-label"
:style="{ 'margin-right': tabsInfo.tabs.find(t => t.name == 'costAssess') ? '8px' : '0px' }">
评分:<span style="color: var(--el-color-primary);font-weight: 600;font-size: 16px;">{{
evaDetailInfo.qualityScore + '分' }}</span>
</div>
<div v-if="tabsInfo.tabs.find(t => t.name == 'costAssess')" class="right-label">价值:<span
style="color: var(--el-color-primary);font-weight: 600;font-size: 16px">{{ changeNum(costAssessDetailInfo.assessmentMoney ?? 0, 2, true) + '元' }}</span>
style="color: var(--el-color-primary);font-weight: 600;font-size: 16px">{{
changeNum(costAssessDetailInfo.assessmentMoney ?? 0, 2, true) + '元' }}</span>
</div>
</div>
</div>
<div class="applicationScenarios"
:style="{ 'margin-right': (isTruncated && !isExpanded) ? '30px' : '0px', WebkitLineClamp: (!isTruncated ? 'inherit' : (isExpanded ? 'inherit' : 2)), WebkitBoxOrient: 'vertical' }">
{{ assetDetailInfo.applicationScenarios || '--' }}<span v-if="isTruncated" class="text_btn expand_btn" :style="{ position: isExpanded ? 'inherit' : 'absolute', 'margin-left': isExpanded ? '4px' : '0px' }" @click="handleExpand()" v-preReClick>{{ isExpanded ?
{{ assetDetailInfo.applicationScenarios || '--' }}<span v-if="isTruncated" class="text_btn expand_btn"
:style="{ position: isExpanded ? 'inherit' : 'absolute', 'margin-left': isExpanded ? '4px' : '0px' }"
@click="handleExpand()" v-preReClick>{{ isExpanded ?
'收起' : '展开' }}</span></div>
</div>
</div>
......@@ -1164,10 +1167,11 @@ const handleClickDamCatalogDetail = () => {
</div>
<div class="list_item">
<span class="item_label">所属行业:</span>
<span class="item_value"><ellipsis-tooltip :content="(assetDetailInfo.ownIndustryName?.filter(u => u != '其他')?.join(',') +
<span class="item_value"><ellipsis-tooltip
:content="(assetDetailInfo.ownIndustryName?.filter(u => u != '其他')?.join(',') +
(assetDetailInfo.ownIndustry?.includes(4)
? ((assetDetailInfo.ownIndustryName?.length > 1 ? ',' : '') + assetDetailInfo.ownIndustryOther) : '')) ?? '--'"
class-name="w100f" :refName="'tooltipOver' + 'ownIndustryName'"></ellipsis-tooltip></span>
? ((assetDetailInfo.ownIndustryName?.length > 1 ? ',' : '') + assetDetailInfo.ownIndustryOther) : '')) ?? '--'" class-name="w100f"
:refName="'tooltipOver' + 'ownIndustryName'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">本次登记:</span>
......@@ -1176,11 +1180,19 @@ const handleClickDamCatalogDetail = () => {
</div>
<div class="list_item">
<span class="item_label">数据规模():</span>
<span class="item_value">{{ assetDetailInfo.dataScale !=null ? changeNum(assetDetailInfo.dataScale, 0) : '--' }}</span>
<span class="item_value">{{ assetDetailInfo.dataScale != null ? changeNum(assetDetailInfo.dataScale, 0)
:
'--' }}</span>
</div>
<div class="list_item">
<span class="item_label">所属主题:</span>
<span class="item_value">{{ assetDetailInfo.subjectDomainName || assetDetailInfo.subjectDomain || '--' }}</span>
<span class="item_value">{{ assetDetailInfo.subjectDomainName || assetDetailInfo.subjectDomain || '--'
}}</span>
</div>
<div class="list_item" v-if="assetDetailInfo.damGuid">
<span class="item_label">数据来源:</span>
<span class="item_value">{{ dataSourcesList.find(d => d.value == assetDetailInfo.dataSources)?.label ||
'--' }}</span>
</div>
</div>
<div class="first-col" style="width: 250px;">
......@@ -1199,12 +1211,18 @@ const handleClickDamCatalogDetail = () => {
+ assetDetailInfo.updateFrequencyOther) : '')) ?? '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">质量及价值评估:</span>
<span class="item_value">{{ assetDetailInfo.isEvaluationAssessment == 'Y' ? '是' : '否' }}</span>
<span class="item_label">是否完成质量评估:</span>
<span class="item_value">{{ assetDetailInfo.isQualityAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item" v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y')">
<span class="item_label">质量评估机构:</span>
<span class="item_value">{{ assetDetailInfo.registerAttachment.qualityEvaluationInstitution || '--'
}}</span>
</div>
<div class="list_item">
<span class="item_label">病例总数():</span>
<span class="item_value">{{ assetDetailInfo.caseNumber ? changeNum(assetDetailInfo.caseNumber, 0) : '--' }}</span>
<span class="item_value">{{ assetDetailInfo.caseNumber ? changeNum(assetDetailInfo.caseNumber, 0) : '--'
}}</span>
</div>
<div class="list_item" v-if="assetDetailInfo.damGuid">
<span class="item_label">数据库类型:</span>
......@@ -1214,17 +1232,17 @@ const handleClickDamCatalogDetail = () => {
<div class="last-col">
<div class="list_item">
<span class="item_label">覆盖地域:</span>
<span class="item_value"><ellipsis-tooltip
:content="assetDetailInfo.coverageArea?.[0]?.[0] == 'all' ? '全国' : (assetDetailInfo.coverageAreaName?.map(c =>
c.join('/')).join(',') ?? '--')"
class-name="w100f pr8" :refName="'tooltipOver' + 'coverageAreaName'"></ellipsis-tooltip></span>
<span class="item_value"><ellipsis-tooltip :content="assetDetailInfo.coverageArea?.[0]?.[0] == 'all' ? '全国' : (assetDetailInfo.coverageAreaName?.map(c =>
c.join('/')).join(',') ?? '--')" class-name="w100f pr8"
:refName="'tooltipOver' + 'coverageAreaName'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">取得方式:</span>
<span class="item_value"><ellipsis-tooltip :content="(assetDetailInfo.dataGetWayName?.filter(u => u != '其他')?.join(',') +
<span class="item_value"><ellipsis-tooltip
:content="(assetDetailInfo.dataGetWayName?.filter(u => u != '其他')?.join(',') +
(assetDetailInfo.dataGetWay?.includes(8) ?
((assetDetailInfo.dataGetWayName?.length > 1 ? ',' : '') + assetDetailInfo.dataGetWayOther) : '')) ?? '--'"
class-name="w100f" :refName="'tooltipOver' + 'dataGetWayName'"></ellipsis-tooltip>
((assetDetailInfo.dataGetWayName?.length > 1 ? ',' : '') + assetDetailInfo.dataGetWayOther) : '')) ?? '--'" class-name="w100f"
:refName="'tooltipOver' + 'dataGetWayName'"></ellipsis-tooltip>
</span>
</div>
<div class="list_item">
......@@ -1233,16 +1251,22 @@ const handleClickDamCatalogDetail = () => {
(assetDetailInfo.registeredExchangeName?.join(',') ?? '--') }}</span>
</div>
<div class="list_item">
<span class="item_label">是否完成价值评估:</span>
<span class="item_value">{{ assetDetailInfo.isCostAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item" v-if="(detailType == 'asset' && assetDetailInfo.isCostAssessment == 'Y')">
<span class="item_label">价值评估机构:</span>
<span class="item_value">{{ assetDetailInfo.registerAttachment.costAssessmentInstitution || '--'
}}</span>
</div>
<div class="list_item">
<span class="item_label">资产类型:</span>
<span class="item_value">{{ assetDetailInfo.damTypeName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">数据时间范围:</span>
<span class="item_value">{{ assetDetailInfo.dataStartDate ? `${assetDetailInfo.dataStartDate}至${assetDetailInfo.dataEndDate}` : '--' }}</span>
</div>
<div class="list_item" v-if="assetDetailInfo.damGuid">
<span class="item_label">数据来源:</span>
<span class="item_value">{{ dataSourcesList.find(d => d.value == assetDetailInfo.dataSources)?.label || '--' }}</span>
<span class="item_value">{{ assetDetailInfo.dataStartDate ?
`${assetDetailInfo.dataStartDate}至${assetDetailInfo.dataEndDate}` : '--' }}</span>
</div>
</div>
</div>
......@@ -1257,8 +1281,9 @@ const handleClickDamCatalogDetail = () => {
<!-- <span class="small-title">资产内容</span> -->
<div class="list_item isFile" :style="{ width: '40%', 'margin-right': '28px' }"
v-if="assetDetailInfo.registerAttachment?.registerLetter?.length">
<div class="item_label" :style="{ width: 'auto', display: 'flex', 'justify-content': 'space-between', 'margin-right': '8px' }">
<span >数据登记承诺及收集函</span>
<div class="item_label"
:style="{ width: 'auto', display: 'flex', 'justify-content': 'space-between', 'margin-right': '8px' }">
<span>数据登记承诺及收集函</span>
<span class="text_btn" v-if="assetDetailInfo.damGuid" @click="handleClickDamCatalogDetail">查看表详情</span>
</div>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.registerLetter || [])" class="item_value"
......@@ -1334,7 +1359,7 @@ const handleClickDamCatalogDetail = () => {
</div>
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%','margin-right': '28px' }"
<div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }"
v-if="(detailType != 'asset' && detailType != 'qualityEvaluate' || assetDetailInfo.isEvaluationAssessment == 'Y') && assetDetailInfo.registerAttachment?.costAssessmentFile?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据价值评估</span>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.costAssessmentFile || [])" class="item_value"
......@@ -1372,6 +1397,82 @@ const handleClickDamCatalogDetail = () => {
</div>
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%' }"
v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y') && assetDetailInfo.registerAttachment?.qualityEvaluationFile?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">质量评估报告</span>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.qualityEvaluationFile || [])"
class="item_value" :style="{ 'padding-left': '0px' }">
<div class="file-operate">
<template
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ item.name }}</div>
<div :style="{ right: '36px' }"
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(item)">查看</div>
<div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div>
</div>
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }"
v-if="(detailType == 'asset' && assetDetailInfo.isCostAssessment == 'Y') && assetDetailInfo.registerAttachment?.costAssessmentFile?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">价值评估报告</span>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.costAssessmentFile || [])" class="item_value"
:style="{ 'padding-left': '0px' }">
<div class="file-operate">
<template
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ item.name }}</div>
<div :style="{ right: '36px' }"
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(item)">查看</div>
<div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div>
</div>
</span>
</div>
<!-- <span
v-if="tenantDetail.businessLicense?.length || assetDetailInfo.registerAttachment?.commitmentLetter?.length"
class="small-title" :style="{ marginTop: '10px' }">公司信息</span> -->
......
......@@ -8,21 +8,9 @@ import TableTools from "@/components/Tools/table_tools.vue";
import { ElMessage, ElMessageBox } from 'element-plus';
import { useRouter, useRoute } from "vue-router";
import { MoreFilled } from "@element-plus/icons-vue";
import {
changeNum,
tagMethod,
tagType,
} from "@/utils/common";
import {
getRegisterList,
registerDelete,
registerApproveCancel,
registerApproveReSubmit,
registerApproveAllow,
registerApproveBackup,
getRegisterTenant,
getExchangeList
} from "@/api/modules/dataAsset";
import { changeNum, tagMethod, tagType, } from "@/utils/common";
import { getRegisterList, registerDelete, getExchangeList } from "@/api/modules/dataAsset";
import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService";
import useDataAssetStore from "@/store/modules/dataAsset";
import useUserStore from "@/store/modules/user";
......@@ -107,7 +95,39 @@ const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "ce
return scope.row['ownIndustryName']?.join(',')
}
},
{ label: "状态", field: "approveState", type: "tag", width: 96, align: 'center' },
{
label: "状态", field: "approveState", type: "tag", width: 96, align: 'center', getName: (scope) => {
const approveVO = scope.row.approveVO || {}
switch (approveVO.approveState) {
case 'N':
return '草稿中';
case 'A':
return '审批中';
case 'Y':
return '已通过';
case 'R':
return '已驳回';
case 'C':
return '已撤销';
case 'I':
return '--';
default:
return '草稿中';
}
}, tagType: (scope) => {
const approveVO = scope.row.approveVO || {}
switch (approveVO.approveState) {
case 'A':
return 'warning';
case 'Y':
return 'success';
case 'R':
return 'danger';
default:
return 'info';
}
}
},
{ label: "修改人", field: "updateUserName", width: 140 },
{ label: "修改时间", field: "updateTime", width: 180 }]);
......@@ -133,7 +153,7 @@ const tableInfo = ref({
actionInfo: {
label: "操作",
type: "btn",
width: 160,
width: 180,
btns: (scope) => {
let row = scope.row;
return getTableBtns(row);
......@@ -142,35 +162,45 @@ const tableInfo = ref({
});
const getTableBtns = (row, includeDetail = true) => {
console.log(userData)
let btnsArr: any[] = [];
if (row.approveState == 'N') {//只有草稿中的详情是可以编辑的
includeDetail && btnsArr.push({ label: "详情", value: "path_detail" })
includeDetail && btnsArr.push({ label: "编辑", value: "edit" })
if (row.tenantGuid == userData.tenantGuid) {
btnsArr.push({ label: "删除", value: "delete" });
const approveVO = row.approveVO;
const currentStaffGuid = userData.staffGuid
const bizApproveState = row.approveState;
const approveState = approveVO?.approveState || 'N';
const approveStaffGuids = approveVO?.approveStaffGuids || [];
const staffGuid = approveVO?.staffGuid || '';
let isShowCancel = false;
let flowState;
if (approveState == 'N') {
flowState = 1;
}
if (approveState == 'A' && approveStaffGuids.indexOf(currentStaffGuid) > -1) {
flowState = 2;
}
} else if (row.approveState == 'A') {//审批中
includeDetail && btnsArr.push({ label: "详情", value: "path_detail" })
if (row.tenantGuid == userData.tenantGuid) {
btnsArr.push({ label: "撤销", value: "revoke" });
if ((approveState == 'C' || approveState == 'R') && staffGuid == currentStaffGuid) {
flowState = 3;
}
if (row.approveTenantGuids?.includes(userData.tenantGuid)) {
btnsArr.push({ label: "通过", value: "pass" });
btnsArr.push({ label: "驳回", value: "backup" });
if (approveVO && approveVO.approveState == 'A' && staffGuid == currentStaffGuid) {
isShowCancel = true;
}
} else if (row.approveState == 'Y') {//已通过的不能删除。
includeDetail && btnsArr.push({ label: "详情", value: "path_detail" })
} else if (row.approveState == 'R' || row.approveState == 'C') {//已驳回或已撤销
includeDetail && btnsArr.push({ label: "编辑", value: "edit" });
if (row.tenantGuid == userData.tenantGuid) {
btnsArr.push({ label: "重新提交", value: "edit", disabled: false })
if (flowState === 1) {
btnsArr = [{ label: "编辑", value: "edit" }, { label: "删除", value: "delete" }]
} else {
btnsArr.push({ label: "详情", value: "detail" })
if (flowState === 2) {
btnsArr.push(...[{ label: "通过", value: "pass" }, { label: "驳回", value: "reject" }])
if (isShowCancel) {
btnsArr.push({ label: "撤销", value: "revoke" })
}
} else if (flowState === 3) {
if (bizApproveState != 'D') {
btnsArr.push({ label: "重新提交", value: "edit" })
}
if (row.tenantGuid == userData.tenantGuid) {
btnsArr.push({ label: "删除", value: "delete" });
btnsArr.push({ label: "删除", value: "delete" })
}
}
return btnsArr;
return btnsArr
}
const currTableData: any = ref({});
......@@ -195,9 +225,10 @@ const tableBtnClick = (scope, btn) => {
const row = scope.row;
currTableData.value = row;
if (type === "edit") { //草稿中\已驳回\已撤销\已通过 状态,才可以编辑。
localStorage.setItem('isRestart', btn.label == '重新提交' ? 'true' : '');
router.push({
name: 'registerStart',
query: { guid: row.guid, damGuid: row.damGuid, name: row.daName, type }
query: { guid: row.guid, exchangeGuid: row.exchangeGuid, name: row.daName, type }
});
} else if (type == "delete") {
delTableOpen("此操作将永久删除该资产登记,是否继续?", "warning");
......@@ -207,23 +238,26 @@ const tableBtnClick = (scope, btn) => {
cancelButtonText: "取消",
type: 'warning',
}).then(() => {
listDataLoading.value = true;
loading.value = true;
let params = {
bizGuid: row.guid,
funcCode: row.funcCode
guid: row.approveVO.approveGuid,
flowType: row.approveVO.flowType,
approveStaffGuid: userData.staffGuid,
}
registerApproveCancel(params).then((res: any) => {
listDataLoading.value = false;
revokeFlowData(params).then((res: any) => {
loading.value = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('该审批流程撤销成功!');
row.approveState = "C";
getTableData();
} else {
ElMessage.error('该审批流程撤销失败!');
}
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
});
}).catch(() => {
ElMessage({
......@@ -231,25 +265,14 @@ const tableBtnClick = (scope, btn) => {
message: '已取消撤销'
});
});
} else if (type === 'path_detail') { // 详情, 若是草稿中,详情就是编辑,
// if (row.approveState === 'N') {
// router.push({
// name: 'registerStart',
// query: { guid: row.guid, name: row.daName, type: 'detail' }
// });
// } else {
// router.push({
// name: 'registerInfoDetail',
// query: { guid: row.guid, type: 'asset', daTenantGuid: row.tenantGuid }
// });
// }
} else if (type === 'detail') { // 详情, 若是草稿中,详情就是编辑,
router.push({
name: 'registerInfoDetail',
query: { guid: row.guid, name: row.daName, type: 'asset' }
});
} else if (type === 'pass') {
passDialogInfo.value.visible = true;
} else if (type == 'backup') {
} else if (type == 'reject') {
rejectDialogInfo.value.visible = true;
}
};
......@@ -276,7 +299,9 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => {
}).then(() => {
let guids: any = [];
guids = [currTableData.value.guid]
loading.value = true;
registerDelete(guids).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
pageInfo.value.curr = 1;
getTableData();
......@@ -290,7 +315,9 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => {
message: res.msg,
});
}
})
}).catch(() => {
loading.value = false;
});
}).catch(() => {
ElMessage({
type: 'info',
......@@ -300,8 +327,7 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => {
};
const getTableData = () => {
listDataLoading.value = true;
tableInfo.value.loading = true;
loading.value = true;
getRegisterList({
pageSize: pageInfo.value.limit,
pageIndex: pageInfo.value.curr,
......@@ -310,17 +336,19 @@ const getTableData = () => {
tenantGuid: pageInfo.value.tenantGuid,
exchangGuid: exchangGuid.value
}).then((res: any) => {
listDataLoading.value = false;
tableInfo.value.loading = false;
loading.value = false;
if (res.code == proxy.$passCode) {
const data = res.data || {}
listData.value = tableInfo.value.data = data.records || [];
// listData.value = tableInfo.value.data = data.records || [];
tableInfo.value.data = data.records || []
pageInfo.value.limit = data.pageSize
pageInfo.value.curr = data.pageIndex
pageInfo.value.rows = data.totalRows
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
})
}
......@@ -422,14 +450,15 @@ const passDialogInfo = ref({
const passDialogBtnClick = (btn, info) => {
if (btn.value == 'submit') {
listDataLoading.value = true;
loading.value = true;
let params = {
bizGuid: currTableData.value.guid,
funcCode: currTableData.value.funcCode,
approveSuggest: info.approveSuggest
guid: currTableData.value.approveVO.approveGuid,
flowType: currTableData.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid,
}
registerApproveAllow(params).then((res: any) => {
listDataLoading.value = false;
passFlowData(params).then((res: any) => {
loading.value = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('审批成功');
......@@ -441,6 +470,8 @@ const passDialogBtnClick = (btn, info) => {
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
});
} else if (btn.value == 'cancel') {
passDialogInfo.value.visible = false;
......@@ -489,14 +520,15 @@ const rejectDialogBtnClick = (btn, info) => {
ElMessage.error('请填写驳回理由');
return
}
listDataLoading.value = true;
loading.value = true;
let params = {
bizGuid: currTableData.value.guid,
funcCode: currTableData.value.funcCode,
approveSuggest: info.approveSuggest
guid: currTableData.value.approveVO.approveGuid,
flowType: currTableData.value.approveVO.flowType,
approveSuggest: info.approveSuggest,
approveStaffGuid: userData.staffGuid,
}
registerApproveBackup(params).then((res: any) => {
listDataLoading.value = false;
rejectFlowData(params).then((res: any) => {
loading.value = false;
if (res?.code == proxy.$passCode) {
if (res.data) {
ElMessage.success('驳回成功');
......@@ -508,6 +540,8 @@ const rejectDialogBtnClick = (btn, info) => {
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
});
} else if (btn.value == 'cancel') {
rejectDialogInfo.value.visible = false;
......
......@@ -46,6 +46,7 @@ const route = useRoute();
const guid = route.query.guid;
const fullPath = route.fullPath;
const editType = route.query.type;
const exGuid = route.query.exchangeGuid;
/** 资产目录列表 */
const registerCatalogList: any = ref([]);
......@@ -157,28 +158,14 @@ const getArea = (node, resolve) => {
}
}
const serviceTenants: any = ref([
{
"exchangeGuid": "07c11603a8bc4d8f8bee2e3a34ab4d8a",
"exchangeName": "测试数交所",
"listingNum": 0,
"underReviewNum": 0
}
]);
const currTenantChanged: any = ref([
{
"exchangeGuid": "07c11603a8bc4d8f8bee2e3a34ab4d8a",
"exchangeName": "测试数交所",
"listingNum": 0,
"underReviewNum": 0
}
]);
const serviceTenants: any = ref([]);
const currTenantChanged: any = ref([]);
const tenantDetail: any = ref({});
/** 获取当前登录会员,服务商,企业等详情。 */
const getTenantDetail = () => {
getTenantDetailInfo({ guid: userData.tenantGuid }).then((res: any) => {
getTenantDetailInfo(userData.tenantGuid).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data ?? {};
tenantDetail.value = data;
......@@ -316,10 +303,10 @@ const setUploadFormItemsValue = (info) => {
} else if (item.field === 'commitmentLetter') {
item.default = attach.commitmentLetter || [];
item.templateUrl = attachDataInfo.value['commitment-letter'];
} else if (item.field === 'costAssessmentInstitution') {
item.default = attach.costAssessmentInstitution || '';
} else if (item.field === 'qualityEvaluationInstitution') {
item.default = attach.qualityEvaluationInstitution || '';
} else if (item.field === 'costAssessmentInstitutionGuid') {
item.default = attach.costAssessmentInstitutionGuid || '';
} else if (item.field === 'qualityEvaluationInstitutionGuid') {
item.default = attach.qualityEvaluationInstitutionGuid || '';
}
});
}
......@@ -358,10 +345,15 @@ const draftDetailInfo: any = ref({});
/** 会员附件模板 */
const attachDataInfo: any = ref({});
const getRegisterCatalogListData = () => {
const getRegisterCatalogListData = (dam: any={}) => {
getRegisterCatalogList().then((res: any) => {
if (res.code == proxy.$passCode) {
baseFormItems.value[0].options = registerCatalogList.value = res.data || []
const data = res.data || [];
baseFormItems.value[0].options = registerCatalogList.value = data;
if(guid){
const opt = data.find(item => item.guid == dam.damGuid)
baseFormItems.value[0].default = opt? opt.guid: dam.damName
}
let dataScaleItem = baseFormItems.value.find(item => item.field == 'dataScale');
if (draftDetailInfo.value.damGuid) {
let da = registerCatalogList.value.find(r => r.guid == draftDetailInfo.value.damGuid);
......@@ -394,20 +386,20 @@ const getRegisterCatalogListData = () => {
}
onActivated(() => {
getRegisterCatalogListData();
// getRegisterCatalogListData();
})
onBeforeMount(() => {
if (guid) {
baseFormItems.value[7].default = guid;
fullscreenLoading.value = true;
getRegiaterDetail({ guid: guid }).then((res: any) => {
fullscreenLoading.value = false;
if (res.code == proxy.$passCode) {
const data = res.data || {}
let { approveVO } = data;
draftDetailInfo.value = data;
deploymentId.value = data.camundaDeploymentId;
processInstanceId.value = data.camundaInstanceId
deploymentId.value = approveVO?.camundaDeploymentId;
processInstanceId.value = approveVO?.camundaInstanceId
let coverageArea = '';
let coverageAreas = [];
let damTypeItem = baseFormItems.value.find(item => item.field == 'damType');
......@@ -455,17 +447,17 @@ onBeforeMount(() => {
});
}
if (data.exchangeGuid) {
// getTenantAttach(data.exchangeGuid).then((res: any) => {
// if (res?.code == proxy.$passCode) {
// Object.assign(attachDataInfo.value, res.data || {});
// uploadFormItems.value[0].templateUrl = attachDataInfo.value.register_letter;
// uploadFormItems.value[1].templateUrl = attachDataInfo.value['commitment-letter'];
// setUploadFormItemsValue(draftDetailInfo.value);
// } else {
// ElMessage.error(res.msg);
// setUploadFormItemsValue(draftDetailInfo.value);
// }
// })
getTenantAttach(userData.tenantGuid).then((res: any) => {
if (res?.code == proxy.$passCode) {
Object.assign(attachDataInfo.value, res.data || {});
uploadFormItems.value[0].templateUrl = attachDataInfo.value.register_letter;
uploadFormItems.value[1].templateUrl = attachDataInfo.value['commitment-letter'];
setUploadFormItemsValue(draftDetailInfo.value);
} else {
ElMessage.error(res.msg);
setUploadFormItemsValue(draftDetailInfo.value);
}
})
setUploadFormItemsValue(draftDetailInfo.value);
} else {
setUploadFormItemsValue(draftDetailInfo.value);
......@@ -490,39 +482,7 @@ onBeforeMount(() => {
} else {
setPropertyFormItemsValue(draftDetailInfo.value);
}
// if (fullPath === route.fullPath) {
// document.title = editType ? `详情-${data.daName}` : `编辑-${data.daName}`;
// }
// let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === fullPath);
// if (tab) {
// tab.meta.title = editType ? `详情-${data.daName}` : `编辑-${data.daName}`;
// }
if (data.approveGuid != null) {
approveTableInfo.value.loading = true;
getApproveList(guid).then((res: any) => {
approveTableInfo.value.loading = false;
if (res.code == proxy.$passCode) {
console.log(res.data);
approveTableInfo.value.data = res.data || [];
} else {
ElMessage.error(res.msg);
}
});
} else {
approveTableInfo.value.loading = true;
getTenantApprove().then((res: any) => {
approveTableInfo.value.loading = false;
if (res.code == proxy.$passCode) {
approveTableInfo.value.data = res.data?.map(d => {
return {
tenantType: d.substring(4)
}
}) || [];
} else {
ElMessage.error(res.msg);
}
});
}
getRegisterCatalogListData({damName: data.daName, damGuid: data.damGuid});
} else {
ElMessage.error(res.msg);
}
......@@ -535,44 +495,10 @@ onBeforeMount(() => {
ElMessage.error(res.msg);
}
})
// //新建无guid的时候显示这个审批信息,有guid调用另一个接口。
// getTenantApprove().then((res: any) => {
// if (res.code == proxy.$passCode) {
// approveTableInfo.value.data = res.data?.map(d => {
// return {
// tenantType: d.substring(4)
// }
// }) || [];
// } else {
// ElMessage.error(res.msg);
// }
// });
}
let exchangeItem = baseFormItems.value.find(f => f.field === 'exchangeGuid');
exchangeItem.default = route.query.exchangeGuid;
// getTenantDetail();
// getServiceTenants({
// tenantType: 3
// }).then((res: any) => {
// if (res.code == proxy.$passCode) {
// const data = res.data ?? {};
// serviceTenants.value = data['3'] || [];
// let item2 = baseFormItems.value.find(f => f.field === 'rules');
// item2.children[1].options = serviceTenants.value;
// } else {
// ElMessage.error(res.msg);
// }
// });
// getServiceDetail(userData.tenantGuid).then((res: any) => {
// if (res.code == proxy.$passCode) {
// const data = res.data ?? {};
// currTenantChanged.value = data.filter(d => d.serviceType == 4);
// let formItem = baseFormItems.value.find(f => f.field === 'exchangeGuid');
// formItem.options = currTenantChanged.value;
// } else {
// ElMessage.error(res.msg);
// }
// });
getRegisterCatalogListData();
}
getTenantDetail();
getParentAreaPromise.value = getAreaData({ parentId: null }).then((res: any) => {
if (res?.code == proxy.$passCode) {
parentAreaData.value = res.data ?? [];
......@@ -589,6 +515,7 @@ onBeforeMount(() => {
// ElMessage.error(res.msg);
// }
// })
// 获取资产类型
getParamsList({ dictType: '资产类型' }).then((res: any) => {
if (res.code == proxy.$passCode) {
damTypes.value = res.data || [];
......@@ -606,20 +533,35 @@ onBeforeMount(() => {
proxy.$ElMessage.error(res.msg);
}
})
// 获取数据资产目录主题
getParamsList({ dictType: '数据资产目录主题名称' }).then((res: any) => {
if (res.code == proxy.$passCode) {
subjectDomainListData.value = replaceChildDictListKey(res.data) || [];
let item = baseFormItems.value.find(item => item.field == 'subjectDomain');
item && (item.options = subjectDomainListData.value);
} else {
proxy.$ElMessage.error(res.msg);
}
})
// 获取数交所数据
getSingleList({ pageIndex: -1, pageSize: -1, tenantType: "130" }).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data.records ?? [];
currTenantChanged.value = data;
let formItem = baseFormItems.value.find(f => f.field === 'exchangeGuid');
formItem.options = currTenantChanged.value;
formItem.default = exGuid;
serviceTenants.value = data.filter(d => d.guid !== exGuid);
let item2 = baseFormItems.value.find(f => f.field === 'rules');
item2.children[1].options = serviceTenants.value;
} else {
proxy.$ElMessage.error(res.msg);
}
})
// 获取质量评估机构
getSingleList({ pageIndex: -1, pageSize: -1, tenantType: "12505" }).then((res: any) => {
if (res.code == proxy.$passCode) {
qualityEvaluationData.value = res.data.records || [];
let item = uploadFormItems.value.find(item => item.field == 'qualityEvaluationInstitution');
let item = uploadFormItems.value.find(item => item.field == 'qualityEvaluationInstitutionGuid');
item && (item.options = qualityEvaluationData.value);
} else {
proxy.$ElMessage.error(res.msg);
......@@ -629,7 +571,7 @@ onBeforeMount(() => {
getSingleList({ pageIndex: -1, pageSize: -1, tenantType: "12504" }).then((res: any) => {
if (res.code == proxy.$passCode) {
costAssessmentData.value = res.data.records || [];
let item = uploadFormItems.value.find(item => item.field == 'costAssessmentInstitution');
let item = uploadFormItems.value.find(item => item.field == 'costAssessmentInstitutionGuid');
item && (item.options = costAssessmentData.value);
} else {
proxy.$ElMessage.error(res.msg);
......@@ -743,14 +685,6 @@ const baseFormItems: any = ref([
clearable: true,
required: true,
}, {
label: "数据时间范围",
type: "date-picker",
field: "dateRange",
default: null,
placeholder: "开始时间~结束时间",
clearable: true,
required: true,
}, {
label: '病例总数(例)',
type: 'input',
placeholder: '请输入',
......@@ -760,7 +694,6 @@ const baseFormItems: any = ref([
default: '',
required: false
}, {
}, {
label: '数据覆盖地域',
type: 'checkbox-select',
placeholder: '全国',
......@@ -804,13 +737,10 @@ const baseFormItems: any = ref([
field: 'exchangeGuid',
default: '',
// col: 'mr8',
// col: 'mr8',
options: currTenantChanged.value,
props: {
// value: 'serviceTenantGuid',
// label: 'serviceTenantName'
value: "exchangeGuid",
label: "exchangeName",
value: 'guid',
label: 'tenantName'
},
required: true,
disabled: true,
......@@ -849,10 +779,8 @@ const baseFormItems: any = ref([
default: [],
// index: 0,
props: {
// value: "guid",
// label: "tenantName",
value: "exchangeGuid",
label: "exchangeName",
value: "guid",
label: "tenantName",
},
options: serviceTenants.value,
multiple: true,
......@@ -1334,15 +1262,18 @@ const baseFormRules = ref({
registeredExchangeGuid: [{
type: 'array', required: true, trigger: 'change', message: "请填写其他登记的交易所"
}],
isEvaluationAssessment: [
{ required: true, trigger: 'change', message: "请填写是否质量及价值评估" }
isQualityAssessment: [
{ required: true, trigger: 'change', message: "请填写是否完成质量评估" }
],
isCostAssessment: [
{ required: true, trigger: 'change', message: "请填写是否完成价值评估" }
],
applicationScenarios: [
{ required: true, trigger: 'blur', message: "请填写数据资产应用场景" }
],
limitApplicationScenarios: [
{ required: true, trigger: 'blur', message: "请填写数据资产应用限制场景" }
]
],
})
const baseSelectChange = (val, item, row) => {
......@@ -1810,34 +1741,6 @@ const uploadFormItems: any = ref([
field: 'commitmentLetter',
col: 'col2',
},
// {
// label: '文件hash值',
// type: 'input',
// placeholder: '请输入',
// field: 'fileHash',
// default: '',
// visible: true,
// required: true
// },
// {
// label: '数据质量评价收集',
// tip: '支持扩展名:xls .xlsx .doc .docx .rar .zip',
// type: 'upload-file',
// accept: '.xls, .xlsx, .doc, .docx, .rar, .zip',
// required: true,
// default: [],
// field: 'qualityEvaluationFile',
// visible: false,
// }, {
// label: '数据价值评估',
// tip: '支持扩展名:xls .xlsx .doc .docx .rar .zip',
// type: 'upload-file',
// accept: '.xls, .xlsx, .doc, .docx, .rar, .zip',
// required: true,
// visible: false,
// default: [],
// field: 'costAssessmentFile',
// },
{
label: '上传质量评估报告',
tip: '支持扩展名:.png, .pdf,单个文件不得大于5M',
......@@ -1853,12 +1756,17 @@ const uploadFormItems: any = ref([
label: '质量评估机构',
type: 'select',
placeholder: '请选择',
field: 'qualityEvaluationInstitution',
field: 'qualityEvaluationInstitutionGuid',
default: '',
options: [],
props: {
label: 'tenantName',
value: 'guid'
},
required: true,
filterable: true,
allowCreate: true,
clearable: true,
style: {
width: 'calc(33.33% - 6px)!important'
},
......@@ -1879,12 +1787,17 @@ const uploadFormItems: any = ref([
label: '价值评估机构',
type: 'select',
placeholder: '请选择',
field: 'costAssessmentInstitution',
field: 'costAssessmentInstitutionGuid',
default: '',
options: [],
props: {
label: 'tenantName',
value: 'guid'
},
required: true,
filterable: true,
allowCreate: true,
clearable: true,
style: {
width: 'calc(33.33% - 6px)!important'
},
......@@ -1902,12 +1815,12 @@ const uploadFormRules = ref({
}
}, trigger: 'change'
}],
// fileHash: [
// { required: true, trigger: 'blur', message: "请填写文件hash值" }
// ],
qualityEvaluationInstitution: [
qualityEvaluationInstitutionGuid: [
{ required: true, trigger: 'change', message: "请选择质量评估机构" }
],
costAssessmentInstitutionGuid: [
{ required: true, trigger: 'change', message: "请选择价值评估机构" }
],
qualityEvaluationFile: [{
validator: (rule: any, value: any, callback: any) => {
if (!value?.length) {
......@@ -1953,6 +1866,16 @@ const cancel = () => {
});
}
const qualityEvaluationInstitution = ref('');
const costAssessmentInstitution = ref('');
const uploadSelectChange = (val, item, row) => {
if (item.field == 'qualityEvaluationInstitutionGuid') {
qualityEvaluationInstitution.value = val && item.options.find(o => o.guid == val) ? '' : (val || '');
} else {
costAssessmentInstitution.value = val && item.options.find(o => o.guid == val) ? '' : (val || '');
}
}
/** 保存草稿,不用校验。 */
const saveDraft = () => {
let params: any = {};
......@@ -1972,14 +1895,22 @@ const saveDraft = () => {
let propertyFormLine = porpertyInfoFormRef.value.formInline;
Object.assign(params, propertyFormLine);
let uploadFormInline = uploadFormRef.value.formInline;
const registerAttachment = {
let registerAttachment: any = {
// fileHash: uploadFormInline.fileHash,
registerLetter: uploadFormInline['registerLetter']?.map(u => u.url) || [],
qualityEvaluationFile: uploadFormInline['qualityEvaluationFile']?.map(u => u.url) || [],
costAssessmentFile: uploadFormInline['costAssessmentFile']?.map(u => u.url) || [],
commitmentLetter: uploadFormInline['commitmentLetter']?.map(u => u.url) || [],
qualityEvaluationInstitution: uploadFormInline.qualityEvaluationInstitution || '',
costAssessmentInstitution: uploadFormInline.costAssessmentInstitution || '',
}
if (qualityEvaluationInstitution.value) {
registerAttachment.qualityEvaluationInstitution = qualityEvaluationInstitution.value
} else {
registerAttachment.qualityEvaluationInstitutionGuid = uploadFormInline.qualityEvaluationInstitutionGuid || ''
}
if (costAssessmentInstitution.value) {
registerAttachment.costAssessmentInstitution = costAssessmentInstitution.value
} else {
registerAttachment.costAssessmentInstitutionGuid = uploadFormInline.costAssessmentInstitutionGuid || ''
}
Object.assign(params, {
registerAttachment: registerAttachment,
......@@ -2052,14 +1983,25 @@ const save = () => {
let propertyFormLine = porpertyInfoFormRef.value.formInline;
Object.assign(params, propertyFormLine);
let uploadFormInline = uploadFormRef.value.formInline;
Object.assign(params, {
registerAttachment: {
let registerAttachment: any = {
// fileHash: uploadFormInline.fileHash,
registerLetter: uploadFormInline['registerLetter']?.map(u => u.url) || [],
qualityEvaluationFile: uploadFormInline['qualityEvaluationFile']?.map(u => u.url) || [],
costAssessmentFile: uploadFormInline['costAssessmentFile']?.map(u => u.url) || [],
commitmentLetter: uploadFormInline['commitmentLetter']?.map(u => u.url) || [],
},
}
if (qualityEvaluationInstitution.value) {
registerAttachment.qualityEvaluationInstitution = qualityEvaluationInstitution.value
} else {
registerAttachment.qualityEvaluationInstitutionGuid = uploadFormInline.qualityEvaluationInstitutionGuid || ''
}
if (costAssessmentInstitution.value) {
registerAttachment.costAssessmentInstitution = costAssessmentInstitution.value
} else {
registerAttachment.costAssessmentInstitutionGuid = uploadFormInline.costAssessmentInstitutionGuid || ''
}
Object.assign(params, {
registerAttachment: registerAttachment,
immediateApprove: true,
isSubmit: true,
});
......@@ -2070,6 +2012,7 @@ const save = () => {
fullscreenLoading.value = true;
if (draftDetailInfo.value.guid) {
params.guid = draftDetailInfo.value.guid;
params.isRestart = localStorage.getItem('isRestart') ? true : false;
registerUpdate(params).then((res: any) => {
fullscreenLoading.value = false;
if (res.code == proxy.$passCode) {
......@@ -2184,7 +2127,7 @@ const approveTableInfo: any = ref({
<ContentWrap id="id-assetContent" title="附件信息" description="" :isExpand="assetContentExpand" expandSwicth
style="margin-top: 15px" @expand="(v) => assetContentExpand = v">
<Form class='uploadForm' ref="uploadFormRef" :itemList="uploadFormItems" formId="upload-form"
:rules="uploadFormRules" col="col3" />
:rules="uploadFormRules" col="col3" @selectChange="uploadSelectChange" />
</ContentWrap>
<ContentWrap id="id-propertyInfo" title="权利信息" description="申报数据资产的权利信息" expandSwicth
:isExpand="propertyInfoExpand" style="margin-top: 15px" @expand="(v) => propertyInfoExpand = v">
......
......@@ -515,13 +515,11 @@ const tabChange = (val) => {
const nodeClick = (data, node) => {
if (data.classifyDetailGuid == 'all') {
fieldItemList.value[4].default = '';
fieldItemList.value[5].default = [];
} else {
const nodeData = JSON.parse(JSON.stringify(data));
let parentGuids = nodeData.parentGuids || [];
parentGuids.push(nodeData.guid)
fieldItemList.value[4].default = 'Y';
fieldItemList.value[5].default = parentGuids;
}
nextTick(() => {
......@@ -822,7 +820,6 @@ const cascaderChange = (val, info) => {
} else {
treeInfoRef.value.expandedKey = val || ['all'];
treeInfoRef.value.setCurrentKey(val?.at(-1) || 'all');
val && (fieldItemList.value[4].default = 'Y');
promiseList(
getFieldTableData()
)
......@@ -904,18 +901,12 @@ const selectChange = (val, item, scope = null) => {
}
}
} else if (item.field == 'isClassify') {
fieldItemList.value[5].default = [];
fieldItemList.value[6].default = '';
treeInfo.value.expandedKey = ['all'];
treeInfoRef.value.setCurrentKey('all');
fieldItemList.value[4].default = val || '';
fieldItemList.value[5].default = scope.classifyName;
nextTick(() => {
promiseList(
getFieldTableData()
)
const treeRef = treeInfoRef.value.treeRef;
const container = treeRef.$el;
container.scrollTo({ top: 0, behavior: 'smooth' });
})
}
......
......@@ -382,7 +382,7 @@ const getQueryTreeData = ()=>{
currNodeInfo.value = {type:2,guid:dataSourceGuid,name:datasourceName}
}
nextTick(() => {
treeInfo.value.currentNodeKey = currentNodeKey.value
treeInfo.value.currentNodeKey = <string>route.query.tableGuid || currentNodeKey.value;
treeInfo.value.expandedKey = expandedKey.value
})
nodeClick({type:2,guid:dataSourceGuid,name:datasourceName})
......
......@@ -683,7 +683,6 @@ const download = () => {
<div v-show="!isWordStyle" class="header-detail">
<template v-if="detailInfo.analysisReportType == 1">
<span>{{ '表名称:' + (detailInfo.qualityModelName ?? '--') }}</span>
<span style="margin-left: 40px;">{{ '所属主题:' + (detailInfo.subjectDomainName ?? '--') }}</span>
<span style="margin-left: 40px;">{{ '所属数据源:' + (detailInfo.dataSourceName ?? '--') }}</span>
</template>
<span v-else-if="detailInfo.analysisReportType == 3">{{ '分组名称:' + (detailInfo.qualityModelGroupName ?? '--')
......@@ -787,7 +786,6 @@ const download = () => {
<div style=" height: 40px;line-height: 40px;font-size: 14px;color: #666666;">
<template v-if="detailInfo.analysisReportType == 1">
<span>{{ '表名称:' + (detailInfo.qualityModelName ?? '--') }}</span>
<span style="margin-left: 40px;">{{ '所属主题:' + (detailInfo.subjectDomainName ?? '--') }}</span>
<span style="margin-left: 40px;">{{ '所属数据源:' + (detailInfo.dataSourceName ?? '--') }}</span>
</template>
<span v-else-if="detailInfo.analysisReportType == 3">{{ '分组名称:' + (detailInfo.qualityModelGroupName ?? '--')
......
......@@ -226,6 +226,7 @@ const rulesDetailTableBtnClick = (scope, btn) => {
if (type == 'ruleDetail') {
detailLoading.value = true;
if (detailJson.value[row.ruleConfGuid]) {
detailInfo.value = detailJson.value[row.ruleConfGuid];
ruleType.value = detailInfo.value.ruleCode;
toSubjectTables.value = [{
guid: detailInfo.value.subjectGuid,
......
......@@ -331,7 +331,7 @@ onActivated(() => {
let tab: any = userStore.tabbar.find((tab: any) => tab.fullPath === fullPath);
if (tab) {
if (route.query.detail) {
tab.meta.title = `新建规则(${route.query.planName})`;
tab.meta.title = `方案详情-${route.query.planName}`;
if (fullPath === route.fullPath) {
document.title = tab.meta.title;
}
......
......@@ -28,10 +28,8 @@ import {
import useDataQualityStore from "@/store/modules/dataQuality";
import { useValidator } from '@/hooks/useValidator';
import { TableColumnWidth } from '@/utils/enum';
import useDataCatalogStore from "@/store/modules/dataCatalog";
const dataQualityStore = useDataQualityStore();
const dataCatalogStore = useDataCatalogStore();
const { proxy } = getCurrentInstance() as any;
const { orderNum, description } = useValidator();
......@@ -411,10 +409,27 @@ const tableBtnClick = (scope, btn) => {
} else if (type == "delete") {
open("此操作将永久删除, 是否继续?", "warning");
} else if (type == 'locateDataCatalog') {
dataCatalogStore.setLocateSubjectName(row.name);
// dataCatalogStore.setLocateSubjectName(row.name);
// router.push({
// name: 'dataWarehouse'
// });
if (row.dataSource == '4') {
router.push({
name: 'dataWarehouse'
name: 'classifyGradeCatalogue',
query: {
databaseGuid: row.dataSourceGuid,
tableGuid: row.subjectGuid
}
});
} else {
router.push({
name: 'metaSheet',
query: {
id: row.subjectGuid,
name: row.name
}
});
}
}
};
......
......@@ -134,6 +134,15 @@ watch(() => props.largeCategoryList, (val) => {
}
})
const operationList: any = ref([
{ label: '大于', value: '>', },
{ label: '小于', value: '<', },
{ label: '等于', value: '=', },
{ label: '大于等于', value: '>=', },
{ label: '小于等于', value: '<=', },
{ label: '介于', value: 'between', },
]);
/** 规范性检验规则 */
const checkRulesList: any = ref([]);
......@@ -178,7 +187,24 @@ onBeforeMount(() => {
formItems.value[0].children = panelList.value;
}
if (props.smallCategoryList?.length) {
let p = panelList.value[1];
if (p.default) {
if (p.default == '1') {//规范性
panelList.value[2].options = props.smallCategoryList.slice(0, 6);
} else if (p.default == '2') {
panelList.value[2].options = props.smallCategoryList.slice(6, 8);
} else if (p.default == '3') {
panelList.value[2].options = props.smallCategoryList.slice(8, 13);
} else if (p.default == '4') {
panelList.value[2].options = props.smallCategoryList.slice(13, 15);
} else if (p.default == '5') {
panelList.value[2].options = props.smallCategoryList.slice(15, 18);
} else if (p.default == '6') {
panelList.value[2].options = props.smallCategoryList.slice(18, 20);
}
} else {
panelList.value[2].options = props.smallCategoryList.slice(0, 6);
}
panelList.value[2].default = getDefaultSmallCategory(formItems.value[0].default);
formItems.value[0].children = panelList.value;
}
......@@ -654,7 +680,7 @@ const getSubjectTableTreeData = () => {
d.children = d.children?.map(child => {
child.label = child.name + `(${child.tableName})`;
child.isLeaf = true;
child.dataServerName = d.name;
child.dataServerName = child.databaseName;
child.dataSourceGuid = d.guid;
return child;
})
......@@ -796,12 +822,11 @@ const formBtnClick = (btn) => {
if (field.dataRange) {
f.dataRange = field.dataRange;
}
f.startValue = field.startValue;
f.endValue = field.endValue;
if (field.startValue) {
if (f.dataType == 'date' || f.dataType == 'datetime') {
f.dateValueRange = [field.startValue, field.endValue];
} else {
f.startValue = field.startValue;
f.endValue = field.endValue;
}
}
}
......@@ -852,6 +877,7 @@ const formBtnClick = (btn) => {
if (fIndex > -1) {
let f = normCheckTableListData.value[dialogSelectSubjectTable.value.enName][fIndex];
f.checkRule = field.checkRule;
f.checkRuleName = field.checkRuleName;
f.configValue = field.configValue;
if (f.checkRule == 'length_rule') {
let vSplit = f.configValue.split('#');
......@@ -871,7 +897,7 @@ const formBtnClick = (btn) => {
}
const selectChange = (val, item, info) => {
setPanelListValue(info, true);
setPanelListValue(info, item.field == 'largeCategory');
};
/** 设置表单选项的值,防止largeCategory的options改变,重新赋值。 当radioGroupChange为true,init为false时,为用户手动切换,需要更新大类的默认值。 */
......@@ -1204,12 +1230,11 @@ const listItemClick = (data) => {
if (field.dataRange) {
f.dataRange = field.dataRange;
}
f.startValue = field.startValue;
f.endValue = field.endValue;
if (field.startValue) {
if (f.dataType == 'date' || f.dataType == 'datetime') {
f.dateValueRange = [field.startValue, field.endValue];
} else {
f.startValue = field.startValue;
f.endValue = field.endValue;
}
}
}
......@@ -1237,7 +1262,8 @@ const listItemClick = (data) => {
if (fIndex > -1) {
let f = normCheckTableListData.value[dialogSelectSubjectTable.value.enName][fIndex];
if (field.checkRule) {
f.checkRule = field.dataRange;
f.checkRule = field.checkRule;
f.checkRuleName = field.checkRuleName;
f.configValue = field.configValue;
if (field.checkRule == 'length_rule') {
let vLen = f.configValue?.split('#');
......@@ -1404,7 +1430,8 @@ const validateFilter = () => {
validateFilterBtnDisable.value = true;
validateSubjectTableRule({
subjectGuid: dialogSelectSubjectTable.value.guid,
condition: tableFilters.value[enName]
condition: tableFilters.value[enName],
dataSource: props.dataSource || props.value.dataSource
}).then((res: any) => {
validateFilterBtnDisable.value = false;
if (res.code == proxy.$passCode) {
......@@ -1602,7 +1629,8 @@ const validateSql = () => {
validateSqlBtnDisable.value = true;
validateCustomSql({
subjectGuid: dialogSelectSubjectTable.value.guid,
sqlScript: sqlTableFilters.value[enName]
sqlScript: sqlTableFilters.value[enName],
dataSource: props.dataSource || props.value.dataSource
}).then((res: any) => {
validateSqlBtnDisable.value = false;
if (res?.code == proxy.$passCode) {
......@@ -1778,14 +1806,14 @@ const submitValueRange = () => {
let valueTableFields = valueRangeTableListData.value[table];
let ruleFields: any = []
for (const field of valueTableFields) {
if (field.startValue == null && field.endValue == null) {
if (dialogSelectSubjectTable.value.enName != table) {
valueCheckFormListRef.value.setSelectList(table, 'enName');
}
ElMessage.error(`表【${table}】的字段【${field.enName}】设置了值域,但范围未填写完整`);
return;
}
if (field.startValue != null || field.endValue != null) {
// if (field.startValue == null && field.endValue == null) {
// if (dialogSelectSubjectTable.value.enName != table) {
// valueCheckFormListRef.value.setSelectList(table, 'enName');
// }
// ElMessage.error(`表【${table}】的字段【${field.enName}】设置了值域,但范围未填写完整`);
// return;
// }
if (field.startValue || field.endValue) {
ruleFields.push(field);
} else if (field.dataRange) {
ruleFields.push(field);
......@@ -1969,7 +1997,7 @@ const submitNormCheck = () => {
if (dialogSelectSubjectTable.value.enName != table) {
normCheckFormListRef.value.setSelectList(table, 'enName');
}
ElMessage.error(`表【${table}】的字段【${field.enName}】设置了长度检验,但长度值未填写完整`);
ElMessage.error(`表【${table}】的字段【${field.enName}】设置了长度检验,但长度范围值未填写完整`);
return;
}
if (parseInt(field.value) >= parseInt(field.value1)) {
......@@ -2016,6 +2044,18 @@ const submitNormCheck = () => {
normCheckDialogVisible.value = false;
}
/** 规范检验 长度和精度的数入 */
const validatePositiveInteger = (row: any, field: string) => {
row[field] = row[field].replace(/\D/g, '');
let value = row[field];
// 如果输入值为0,则将其设置为1
if (value == '0') {
row[field] = '1';
return;
}
};
const getFormInfo = () => {
let formInline = ruleFormRef.value.formInline;
let ruleName = props.ruleTypeList.find(option => option.ruleCode == formInline.ruleCode).ruleName;
......@@ -2219,6 +2259,13 @@ defineExpose({
</el-table-column>
<el-table-column label="值域" width="280px" align="left" fixed="right">
<template #default="scope">
<span v-if="props.readonly">{{ (!scope.row.dataType || scope.row.dataType == 'varchar' ||
scope.row.dataType == 'char' || scope.row.dataType == 'bit' || scope.row.dataType == 'json' ||
scope.row.dataType == 'text' || !scope.row.dataType || scope.row.dataType == 'string' ||
scope.row.dataType == 'numeric') ? (scope.row.dataRange || '--') : (scope.row.startValue &&
scope.row.endValue ? `${scope.row.startValue}~${scope.row.endValue}` : (scope.row.startValue != null ?
scope.row.startValue : (scope.row.endValue ?? '--'))) }}</span>
<template v-else>
<el-input
v-show="!scope.row.dataType || scope.row.dataType == 'varchar' || scope.row.dataType == 'char' || scope.row.dataType == 'bit' || scope.row.dataType == 'json' || scope.row.dataType == 'text' || !scope.row.dataType || scope.row.dataType == 'string' || scope.row.dataType == 'numeric'"
v-model.trim="scope.row.dataRange" clearable placeholder="多值按照分号;分隔"> </el-input>
......@@ -2236,6 +2283,7 @@ defineExpose({
</el-input>
</div>
</template>
</template>
</el-table-column>
</el-table>
</div>
......@@ -2355,16 +2403,18 @@ defineExpose({
<span v-else>{{ scope.row.checkRuleName ?? '--' }}</span>
</template>
</el-table-column>
<el-table-column label="填写配置项" width="200px" align="left">
<el-table-column label="填写配置项" width="240px" align="left">
<template #default="scope">
<span v-if="props.readonly">{{ scope.row.configValue ?? '--' }}</span>
<span v-if="props.readonly">{{ scope.row.configValue != null ? (scope.row.checkRule != 'length_rule' ? scope.row.configValue : (scope.row.configValue.split('#')?.length ?
(operationList.find(o => o.value == scope.row.configValue.split('#')[0]).label +
scope.row.configValue.split('#').slice(1).join('~')) : scope.row.configValue)) : '--' }}</span>
<span
v-else-if="!scope.row.checkRule || ['id_card_rule', 'phone_number_rule', 'en_rule', 'ch_rule', 'num_value_rule'].includes(scope.row.checkRule)">--</span>
<template v-else>
<el-input v-show="scope.row.checkRule == 'custom_regular_rule'" v-model.trim="scope.row.configValue"
clearable placeholder="请输入"> </el-input>
<el-input v-show="scope.row.checkRule == 'precision_rule'" v-model.trim="scope.row.configValue"
clearable placeholder="请输入" @input="(val) => scope.row.configValue = val.replace(/\D/g, '')">
clearable :maxlength="4" placeholder="请输入" @input="validatePositiveInteger(scope.row, 'configValue')">
</el-input>
<el-select v-show="scope.row.checkRule == 'date_format_rule'" v-model="scope.row.configValue"
placeholder="请选择" filterable clearable>
......@@ -2375,17 +2425,16 @@ defineExpose({
<div class="range-sum" v-show="scope.row.checkRule == 'length_rule'">
<el-select v-model="scope.row.operator" placeholder="请选择" filterable clearable
:style="{ width: scope.row.operator == 'between' ? 'calc(33% - 2px)' : 'calc(50% - 4px)' }">
<el-option
v-for="opt in [{ value: '=' }, { value: '>' }, { value: '<' }, { value: '>=' }, { value: '<=' }, { value: 'between', label: '介于' }]"
:key="opt['value']" :label="opt['label']" :value="opt['value']" />
<el-option v-for="opt in operationList" :key="opt['value']" :label="opt['label']"
:value="opt['value']" />
</el-select>
<el-input :disabled="props.readonly" v-model.trim="scope.row.value" placeholder="请输入" clearable
:style="{ width: scope.row.operator == 'between' ? 'calc(33% - 2px)' : 'calc(50% - 4px)' }"
@input="(val) => scope.row.value = val.replace(/\D/g, '')">
:maxlength="4" @input="validatePositiveInteger(scope.row, 'value')">
</el-input>
<el-input v-show="scope.row.operator == 'between'" :disabled="props.readonly"
v-model.trim="scope.row.value1" placeholder="请输入" clearable :style="{ width: 'calc(33% - 2px)' }"
@input="(val) => scope.row.value1 = val.replace(/\D/g, '')">
:maxlength="4" @input="validatePositiveInteger(scope.row, 'value1')">
</el-input>
</div>
</template>
......@@ -2421,8 +2470,9 @@ defineExpose({
<el-table-column prop="contrastSubjectGuid" label="选择对比表" width="200px" align="left" show-overflow-tooltip>
<template #default="scope">
<el-tree-select v-if="!props.readonly" ref="treeSelectRef" filterable clearable
v-model="scope.row['contrastSubjectGuid']" node-key="guid" :data="contrastSubjects" placeholder="请选择" :default-expanded-keys="defaultExpandedKeys"
:auto-expand-parent="true" :default-checked-keys="[props.value.contrastSubjectGuid]"
v-model="scope.row['contrastSubjectGuid']" node-key="guid" :data="contrastSubjects" placeholder="请选择"
:default-expanded-keys="defaultExpandedKeys" :auto-expand-parent="true"
:default-checked-keys="[props.value.contrastSubjectGuid]"
:filter-node-method="contrastSubjectInputFilterMethod" :props="{
value: 'guid',
label: 'name',
......
......@@ -94,7 +94,7 @@ const getSubjectTableTreeData = () => {
d.label = d.name;
d.children = d.children?.map(child => {
child.label = child.name + `(${child.tableName})`;
child.dataServerName = d.name;
child.dataServerName = child.databaseName;
child.dataSourceGuid = d.guid;
return child;
})
......
......@@ -253,20 +253,24 @@ onBeforeMount(() => {
ElMessage.error(res.msg);
}
})
getSmallCategoryList().then((res: any) => {
let ps1 = getLargeCategoryList().then((res: any) => {
if (res.code == proxy.$passCode) {
smallCategoryList.value = res.data || [];
return res.data || [];
} else {
ElMessage.error(res.msg);
}
})
getLargeCategoryList().then((res: any) => {
});
let ps2 = getSmallCategoryList().then((res: any) => {
if (res.code == proxy.$passCode) {
largeCategoryList.value = res.data || [];
return res.data || [];
} else {
ElMessage.error(res.msg);
}
})
Promise.all([ps1, ps2]).then((res: any[]) => {
largeCategoryList.value = res[0];
smallCategoryList.value = res[1];
})
})
onActivated(() => {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!