3484b991 by lihua

数据产品管理优化

1 parent 9b127afd
...@@ -349,6 +349,13 @@ export const existDamName = (params) => request({ ...@@ -349,6 +349,13 @@ export const existDamName = (params) => request({
349 method: 'get' 349 method: 'get'
350 }); 350 });
351 351
352 // 获取数据产品目录登记评估详情
353 export const getRegisterCatalogDetailGuids = (params) => request({
354 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/register-evaluation-grounding-trading`,
355 method: 'get',
356 params
357 })
358
352 /** 获取资产目录基本信息的详情 */ 359 /** 获取资产目录基本信息的详情 */
353 export const getRegisterCatalogDetail = (params) => request({ 360 export const getRegisterCatalogDetail = (params) => request({
354 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/detail`, 361 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/detail`,
...@@ -553,6 +560,13 @@ export const getContractDetail = (params) => request({ ...@@ -553,6 +560,13 @@ export const getContractDetail = (params) => request({
553 params 560 params
554 }) 561 })
555 562
563 // 流通中的数据产品交易详情
564 export const getTransactionDetail = (params) => request({
565 url: `http://localhost:9000/circulation/ms-data-circulation-tx-mgr-service/ading-info/detail`,
566 method: 'get',
567 params
568 })
569
556 // 获取所有字典 570 // 获取所有字典
557 export const getDictAllList = () => request({ 571 export const getDictAllList = () => request({
558 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-all` 572 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-all`
......
...@@ -26,7 +26,7 @@ const routes: RouteRecordRaw[] = [ ...@@ -26,7 +26,7 @@ const routes: RouteRecordRaw[] = [
26 path: '/data-asset/register-catalog', 26 path: '/data-asset/register-catalog',
27 component: Layout, 27 component: Layout,
28 meta: { 28 meta: {
29 title: '数据产品目录', 29 title: '自有数据产品',
30 icon: 'sidebar-videos', 30 icon: 'sidebar-videos',
31 }, 31 },
32 children: [ 32 children: [
...@@ -35,7 +35,7 @@ const routes: RouteRecordRaw[] = [ ...@@ -35,7 +35,7 @@ const routes: RouteRecordRaw[] = [
35 name: 'registerCatalogManagement', 35 name: 'registerCatalogManagement',
36 component: () => import('@/views/data_asset/registerCatalogManagement.vue'), 36 component: () => import('@/views/data_asset/registerCatalogManagement.vue'),
37 meta: { 37 meta: {
38 title: '数据产品目录', 38 title: '自有数据产品',
39 sidebar: false, 39 sidebar: false,
40 breadcrumb: false, 40 breadcrumb: false,
41 cache: true 41 cache: true
...@@ -46,7 +46,7 @@ const routes: RouteRecordRaw[] = [ ...@@ -46,7 +46,7 @@ const routes: RouteRecordRaw[] = [
46 name: 'registerCatalogCreate', 46 name: 'registerCatalogCreate',
47 component: () => import('@/views/data_asset/registerCatalogCreate.vue'), 47 component: () => import('@/views/data_asset/registerCatalogCreate.vue'),
48 meta: { 48 meta: {
49 title: '新建产品目录', 49 title: '新建自有数据产品',
50 sidebar: false, 50 sidebar: false,
51 breadcrumb: false, 51 breadcrumb: false,
52 cache: true, 52 cache: true,
...@@ -95,25 +95,6 @@ const routes: RouteRecordRaw[] = [ ...@@ -95,25 +95,6 @@ const routes: RouteRecordRaw[] = [
95 reuse: true 95 reuse: true
96 } 96 }
97 }, 97 },
98 // {
99 // path: 'import-table-field',
100 // name: 'importTableField',
101 // component: () => import('@/views/data_asset/importTableField.vue'),
102 // meta: {
103 // title: '导入表字段',
104 // sidebar: false,
105 // breadcrumb: false,
106 // cache: true,
107 // editPage: true,
108 // reuse: true
109 // },
110 // beforeEnter: (to, from) => {
111 // if (to.query.guid) {
112 // to.meta.title = `编辑-`;
113 // to.meta.editPage = true;
114 // }
115 // }
116 // },
117 { 98 {
118 path: 'register-catalog-detail', 99 path: 'register-catalog-detail',
119 name: 'registerCatalogDetail', 100 name: 'registerCatalogDetail',
...@@ -131,11 +112,28 @@ const routes: RouteRecordRaw[] = [ ...@@ -131,11 +112,28 @@ const routes: RouteRecordRaw[] = [
131 name: 'registerCatalogContractDetail', 112 name: 'registerCatalogContractDetail',
132 component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'), 113 component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
133 meta: { 114 meta: {
134 title: '详情-', 115 title: '合同详情-',
116 sidebar: false,
117 breadcrumb: false,
118 cache: true,
119 reuse: true
120 }
121 },
122 {
123 path: 'register-catalog-transaction-detail',
124 name: 'registerCatalogTransactionDetail',
125 component: () => import('@/views/data_asset/transactionDetail.vue'),
126 meta: {
127 title: '产品交易详情-',
135 sidebar: false, 128 sidebar: false,
136 breadcrumb: false, 129 breadcrumb: false,
137 cache: true, 130 cache: true,
138 reuse: true 131 reuse: true
132 },
133 beforeEnter: (to, from) => {
134 if (to.query.guid) {
135 to.meta.title = `产品交易详情-${to.query.damName}`;
136 }
139 } 137 }
140 }, 138 },
141 { 139 {
...@@ -158,6 +156,139 @@ const routes: RouteRecordRaw[] = [ ...@@ -158,6 +156,139 @@ const routes: RouteRecordRaw[] = [
158 ] 156 ]
159 }, 157 },
160 { 158 {
159 path: '/data-asset/authordata-catalog',
160 component: Layout,
161 meta: {
162 title: '授权数据产品',
163 icon: 'sidebar-videos',
164 },
165 children: [
166 {
167 path: '',
168 name: 'authorDataCatalogManagement',
169 component: () => import('@/views/data_asset/authorDataCatalogManagement.vue'),
170 meta: {
171 title: '授权数据产品',
172 sidebar: false,
173 breadcrumb: false,
174 cache: true
175 },
176 },
177 {
178 path: 'register-ctalog-create',
179 name: 'authorDataCatalogCreate',
180 component: () => import('@/views/data_asset/registerCatalogCreate.vue'),
181 meta: {
182 title: '新建授权数据产品',
183 sidebar: false,
184 breadcrumb: false,
185 cache: true,
186 editPage: true,
187 reuse: true
188 },
189 beforeEnter: (to, from) => {
190 if (to.query.type) {
191 to.meta.title = `详情-`;
192 return;
193 }
194 if (to.query.guid) {
195 to.meta.title = `编辑-${to.query.damName}`;
196 to.meta.editPage = true;
197 }
198 }
199 },
200 {
201 path: 'import-file-dam',
202 name: 'authorImportFileDam',
203 component: () => import('@/views/importFile.vue'),
204 meta: {
205 title: '导入数据',
206 sidebar: false,
207 breadcrumb: false,
208 cache: true,
209 reuse: true
210 },
211 beforeEnter: (to, from) => {
212 if (to.query.bizGuid) {
213 to.meta.title = `导入数据-${to.query.name}(${to.query.damName})`;
214 }
215 }
216 },
217 {
218 // path: 'processDetail',
219 // name: 'APIProcessDetail',
220 path: 'api-detail',
221 name: 'authorApiDetail',
222 component: () => import('@/views/data_asset/detail_serviceApi.vue'),
223 meta: {
224 title: '流程详情',
225 sidebar: false,
226 breadcrumb: false,
227 cache: true,
228 reuse: true
229 }
230 },
231 {
232 path: 'register-catalog-detail',
233 name: 'authorRegisterCatalogDetail',
234 component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
235 meta: {
236 title: '详情-',
237 sidebar: false,
238 breadcrumb: false,
239 cache: true,
240 reuse: true
241 }
242 },
243 {
244 path: 'register-catalog-contract-detail',
245 name: 'authorRegisterCatalogContractDetail',
246 component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
247 meta: {
248 title: '合同详情-',
249 sidebar: false,
250 breadcrumb: false,
251 cache: true,
252 reuse: true
253 }
254 },
255 {
256 path: 'register-catalog-transaction-detail',
257 name: 'authorRegisterCatalogTransactionDetail',
258 component: () => import('@/views/data_asset/transactionDetail.vue'),
259 meta: {
260 title: '产品交易详情-',
261 sidebar: false,
262 breadcrumb: false,
263 cache: true,
264 reuse: true
265 },
266 beforeEnter: (to, from) => {
267 if (to.query.guid) {
268 to.meta.title = `产品交易详情-${to.query.damName}`;
269 }
270 }
271 },
272 {
273 path: 'damTableDataView',
274 name: 'authorDamTableDataView',
275 component: () => import('@/views/data_asset/damTableDataView.vue'),
276 meta: {
277 title: '查看数据',
278 sidebar: false,
279 breadcrumb: false,
280 cache: true,
281 reuse: true
282 },
283 beforeEnter: (to, from) => {
284 if (to.query.guid) {
285 to.meta.title = `查看数据-${to.query.name}(${to.query.damName})`;
286 }
287 }
288 },
289 ]
290 },
291 {
161 path: '/data-product/product-listing', 292 path: '/data-product/product-listing',
162 component: Layout, 293 component: Layout,
163 meta: { 294 meta: {
......
1 <route lang="yaml">
2 name: authorDataCatalogManagement
3 </route>
4
5 <script lang="ts" setup name="authorDataCatalogManagement">
6 import { ref } from "vue";
7 import registerCatalogManagement from "./registerCatalogManagement.vue";
8
9 </script>
10
11 <template>
12 <registerCatalogManagement :dataSources="1"></registerCatalogManagement>
13 </template>
...\ No newline at end of file ...\ No newline at end of file
...@@ -187,8 +187,8 @@ onActivated(() => { ...@@ -187,8 +187,8 @@ onActivated(() => {
187 if (tab) { 187 if (tab) {
188 switch (detailType) { 188 switch (detailType) {
189 case 'detail': 189 case 'detail':
190 tab.meta.title = `详情-${damName}`; 190 tab.meta.title = `合同详情-${damName}`;
191 document.title = `详情-${damName}`; 191 document.title = `合同详情-${damName}`;
192 break; 192 break;
193 } 193 }
194 } 194 }
......
...@@ -22,7 +22,8 @@ import { ...@@ -22,7 +22,8 @@ import {
22 registerCatalogTableUpdate, 22 registerCatalogTableUpdate,
23 registerCatalogTableDelete, 23 registerCatalogTableDelete,
24 getRegisterCatalogTableList, 24 getRegisterCatalogTableList,
25 checkDamTableChange 25 checkDamTableChange,
26 getTenantList
26 } from "@/api/modules/dataAsset"; 27 } from "@/api/modules/dataAsset";
27 import { ContentWrap } from '@/components/ContentWrap'; 28 import { ContentWrap } from '@/components/ContentWrap';
28 import importTableField from "./importTableField.vue"; 29 import importTableField from "./importTableField.vue";
...@@ -101,7 +102,7 @@ const getArea = (node, resolve) => { ...@@ -101,7 +102,7 @@ const getArea = (node, resolve) => {
101 const baseInfoExpand = ref(true); 102 const baseInfoExpand = ref(true);
102 const assetTableInfoExpand = ref(true); 103 const assetTableInfoExpand = ref(true);
103 const importTableFieldRef = ref(); 104 const importTableFieldRef = ref();
104 105 const rightMainTenantList = ref([]); //权利主体下拉列表选择
105 const baseInfoFormRef = ref(); 106 const baseInfoFormRef = ref();
106 107
107 const baseInfoFormItems = ref([ 108 const baseInfoFormItems = ref([
...@@ -130,13 +131,20 @@ const baseInfoFormItems = ref([ ...@@ -130,13 +131,20 @@ const baseInfoFormItems = ref([
130 }, 131 },
131 { 132 {
132 label: '权利主体', 133 label: '权利主体',
133 type: 'input', 134 type: route.query.dataSources == '1' ? 'select' : 'input',
134 placeholder: '请输入', 135 placeholder: route.query.dataSources == '1' ? '请选择' : '请输入',
135 field: 'rightMain', 136 field: 'rightMain',
136 maxlength: 20, 137 maxlength: 20,
137 default: JSON.parse(userStore.userData).tenantName, 138 options: rightMainTenantList.value,
139 props: {
140 value: 'guid',
141 label: 'tenantName'
142 },
143 filterable: true,
144 clearable: true,
145 default: route.query.dataSources == '1' ? JSON.parse(userStore.userData).tenantGuid : JSON.parse(userStore.userData).tenantName,
138 required: true, 146 required: true,
139 disabled: true 147 disabled: route.query.dataSources == '1' ? false : true,
140 }, 148 },
141 { 149 {
142 label: '所属主题', 150 label: '所属主题',
...@@ -216,8 +224,22 @@ const baseInfoFormItems = ref([ ...@@ -216,8 +224,22 @@ const baseInfoFormItems = ref([
216 placeholder: "", 224 placeholder: "",
217 field: "dataSources", 225 field: "dataSources",
218 block: false, 226 block: false,
219 default: 1, 227 default: route.query.dataSources == '1' ? 1 : 2,
220 options: dataSourcesList, 228 options: route.query.dataSources == '1' ? [{ //如果是授权数据则不能选择其余的
229 value: 1,
230 label: '授权数据',
231 }]: [{
232 value: 2,
233 label: '自有数据',
234 },
235 {
236 value: 3,
237 label: '购买数据',
238 },
239 {
240 value: 4,
241 label: '其他来源',
242 }], //dataSourcesList
221 required: true, 243 required: true,
222 }, 244 },
223 // 是否公共数据 245 // 是否公共数据
...@@ -297,7 +319,7 @@ const baseInfoFormRules = ref({ ...@@ -297,7 +319,7 @@ const baseInfoFormRules = ref({
297 propertyDescription: [required('请填写资源描述')], 319 propertyDescription: [required('请填写资源描述')],
298 sceneDescription: [required('请填写应用场景描述')], 320 sceneDescription: [required('请填写应用场景描述')],
299 sceneLimit: [required('请填写应用场景限制')], 321 sceneLimit: [required('请填写应用场景限制')],
300 rightMain: [required('请填写权利主体')], 322 rightMain: [required(route.query.dataSources == '1' ? '请选择权利主体' : '请填写权利主体')],
301 dataSources: [required('请选择数据来源')], 323 dataSources: [required('请选择数据来源')],
302 isPublicData: [required('请选择是否公共数据')], 324 isPublicData: [required('请选择是否公共数据')],
303 }); 325 });
...@@ -420,12 +442,14 @@ const assetDataTableInfo = ref({ ...@@ -420,12 +442,14 @@ const assetDataTableInfo = ref({
420 label: "导入数据", value: "importData", click: (scope) => { 442 label: "导入数据", value: "importData", click: (scope) => {
421 let row = scope.row; 443 let row = scope.row;
422 router.push({ 444 router.push({
423 name: "importFileDam", 445 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/import-file-dam' : '/data-asset/register-catalog/import-file-dam',
446 // name: "importFileDam",
424 query: { 447 query: {
425 bizGuid: row.guid, 448 bizGuid: row.guid,
426 name: row.tableChName, 449 name: row.tableChName,
427 isfileImport: '2', 450 isfileImport: '2',
428 damName: route.query.damName 451 damName: route.query.damName,
452 dataSources: route.query.dataSources
429 } 453 }
430 }) 454 })
431 } 455 }
...@@ -434,11 +458,13 @@ const assetDataTableInfo = ref({ ...@@ -434,11 +458,13 @@ const assetDataTableInfo = ref({
434 label: "查看样例数据", value: "viewData", click: (scope) => { 458 label: "查看样例数据", value: "viewData", click: (scope) => {
435 let row = scope.row; 459 let row = scope.row;
436 router.push({ 460 router.push({
437 name: 'damTableDataView', 461 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
462 // name: 'damTableDataView',
438 query: { 463 query: {
439 guid: row.guid, 464 guid: row.guid,
440 name: row.tableChName, 465 name: row.tableChName,
441 damName: detailInfo.value.damName 466 damName: detailInfo.value.damName,
467 dataSources: route.query.dataSources
442 } 468 }
443 }); 469 });
444 } 470 }
...@@ -571,7 +597,7 @@ onBeforeMount(() => { ...@@ -571,7 +597,7 @@ onBeforeMount(() => {
571 } 597 }
572 } 598 }
573 } else if (item.field == 'rightMain') { 599 } else if (item.field == 'rightMain') {
574 item.default = detailInfo.value.rightMainName; 600 item.default = route.query.dataSources == '1' ? detailInfo.value.rightMain : detailInfo.value.rightMainName;
575 } 601 }
576 }); 602 });
577 if (route.query.guid && route.query.foundMode == '2') { 603 if (route.query.guid && route.query.foundMode == '2') {
...@@ -599,6 +625,23 @@ onBeforeMount(() => { ...@@ -599,6 +625,23 @@ onBeforeMount(() => {
599 } 625 }
600 }); 626 });
601 } 627 }
628
629 if (route.query.dataSources == '1') {
630 getTenantList({
631 bizState: 'Y',
632 pageSize: -1
633 }).then((res: any) => {
634 rightMainTenantList.value = [];
635 if (res.code == proxy.$passCode) {
636 rightMainTenantList.value = res.data?.records || [];
637 let item = baseInfoFormItems.value.find(b => b.field == 'rightMain');
638 item && (item.options = rightMainTenantList.value);
639 } else {
640 proxy.$ElMessage.error(res.msg);
641 }
642 })
643 }
644
602 function replaceChildDictListKey(data) { 645 function replaceChildDictListKey(data) {
603 if (Array.isArray(data)) { 646 if (Array.isArray(data)) {
604 return data.map(item => replaceChildDictListKey(item)); 647 return data.map(item => replaceChildDictListKey(item));
...@@ -639,7 +682,7 @@ const cancel = () => { ...@@ -639,7 +682,7 @@ const cancel = () => {
639 proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => { 682 proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => {
640 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath)); 683 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
641 router.push({ 684 router.push({
642 path: '/data-asset/register-catalog' 685 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
643 }); 686 });
644 }, () => { 687 }, () => {
645 proxy.$ElMessage.info("已取消"); 688 proxy.$ElMessage.info("已取消");
...@@ -676,14 +719,17 @@ const save = () => { ...@@ -676,14 +719,17 @@ const save = () => {
676 if (damGuid.value) { 719 if (damGuid.value) {
677 params.guid = damGuid.value; 720 params.guid = damGuid.value;
678 params.foundMode = route.query.foundMode; 721 params.foundMode = route.query.foundMode;
679 params.rightMain = detailInfo.value.rightMain; 722 if (route.query.dataSources != '1') {
723 params.rightMain = detailInfo.value.rightMain;
724 }
680 fullscreenLoading.value = true; 725 fullscreenLoading.value = true;
681 registerCatalogUpdate(params).then((res: any) => { 726 registerCatalogUpdate(params).then((res: any) => {
682 fullscreenLoading.value = false; 727 fullscreenLoading.value = false;
683 if (res.code == proxy.$passCode) { 728 if (res.code == proxy.$passCode) {
684 proxy.$ElMessage.success('资源目录编辑提交成功'); 729 proxy.$ElMessage.success('资源目录编辑提交成功');
685 router.push({ 730 router.push({
686 name: 'registerCatalogManagement' 731 // name: 'registerCatalogManagement'
732 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
687 }); 733 });
688 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath)); 734 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
689 assetStore.setDamCatalogRefresh(true); 735 assetStore.setDamCatalogRefresh(true);
...@@ -695,13 +741,14 @@ const save = () => { ...@@ -695,13 +741,14 @@ const save = () => {
695 params.damCatalogTableInfo = assetDataTableInfo.value.data; 741 params.damCatalogTableInfo = assetDataTableInfo.value.data;
696 fullscreenLoading.value = true; 742 fullscreenLoading.value = true;
697 console.log(params, 'params'); 743 console.log(params, 'params');
698 params.rightMain = JSON.parse(userStore.userData).tenantGuid; 744 // params.rightMain = JSON.parse(userStore.userData).tenantGuid;
699 registerCatalogSave(params).then((res: any) => { 745 registerCatalogSave(params).then((res: any) => {
700 fullscreenLoading.value = false; 746 fullscreenLoading.value = false;
701 if (res.code == proxy.$passCode) { 747 if (res.code == proxy.$passCode) {
702 proxy.$ElMessage.success('资源目录新建提交成功'); 748 proxy.$ElMessage.success('资源目录新建提交成功');
703 router.push({ 749 router.push({
704 name: 'registerCatalogManagement' 750 // name: 'registerCatalogManagement'
751 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog'
705 }); 752 });
706 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath)); 753 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
707 assetStore.setDamCatalogRefresh(true); 754 assetStore.setDamCatalogRefresh(true);
......
...@@ -16,7 +16,8 @@ import { ...@@ -16,7 +16,8 @@ import {
16 getEvaDetail, 16 getEvaDetail,
17 getCostDetail, 17 getCostDetail,
18 getDataReceiveContractDetail, 18 getDataReceiveContractDetail,
19 getCertificateDetail 19 getCertificateDetail,
20 getRegisterCatalogDetailGuids
20 } from "@/api/modules/dataAsset"; 21 } from "@/api/modules/dataAsset";
21 import { changeNum } from '@/utils/common' 22 import { changeNum } from '@/utils/common'
22 import { ElMessage, ElMessageBox } from "element-plus"; 23 import { ElMessage, ElMessageBox } from "element-plus";
...@@ -94,6 +95,79 @@ const deploymentId = ref(''); ...@@ -94,6 +95,79 @@ const deploymentId = ref('');
94 95
95 const processInstanceId = ref(''); 96 const processInstanceId = ref('');
96 97
98 const registerDetailTableInfo = ref({
99 id: 'register-data-table',
100 rowKey: 'guid',
101 height: 220,
102 loading: false,
103 fields: [ { label: "序号", type: "index", width: 56, align: "center" },
104 { label: "事项", field: "title", width: 160, align: "left" },
105 { label: "对接主体", field: "institutionName", width: 160, align: "left" },
106 ],
107 data: <any>[],
108 showPage: false,
109 actionInfo: {
110 label: "操作",
111 type: "btn",
112 width: 130,
113 btns: [{
114 label: "查看详情", value: "detail", click: (scope) => {
115 let row = scope.row;
116 if (row.type == 'asset') {
117 router.push({
118 name: 'registerInfoDetail',
119 query: { guid: row.guid, name: detailInfo.value.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
120 });
121 } else if (row.type == 'qualityEvaluate') {
122 if (row.registerApproveState == 'Y') {
123 router.push({
124 name: 'registerDetail',
125 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
126 });
127 } else {
128 router.push({
129 name: 'evaCatalogDetail',
130 query: { guid: route.query.guid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid }
131 });
132 }
133 } else if (row.type == 'costAssess') {
134 if (row.registerApproveState == 'Y') {
135 router.push({
136 name: 'registerValueDetail',
137 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
138 });
139 } else {
140 router.push({
141 name: 'costAssessDetail',
142 query: { guid: route.query.guid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid }
143 });
144 }
145 } else if (row.type == 'product') {
146 router.push({
147 name: 'productListingDetail',
148 query: {
149 guid: row.guid,
150 type: 'detail',
151 name: detailInfo.value.damName,
152 exchangeGuid: row.institutionGuid ? row.institutionGuid : '',
153 tenantGuid: row.tenantGuid
154 }
155 });
156 } else if (row.type == 'trade') {
157 router.push({
158 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/register-catalog-transaction-detail' : '/data-asset/register-catalog/register-catalog-transaction-detail',
159 //name: 'transactionManagement'
160 query: {
161 guid: row.guid,
162 damName: detailInfo.value.damName,
163 }
164 });
165 }
166 }
167 }]
168 }
169 });
170
97 const getDetailInfo = () => { 171 const getDetailInfo = () => {
98 fullscreenLoading.value = true; 172 fullscreenLoading.value = true;
99 getRegisterCatalogDetail({ guid: catalogGuid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => { 173 getRegisterCatalogDetail({ guid: catalogGuid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => {
...@@ -182,6 +256,44 @@ const getDetailInfo = () => { ...@@ -182,6 +256,44 @@ const getDetailInfo = () => {
182 } 256 }
183 }) 257 })
184 } 258 }
259 getRegisterCatalogDetailGuids({ damGuid: catalogGuid, serviceTenantGuid: route.query.tenantGuid }).then((res: any) => {
260 registerDetailTableInfo.value.data = [];
261 if (res.code == proxy.$passCode) {
262 const data = res.data || {};
263 if (data.registerBaseRSVO) {
264 registerDetailTableInfo.value.data.push(Object.assign({}, data.registerBaseRSVO, {
265 title: "资产登记",
266 type: 'asset'
267 }));
268 }
269 if (data.qualityEvaluationRSVO) {
270 registerDetailTableInfo.value.data.push(Object.assign({}, data.qualityEvaluationRSVO, {
271 title: "质量评估",
272 type: 'qualityEvaluate'
273 }));
274 }
275 if (data.costAssessmentRSVO) {
276 registerDetailTableInfo.value.data.push(Object.assign({}, data.costAssessmentRSVO, {
277 title: "价值评估",
278 type: 'costAssess'
279 }));
280 }
281 if (data.productGroundingRSVO) {
282 registerDetailTableInfo.value.data.push(Object.assign({}, data.productGroundingRSVO, {
283 title: "数据产品上架",
284 type: 'product'
285 }));
286 }
287 if (data.mfTradingInfoRSVO) {
288 registerDetailTableInfo.value.data.push(Object.assign({}, data.mfTradingInfoRSVO, {
289 title: "数据产品交易",
290 type: 'trade'
291 }));
292 }
293 } else {
294 proxy.$ElMessage.error(res.msg);
295 }
296 })
185 } 297 }
186 298
187 onBeforeMount(() => { 299 onBeforeMount(() => {
...@@ -221,7 +333,7 @@ const isTextTruncated = () => { ...@@ -221,7 +333,7 @@ const isTextTruncated = () => {
221 if (!domDesc) { 333 if (!domDesc) {
222 return; 334 return;
223 } 335 }
224 if (domDesc.clientHeight > 64) { 336 if (domDesc.clientHeight > 82) {
225 isTruncated.value = true; 337 isTruncated.value = true;
226 } else { 338 } else {
227 isTruncated.value = false; 339 isTruncated.value = false;
...@@ -249,7 +361,8 @@ const handleTableExpandChange = (row: any, expandedRows: any[]) => { ...@@ -249,7 +361,8 @@ const handleTableExpandChange = (row: any, expandedRows: any[]) => {
249 const handleTableViewData = (scope) => { 361 const handleTableViewData = (scope) => {
250 let row = scope.row; 362 let row = scope.row;
251 router.push({ 363 router.push({
252 name: 'damTableDataView', 364 // name: 'damTableDataView',
365 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/damTableDataView' : '/data-asset/register-catalog/damTableDataView',
253 query: { 366 query: {
254 guid: row.guid, 367 guid: row.guid,
255 name: row.tableChName, 368 name: row.tableChName,
...@@ -285,7 +398,8 @@ const btnClick = (btn) => { ...@@ -285,7 +398,8 @@ const btnClick = (btn) => {
285 console.log('detailType', detailType.value); 398 console.log('detailType', detailType.value);
286 if (detailType.value == 'asset') { 399 if (detailType.value == 'asset') {
287 router.push({ 400 router.push({
288 name: 'registerCatalogManagement', 401 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog' : '/data-asset/register-catalog',
402 //name: 'registerCatalogManagement',
289 query: {} 403 query: {}
290 }); 404 });
291 } else { 405 } else {
...@@ -933,7 +1047,8 @@ const handleClick = () => { ...@@ -933,7 +1047,8 @@ const handleClick = () => {
933 // 跳转到 apiDetail 页面 1047 // 跳转到 apiDetail 页面
934 if (detailInfo.value.foundMode == '2') { 1048 if (detailInfo.value.foundMode == '2') {
935 router.push({ 1049 router.push({
936 name: 'apiDetail', 1050 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/api-detail' : '/data-asset/register-catalog/api-detail',
1051 //name: 'apiDetail',
937 query: { 1052 query: {
938 guid: detailInfo.value.guid, 1053 guid: detailInfo.value.guid,
939 type: 'detaile', 1054 type: 'detaile',
...@@ -963,7 +1078,8 @@ const deliverySpanMethod = ({ ...@@ -963,7 +1078,8 @@ const deliverySpanMethod = ({
963 1078
964 const clickContractDetail = (item) => { 1079 const clickContractDetail = (item) => {
965 router.push({ 1080 router.push({
966 name: 'registerCatalogContractDetail', 1081 path: route.query.dataSources == '1' ? '/data-asset/authordata-catalog/register-catalog-contract-detail' : '/data-asset/register-catalog/register-catalog-contract-detail',
1082 //name: 'registerCatalogContractDetail',
967 query: { 1083 query: {
968 guid: item.dataContractGuid, 1084 guid: item.dataContractGuid,
969 name: item.dataContractName, 1085 name: item.dataContractName,
...@@ -1015,6 +1131,7 @@ const viewDeliveryFile = (file) => { ...@@ -1015,6 +1131,7 @@ const viewDeliveryFile = (file) => {
1015 <div class="dataLabel dataLabel1">{{ detailInfo.dataSourcesName }}</div> 1131 <div class="dataLabel dataLabel1">{{ detailInfo.dataSourcesName }}</div>
1016 </div> 1132 </div>
1017 </div> 1133 </div>
1134 <div class="applicationScenarios">{{ '权利主体:' + detailInfo.rightMainName }}</div>
1018 <div class="applicationScenarios" 1135 <div class="applicationScenarios"
1019 :style="{ 'margin-right': (isTruncated && !isExpanded) ? '30px' : '0px', WebkitLineClamp: (!isTruncated ? 'inherit' : (isExpanded ? 'inherit' : 1)), WebkitBoxOrient: 'vertical' }"> 1136 :style="{ 'margin-right': (isTruncated && !isExpanded) ? '30px' : '0px', WebkitLineClamp: (!isTruncated ? 'inherit' : (isExpanded ? 'inherit' : 1)), WebkitBoxOrient: 'vertical' }">
1020 {{'覆盖地域:' + (detailInfo.coverageArea?.[0]?.[0] == 'all' ? '全国' : (detailInfo.coverageAreaName?.map(c => 1137 {{'覆盖地域:' + (detailInfo.coverageArea?.[0]?.[0] == 'all' ? '全国' : (detailInfo.coverageAreaName?.map(c =>
...@@ -1035,7 +1152,7 @@ const viewDeliveryFile = (file) => { ...@@ -1035,7 +1152,7 @@ const viewDeliveryFile = (file) => {
1035 :highlight-current-row="true" stripe border @expand-change="handleTableExpandChange" height="100%" 1152 :highlight-current-row="true" stripe border @expand-change="handleTableExpandChange" height="100%"
1036 tooltip-effect="light" row-key="guid" :style="{ 1153 tooltip-effect="light" row-key="guid" :style="{
1037 width: '100%', 1154 width: '100%',
1038 height: '400px', 1155 height: '350px',
1039 display: 'inline-block', 1156 display: 'inline-block',
1040 }"> 1157 }">
1041 <el-table-column type="expand"> 1158 <el-table-column type="expand">
...@@ -1343,6 +1460,10 @@ const viewDeliveryFile = (file) => { ...@@ -1343,6 +1460,10 @@ const viewDeliveryFile = (file) => {
1343 </div> 1460 </div>
1344 </ContentWrap> 1461 </ContentWrap>
1345 1462
1463 <ContentWrap v-if="route.query.type == 'asset' && registerDetailTableInfo.data.length > 0" id="id-registerDetail" title="登记评估上架交易" description="" style="margin: 16px 16px 16px">
1464 <Table :table-info="registerDetailTableInfo"></Table>
1465 </ContentWrap>
1466
1346 <ContentWrap 1467 <ContentWrap
1347 v-if="(route.query.type == 'qualityEvaluate' && evaDetailInfo.approveVO && evaDetailInfo.isApprove != 'N') || (route.query.type == 'costAssess' && costAssessDetail.approveVO && costAssessDetail.isApprove != 'N')" 1468 v-if="(route.query.type == 'qualityEvaluate' && evaDetailInfo.approveVO && evaDetailInfo.isApprove != 'N') || (route.query.type == 'costAssess' && costAssessDetail.approveVO && costAssessDetail.isApprove != 'N')"
1348 id="id-approveInfo" title="审批信息" description="" style="margin: 16px 16px 16px"> 1469 id="id-approveInfo" title="审批信息" description="" style="margin: 16px 16px 16px">
...@@ -1596,7 +1717,7 @@ const viewDeliveryFile = (file) => { ...@@ -1596,7 +1717,7 @@ const viewDeliveryFile = (file) => {
1596 .expand_btn { 1717 .expand_btn {
1597 position: absolute; 1718 position: absolute;
1598 right: 0px; 1719 right: 0px;
1599 top: 34px; 1720 top: 58px;
1600 font-size: 14px; 1721 font-size: 14px;
1601 line-height: 21px; 1722 line-height: 21px;
1602 } 1723 }
......
...@@ -25,6 +25,13 @@ const userData = JSON.parse(userStore.userData); ...@@ -25,6 +25,13 @@ const userData = JSON.parse(userStore.userData);
25 25
26 const assetStore = useDataAssetStore(); 26 const assetStore = useDataAssetStore();
27 27
28 const props = defineProps({
29 dataSources: {
30 type: Number,
31 default: 2,
32 }
33 })
34
28 const router = useRouter(); 35 const router = useRouter();
29 const { proxy } = getCurrentInstance() as any; 36 const { proxy } = getCurrentInstance() as any;
30 const damTypes: any = ref([]); 37 const damTypes: any = ref([]);
...@@ -156,8 +163,9 @@ const tableBtnClick = (scope, btn) => { ...@@ -156,8 +163,9 @@ const tableBtnClick = (scope, btn) => {
156 currTableData.value = row; 163 currTableData.value = row;
157 if (type === "edit") { 164 if (type === "edit") {
158 router.push({ 165 router.push({
159 name: "registerCatalogCreate", 166 // name: "registerCatalogCreate",
160 query: { guid: row.guid, damName: row.damName, foundMode: row.foundMode }, 167 path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
168 query: { guid: row.guid, damName: row.damName, foundMode: row.foundMode, dataSources: props.dataSources },
161 }); 169 });
162 } else if (type == "delete") { 170 } else if (type == "delete") {
163 proxy.$openMessageBox('此操作将永久删除该资源,是否继续', () => { 171 proxy.$openMessageBox('此操作将永久删除该资源,是否继续', () => {
...@@ -181,13 +189,15 @@ const tableBtnClick = (scope, btn) => { ...@@ -181,13 +189,15 @@ const tableBtnClick = (scope, btn) => {
181 const handleDataClick = (item) => { 189 const handleDataClick = (item) => {
182 if (item.isRegister == "N" && item.foundMode != 3) { 190 if (item.isRegister == "N" && item.foundMode != 3) {
183 router.push({ 191 router.push({
184 name: "registerCatalogCreate", 192 path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
185 query: { guid: item.guid, damName: item.damName, foundMode: item.foundMode }, 193 // name: "registerCatalogCreate",
194 query: { guid: item.guid, damName: item.damName, foundMode: item.foundMode, dataSources: props.dataSources },
186 }); 195 });
187 } else { 196 } else {
188 router.push({ 197 router.push({
189 name: "registerCatalogDetail", 198 // name: "registerCatalogDetail",
190 query: { guid: item.guid, type: "asset" }, 199 path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-catalog-detail' : '/data-asset/register-catalog/register-catalog-detail',
200 query: { guid: item.guid, type: "asset", dataSources: props.dataSources },
191 }); 201 });
192 } 202 }
193 }; 203 };
...@@ -201,7 +211,7 @@ const getTableData = () => { ...@@ -201,7 +211,7 @@ const getTableData = () => {
201 damType: pageInfo.value.damType, 211 damType: pageInfo.value.damType,
202 subjectDomain: pageInfo.value.subjectDomain || [], 212 subjectDomain: pageInfo.value.subjectDomain || [],
203 tenantGuid: pageInfo.value.tenantGuid, 213 tenantGuid: pageInfo.value.tenantGuid,
204 dataSources: pageInfo.value.dataSources, 214 dataSources: props.dataSources,
205 isRegister: pageInfo.value.isRegister, 215 isRegister: pageInfo.value.isRegister,
206 foundMode: pageInfo.value.foundMode, 216 foundMode: pageInfo.value.foundMode,
207 }).then((res: any) => { 217 }).then((res: any) => {
...@@ -228,7 +238,7 @@ const toSearch = (val: any, clear: boolean = false) => { ...@@ -228,7 +238,7 @@ const toSearch = (val: any, clear: boolean = false) => {
228 pageInfo.value.subjectDomain = []; 238 pageInfo.value.subjectDomain = [];
229 pageInfo.value.tenantGuid = ""; 239 pageInfo.value.tenantGuid = "";
230 pageInfo.value.isRegister = ""; 240 pageInfo.value.isRegister = "";
231 pageInfo.value.dataSources = ""; 241 // pageInfo.value.dataSources = "";
232 pageInfo.value.foundMode = ""; 242 pageInfo.value.foundMode = "";
233 } else { 243 } else {
234 pageInfo.value.damName = val.damName; 244 pageInfo.value.damName = val.damName;
...@@ -236,7 +246,7 @@ const toSearch = (val: any, clear: boolean = false) => { ...@@ -236,7 +246,7 @@ const toSearch = (val: any, clear: boolean = false) => {
236 pageInfo.value.subjectDomain = val.subjectDomain; 246 pageInfo.value.subjectDomain = val.subjectDomain;
237 pageInfo.value.tenantGuid = val.tenantGuid; 247 pageInfo.value.tenantGuid = val.tenantGuid;
238 pageInfo.value.isRegister = val.isRegister; 248 pageInfo.value.isRegister = val.isRegister;
239 pageInfo.value.dataSources = val.dataSources; 249 // pageInfo.value.dataSources = val.dataSources;
240 pageInfo.value.foundMode = val.foundMode; 250 pageInfo.value.foundMode = val.foundMode;
241 } 251 }
242 getTableData(); 252 getTableData();
...@@ -308,7 +318,11 @@ function replaceChildDictListKey(data) { ...@@ -308,7 +318,11 @@ function replaceChildDictListKey(data) {
308 318
309 const handleCreate = () => { 319 const handleCreate = () => {
310 router.push({ 320 router.push({
311 name: "registerCatalogCreate", 321 path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-ctalog-create' : '/data-asset/register-catalog/register-ctalog-create',
322 query: {
323 dataSources: props.dataSources
324 }
325 // name: "registerCatalogCreate",
312 }); 326 });
313 }; 327 };
314 328
...@@ -387,8 +401,9 @@ const handleUploadClose = (itemGuid) => { ...@@ -387,8 +401,9 @@ const handleUploadClose = (itemGuid) => {
387 if (itemGuid) { 401 if (itemGuid) {
388 assetStore.setDamCatalogRefresh(true); 402 assetStore.setDamCatalogRefresh(true);
389 router.push({ 403 router.push({
390 name: "registerCatalogDetail", 404 path: props.dataSources == 1 ? '/data-asset/authordata-catalog/register-catalog-detail' : '/data-asset/register-catalog/register-catalog-detail',
391 query: { guid: itemGuid, type: "asset" }, 405 //name: "registerCatalogDetail",
406 query: { guid: itemGuid, type: "asset", dataSources: props.dataSources },
392 }); 407 });
393 } 408 }
394 } 409 }
......
1 <route lang="yaml">
2 name: transactionDetail 数据产品交易信息详情
3 </route>
4
5 <script lang="ts" setup name="transactionDetail">
6 import { getDownFileSignByUrl, obsDownloadRequest, parseAndDecodeUrl } from "@/api/modules/obsService";
7 import { changeNum, download, getDownloadUrl } from "@/utils/common";
8 import { ElMessage } from "element-plus";
9 import { ref } from "vue";
10 import { getTransactionDetail } from "@/api/modules/dataAsset";
11
12 const { proxy } = getCurrentInstance() as any;
13 const router = useRouter();
14 const route = useRoute();
15 const detailLoading = ref(false);
16
17 const detailInfo: any = ref({});
18
19 onBeforeMount(() => {
20 detailLoading.value = true;
21 getTransactionDetail({ guid: route.query.guid }).then((res: any) => {
22 detailLoading.value = false;
23 if (res.code == proxy.$passCode) {
24 detailInfo.value = res.data || {};
25 } else {
26 ElMessage.error('驳回失败');
27 }
28 });
29 })
30
31 export const onUploadFileDownload = async (params) => {
32 const {name, url} = params;
33 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName);
34 if (!refSignInfo?.data) {
35 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
36 return;
37 }
38 obsDownloadRequest(refSignInfo?.data).then((res: any) => {
39 if (res && !res.msg) {
40 var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : '';
41 download(res, name, fileSuffix);
42 } else {
43 res?.msg && ElMessage.error(res?.msg);
44 }
45 })
46 }
47
48 export const onUploadFilePreview = async (params) => {
49 console.log(params, 'params');
50 const {name, url} = params;
51 // let f = formInline.value[item.field].find(i => i.name == file.name);
52 // let url = f.url;
53 let fileName: string = parseAndDecodeUrl(url).fileName;
54 const refSignInfo: any = await getDownFileSignByUrl(fileName);
55 if (!refSignInfo?.data) {
56 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
57 return;
58 }
59 obsDownloadRequest(refSignInfo?.data).then((res: any) => {
60 if (res && !res.msg) {
61 var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1).toLowerCase() : '';
62 if (fileSuffix === 'png' || fileSuffix === 'jpeg' || fileSuffix === 'jpg' || fileSuffix === 'pdf') { //浏览器可以支持图片和pdf预览
63 let fileUrl = <string>getDownloadUrl(res, name, fileSuffix);
64 let win = window.open(fileUrl, name);
65 win && (win.document.title = name);
66 } else {
67 download(res, name, fileSuffix);
68 }
69 } else {
70 res?.msg && ElMessage.error(res?.msg);
71 }
72 });
73 }
74
75 </script>
76
77 <template>
78 <div class="container_wrap" v-loading="detailLoading">
79 <ContentWrap id="id-detail" title="数据产品交易信息" description="" style="margin: 0 16px">
80
81 <div class="panel_body">
82 <div class="list_panel">
83 <div class="list_item">
84 <span class="item_label">数据产品名称:</span>
85 <span class="item_value">{{ detailInfo.damName || '--' }}</span>
86 </div>
87 <div class="list_item">
88 <span class="item_label">产品类型:</span>
89 <span class="item_value">{{ detailInfo.damTypeName || '--' }}</span>
90 </div>
91 <div class="list_item">
92 <span class="item_label">买方名称:</span>
93 <span class="item_value">{{ detailInfo.buyerName || '--' }}</span>
94 </div>
95 <div class="list_item">
96 <span class="item_label">卖方名称:</span>
97 <span class="item_value">{{ detailInfo.sellerName || '--' }}</span>
98 </div>
99 <div class="list_item">
100 <span class="item_label">交易币种:</span>
101 <span class="item_value">{{ detailInfo.tradingCurrencyName || '--' }}</span>
102 </div>
103 <div class="list_item">
104 <span class="item_label">原始交易金额:</span>
105 <span class="item_value">{{ detailInfo.originalTradingAmount != null ? changeNum(detailInfo.originalTradingAmount, 2) : '--' }}</span>
106 </div>
107 <div class="list_item">
108 <span class="item_label">交易金额(元):</span>
109 <span class="item_value">{{ detailInfo.tradingAmount != null ? changeNum(detailInfo.tradingAmount, 2) : '--' }}</span>
110 </div>
111 <div class="list_item">
112 <span class="item_label">交易方式:</span>
113 <span class="item_value">{{ detailInfo.tradingWayName || '--'
114 }}</span>
115 </div>
116 <div class="list_item" v-if="detailInfo.exchangeName">
117 <span class="item_label">交易场所:</span>
118 <span class="item_value">{{ detailInfo.exchangeName || '--' }}</span>
119 </div>
120 <div class="list_item">
121 <span class="item_label">交易时间:</span>
122 <span class="item_value">{{ detailInfo.tradingTime || '--'
123 }}</span>
124 </div>
125 <div class="list_item">
126 <span class="item_label">合同编号:</span>
127 <span class="item_value">{{ detailInfo.contractCode || '--' }}</span>
128 </div>
129 <div class="list_item">
130 <span class="item_label">合同名称:</span>
131 <span class="item_value">{{ detailInfo.contractName || '--' }}</span>
132 </div>
133
134 <div class="list_item is_block">
135 <div class="file_item" v-if="detailInfo.contractAttachments?.length">
136 <span class="item_label">合同附件:</span>
137 <span class="item_value">
138 <div class="file-operate">
139 <template
140 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'">
141 <img class="file-img" src="../../assets/images/excel.png" />
142 </template>
143 <template
144 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'">
145 <img class="file-img" src="../../assets/images/word.png" />
146 </template>
147 <template
148 v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
149 <img class="file-img" src="../../assets/images/zip.png" />
150 </template>
151 <template
152 v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
153 <img class="file-img" src="../../assets/images/RAR.png" />
154 </template>
155 <template
156 v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
157 <img class="file-img" src="../../assets/images/PDF.png" />
158 </template>
159 <template
160 v-else-if="detailInfo.contractAttachments?.[0]?.name.substring(detailInfo.contractAttachments?.[0]?.name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
161 <img class="file-img" src="../../assets/images/png.png" />
162 </template>
163 <template
164 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'">
165 <img class="file-img" src="../../assets/images/jpg.png" />
166 </template>
167 <div class="file-name"><ellipsis-tooltip :content="detailInfo.contractAttachments[0].name ?? ''"
168 class-name="w100f" refName="tooltipOver"></ellipsis-tooltip></div>
169 <div :style="{ right: '36px' }" class="file-preview"
170 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'"
171 @click="onUploadFilePreview(detailInfo.contractAttachments?.[0])">查看</div>
172 <div :style="{ right: '0px' }" class="file-preview"
173 @click="onUploadFileDownload(detailInfo.contractAttachments?.[0])">下载</div>
174 </div>
175 </span>
176 </div>
177 </div>
178 </div>
179 </div>
180 </ContentWrap>
181 </div>
182 </template>
183
184 <style lang="scss" scoped>
185 .panel_body {
186 padding: 8px 16px;
187 box-shadow: 0 0 0 1px rgba(229, 229, 229, 1);
188 border-top: none;
189 margin-top: 1px;
190
191 .list_panel {
192 display: flex;
193 flex-wrap: wrap;
194
195 .list_item {
196 width: 33.33%;
197 line-height: 32px;
198 font-size: 14px;
199 color: #666666;
200 display: flex;
201 justify-content: space-between;
202
203 .item_label {
204 width: 100px;
205 text-align: right;
206 flex-shrink: 0;
207
208 &.t_left {
209 width: auto;
210 }
211 }
212
213 .file_item {
214 width: 50%;
215 display: flex;
216 justify-content: space-between;
217 }
218
219 .item_value {
220 color: var(--el-color-regular);
221 padding: 0 16px;
222 flex: 1;
223 text-align: justify;
224 min-width: 100px;
225
226 .file-operate {
227 display: flex;
228 align-items: center;
229 position: relative;
230
231 .file-img {
232 width: 24px;
233 height: 24px;
234 }
235
236 &:hover {
237 background-color: #f5f5f5;
238 }
239
240 .file-name {
241 color: var(--el-color-regular);
242 margin-left: 4px;
243 width: calc(100% - 120px);
244 }
245
246 .file-preview {
247 position: absolute;
248 cursor: pointer;
249 color: var(--el-color-primary);
250 margin-right: 8px;
251 white-space: nowrap;
252 }
253 }
254
255 .area_text+.area_text {
256 &::before {
257 content: '、',
258 }
259 }
260 }
261
262 &.is_block {
263 width: 100%;
264
265 .item_value {
266 white-space: pre-wrap;
267 }
268 }
269 }
270
271 .list_item1 {
272 width: 50%;
273 line-height: 32px;
274 font-size: 14px;
275 color: #666666;
276 display: flex;
277 justify-content: space-between;
278
279 .item_label {
280 width: 100px;
281 text-align: right;
282 flex-shrink: 0;
283 }
284
285 .file_item {
286 width: 100%;
287 display: flex;
288 justify-content: space-between;
289 }
290
291 .item_value {
292 color: var(--el-color-regular);
293 padding: 0 16px;
294 flex: 1;
295 text-align: justify;
296 min-width: 100px;
297
298 .file-operate {
299 display: flex;
300 align-items: center;
301 position: relative;
302
303 .file-img {
304 width: 24px;
305 height: 24px;
306 }
307
308 &:hover {
309 background-color: #f5f5f5;
310 }
311
312 .file-name {
313 color: var(--el-color-regular);
314 margin-left: 4px;
315 width: calc(100% - 120px);
316 }
317
318 .file-preview {
319 position: absolute;
320 cursor: pointer;
321 color: var(--el-color-primary);
322 margin-right: 8px;
323 white-space: nowrap;
324 }
325 }
326
327 .area_text+.area_text {
328 &::before {
329 content: '、',
330 }
331 }
332 }
333
334 // &.is_block {
335 // width: 100%;
336
337 // .item_value {
338 // white-space: pre-wrap;
339 // }
340 // }
341 }
342
343 :deep(.el-form) {
344 width: 100%;
345 }
346
347 :deep(.panel_body) {
348 box-shadow: none;
349 }
350
351 &.label_auto {
352 .list_item {
353 .item_label {
354 width: auto;
355 }
356
357 .item_value {
358 padding-left: 0;
359 }
360 }
361 }
362 }
363
364 .table_panel_wrap {
365 .table_panel {
366 padding: 0;
367 min-height: unset;
368 }
369 }
370
371 .process_panel {
372 height: 500px;
373
374 .iframe-sty {
375 width: 100%;
376 height: 100%;
377 border: none;
378 }
379
380 :deep(.property-panel) {
381 height: calc(100% - 50px) !important;
382 }
383 }
384
385 &.collapse {
386 height: 0;
387 padding: 0;
388 overflow: hidden;
389 }
390 }
391 </style>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!