960ee981 by lihua

可信空间页面;产品目录上传交付物

1 parent 5ea29ddf
......@@ -27,7 +27,7 @@ const mainSidebarActualWidth = computed(() => {
// 侧边栏次导航当前实际宽度
const subSidebarActualWidth = computed(() => {
let actualWidth = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))
if (settingsStore.settings.menu.subMenuCollapse || route.path == '/data-asset-index') {
if (settingsStore.settings.menu.subMenuCollapse || route.path == '/data-asset-index' || route.path == '/trusted-space-index' || route.path == '/down-delivery-file') {
actualWidth = 0
}
return `${actualWidth}px`
......
......@@ -207,7 +207,7 @@ export const getCertificateDetail = (params) => request({
/** 获取登记证件管理的资产列表 */
export const getRegisterSelectList = () => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-select`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/document-select`,
method: 'get'
})
......@@ -510,6 +510,14 @@ export const getApiInvokeCount = (data) => request({
data
})
/** 获取当前用户接收方和合同信息接口 */
export const getDataReceiveContract = () => request({
// url:`${import.meta.env.VITE_APP_SERVICE_BASEURL}/api-base-info/detail`,
// url: `http://localhost:9000/circulation/ms-data-circulation-portal-service/enterprise/detail-by-name`,
// url: `http://localhost:9000/delivery/ms-daop-jgjf-data-open-service/api-base-info/detail/${params}`,
url: `https://daop-lt-test.zgsjzc.com/circulation/ms-data-circulation-tx-mgr-service/data-contract/get-data-receive-and-contract`,
method: 'get',
})
// export const getTenantInfo = (params) => request({
// // url: `${import.meta.env.VITE_APP_PERSONAL_URL}/tenant/getByGuid/${params}`,
......@@ -523,4 +531,24 @@ export const chTransformEn =(params)=> request({
url: `${import.meta.env.VITE_APP_COMMON_URL}/common/convert-field-ch-name`,
method: "post",
data: params,
});
\ No newline at end of file
});
export const saveDataReceiveContract = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/save`,
method: 'post',
data: params
});
/** 获取数据交付物详情 */
export const getDataReceiveContractDetail = (damGuid) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/list-by-dam-guid?damGuid=${damGuid}`,
method: 'get'
});
// 数据合同详情
export const getContractDetail = (params) => request({
url: `https://daop-lt-test.zgsjzc.com/circulation/ms-data-circulation-tx-mgr-service/data-contract/detail`,
method: 'get',
params
})
\ No newline at end of file
......
import request from "@/utils/request";
/** 获取首页组织机构信息 */
export const getReleaseYears = () => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/release-year`,
method: 'get',
})
export const getParamsList = (params) => request({
url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType`,
method: 'get',
params
})
export const getSubjectDomainDataTree = () => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/delivery-data-tree`,
method: 'get',
})
export const getReleaseListData = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/list-all`,
method: 'post',
data: params
})
/** 获取资产登记详情 */
export const getReleaseDataCertiDetail = (guid) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/detail-by-dam-guid?damGuid=${guid}`,
method: 'get'
})
/** 获取交付物下载附件 */
export const getDeliveryFileDetail = (guid) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/detail?guid=${guid}`,
method: 'get'
})
......@@ -25,3 +25,11 @@ export const updateComplianceInfo = (params) => {
data: params
})
}
/** 获取资产合规目录详情 */
export const getComplianceDetail = (guid) => {
return request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/compliance-info/detail?damGuid=${guid}`,
method: 'get'
})
}
\ No newline at end of file
......
......@@ -51,7 +51,7 @@ const defaultMenuActive = computed(() => {
<div
v-if="['side', 'head', 'single'].includes(settingsStore.settings.menu.menuMode) || settingsStore.mode === 'mobile'"
class="sub-sidebar-container"
:class="{ 'is-collapse': settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index') }"
:class="{ 'is-collapse': settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index' || defaultMenuActive == '/trusted-space-index' || defaultMenuActive == '/down-delivery-file') }"
@scroll="onSidebarScroll">
<Logo :show-logo="settingsStore.settings.menu.menuMode === 'single'" class="sidebar-logo" :class="{
'sidebar-logo-bg': settingsStore.settings.menu.menuMode === 'single',
......@@ -60,7 +60,7 @@ const defaultMenuActive = computed(() => {
<!-- 侧边栏模式(无主导航) -->
<el-menu :unique-opened="settingsStore.settings.menu.subMenuUniqueOpened"
:default-openeds="menuStore.defaultOpenedPaths" :default-active="defaultMenuActive"
:collapse="settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index')"
:collapse="settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index' || defaultMenuActive == '/trusted-space-index' || defaultMenuActive == '/down-delivery-file')"
:collapse-transition="false" :class="{
'is-collapse-without-logo': settingsStore.settings.menu.menuMode !== 'single' && settingsStore.settings.menu.subMenuCollapse,
}">
......
......@@ -127,6 +127,18 @@ const routes: RouteRecordRaw[] = [
}
},
{
path: 'register-catalog-contract-detail',
name: 'registerCatalogContractDetail',
component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'damTableDataView',
name: 'damTableDataView',
component: () => import('@/views/data_asset/damTableDataView.vue'),
......
......@@ -173,7 +173,19 @@ const routes: RouteRecordRaw[] = [
cache: true,
reuse: true
}
}
},
{
path: 'register-catalog-detail',
name: 'certiCatalogDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
],
},
{
......
import type { RouteRecordRaw } from 'vue-router'
function Layout() {
return import('@/layouts/index.vue')
}
const routes: RouteRecordRaw[] = [
{
path: '/trusted-space-index',
component: Layout,
meta: {
title: '可信空间',
icon: 'sidebar-videos',
},
children: [
{
path: '',
name: 'trustedSpaceIndex',
component: () => import('@/views/data_trusted/trustedSpaceIndex.vue'),
meta: {
title: '可信空间',
sidebar: false,
breadcrumb: false,
cache: true
},
},
{
path: '/down-delivery-file',
name: 'downDeliveryFile',
component: () => import('@/views/data_trusted/downDeliveryFile.vue'),
meta: {
title: '交付物下载',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.damName) {
to.meta.title = `交付物下载-${to.query.damName}`;
}
}
},
]
}]
export default routes
\ No newline at end of file
......@@ -6,11 +6,11 @@ import DataMeta from './modules/dataMeta';
import DataQuality from './modules/dataQuality';
import DataInventory from './modules/dataInventory';
import AssetIndex from './modules/assetIndex';
import DataTrustedSpace from './modules/dataTrustedSpace';
import DataAssetRegistry from './modules/dataAssetRegistry';
import DataEntry from './modules/dataEntry';
import SecurityMenu from './modules/securityMenu';
import type { Route } from '#/global'
import useSettingsStore from '@/store/modules/settings'
/** 路由配置的meta信息接口注释。 */
......@@ -110,8 +110,9 @@ const asyncRoutes: RouteRecordRaw[] = [
...DataEntry,
...SecurityMenu,
...DataMeta,
...DataQuality,
...DataQuality,
...DataInventory,
...DataTrustedSpace
]
const constantRoutesByFilesystem = generatedRoutes.filter((item) => {
......
......@@ -12,8 +12,12 @@ import {
updateCertificate,
getRegisterSelectList,
saveCertificate,
delCertificate
delCertificate,
getParamsList
} from "@/api/modules/dataAsset";
import {
getSingleList
} from "@/api/modules/queryService";
import useUserStore from "@/store/modules/user";
import useDataAssetStore from "@/store/modules/dataAsset";
import { useValidator } from '@/hooks/useValidator';
......@@ -29,8 +33,14 @@ const userData = JSON.parse(userStore.userData);
/** 是否时企业端。不是企业端,则是服务端,需要显示企业名称。 */
const isCompanyPlatform = ref(userData.tenantType == 1);
/** 登记证件类别,知识产权和数据产权 */
const documentCategoryList = ref([]);
const registerSelectData: any = ref([]);
/** 发证主体的下拉数据选择 */
const serviceTenants: any = ref([]);
onBeforeMount(() => {
if (isCompanyPlatform.value) {
tableInfo.value.fields = tableFields.value;
......@@ -38,6 +48,25 @@ onBeforeMount(() => {
tableFields.value.splice(4, 0, { label: "企业名称", field: "tenantName", width: 240, align: "left" })
tableInfo.value.fields = tableFields.value;
}
getParamsList({ dictType: '登记证件类别' }).then((res: any) => {
if (res.code == proxy.$passCode) {
documentCategoryList.value = res.data || [];
let item = formItems.value.at(-2);
item && (item.options = documentCategoryList.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 ?? [];
serviceTenants.value = data;
let formItem = formItems.value.find(f => f.field === 'issuingEntityGuid');
formItem && (formItem.options = serviceTenants.value);
} else {
proxy.$ElMessage.error(res.msg);
}
})
})
onActivated(() => {
......@@ -145,11 +174,12 @@ const tableFields = ref([
//{ label: "企业名称", field: "tenantName", width: 240, align: "left" },
{ label: "发证主体", field: "issuingEntityName", width: 250, align: "left" },
{
label: "类型", field: "documentType", width: 96, align: "left", getName: (scope) => {
label: "类型", field: "documentType", width: 80, align: "left", getName: (scope) => {
let type = scope.row.documentType;
return type == 1 ? 'A证' : (type == 2 ? 'B证' : 'C证');
}
},
{ label: "类别", field: "documentCategoryName", width: 90, align: "left" },
{ label: "状态", field: "state", type: "tag", width: 96, align: 'center' },
]);
......@@ -205,6 +235,8 @@ const tableBtnClick = (scope, btn) => {
item.default = row[item.field];
})
formItems.value[0].options = registerSelectData.value;
let item = formItems.value.at(-2);
item && (item.options = documentCategoryList.value);
getRegisterSelectList().then((res: any) => {
if (res.code == proxy.$passCode) {
registerSelectData.value = res.data || [];
......@@ -228,10 +260,17 @@ const tableBtnClick = (scope, btn) => {
proxy.$ElMessage.info("已取消删除");
});
} else if (type === 'path_detail') { // 详情
router.push({
name: 'certificateDetail',
query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
});
if (row.registerGuid) {
router.push({
name: 'certificateDetail',
query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
});
} else {
router.push({
name: 'certiCatalogDetail',
query: { guid: row.damGuid, tenantGuid: row.tenantGuid, type: 'certificate', certificateGuid: row.guid }
});
}
}
};
......@@ -245,12 +284,12 @@ const formItems = ref([{
label: "资产名称",
type: "select",
placeholder: "请选择",
field: "registerGuid",
field: "damGuid",
default: '',
options: registerSelectData.value,
props: {
label: 'daName',
value: 'guid'
value: 'damGuid'
},
disabled: false,
clearable: true,
......@@ -282,7 +321,7 @@ const formItems = ref([{
clearable: true,
unlink: true,
disabled: false,
required: false,
required: true,
visible: true
}, {
label: '',
......@@ -304,18 +343,24 @@ const formItems = ref([{
visible: true
}, {
label: '发证主体',
type: 'input',
type: 'select',
placeholder: '请输入',
field: 'issuingEntityName',
field: 'issuingEntityGuid',
default: '',
disabled: true,
required: false,
options: registerSelectData.value,
props: {
value: "guid",
label: "tenantName",
},
filterable: true,
disabled: false,
required: true,
visible: true
}, {
label: '',
type: 'input',
placeholder: '请输入',
field: 'issuingEntityGuid',
field: 'issuingEntityName',
default: '',
disabled: true,
required: false,
......@@ -340,6 +385,16 @@ const formItems = ref([{
{ label: 'C证', value: 3 }],
disabled: false,
clearable: true,
required: false,
}, {
label: "证件类别",
type: "select",
placeholder: "请选择",
field: "documentCategory",
default: '2',
options: documentCategoryList.value,
disabled: false,
clearable: true,
required: true,
}, {
label: '证件上传',
......@@ -355,10 +410,11 @@ const formItems = ref([{
}]);
const formRules = ref({
registerGuid: [required('请选择资产名称')],
damGuid: [required('请选择资产名称')],
registerTime: [required('请选择登记时间')],
effectiveDate: [required('请选择有效期')],
documentType: [required('请选择证件类型')],
//documentType: [required('请选择证件类型')],
documentCategory: [required('请选择证件类别')],
daCode: [required('请输入证件编码')],
documentFile: [{
validator: (rule: any, value: any, callback: any) => {
......@@ -443,8 +499,8 @@ const dialogBtnClick = (btn, info) => {
};
const handleDialogSelectChange = (val, row, info) => {
if (row.field == 'registerGuid') {
let register = val && registerSelectData.value.find(r => r.guid == val);
if (row.field == 'damGuid') {
let register = val && registerSelectData.value.find(r => r.damGuid == val);
formItems.value.forEach(item => {
item.default = info[item.field];
if (item.field == 'daName' || item.field == 'tenantGuid' || item.field == 'tenantName') {
......@@ -467,6 +523,8 @@ const handleCreate = () => {
ElMessage.error(res.msg);
}
})
let item = formItems.value.at(-2);
item && (item.options = documentCategoryList.value);
dialogInfo.value.visible = true;
dialogInfo.value.type = 'add';
dialogInfo.value.header.title = '新增';
......@@ -474,10 +532,12 @@ const handleCreate = () => {
item.default = '';
if (item.field == 'documentType') {
item.default = 3;
} else if (item.field == 'documentCategory') {
item.default = '2';
} else if (item.field == 'documentFile') {
item.default = [];
}
if (item.field == 'registerGuid' || item.field == 'daCode') {
if (item.field == 'damGuid' || item.field == 'daCode') {
item.disabled = false;
}
})
......@@ -489,7 +549,7 @@ const handleCreate = () => {
<div class="container_wrap">
<div class="table_tool_wrap">
<TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" :init="true" />
<div class="tools_btns">
<div class="tools_btns" style="padding-top: 0px;">
<el-button type="primary" @click="handleCreate">新增登记证件</el-button>
</div>
</div>
......@@ -505,7 +565,7 @@ const handleCreate = () => {
padding: 0 16px;
.table_panel_wrap {
height: calc(100% - 44px);
height: calc(100% - 84px);
}
}
......
......@@ -12,11 +12,13 @@ import {
getParamsList,
getDamCatalogTable,
registerCatalogDelete,
getDamTypesList
getDamTypesList,
getDataReceiveContract
} from "@/api/modules/dataAsset";
import { commonPageConfig } from "@/utils/enum";
import useDataAssetStore from "@/store/modules/dataAsset";
import useUserStore from "@/store/modules/user";
import deliverUploadDialog from "./components/deliverUploadDialog.vue";
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData);
......@@ -115,8 +117,6 @@ const searchItemList = ref([
},
]);
const pageInfo = ref({
...commonPageConfig,
rows: 0,
......@@ -353,6 +353,46 @@ const handleWindowResize = () => {
});
};
/** 上传交付物相关逻辑 */
const deliverUploadVisible = ref(false);
const deliverDataReceiveContract = ref([]);
const getReceivePromise: any = ref(null);
const uploadDeliverItem: any = ref({});
const handleClickUploadBtn = (item) => {
if (getReceivePromise.value) {
return;
}
uploadDeliverItem.value = item;
getReceivePromise.value = getDataReceiveContract().then((res: any) => {
getReceivePromise.value = null
if (res.code == proxy.$passCode) {
deliverDataReceiveContract.value = res.data || [];
if (!deliverDataReceiveContract.value?.length) {
proxy.$ElMessage.error('没有可选择的数据接收方和合同,无法上传交付物');
} else {
deliverUploadVisible.value = true;
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
const handleUploadClose = (itemGuid) => {
deliverUploadVisible.value = false
if (itemGuid) {
assetStore.setDamCatalogRefresh(true);
router.push({
name: "registerCatalogDetail",
query: { guid: itemGuid, type: "asset" },
});
}
}
</script>
<template>
......@@ -445,6 +485,7 @@ const handleWindowResize = () => {
<el-button plain v-if="!(item.isRegister == 'Y' || item.foundMode == 2) && item.foundMode != 3"
@click.stop="tableBtnClick(item, 'delete')">删除</el-button>
<el-button plain v-if="!(item.isRegister == 'Y') && item.foundMode != 3" @click.stop="handleDataClick(item)">编辑</el-button>
<el-button plain @click.stop="handleClickUploadBtn(item)" v-if="item.isRegister == 'Y'">上传交付物</el-button>
<el-button plain @click.stop="handleDataClick(item)" v-if="(item.isRegister == 'Y' || item.foundMode == 3)">详情</el-button>
</div>
</div>
......@@ -457,6 +498,7 @@ const handleWindowResize = () => {
</div>
<PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" />
<deliverUploadDialog :uploadDeliverItem="uploadDeliverItem" :visible="deliverUploadVisible" :listData="deliverDataReceiveContract" @close="handleUploadClose"></deliverUploadDialog>
</div>
</template>
......
......@@ -1760,10 +1760,14 @@ const passCommonDialogBtnClick = (btn, info) => {
class-name="w100f mr8-i" :refName="'tooltipOver' + 'issuingEntityName'"></ellipsis-tooltip></span>
</div>
<div class="list_item">
<span class="item_label">类型:</span>
<span class="item_label">证件类型:</span>
<span class="item_value">{{ detailInfo.documentType == 1 ? 'A证' : (detailInfo.documentType == 2 ? 'B证' :
'C证') }}</span>
</div>
<div class="list_item">
<span class="item_label">证件类别:</span>
<span class="item_value">{{ detailInfo.documentCategoryName ?? '--' }}</span>
</div>
<div class="list_item is_block" v-if="detailInfo.documentFile?.length" :style="{ 'max-width': '700px' }">
<span class="item_label">证件:</span>
<span class="item_value">
......
<template>
<div class="content_main">
<div class="loading-main" v-show="loadingProcess">
<div class="row-main">
<img class="loading-img" src="../../assets/images/loading.gif" />
<div class="title-first" style=" margin-left: 22px;">正在检测您的账号安全状态,请稍后……</div>
</div>
<div class="row-main mt15">
<el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
<CircleCheckFilled />
</el-icon>
<div class="title-desc">IP认证成功</div>
</div>
<div class="row-main mt15">
<div class="circle-main">
<div class="circle"></div>
</div>
<div class="title-desc">通行密钥认证</div>
</div>
</div>
<div class="loading-main" v-show="!loadingProcess">
<div class="row-main">
<el-icon style="width: 32px;height: 32px;" color="#1ba854" class="big">
<CircleCheckFilled />
</el-icon>
<div class="title-first" style=" margin-left: 22px;">认证通过</div>
</div>
<div class="row-main mt15">
<el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
<CircleCheckFilled />
</el-icon>
<div class="title-desc">IP认证成功</div>
</div>
<div class="row-main mt15">
<el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
<CircleCheckFilled />
</el-icon>
<div class="title-desc">通行密钥认证</div>
</div>
</div>
<div class="file-down" v-if="!loadingProcess && file.name">
<div class="title-first">交付物下载</div>
<div class="file-row-main">
<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"
:style="{ width: ['pdf', 'png', 'jpg', 'jpeg'].includes(file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() ?? '') ? 'calc(100% - 300px)' : 'calc(100% - 290px)' }">
<ellipsis-tooltip :content="file.name" class-name="w100f"
:refName="'tooltipOver' + file.name"></ellipsis-tooltip>
</div>
<div class="upload-time" :style="{ right: 32 }" v-if="uploadTime"> {{ '上传时间:' + uploadTime }} </div>
<div :style="{ right: 0 }" class="file-preview" @click="onUploadFileDownload(file)">下载
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup name="downDeliveryFile">
import { onUploadFileDownload } from '@/api/modules/common';
import {
CircleCheckFilled
} from "@element-plus/icons-vue";
import {
getDeliveryFileDetail
} from '@/api/modules/dataTrustedSpace';
const { proxy } = getCurrentInstance() as any;
const route = useRoute()
const file = ref({
name: '',
url: ''
});
const uploadTime = ref('');
const loadingProcess = ref(true);
onActivated(() => {
loadingProcess.value = true;
getDeliveryFileDetail(route.query.guid).then((res: any) => {
if (res.code == proxy.$passCode) {
file.value = res.data?.dataDelivery?.[0] || {
name: '',
url: ''
};
uploadTime.value = res.data?.uploadTime || '';
setTimeout(() => {
loadingProcess.value = false;
}, 1000)
} else {
proxy.$ElMessage.error(res.msg);
}
})
})
onBeforeMount(() => {
})
</script>
<style lang="scss" scoped>
.content_main {
display: flex;
background-color: #f5f5f6;
padding: 24px 120px 0px;
height: 100%;
width: 100%;
flex-direction: column;
}
.loading-main {
height: 162px;
background: #F2F9FF;
border: 1px solid rgba(182, 213, 241, 1);
padding: 30px 56px;
width: 100%;
.title-desc {
font-size: 14px;
color: #212121;
line-height: 24px;
font-weight: 400;
margin-left: 22px;
}
}
.title-first {
font-size: 20px;
color: #212121;
line-height: 30px;
font-weight: 600;
}
.row-main {
display: flex;
}
.loading-img {
width: 28px;
height: 28px;
}
:deep(.el-icon.small) {
svg {
width: 20px;
height: 20px;
}
}
:deep(.el-icon.big) {
svg {
width: 32px;
height: 32px;
}
}
.circle-main {
width: 30px;
height: 24px;
display: flex;
justify-content: center;
align-items: center;
}
.circle {
border-radius: 100%;
border: 1px solid #b2b2b2;
width: 16px;
height: 16px;
}
.mt15 {
margin-top: 12px;
}
.file-down {
padding: 24px;
display: flex;
flex-direction: column;
border: 1px solid #d9d9d9;
background-color: #fff;
margin-top: 22px;
.file-row-main {
height: 48px;
background-color: #f5f5f5;
padding: 8px 24px;
margin-top: 12px;
justify-content: center;
display: flex;
}
}
.file-operate {
display: flex;
align-items: center;
position: relative;
width: 100%;
.file-img {
width: 30px;
height: 30px;
}
&:hover {
background-color: #f5f5f5;
}
}
.file-name {
margin-left: 4px;
margin-right: 4px;
width: calc(100% - 130px);
color: #212121;
font-size: 14px;
}
.upload-time {
color: #212121;
font-size: 14px;
}
.file-preview {
position: absolute;
cursor: pointer;
color: var(--el-color-primary);
margin-right: 8px;
font-size: 14px;
}
</style>
\ No newline at end of file
......@@ -114,7 +114,11 @@ const tableInfo = ref({
label: "详情", value: "detail", click: (scope) => {
tableTempValue.value = scope.row;
formItems.value.forEach((item) => {
item.default = scope.row[item.field] || [];
if (['complianceEvaluateReport', 'complianceLegalOpinion', 'entryComplianceProgram'].includes(item.field)) {
item.default = scope.row[item.field] || [];
} else {
item.default = scope.row[item.field] || '';
}
});
dialogInfo.value.visible = true;
},
......@@ -126,7 +130,11 @@ const tableInfo = ref({
label: "上传", value: "upload", click: (scope) => {
tableTempValue.value = scope.row;
formItems.value.forEach((item) => {
item.default = scope.row[item.field] || [];
if (['complianceEvaluateReport', 'complianceLegalOpinion', 'entryComplianceProgram'].includes(item.field)) {
item.default = scope.row[item.field] || [];
} else {
item.default = scope.row[item.field] || '';
}
});
dialogInfo.value.visible = true;
},
......@@ -168,6 +176,25 @@ const formItems = ref([
limit: 1,
},
{
label: '出具机构',
type: 'input',
placeholder: '请输入',
field: 'reportIssuingInstitution',
default: '',
required: false,
visible: true
},
{
label: '出具日期',
type: 'date',
placeholder: '请选择',
field: 'reportIssuingTime',
default: "",
unlink: true,
clearable: true,
required: false
},
{
label: '合规法律意见书',
tip: '支持格式:pdf,单个文件不能超过10MB ',
type: 'upload-file',
......@@ -181,6 +208,25 @@ const formItems = ref([
limit: 1,
},
{
label: '出具机构',
type: 'input',
placeholder: '请输入',
field: 'opinionIssuingInstitution',
default: '',
required: false,
visible: true
},
{
label: '出具日期',
type: 'date',
placeholder: '请选择',
field: 'opinionIssuingTime',
default: "",
unlink: true,
clearable: true,
required: false
},
{
label: '入表合规方案',
tip: '支持格式:pdf,单个文件不能超过10MB ',
type: 'upload-file',
......@@ -193,6 +239,25 @@ const formItems = ref([
default: [],
limit: 1,
},
{
label: '出具机构',
type: 'input',
placeholder: '请输入',
field: 'planIssuingInstitution',
default: '',
required: false,
visible: true
},
{
label: '出具日期',
type: 'date',
placeholder: '请选择',
field: 'planIssuingTime',
default: "",
unlink: true,
clearable: true,
required: false
},
]);
const formRules = ref({
......@@ -230,7 +295,6 @@ const tableTempValue = ref<any>('');
const dialogBtnClick = (btn, info) => {
console.log('currTableData', info);
if (btn.value == 'submit') {
tableInfo.value.loading = true;
let params: any = {
damGuid: tableTempValue.value.guid,
complianceEvaluateReport: info.complianceEvaluateReport?.map(file => {
......@@ -239,19 +303,56 @@ const dialogBtnClick = (btn, info) => {
url: file.url
}
}) || [],
reportIssuingInstitution: info.reportIssuingInstitution,
reportIssuingTime: info.reportIssuingTime,
complianceLegalOpinion: info.complianceLegalOpinion?.map(file => {
return {
name: file.name,
url: file.url
}
}) || [],
opinionIssuingInstitution: info.opinionIssuingInstitution,
opinionIssuingTime: info.opinionIssuingTime,
entryComplianceProgram: info.entryComplianceProgram?.map(file => {
return {
name: file.name,
url: file.url
}
}) || [],
planIssuingInstitution: info.planIssuingInstitution,
planIssuingTime: info.planIssuingTime
}
if (params.complianceEvaluateReport?.length) {
if (!params.reportIssuingInstitution) {
ElMessage.error('请输入合规评估报告的出具机构');
return;
}
if (!params.reportIssuingTime) {
ElMessage.error('请输入合规评估报告的出具日期');
return;
}
}
if (params.complianceLegalOpinion?.length) {
if (!params.opinionIssuingInstitution) {
ElMessage.error('请输入合规法律意见书的出具机构');
return;
}
if (!params.opinionIssuingTime) {
ElMessage.error('请输入合规法律意见书的出具日期');
return;
}
}
if (params.entryComplianceProgram?.length) {
if (!params.planIssuingInstitution) {
ElMessage.error('请输入入表合规方案的出具机构');
return;
}
if (!params.planIssuingTime) {
ElMessage.error('请输入入表合规方案的出具日期');
return;
}
}
tableInfo.value.loading = true;
updateComplianceInfo(params).then((res: any) => {
tableInfo.value.loading = false;
if (res?.code == proxy.$passCode) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!