f569bb2d by lihua

数据产品管理优化

1 parent 12a66bd2
......@@ -349,6 +349,13 @@ export const existDamName = (params) => request({
method: 'get'
});
// 获取数据产品目录登记评估详情
export const getRegisterCatalogDetailGuids = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/register-evaluation-grounding-trading`,
method: 'get',
params
})
/** 获取资产目录基本信息的详情 */
export const getRegisterCatalogDetail = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/detail`,
......@@ -553,6 +560,13 @@ export const getContractDetail = (params) => request({
params
})
// 流通中的数据产品交易详情
export const getTransactionDetail = (params) => request({
url: `${import.meta.env.VITE_API_BASEURL}circulation/api/ms-data-circulation-tx-mgr-service/ading-info/detail`,
method: 'get',
params
})
// 获取所有字典
export const getDictAllList = () => request({
url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-all`
......
......@@ -26,7 +26,7 @@ const routes: RouteRecordRaw[] = [
path: '/data-asset/register-catalog',
component: Layout,
meta: {
title: '数据产品目录',
title: '自有数据产品',
icon: 'sidebar-videos',
},
children: [
......@@ -35,7 +35,7 @@ const routes: RouteRecordRaw[] = [
name: 'registerCatalogManagement',
component: () => import('@/views/data_asset/registerCatalogManagement.vue'),
meta: {
title: '数据产品目录',
title: '自有数据产品',
sidebar: false,
breadcrumb: false,
cache: true
......@@ -46,7 +46,7 @@ const routes: RouteRecordRaw[] = [
name: 'registerCatalogCreate',
component: () => import('@/views/data_asset/registerCatalogCreate.vue'),
meta: {
title: '新建产品目录',
title: '新建自有数据产品',
sidebar: false,
breadcrumb: false,
cache: true,
......@@ -95,25 +95,6 @@ const routes: RouteRecordRaw[] = [
reuse: true
}
},
// {
// path: 'import-table-field',
// name: 'importTableField',
// component: () => import('@/views/data_asset/importTableField.vue'),
// meta: {
// title: '导入表字段',
// sidebar: false,
// breadcrumb: false,
// cache: true,
// editPage: true,
// reuse: true
// },
// beforeEnter: (to, from) => {
// if (to.query.guid) {
// to.meta.title = `编辑-`;
// to.meta.editPage = true;
// }
// }
// },
{
path: 'register-catalog-detail',
name: 'registerCatalogDetail',
......@@ -131,11 +112,28 @@ const routes: RouteRecordRaw[] = [
name: 'registerCatalogContractDetail',
component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
meta: {
title: '详情-',
title: '合同详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-transaction-detail',
name: 'registerCatalogTransactionDetail',
component: () => import('@/views/data_asset/transactionDetail.vue'),
meta: {
title: '产品交易详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.guid) {
to.meta.title = `产品交易详情-${to.query.damName}`;
}
}
},
{
......@@ -158,6 +156,139 @@ const routes: RouteRecordRaw[] = [
]
},
{
path: '/data-asset/authordata-catalog',
component: Layout,
meta: {
title: '授权数据产品',
icon: 'sidebar-videos',
},
children: [
{
path: '',
name: 'authorDataCatalogManagement',
component: () => import('@/views/data_asset/authorDataCatalogManagement.vue'),
meta: {
title: '授权数据产品',
sidebar: false,
breadcrumb: false,
cache: true
},
},
{
path: 'register-ctalog-create',
name: 'authorDataCatalogCreate',
component: () => import('@/views/data_asset/registerCatalogCreate.vue'),
meta: {
title: '新建授权数据产品',
sidebar: false,
breadcrumb: false,
cache: true,
editPage: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.type) {
to.meta.title = `详情-`;
return;
}
if (to.query.guid) {
to.meta.title = `编辑-${to.query.damName}`;
to.meta.editPage = true;
}
}
},
{
path: 'import-file-dam',
name: 'authorImportFileDam',
component: () => import('@/views/importFile.vue'),
meta: {
title: '导入数据',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.bizGuid) {
to.meta.title = `导入数据-${to.query.name}(${to.query.damName})`;
}
}
},
{
// path: 'processDetail',
// name: 'APIProcessDetail',
path: 'api-detail',
name: 'authorApiDetail',
component: () => import('@/views/data_asset/detail_serviceApi.vue'),
meta: {
title: '流程详情',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-detail',
name: 'authorRegisterCatalogDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-contract-detail',
name: 'authorRegisterCatalogContractDetail',
component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
meta: {
title: '合同详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-transaction-detail',
name: 'authorRegisterCatalogTransactionDetail',
component: () => import('@/views/data_asset/transactionDetail.vue'),
meta: {
title: '产品交易详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.guid) {
to.meta.title = `产品交易详情-${to.query.damName}`;
}
}
},
{
path: 'damTableDataView',
name: 'authorDamTableDataView',
component: () => import('@/views/data_asset/damTableDataView.vue'),
meta: {
title: '查看数据',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
beforeEnter: (to, from) => {
if (to.query.guid) {
to.meta.title = `查看数据-${to.query.name}(${to.query.damName})`;
}
}
},
]
},
{
path: '/data-product/product-listing',
component: Layout,
meta: {
......
<route lang="yaml">
name: authorDataCatalogManagement
</route>
<script lang="ts" setup name="authorDataCatalogManagement">
import { ref } from "vue";
import registerCatalogManagement from "./registerCatalogManagement.vue";
</script>
<template>
<registerCatalogManagement :dataSources="1"></registerCatalogManagement>
</template>
\ No newline at end of file
......@@ -187,8 +187,8 @@ onActivated(() => {
if (tab) {
switch (detailType) {
case 'detail':
tab.meta.title = `详情-${damName}`;
document.title = `详情-${damName}`;
tab.meta.title = `合同详情-${damName}`;
document.title = `合同详情-${damName}`;
break;
}
}
......
......@@ -22,7 +22,8 @@ import {
registerCatalogTableUpdate,
registerCatalogTableDelete,
getRegisterCatalogTableList,
checkDamTableChange
checkDamTableChange,
getTenantList
} from "@/api/modules/dataAsset";
import { ContentWrap } from '@/components/ContentWrap';
import importTableField from "./importTableField.vue";
......@@ -101,7 +102,7 @@ const getArea = (node, resolve) => {
const baseInfoExpand = ref(true);
const assetTableInfoExpand = ref(true);
const importTableFieldRef = ref();
const rightMainTenantList = ref([]); //权利主体下拉列表选择
const baseInfoFormRef = ref();
const baseInfoFormItems = ref([
......@@ -130,13 +131,20 @@ const baseInfoFormItems = ref([
},
{
label: '权利主体',
type: 'input',
placeholder: '请输入',
type: route.query.dataSources == '1' ? 'select' : 'input',
placeholder: route.query.dataSources == '1' ? '请选择' : '请输入',
field: 'rightMain',
maxlength: 20,
default: JSON.parse(userStore.userData).tenantName,
options: rightMainTenantList.value,
props: {
value: 'guid',
label: 'tenantName'
},
filterable: true,
clearable: true,
default: route.query.dataSources == '1' ? JSON.parse(userStore.userData).tenantGuid : JSON.parse(userStore.userData).tenantName,
required: true,
disabled: true
disabled: route.query.dataSources == '1' ? false : true,
},
{
label: '所属主题',
......@@ -216,8 +224,22 @@ const baseInfoFormItems = ref([
placeholder: "",
field: "dataSources",
block: false,
default: 1,
options: dataSourcesList,
default: route.query.dataSources == '1' ? 1 : 2,
options: route.query.dataSources == '1' ? [{ //如果是授权数据则不能选择其余的
value: 1,
label: '授权数据',
}]: [{
value: 2,
label: '自有数据',
},
{
value: 3,
label: '购买数据',
},
{
value: 4,
label: '其他来源',
}], //dataSourcesList
required: true,
},
// 是否公共数据
......@@ -297,7 +319,7 @@ const baseInfoFormRules = ref({
propertyDescription: [required('请填写资源描述')],
sceneDescription: [required('请填写应用场景描述')],
sceneLimit: [required('请填写应用场景限制')],
rightMain: [required('请填写权利主体')],
rightMain: [required(route.query.dataSources == '1' ? '请选择权利主体' : '请填写权利主体')],
dataSources: [required('请选择数据来源')],
isPublicData: [required('请选择是否公共数据')],
});
......@@ -420,12 +442,14 @@ const assetDataTableInfo = ref({
label: "导入数据", value: "importData", click: (scope) => {
let row = scope.row;
router.push({
name: "importFileDam",
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/import-file-dam' : '/data-asset/register-catalog/import-file-dam',
// name: "importFileDam",
query: {
bizGuid: row.guid,
name: row.tableChName,
isfileImport: '2',
damName: route.query.damName
damName: route.query.damName,
dataSources: route.query.dataSources
}
})
}
......@@ -434,11 +458,13 @@ const assetDataTableInfo = ref({
label: "查看样例数据", value: "viewData", click: (scope) => {
let row = scope.row;
router.push({
name: 'damTableDataView',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
// name: 'damTableDataView',
query: {
guid: row.guid,
name: row.tableChName,
damName: detailInfo.value.damName
damName: detailInfo.value.damName,
dataSources: route.query.dataSources
}
});
}
......@@ -571,7 +597,7 @@ onBeforeMount(() => {
}
}
} else if (item.field == 'rightMain') {
item.default = detailInfo.value.rightMainName;
item.default = route.query.dataSources == '1' ? detailInfo.value.rightMain : detailInfo.value.rightMainName;
}
});
if (route.query.guid && route.query.foundMode == '2') {
......@@ -599,6 +625,23 @@ onBeforeMount(() => {
}
});
}
if (route.query.dataSources == '1') {
getTenantList({
bizState: 'Y',
pageSize: -1
}).then((res: any) => {
rightMainTenantList.value = [];
if (res.code == proxy.$passCode) {
rightMainTenantList.value = res.data?.records || [];
let item = baseInfoFormItems.value.find(b => b.field == 'rightMain');
item && (item.options = rightMainTenantList.value);
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
function replaceChildDictListKey(data) {
if (Array.isArray(data)) {
return data.map(item => replaceChildDictListKey(item));
......@@ -639,7 +682,7 @@ const cancel = () => {
proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => {
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
path: '/data-asset/register-catalog'
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
});
}, () => {
proxy.$ElMessage.info("已取消");
......@@ -676,14 +719,17 @@ const save = () => {
if (damGuid.value) {
params.guid = damGuid.value;
params.foundMode = route.query.foundMode;
if (route.query.dataSources != '1') {
params.rightMain = detailInfo.value.rightMain;
}
fullscreenLoading.value = true;
registerCatalogUpdate(params).then((res: any) => {
fullscreenLoading.value = false;
if (res.code == proxy.$passCode) {
proxy.$ElMessage.success('资源目录编辑提交成功');
router.push({
name: 'registerCatalogManagement'
// name: 'registerCatalogManagement'
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
});
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
assetStore.setDamCatalogRefresh(true);
......@@ -695,13 +741,14 @@ const save = () => {
params.damCatalogTableInfo = assetDataTableInfo.value.data;
fullscreenLoading.value = true;
console.log(params, 'params');
params.rightMain = JSON.parse(userStore.userData).tenantGuid;
// params.rightMain = JSON.parse(userStore.userData).tenantGuid;
registerCatalogSave(params).then((res: any) => {
fullscreenLoading.value = false;
if (res.code == proxy.$passCode) {
proxy.$ElMessage.success('资源目录新建提交成功');
router.push({
name: 'registerCatalogManagement'
// name: 'registerCatalogManagement'
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
});
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
assetStore.setDamCatalogRefresh(true);
......
......@@ -16,7 +16,8 @@ import {
getEvaDetail,
getCostDetail,
getDataReceiveContractDetail,
getCertificateDetail
getCertificateDetail,
getRegisterCatalogDetailGuids
} from "@/api/modules/dataAsset";
import { changeNum } from '@/utils/common'
import { ElMessage, ElMessageBox } from "element-plus";
......@@ -93,6 +94,79 @@ const deploymentId = ref('');
const processInstanceId = ref('');
const registerDetailTableInfo = ref({
id: 'register-data-table',
rowKey: 'guid',
height: 220,
loading: false,
fields: [ { label: "序号", type: "index", width: 56, align: "center" },
{ label: "事项", field: "title", width: 160, align: "left" },
{ label: "对接主体", field: "institutionName", width: 160, align: "left" },
],
data: <any>[],
showPage: false,
actionInfo: {
label: "操作",
type: "btn",
width: 130,
btns: [{
label: "查看详情", value: "detail", click: (scope) => {
let row = scope.row;
if (row.type == 'asset') {
router.push({
name: 'registerInfoDetail',
query: { guid: row.guid, name: detailInfo.value.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
});
} else if (row.type == 'qualityEvaluate') {
if (row.registerApproveState == 'Y') {
router.push({
name: 'registerDetail',
query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
} else {
router.push({
name: 'evaCatalogDetail',
query: { guid: route.query.guid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid }
});
}
} else if (row.type == 'costAssess') {
if (row.registerApproveState == 'Y') {
router.push({
name: 'registerValueDetail',
query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
} else {
router.push({
name: 'costAssessDetail',
query: { guid: route.query.guid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid }
});
}
} else if (row.type == 'product') {
router.push({
name: 'productListingDetail',
query: {
guid: row.guid,
type: 'detail',
name: detailInfo.value.damName,
exchangeGuid: row.institutionGuid ? row.institutionGuid : '',
tenantGuid: row.tenantGuid
}
});
} else if (row.type == 'trade') {
router.push({
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/register-catalog-transaction-detail' : '/data-asset/register-catalog/register-catalog-transaction-detail',
//name: 'transactionManagement'
query: {
guid: row.guid,
damName: detailInfo.value.damName,
}
});
}
}
}]
}
});
const getDetailInfo = () => {
fullscreenLoading.value = true;
getRegisterCatalogDetail({ guid: catalogGuid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => {
......@@ -181,6 +255,44 @@ const getDetailInfo = () => {
}
})
}
getRegisterCatalogDetailGuids({ damGuid: catalogGuid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => {
registerDetailTableInfo.value.data = [];
if (res.code == proxy.$passCode) {
const data = res.data || {};
if (data.registerBaseRSVO) {
registerDetailTableInfo.value.data.push(Object.assign({}, data.registerBaseRSVO, {
title: "资产登记",
type: 'asset'
}));
}
if (data.qualityEvaluationRSVO) {
registerDetailTableInfo.value.data.push(Object.assign({}, data.qualityEvaluationRSVO, {
title: "质量评估",
type: 'qualityEvaluate'
}));
}
if (data.costAssessmentRSVO) {
registerDetailTableInfo.value.data.push(Object.assign({}, data.costAssessmentRSVO, {
title: "价值评估",
type: 'costAssess'
}));
}
if (data.productGroundingRSVO) {
registerDetailTableInfo.value.data.push(Object.assign({}, data.productGroundingRSVO, {
title: "数据产品上架",
type: 'product'
}));
}
if (data.mfTradingInfoRSVO) {
registerDetailTableInfo.value.data.push(Object.assign({}, data.mfTradingInfoRSVO, {
title: "数据产品交易",
type: 'trade'
}));
}
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
onBeforeMount(() => {
......@@ -220,7 +332,7 @@ const isTextTruncated = () => {
if (!domDesc) {
return;
}
if (domDesc.clientHeight > 64) {
if (domDesc.clientHeight > 82) {
isTruncated.value = true;
} else {
isTruncated.value = false;
......@@ -248,7 +360,8 @@ const handleTableExpandChange = (row: any, expandedRows: any[]) => {
const handleTableViewData = (scope) => {
let row = scope.row;
router.push({
name: 'damTableDataView',
// name: 'damTableDataView',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
query: {
guid: row.guid,
name: row.tableChName,
......@@ -284,7 +397,8 @@ const btnClick = (btn) => {
console.log('detailType', detailType.value);
if (detailType.value == 'asset') {
router.push({
name: 'registerCatalogManagement',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog',
//name: 'registerCatalogManagement',
query: {}
});
} else {
......@@ -936,7 +1050,8 @@ const handleClick = () => {
// 跳转到 apiDetail 页面
if (detailInfo.value.foundMode == '2') {
router.push({
name: 'apiDetail',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/api-detail' : '/data-asset/register-catalog/api-detail',
//name: 'apiDetail',
query: {
guid: detailInfo.value.guid,
type: 'detaile',
......@@ -966,7 +1081,8 @@ const deliverySpanMethod = ({
const clickContractDetail = (item) => {
router.push({
name: 'registerCatalogContractDetail',
path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/register-catalog-contract-detail' : '/data-asset/register-catalog/register-catalog-contract-detail',
//name: 'registerCatalogContractDetail',
query: {
guid: item.dataContractGuid,
name: item.dataContractName,
......@@ -1000,6 +1116,7 @@ const viewDeliveryFile = (file) => {
<div class="dataLabel dataLabel1">{{ detailInfo.dataSourcesName }}</div>
</div>
</div>
<div class="applicationScenarios">{{ '权利主体:' + detailInfo.rightMainName }}</div>
<div class="applicationScenarios"
:style="{ 'margin-right': (isTruncated && !isExpanded) ? '30px' : '0px', WebkitLineClamp: (!isTruncated ? 'inherit' : (isExpanded ? 'inherit' : 1)), WebkitBoxOrient: 'vertical' }">
{{'覆盖地域:' + (detailInfo.coverageArea?.[0]?.[0] == 'all' ? '全国' : (detailInfo.coverageAreaName?.map(c =>
......@@ -1020,7 +1137,7 @@ const viewDeliveryFile = (file) => {
:highlight-current-row="true" stripe border @expand-change="handleTableExpandChange" height="100%"
tooltip-effect="light" row-key="guid" :style="{
width: '100%',
height: '400px',
height: '350px',
display: 'inline-block',
}">
<el-table-column type="expand">
......@@ -1329,6 +1446,10 @@ const viewDeliveryFile = (file) => {
</div>
</ContentWrap>
<ContentWrap v-if="route.query.type == 'asset' && registerDetailTableInfo.data.length > 0" id="id-registerDetail" title="登记评估上架交易" description="" style="margin: 16px 16px 16px">
<Table :table-info="registerDetailTableInfo"></Table>
</ContentWrap>
<ContentWrap
v-if="(route.query.type == 'qualityEvaluate' && evaDetailInfo.approveVO && evaDetailInfo.isApprove != 'N') || (route.query.type == 'costAssess' && costAssessDetail.approveVO && costAssessDetail.isApprove != 'N')"
id="id-approveInfo" title="审批信息" description="" style="margin: 16px 16px 16px">
......@@ -1582,7 +1703,7 @@ const viewDeliveryFile = (file) => {
.expand_btn {
position: absolute;
right: 0px;
top: 34px;
top: 58px;
font-size: 14px;
line-height: 21px;
}
......
......@@ -25,6 +25,13 @@ const userData = JSON.parse(userStore.userData);
const assetStore = useDataAssetStore();
const props = defineProps({
dataSources: {
type: Number,
default: 2,
}
})
const router = useRouter();
const { proxy } = getCurrentInstance() as any;
const damTypes: any = ref([]);
......@@ -156,8 +163,9 @@ const tableBtnClick = (scope, btn) => {
currTableData.value = row;
if (type === "edit") {
router.push({
name: "registerCatalogCreate",
query: { guid: row.guid, damName: row.damName, foundMode: row.foundMode },
// name: "registerCatalogCreate",
path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
query: { guid: row.guid, damName: row.damName, foundMode: row.foundMode, dataSources: props.dataSources },
});
} else if (type == "delete") {
proxy.$openMessageBox('此操作将永久删除该资源,是否继续', () => {
......@@ -181,13 +189,15 @@ const tableBtnClick = (scope, btn) => {
const handleDataClick = (item) => {
if (item.isRegister == "N" && item.foundMode != 3) {
router.push({
name: "registerCatalogCreate",
query: { guid: item.guid, damName: item.damName, foundMode: item.foundMode },
path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
// name: "registerCatalogCreate",
query: { guid: item.guid, damName: item.damName, foundMode: item.foundMode, dataSources: props.dataSources },
});
} else {
router.push({
name: "registerCatalogDetail",
query: { guid: item.guid, type: "asset" },
// name: "registerCatalogDetail",
path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-catalog-detail' : '/data-asset/register-catalog/register-catalog-detail',
query: { guid: item.guid, type: "asset", dataSources: props.dataSources },
});
}
};
......@@ -201,7 +211,7 @@ const getTableData = () => {
damType: pageInfo.value.damType,
subjectDomain: pageInfo.value.subjectDomain || [],
tenantGuid: pageInfo.value.tenantGuid,
dataSources: pageInfo.value.dataSources,
dataSources: props.dataSources,
isRegister: pageInfo.value.isRegister,
foundMode: pageInfo.value.foundMode,
}).then((res: any) => {
......@@ -228,7 +238,7 @@ const toSearch = (val: any, clear: boolean = false) => {
pageInfo.value.subjectDomain = [];
pageInfo.value.tenantGuid = "";
pageInfo.value.isRegister = "";
pageInfo.value.dataSources = "";
// pageInfo.value.dataSources = "";
pageInfo.value.foundMode = "";
} else {
pageInfo.value.damName = val.damName;
......@@ -236,7 +246,7 @@ const toSearch = (val: any, clear: boolean = false) => {
pageInfo.value.subjectDomain = val.subjectDomain;
pageInfo.value.tenantGuid = val.tenantGuid;
pageInfo.value.isRegister = val.isRegister;
pageInfo.value.dataSources = val.dataSources;
// pageInfo.value.dataSources = val.dataSources;
pageInfo.value.foundMode = val.foundMode;
}
getTableData();
......@@ -308,7 +318,11 @@ function replaceChildDictListKey(data) {
const handleCreate = () => {
router.push({
name: "registerCatalogCreate",
path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
query: {
dataSources: props.dataSources
}
// name: "registerCatalogCreate",
});
};
......@@ -387,8 +401,9 @@ const handleUploadClose = (itemGuid) => {
if (itemGuid) {
assetStore.setDamCatalogRefresh(true);
router.push({
name: "registerCatalogDetail",
query: { guid: itemGuid, type: "asset" },
path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-catalog-detail' : '/data-asset/register-catalog/register-catalog-detail',
//name: "registerCatalogDetail",
query: { guid: itemGuid, type: "asset", dataSources: props.dataSources },
});
}
}
......
<route lang="yaml">
name: transactionDetail 数据产品交易信息详情
</route>
<script lang="ts" setup name="transactionDetail">
import { getDownFileSignByUrl, obsDownloadRequest, parseAndDecodeUrl } from "@/api/modules/obsService";
import { changeNum, download, getDownloadUrl } from "@/utils/common";
import { ElMessage } from "element-plus";
import { ref } from "vue";
import { getTransactionDetail } from "@/api/modules/dataAsset";
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
const detailLoading = ref(false);
const detailInfo: any = ref({});
onBeforeMount(() => {
detailLoading.value = true;
getTransactionDetail({ guid: route.query.guid }).then((res: any) => {
detailLoading.value = false;
if (res.code == proxy.$passCode) {
detailInfo.value = res.data || {};
} else {
ElMessage.error('驳回失败');
}
});
})
export const onUploadFileDownload = async (params) => {
const {name, url} = params;
const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName);
if (!refSignInfo?.data) {
refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
return;
}
obsDownloadRequest(refSignInfo?.data).then((res: any) => {
if (res && !res.msg) {
var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : '';
download(res, name, fileSuffix);
} else {
res?.msg && ElMessage.error(res?.msg);
}
})
}
export const onUploadFilePreview = async (params) => {
console.log(params, 'params');
const {name, url} = params;
// let f = formInline.value[item.field].find(i => i.name == file.name);
// let url = f.url;
let fileName: string = parseAndDecodeUrl(url).fileName;
const refSignInfo: any = await getDownFileSignByUrl(fileName);
if (!refSignInfo?.data) {
refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
return;
}
obsDownloadRequest(refSignInfo?.data).then((res: any) => {
if (res && !res.msg) {
var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1).toLowerCase() : '';
if (fileSuffix === 'png' || fileSuffix === 'jpeg' || fileSuffix === 'jpg' || fileSuffix === 'pdf') { //浏览器可以支持图片和pdf预览
let fileUrl = <string>getDownloadUrl(res, name, fileSuffix);
let win = window.open(fileUrl, name);
win && (win.document.title = name);
} else {
download(res, name, fileSuffix);
}
} else {
res?.msg && ElMessage.error(res?.msg);
}
});
}
</script>
<template>
<div class="container_wrap" v-loading="detailLoading">
<ContentWrap id="id-detail" title="数据产品交易信息" description="" style="margin: 0 16px">
<div class="panel_body">
<div class="list_panel">
<div class="list_item">
<span class="item_label">数据产品名称:</span>
<span class="item_value">{{ detailInfo.damName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">产品类型:</span>
<span class="item_value">{{ detailInfo.damTypeName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">买方名称:</span>
<span class="item_value">{{ detailInfo.buyerName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">卖方名称:</span>
<span class="item_value">{{ detailInfo.sellerName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">交易币种:</span>
<span class="item_value">{{ detailInfo.tradingCurrencyName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">原始交易金额:</span>
<span class="item_value">{{ detailInfo.originalTradingAmount != null ? changeNum(detailInfo.originalTradingAmount, 2) : '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">交易金额(元):</span>
<span class="item_value">{{ detailInfo.tradingAmount != null ? changeNum(detailInfo.tradingAmount, 2) : '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">交易方式:</span>
<span class="item_value">{{ detailInfo.tradingWayName || '--'
}}</span>
</div>
<div class="list_item" v-if="detailInfo.exchangeName">
<span class="item_label">交易场所:</span>
<span class="item_value">{{ detailInfo.exchangeName || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">交易时间:</span>
<span class="item_value">{{ detailInfo.tradingTime || '--'
}}</span>
</div>
<div class="list_item">
<span class="item_label">合同编号:</span>
<span class="item_value">{{ detailInfo.contractCode || '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">合同名称:</span>
<span class="item_value">{{ detailInfo.contractName || '--' }}</span>
</div>
<div class="list_item is_block">
<div class="file_item" v-if="detailInfo.contractAttachments?.length">
<span class="item_label">合同附件:</span>
<span class="item_value">
<div class="file-operate">
<template
v-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name"><ellipsis-tooltip :content="detailInfo.contractAttachments[0].name ?? ''"
class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
<div :style="{ right: '36px' }" class="file-preview"
v-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'png' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
@click="onUploadFilePreview(detailInfo.contractAttachments?.[0])">查看</div>
<div :style="{ right: '0px' }" class="file-preview"
@click="onUploadFileDownload(detailInfo.contractAttachments?.[0])">下载</div>
</div>
</span>
</div>
</div>
</div>
</div>
</ContentWrap>
</div>
</template>
<style lang="scss" scoped>
.panel_body {
padding: 8px 16px;
box-shadow: 0 0 0 1px rgba(229, 229, 229, 1);
border-top: none;
margin-top: 1px;
.list_panel {
display: flex;
flex-wrap: wrap;
.list_item {
width: 33.33%;
line-height: 32px;
font-size: 14px;
color: #666666;
display: flex;
justify-content: space-between;
.item_label {
width: 100px;
text-align: right;
flex-shrink: 0;
&.t_left {
width: auto;
}
}
.file_item {
width: 50%;
display: flex;
justify-content: space-between;
}
.item_value {
color: var(--el-color-regular);
padding: 0 16px;
flex: 1;
text-align: justify;
min-width: 100px;
.file-operate {
display: flex;
align-items: center;
position: relative;
.file-img {
width: 24px;
height: 24px;
}
&:hover {
background-color: #f5f5f5;
}
.file-name {
color: var(--el-color-regular);
margin-left: 4px;
width: calc(100% - 120px);
}
.file-preview {
position: absolute;
cursor: pointer;
color: var(--el-color-primary);
margin-right: 8px;
white-space: nowrap;
}
}
.area_text+.area_text {
&::before {
content: '、',
}
}
}
&.is_block {
width: 100%;
.item_value {
white-space: pre-wrap;
}
}
}
.list_item1 {
width: 50%;
line-height: 32px;
font-size: 14px;
color: #666666;
display: flex;
justify-content: space-between;
.item_label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
.file_item {
width: 100%;
display: flex;
justify-content: space-between;
}
.item_value {
color: var(--el-color-regular);
padding: 0 16px;
flex: 1;
text-align: justify;
min-width: 100px;
.file-operate {
display: flex;
align-items: center;
position: relative;
.file-img {
width: 24px;
height: 24px;
}
&:hover {
background-color: #f5f5f5;
}
.file-name {
color: var(--el-color-regular);
margin-left: 4px;
width: calc(100% - 120px);
}
.file-preview {
position: absolute;
cursor: pointer;
color: var(--el-color-primary);
margin-right: 8px;
white-space: nowrap;
}
}
.area_text+.area_text {
&::before {
content: '、',
}
}
}
// &.is_block {
// width: 100%;
// .item_value {
// white-space: pre-wrap;
// }
// }
}
:deep(.el-form) {
width: 100%;
}
:deep(.panel_body) {
box-shadow: none;
}
&.label_auto {
.list_item {
.item_label {
width: auto;
}
.item_value {
padding-left: 0;
}
}
}
}
.table_panel_wrap {
.table_panel {
padding: 0;
min-height: unset;
}
}
.process_panel {
height: 500px;
.iframe-sty {
width: 100%;
height: 100%;
border: none;
}
:deep(.property-panel) {
height: calc(100% - 50px) !important;
}
}
&.collapse {
height: 0;
padding: 0;
overflow: hidden;
}
}
</style>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!