2e4a91c5 by lihua

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

1 parent 208206a2
...@@ -27,7 +27,7 @@ const mainSidebarActualWidth = computed(() => { ...@@ -27,7 +27,7 @@ const mainSidebarActualWidth = computed(() => {
27 // 侧边栏次导航当前实际宽度 27 // 侧边栏次导航当前实际宽度
28 const subSidebarActualWidth = computed(() => { 28 const subSidebarActualWidth = computed(() => {
29 let actualWidth = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width')) 29 let actualWidth = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))
30 if (settingsStore.settings.menu.subMenuCollapse || route.path == '/data-asset-index') { 30 if (settingsStore.settings.menu.subMenuCollapse || route.path == '/data-asset-index' || route.path == '/trusted-space-index' || route.path == '/down-delivery-file') {
31 actualWidth = 0 31 actualWidth = 0
32 } 32 }
33 return `${actualWidth}px` 33 return `${actualWidth}px`
......
...@@ -207,7 +207,7 @@ export const getCertificateDetail = (params) => request({ ...@@ -207,7 +207,7 @@ export const getCertificateDetail = (params) => request({
207 207
208 /** 获取登记证件管理的资产列表 */ 208 /** 获取登记证件管理的资产列表 */
209 export const getRegisterSelectList = () => request({ 209 export const getRegisterSelectList = () => request({
210 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-select`, 210 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/document-select`,
211 method: 'get' 211 method: 'get'
212 }) 212 })
213 213
...@@ -510,6 +510,14 @@ export const getApiInvokeCount = (data) => request({ ...@@ -510,6 +510,14 @@ export const getApiInvokeCount = (data) => request({
510 data 510 data
511 }) 511 })
512 512
513 /** 获取当前用户接收方和合同信息接口 */
514 export const getDataReceiveContract = () => request({
515 // url:`${import.meta.env.VITE_APP_SERVICE_BASEURL}/api-base-info/detail`,
516 // url: `http://localhost:9000/circulation/ms-data-circulation-portal-service/enterprise/detail-by-name`,
517 // url: `http://localhost:9000/delivery/ms-daop-jgjf-data-open-service/api-base-info/detail/${params}`,
518 url: `https://daop-lt-test.zgsjzc.com/circulation/ms-data-circulation-tx-mgr-service/data-contract/get-data-receive-and-contract`,
519 method: 'get',
520 })
513 521
514 // export const getTenantInfo = (params) => request({ 522 // export const getTenantInfo = (params) => request({
515 // // url: `${import.meta.env.VITE_APP_PERSONAL_URL}/tenant/getByGuid/${params}`, 523 // // url: `${import.meta.env.VITE_APP_PERSONAL_URL}/tenant/getByGuid/${params}`,
...@@ -523,4 +531,24 @@ export const chTransformEn =(params)=> request({ ...@@ -523,4 +531,24 @@ export const chTransformEn =(params)=> request({
523 url: `${import.meta.env.VITE_APP_COMMON_URL}/common/convert-field-ch-name`, 531 url: `${import.meta.env.VITE_APP_COMMON_URL}/common/convert-field-ch-name`,
524 method: "post", 532 method: "post",
525 data: params, 533 data: params,
526 });
...\ No newline at end of file ...\ No newline at end of file
534 });
535
536 export const saveDataReceiveContract = (params) => request({
537 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/save`,
538 method: 'post',
539 data: params
540 });
541
542 /** 获取数据交付物详情 */
543 export const getDataReceiveContractDetail = (damGuid) => request({
544 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/list-by-dam-guid?damGuid=${damGuid}`,
545 method: 'get'
546 });
547
548
549 // 数据合同详情
550 export const getContractDetail = (params) => request({
551 url: `https://daop-lt-test.zgsjzc.com/circulation/ms-data-circulation-tx-mgr-service/data-contract/detail`,
552 method: 'get',
553 params
554 })
...\ No newline at end of file ...\ No newline at end of file
......
1 import request from "@/utils/request";
2
3 /** 获取首页组织机构信息 */
4 export const getReleaseYears = () => request({
5 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/release-year`,
6 method: 'get',
7 })
8
9 export const getParamsList = (params) => request({
10 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType`,
11 method: 'get',
12 params
13 })
14
15 export const getSubjectDomainDataTree = () => request({
16 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/delivery-data-tree`,
17 method: 'get',
18 })
19
20 export const getReleaseListData = (params) => request({
21 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/list-all`,
22 method: 'post',
23 data: params
24 })
25
26 /** 获取资产登记详情 */
27 export const getReleaseDataCertiDetail = (guid) => request({
28 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-document/detail-by-dam-guid?damGuid=${guid}`,
29 method: 'get'
30 })
31
32 /** 获取交付物下载附件 */
33 export const getDeliveryFileDetail = (guid) => request({
34 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-delivery-main/detail?guid=${guid}`,
35 method: 'get'
36 })
...@@ -25,3 +25,11 @@ export const updateComplianceInfo = (params) => { ...@@ -25,3 +25,11 @@ export const updateComplianceInfo = (params) => {
25 data: params 25 data: params
26 }) 26 })
27 } 27 }
28
29 /** 获取资产合规目录详情 */
30 export const getComplianceDetail = (guid) => {
31 return request({
32 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/compliance-info/detail?damGuid=${guid}`,
33 method: 'get'
34 })
35 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -51,7 +51,7 @@ const defaultMenuActive = computed(() => { ...@@ -51,7 +51,7 @@ const defaultMenuActive = computed(() => {
51 <div 51 <div
52 v-if="['side', 'head', 'single'].includes(settingsStore.settings.menu.menuMode) || settingsStore.mode === 'mobile'" 52 v-if="['side', 'head', 'single'].includes(settingsStore.settings.menu.menuMode) || settingsStore.mode === 'mobile'"
53 class="sub-sidebar-container" 53 class="sub-sidebar-container"
54 :class="{ 'is-collapse': settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index') }" 54 :class="{ 'is-collapse': settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index' || defaultMenuActive == '/trusted-space-index' || defaultMenuActive == '/down-delivery-file') }"
55 @scroll="onSidebarScroll"> 55 @scroll="onSidebarScroll">
56 <Logo :show-logo="settingsStore.settings.menu.menuMode === 'single'" class="sidebar-logo" :class="{ 56 <Logo :show-logo="settingsStore.settings.menu.menuMode === 'single'" class="sidebar-logo" :class="{
57 'sidebar-logo-bg': settingsStore.settings.menu.menuMode === 'single', 57 'sidebar-logo-bg': settingsStore.settings.menu.menuMode === 'single',
...@@ -60,7 +60,7 @@ const defaultMenuActive = computed(() => { ...@@ -60,7 +60,7 @@ const defaultMenuActive = computed(() => {
60 <!-- 侧边栏模式(无主导航) --> 60 <!-- 侧边栏模式(无主导航) -->
61 <el-menu :unique-opened="settingsStore.settings.menu.subMenuUniqueOpened" 61 <el-menu :unique-opened="settingsStore.settings.menu.subMenuUniqueOpened"
62 :default-openeds="menuStore.defaultOpenedPaths" :default-active="defaultMenuActive" 62 :default-openeds="menuStore.defaultOpenedPaths" :default-active="defaultMenuActive"
63 :collapse="settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index')" 63 :collapse="settingsStore.mode === 'pc' && (settingsStore.settings.menu.subMenuCollapse || defaultMenuActive == '/data-asset-index' || defaultMenuActive == '/trusted-space-index' || defaultMenuActive == '/down-delivery-file')"
64 :collapse-transition="false" :class="{ 64 :collapse-transition="false" :class="{
65 'is-collapse-without-logo': settingsStore.settings.menu.menuMode !== 'single' && settingsStore.settings.menu.subMenuCollapse, 65 'is-collapse-without-logo': settingsStore.settings.menu.menuMode !== 'single' && settingsStore.settings.menu.subMenuCollapse,
66 }"> 66 }">
......
...@@ -127,6 +127,18 @@ const routes: RouteRecordRaw[] = [ ...@@ -127,6 +127,18 @@ const routes: RouteRecordRaw[] = [
127 } 127 }
128 }, 128 },
129 { 129 {
130 path: 'register-catalog-contract-detail',
131 name: 'registerCatalogContractDetail',
132 component: () => import('@/views/data_asset/registerCatalogContractDetail.vue'),
133 meta: {
134 title: '详情-',
135 sidebar: false,
136 breadcrumb: false,
137 cache: true,
138 reuse: true
139 }
140 },
141 {
130 path: 'damTableDataView', 142 path: 'damTableDataView',
131 name: 'damTableDataView', 143 name: 'damTableDataView',
132 component: () => import('@/views/data_asset/damTableDataView.vue'), 144 component: () => import('@/views/data_asset/damTableDataView.vue'),
......
...@@ -173,7 +173,19 @@ const routes: RouteRecordRaw[] = [ ...@@ -173,7 +173,19 @@ const routes: RouteRecordRaw[] = [
173 cache: true, 173 cache: true,
174 reuse: true 174 reuse: true
175 } 175 }
176 } 176 },
177 {
178 path: 'register-catalog-detail',
179 name: 'certiCatalogDetail',
180 component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
181 meta: {
182 title: '详情-',
183 sidebar: false,
184 breadcrumb: false,
185 cache: true,
186 reuse: true
187 }
188 },
177 ], 189 ],
178 }, 190 },
179 { 191 {
......
1 import type { RouteRecordRaw } from 'vue-router'
2 function Layout() {
3 return import('@/layouts/index.vue')
4 }
5
6 const routes: RouteRecordRaw[] = [
7 {
8 path: '/trusted-space-index',
9 component: Layout,
10 meta: {
11 title: '可信空间',
12 icon: 'sidebar-videos',
13 },
14 children: [
15 {
16 path: '',
17 name: 'trustedSpaceIndex',
18 component: () => import('@/views/data_trusted/trustedSpaceIndex.vue'),
19 meta: {
20 title: '可信空间',
21 sidebar: false,
22 breadcrumb: false,
23 cache: true
24 },
25 },
26 {
27 path: '/down-delivery-file',
28 name: 'downDeliveryFile',
29 component: () => import('@/views/data_trusted/downDeliveryFile.vue'),
30 meta: {
31 title: '交付物下载',
32 sidebar: false,
33 breadcrumb: false,
34 cache: true,
35 reuse: true
36 },
37 beforeEnter: (to, from) => {
38 if (to.query.damName) {
39 to.meta.title = `交付物下载-${to.query.damName}`;
40 }
41 }
42 },
43 ]
44 }]
45
46 export default routes
...\ No newline at end of file ...\ No newline at end of file
...@@ -6,11 +6,11 @@ import DataMeta from './modules/dataMeta'; ...@@ -6,11 +6,11 @@ import DataMeta from './modules/dataMeta';
6 import DataQuality from './modules/dataQuality'; 6 import DataQuality from './modules/dataQuality';
7 import DataInventory from './modules/dataInventory'; 7 import DataInventory from './modules/dataInventory';
8 import AssetIndex from './modules/assetIndex'; 8 import AssetIndex from './modules/assetIndex';
9 import DataTrustedSpace from './modules/dataTrustedSpace';
9 import DataAssetRegistry from './modules/dataAssetRegistry'; 10 import DataAssetRegistry from './modules/dataAssetRegistry';
10 import DataEntry from './modules/dataEntry'; 11 import DataEntry from './modules/dataEntry';
11 import SecurityMenu from './modules/securityMenu'; 12 import SecurityMenu from './modules/securityMenu';
12 13
13 import type { Route } from '#/global'
14 import useSettingsStore from '@/store/modules/settings' 14 import useSettingsStore from '@/store/modules/settings'
15 15
16 /** 路由配置的meta信息接口注释。 */ 16 /** 路由配置的meta信息接口注释。 */
...@@ -111,7 +111,8 @@ const asyncRoutes: RouteRecordRaw[] = [ ...@@ -111,7 +111,8 @@ const asyncRoutes: RouteRecordRaw[] = [
111 ...SecurityMenu, 111 ...SecurityMenu,
112 ...DataMeta, 112 ...DataMeta,
113 ...DataQuality, 113 ...DataQuality,
114 ...DataInventory 114 ...DataInventory,
115 ...DataTrustedSpace
115 ] 116 ]
116 117
117 const constantRoutesByFilesystem = generatedRoutes.filter((item) => { 118 const constantRoutesByFilesystem = generatedRoutes.filter((item) => {
......
...@@ -12,8 +12,12 @@ import { ...@@ -12,8 +12,12 @@ import {
12 updateCertificate, 12 updateCertificate,
13 getRegisterSelectList, 13 getRegisterSelectList,
14 saveCertificate, 14 saveCertificate,
15 delCertificate 15 delCertificate,
16 getParamsList
16 } from "@/api/modules/dataAsset"; 17 } from "@/api/modules/dataAsset";
18 import {
19 getSingleList
20 } from "@/api/modules/queryService";
17 import useUserStore from "@/store/modules/user"; 21 import useUserStore from "@/store/modules/user";
18 import useDataAssetStore from "@/store/modules/dataAsset"; 22 import useDataAssetStore from "@/store/modules/dataAsset";
19 import { useValidator } from '@/hooks/useValidator'; 23 import { useValidator } from '@/hooks/useValidator';
...@@ -29,8 +33,14 @@ const userData = JSON.parse(userStore.userData); ...@@ -29,8 +33,14 @@ const userData = JSON.parse(userStore.userData);
29 /** 是否时企业端。不是企业端,则是服务端,需要显示企业名称。 */ 33 /** 是否时企业端。不是企业端,则是服务端,需要显示企业名称。 */
30 const isCompanyPlatform = ref(userData.tenantType == 1); 34 const isCompanyPlatform = ref(userData.tenantType == 1);
31 35
36 /** 登记证件类别,知识产权和数据产权 */
37 const documentCategoryList = ref([]);
38
32 const registerSelectData: any = ref([]); 39 const registerSelectData: any = ref([]);
33 40
41 /** 发证主体的下拉数据选择 */
42 const serviceTenants: any = ref([]);
43
34 onBeforeMount(() => { 44 onBeforeMount(() => {
35 if (isCompanyPlatform.value) { 45 if (isCompanyPlatform.value) {
36 tableInfo.value.fields = tableFields.value; 46 tableInfo.value.fields = tableFields.value;
...@@ -38,6 +48,25 @@ onBeforeMount(() => { ...@@ -38,6 +48,25 @@ onBeforeMount(() => {
38 tableFields.value.splice(4, 0, { label: "企业名称", field: "tenantName", width: 240, align: "left" }) 48 tableFields.value.splice(4, 0, { label: "企业名称", field: "tenantName", width: 240, align: "left" })
39 tableInfo.value.fields = tableFields.value; 49 tableInfo.value.fields = tableFields.value;
40 } 50 }
51 getParamsList({ dictType: '登记证件类别' }).then((res: any) => {
52 if (res.code == proxy.$passCode) {
53 documentCategoryList.value = res.data || [];
54 let item = formItems.value.at(-2);
55 item && (item.options = documentCategoryList.value);
56 } else {
57 proxy.$ElMessage.error(res.msg);
58 }
59 })
60 getSingleList({ pageIndex: -1, pageSize: -1, tenantType: "130" }).then((res: any) => {
61 if (res.code == proxy.$passCode) {
62 const data = res.data.records ?? [];
63 serviceTenants.value = data;
64 let formItem = formItems.value.find(f => f.field === 'issuingEntityGuid');
65 formItem && (formItem.options = serviceTenants.value);
66 } else {
67 proxy.$ElMessage.error(res.msg);
68 }
69 })
41 }) 70 })
42 71
43 onActivated(() => { 72 onActivated(() => {
...@@ -145,11 +174,12 @@ const tableFields = ref([ ...@@ -145,11 +174,12 @@ const tableFields = ref([
145 //{ label: "企业名称", field: "tenantName", width: 240, align: "left" }, 174 //{ label: "企业名称", field: "tenantName", width: 240, align: "left" },
146 { label: "发证主体", field: "issuingEntityName", width: 250, align: "left" }, 175 { label: "发证主体", field: "issuingEntityName", width: 250, align: "left" },
147 { 176 {
148 label: "类型", field: "documentType", width: 96, align: "left", getName: (scope) => { 177 label: "类型", field: "documentType", width: 80, align: "left", getName: (scope) => {
149 let type = scope.row.documentType; 178 let type = scope.row.documentType;
150 return type == 1 ? 'A证' : (type == 2 ? 'B证' : 'C证'); 179 return type == 1 ? 'A证' : (type == 2 ? 'B证' : 'C证');
151 } 180 }
152 }, 181 },
182 { label: "类别", field: "documentCategoryName", width: 90, align: "left" },
153 { label: "状态", field: "state", type: "tag", width: 96, align: 'center' }, 183 { label: "状态", field: "state", type: "tag", width: 96, align: 'center' },
154 ]); 184 ]);
155 185
...@@ -205,6 +235,8 @@ const tableBtnClick = (scope, btn) => { ...@@ -205,6 +235,8 @@ const tableBtnClick = (scope, btn) => {
205 item.default = row[item.field]; 235 item.default = row[item.field];
206 }) 236 })
207 formItems.value[0].options = registerSelectData.value; 237 formItems.value[0].options = registerSelectData.value;
238 let item = formItems.value.at(-2);
239 item && (item.options = documentCategoryList.value);
208 getRegisterSelectList().then((res: any) => { 240 getRegisterSelectList().then((res: any) => {
209 if (res.code == proxy.$passCode) { 241 if (res.code == proxy.$passCode) {
210 registerSelectData.value = res.data || []; 242 registerSelectData.value = res.data || [];
...@@ -228,10 +260,17 @@ const tableBtnClick = (scope, btn) => { ...@@ -228,10 +260,17 @@ const tableBtnClick = (scope, btn) => {
228 proxy.$ElMessage.info("已取消删除"); 260 proxy.$ElMessage.info("已取消删除");
229 }); 261 });
230 } else if (type === 'path_detail') { // 详情 262 } else if (type === 'path_detail') { // 详情
231 router.push({ 263 if (row.registerGuid) {
232 name: 'certificateDetail', 264 router.push({
233 query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid } 265 name: 'certificateDetail',
234 }); 266 query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
267 });
268 } else {
269 router.push({
270 name: 'certiCatalogDetail',
271 query: { guid: row.damGuid, tenantGuid: row.tenantGuid, type: 'certificate', certificateGuid: row.guid }
272 });
273 }
235 } 274 }
236 }; 275 };
237 276
...@@ -245,12 +284,12 @@ const formItems = ref([{ ...@@ -245,12 +284,12 @@ const formItems = ref([{
245 label: "资产名称", 284 label: "资产名称",
246 type: "select", 285 type: "select",
247 placeholder: "请选择", 286 placeholder: "请选择",
248 field: "registerGuid", 287 field: "damGuid",
249 default: '', 288 default: '',
250 options: registerSelectData.value, 289 options: registerSelectData.value,
251 props: { 290 props: {
252 label: 'daName', 291 label: 'daName',
253 value: 'guid' 292 value: 'damGuid'
254 }, 293 },
255 disabled: false, 294 disabled: false,
256 clearable: true, 295 clearable: true,
...@@ -282,7 +321,7 @@ const formItems = ref([{ ...@@ -282,7 +321,7 @@ const formItems = ref([{
282 clearable: true, 321 clearable: true,
283 unlink: true, 322 unlink: true,
284 disabled: false, 323 disabled: false,
285 required: false, 324 required: true,
286 visible: true 325 visible: true
287 }, { 326 }, {
288 label: '', 327 label: '',
...@@ -304,18 +343,24 @@ const formItems = ref([{ ...@@ -304,18 +343,24 @@ const formItems = ref([{
304 visible: true 343 visible: true
305 }, { 344 }, {
306 label: '发证主体', 345 label: '发证主体',
307 type: 'input', 346 type: 'select',
308 placeholder: '请输入', 347 placeholder: '请输入',
309 field: 'issuingEntityName', 348 field: 'issuingEntityGuid',
310 default: '', 349 default: '',
311 disabled: true, 350 options: registerSelectData.value,
312 required: false, 351 props: {
352 value: "guid",
353 label: "tenantName",
354 },
355 filterable: true,
356 disabled: false,
357 required: true,
313 visible: true 358 visible: true
314 }, { 359 }, {
315 label: '', 360 label: '',
316 type: 'input', 361 type: 'input',
317 placeholder: '请输入', 362 placeholder: '请输入',
318 field: 'issuingEntityGuid', 363 field: 'issuingEntityName',
319 default: '', 364 default: '',
320 disabled: true, 365 disabled: true,
321 required: false, 366 required: false,
...@@ -340,6 +385,16 @@ const formItems = ref([{ ...@@ -340,6 +385,16 @@ const formItems = ref([{
340 { label: 'C证', value: 3 }], 385 { label: 'C证', value: 3 }],
341 disabled: false, 386 disabled: false,
342 clearable: true, 387 clearable: true,
388 required: false,
389 }, {
390 label: "证件类别",
391 type: "select",
392 placeholder: "请选择",
393 field: "documentCategory",
394 default: '2',
395 options: documentCategoryList.value,
396 disabled: false,
397 clearable: true,
343 required: true, 398 required: true,
344 }, { 399 }, {
345 label: '证件上传', 400 label: '证件上传',
...@@ -355,10 +410,11 @@ const formItems = ref([{ ...@@ -355,10 +410,11 @@ const formItems = ref([{
355 }]); 410 }]);
356 411
357 const formRules = ref({ 412 const formRules = ref({
358 registerGuid: [required('请选择资产名称')], 413 damGuid: [required('请选择资产名称')],
359 registerTime: [required('请选择登记时间')], 414 registerTime: [required('请选择登记时间')],
360 effectiveDate: [required('请选择有效期')], 415 effectiveDate: [required('请选择有效期')],
361 documentType: [required('请选择证件类型')], 416 //documentType: [required('请选择证件类型')],
417 documentCategory: [required('请选择证件类别')],
362 daCode: [required('请输入证件编码')], 418 daCode: [required('请输入证件编码')],
363 documentFile: [{ 419 documentFile: [{
364 validator: (rule: any, value: any, callback: any) => { 420 validator: (rule: any, value: any, callback: any) => {
...@@ -443,8 +499,8 @@ const dialogBtnClick = (btn, info) => { ...@@ -443,8 +499,8 @@ const dialogBtnClick = (btn, info) => {
443 }; 499 };
444 500
445 const handleDialogSelectChange = (val, row, info) => { 501 const handleDialogSelectChange = (val, row, info) => {
446 if (row.field == 'registerGuid') { 502 if (row.field == 'damGuid') {
447 let register = val && registerSelectData.value.find(r => r.guid == val); 503 let register = val && registerSelectData.value.find(r => r.damGuid == val);
448 formItems.value.forEach(item => { 504 formItems.value.forEach(item => {
449 item.default = info[item.field]; 505 item.default = info[item.field];
450 if (item.field == 'daName' || item.field == 'tenantGuid' || item.field == 'tenantName') { 506 if (item.field == 'daName' || item.field == 'tenantGuid' || item.field == 'tenantName') {
...@@ -467,6 +523,8 @@ const handleCreate = () => { ...@@ -467,6 +523,8 @@ const handleCreate = () => {
467 ElMessage.error(res.msg); 523 ElMessage.error(res.msg);
468 } 524 }
469 }) 525 })
526 let item = formItems.value.at(-2);
527 item && (item.options = documentCategoryList.value);
470 dialogInfo.value.visible = true; 528 dialogInfo.value.visible = true;
471 dialogInfo.value.type = 'add'; 529 dialogInfo.value.type = 'add';
472 dialogInfo.value.header.title = '新增'; 530 dialogInfo.value.header.title = '新增';
...@@ -474,10 +532,12 @@ const handleCreate = () => { ...@@ -474,10 +532,12 @@ const handleCreate = () => {
474 item.default = ''; 532 item.default = '';
475 if (item.field == 'documentType') { 533 if (item.field == 'documentType') {
476 item.default = 3; 534 item.default = 3;
535 } else if (item.field == 'documentCategory') {
536 item.default = '2';
477 } else if (item.field == 'documentFile') { 537 } else if (item.field == 'documentFile') {
478 item.default = []; 538 item.default = [];
479 } 539 }
480 if (item.field == 'registerGuid' || item.field == 'daCode') { 540 if (item.field == 'damGuid' || item.field == 'daCode') {
481 item.disabled = false; 541 item.disabled = false;
482 } 542 }
483 }) 543 })
...@@ -489,7 +549,7 @@ const handleCreate = () => { ...@@ -489,7 +549,7 @@ const handleCreate = () => {
489 <div class="container_wrap"> 549 <div class="container_wrap">
490 <div class="table_tool_wrap"> 550 <div class="table_tool_wrap">
491 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" :init="true" /> 551 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" :init="true" />
492 <div class="tools_btns"> 552 <div class="tools_btns" style="padding-top: 0px;">
493 <el-button type="primary" @click="handleCreate">新增登记证件</el-button> 553 <el-button type="primary" @click="handleCreate">新增登记证件</el-button>
494 </div> 554 </div>
495 </div> 555 </div>
...@@ -505,7 +565,7 @@ const handleCreate = () => { ...@@ -505,7 +565,7 @@ const handleCreate = () => {
505 padding: 0 16px; 565 padding: 0 16px;
506 566
507 .table_panel_wrap { 567 .table_panel_wrap {
508 height: calc(100% - 44px); 568 height: calc(100% - 84px);
509 } 569 }
510 } 570 }
511 571
......
...@@ -12,11 +12,13 @@ import { ...@@ -12,11 +12,13 @@ import {
12 getParamsList, 12 getParamsList,
13 getDamCatalogTable, 13 getDamCatalogTable,
14 registerCatalogDelete, 14 registerCatalogDelete,
15 getDamTypesList 15 getDamTypesList,
16 getDataReceiveContract
16 } from "@/api/modules/dataAsset"; 17 } from "@/api/modules/dataAsset";
17 import { commonPageConfig } from "@/utils/enum"; 18 import { commonPageConfig } from "@/utils/enum";
18 import useDataAssetStore from "@/store/modules/dataAsset"; 19 import useDataAssetStore from "@/store/modules/dataAsset";
19 import useUserStore from "@/store/modules/user"; 20 import useUserStore from "@/store/modules/user";
21 import deliverUploadDialog from "./components/deliverUploadDialog.vue";
20 22
21 const userStore = useUserStore(); 23 const userStore = useUserStore();
22 const userData = JSON.parse(userStore.userData); 24 const userData = JSON.parse(userStore.userData);
...@@ -115,8 +117,6 @@ const searchItemList = ref([ ...@@ -115,8 +117,6 @@ const searchItemList = ref([
115 }, 117 },
116 ]); 118 ]);
117 119
118
119
120 const pageInfo = ref({ 120 const pageInfo = ref({
121 ...commonPageConfig, 121 ...commonPageConfig,
122 rows: 0, 122 rows: 0,
...@@ -353,6 +353,46 @@ const handleWindowResize = () => { ...@@ -353,6 +353,46 @@ const handleWindowResize = () => {
353 }); 353 });
354 }; 354 };
355 355
356 /** 上传交付物相关逻辑 */
357 const deliverUploadVisible = ref(false);
358
359 const deliverDataReceiveContract = ref([]);
360
361 const getReceivePromise: any = ref(null);
362
363 const uploadDeliverItem: any = ref({});
364
365 const handleClickUploadBtn = (item) => {
366 if (getReceivePromise.value) {
367 return;
368 }
369 uploadDeliverItem.value = item;
370 getReceivePromise.value = getDataReceiveContract().then((res: any) => {
371 getReceivePromise.value = null
372 if (res.code == proxy.$passCode) {
373 deliverDataReceiveContract.value = res.data || [];
374 if (!deliverDataReceiveContract.value?.length) {
375 proxy.$ElMessage.error('没有可选择的数据接收方和合同,无法上传交付物');
376 } else {
377 deliverUploadVisible.value = true;
378 }
379 } else {
380 proxy.$ElMessage.error(res.msg);
381 }
382 })
383 }
384
385 const handleUploadClose = (itemGuid) => {
386 deliverUploadVisible.value = false
387 if (itemGuid) {
388 assetStore.setDamCatalogRefresh(true);
389 router.push({
390 name: "registerCatalogDetail",
391 query: { guid: itemGuid, type: "asset" },
392 });
393 }
394 }
395
356 </script> 396 </script>
357 397
358 <template> 398 <template>
...@@ -445,6 +485,7 @@ const handleWindowResize = () => { ...@@ -445,6 +485,7 @@ const handleWindowResize = () => {
445 <el-button plain v-if="!(item.isRegister == 'Y' || item.foundMode == 2) && item.foundMode != 3" 485 <el-button plain v-if="!(item.isRegister == 'Y' || item.foundMode == 2) && item.foundMode != 3"
446 @click.stop="tableBtnClick(item, 'delete')">删除</el-button> 486 @click.stop="tableBtnClick(item, 'delete')">删除</el-button>
447 <el-button plain v-if="!(item.isRegister == 'Y') && item.foundMode != 3" @click.stop="handleDataClick(item)">编辑</el-button> 487 <el-button plain v-if="!(item.isRegister == 'Y') && item.foundMode != 3" @click.stop="handleDataClick(item)">编辑</el-button>
488 <el-button plain @click.stop="handleClickUploadBtn(item)" v-if="item.isRegister == 'Y'">上传交付物</el-button>
448 <el-button plain @click.stop="handleDataClick(item)" v-if="(item.isRegister == 'Y' || item.foundMode == 3)">详情</el-button> 489 <el-button plain @click.stop="handleDataClick(item)" v-if="(item.isRegister == 'Y' || item.foundMode == 3)">详情</el-button>
449 </div> 490 </div>
450 </div> 491 </div>
...@@ -457,6 +498,7 @@ const handleWindowResize = () => { ...@@ -457,6 +498,7 @@ const handleWindowResize = () => {
457 498
458 </div> 499 </div>
459 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" /> 500 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" />
501 <deliverUploadDialog :uploadDeliverItem="uploadDeliverItem" :visible="deliverUploadVisible" :listData="deliverDataReceiveContract" @close="handleUploadClose"></deliverUploadDialog>
460 </div> 502 </div>
461 503
462 </template> 504 </template>
......
...@@ -1760,10 +1760,14 @@ const passCommonDialogBtnClick = (btn, info) => { ...@@ -1760,10 +1760,14 @@ const passCommonDialogBtnClick = (btn, info) => {
1760 class-name="w100f mr8-i" :refName="'tooltipOver' + 'issuingEntityName'"></ellipsis-tooltip></span> 1760 class-name="w100f mr8-i" :refName="'tooltipOver' + 'issuingEntityName'"></ellipsis-tooltip></span>
1761 </div> 1761 </div>
1762 <div class="list_item"> 1762 <div class="list_item">
1763 <span class="item_label">类型:</span> 1763 <span class="item_label">证件类型:</span>
1764 <span class="item_value">{{ detailInfo.documentType == 1 ? 'A证' : (detailInfo.documentType == 2 ? 'B证' : 1764 <span class="item_value">{{ detailInfo.documentType == 1 ? 'A证' : (detailInfo.documentType == 2 ? 'B证' :
1765 'C证') }}</span> 1765 'C证') }}</span>
1766 </div> 1766 </div>
1767 <div class="list_item">
1768 <span class="item_label">证件类别:</span>
1769 <span class="item_value">{{ detailInfo.documentCategoryName ?? '--' }}</span>
1770 </div>
1767 <div class="list_item is_block" v-if="detailInfo.documentFile?.length" :style="{ 'max-width': '700px' }"> 1771 <div class="list_item is_block" v-if="detailInfo.documentFile?.length" :style="{ 'max-width': '700px' }">
1768 <span class="item_label">证件:</span> 1772 <span class="item_label">证件:</span>
1769 <span class="item_value"> 1773 <span class="item_value">
......
1 <template>
2 <div class="content_main">
3 <div class="loading-main" v-show="loadingProcess">
4 <div class="row-main">
5 <img class="loading-img" src="../../assets/images/loading.gif" />
6 <div class="title-first" style=" margin-left: 22px;">正在检测您的账号安全状态,请稍后……</div>
7 </div>
8 <div class="row-main mt15">
9 <el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
10 <CircleCheckFilled />
11 </el-icon>
12 <div class="title-desc">IP认证成功</div>
13 </div>
14 <div class="row-main mt15">
15 <div class="circle-main">
16 <div class="circle"></div>
17 </div>
18 <div class="title-desc">通行密钥认证</div>
19 </div>
20 </div>
21
22 <div class="loading-main" v-show="!loadingProcess">
23 <div class="row-main">
24 <el-icon style="width: 32px;height: 32px;" color="#1ba854" class="big">
25 <CircleCheckFilled />
26 </el-icon>
27 <div class="title-first" style=" margin-left: 22px;">认证通过</div>
28 </div>
29 <div class="row-main mt15">
30 <el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
31 <CircleCheckFilled />
32 </el-icon>
33 <div class="title-desc">IP认证成功</div>
34 </div>
35 <div class="row-main mt15">
36 <el-icon style="width: 30px;height: 24px;" color="#1ba854" class="small">
37 <CircleCheckFilled />
38 </el-icon>
39 <div class="title-desc">通行密钥认证</div>
40 </div>
41 </div>
42
43 <div class="file-down" v-if="!loadingProcess && file.name">
44 <div class="title-first">交付物下载</div>
45 <div class="file-row-main">
46 <div class="file-operate">
47 <template
48 v-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx'">
49 <img class="file-img" src="../../assets/images/excel.png" />
50 </template>
51 <template
52 v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
53 <img class="file-img" src="../../assets/images/word.png" />
54 </template>
55 <template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
56 <img class="file-img" src="../../assets/images/zip.png" />
57 </template>
58 <template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
59 <img class="file-img" src="../../assets/images/RAR.png" />
60 </template>
61 <template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
62 <img class="file-img" src="../../assets/images/PDF.png" />
63 </template>
64 <template v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
65 <img class="file-img" src="../../assets/images/png.png" />
66 </template>
67 <template
68 v-else-if="file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
69 <img class="file-img" src="../../assets/images/jpg.png" />
70 </template>
71 <div class="file-name"
72 :style="{ width: ['pdf', 'png', 'jpg', 'jpeg'].includes(file?.name?.substring(file.name.lastIndexOf('.') + 1).toLowerCase() ?? '') ? 'calc(100% - 300px)' : 'calc(100% - 290px)' }">
73 <ellipsis-tooltip :content="file.name" class-name="w100f"
74 :refName="'tooltipOver' + file.name"></ellipsis-tooltip>
75 </div>
76 <div class="upload-time" :style="{ right: 32 }" v-if="uploadTime"> {{ '上传时间:' + uploadTime }} </div>
77 <div :style="{ right: 0 }" class="file-preview" @click="onUploadFileDownload(file)">下载
78 </div>
79 </div>
80 </div>
81 </div>
82 </div>
83 </template>
84
85 <script lang="ts" setup name="downDeliveryFile">
86 import { onUploadFileDownload } from '@/api/modules/common';
87 import {
88 CircleCheckFilled
89 } from "@element-plus/icons-vue";
90 import {
91 getDeliveryFileDetail
92 } from '@/api/modules/dataTrustedSpace';
93
94 const { proxy } = getCurrentInstance() as any;
95
96 const route = useRoute()
97
98 const file = ref({
99 name: '',
100 url: ''
101 });
102
103 const uploadTime = ref('');
104
105 const loadingProcess = ref(true);
106
107 onActivated(() => {
108 loadingProcess.value = true;
109 getDeliveryFileDetail(route.query.guid).then((res: any) => {
110 if (res.code == proxy.$passCode) {
111 file.value = res.data?.dataDelivery?.[0] || {
112 name: '',
113 url: ''
114 };
115 uploadTime.value = res.data?.uploadTime || '';
116 setTimeout(() => {
117 loadingProcess.value = false;
118 }, 1000)
119 } else {
120 proxy.$ElMessage.error(res.msg);
121 }
122 })
123 })
124
125 onBeforeMount(() => {
126 })
127
128 </script>
129
130 <style lang="scss" scoped>
131 .content_main {
132 display: flex;
133 background-color: #f5f5f6;
134 padding: 24px 120px 0px;
135 height: 100%;
136 width: 100%;
137 flex-direction: column;
138 }
139
140 .loading-main {
141 height: 162px;
142 background: #F2F9FF;
143 border: 1px solid rgba(182, 213, 241, 1);
144 padding: 30px 56px;
145 width: 100%;
146
147 .title-desc {
148 font-size: 14px;
149 color: #212121;
150 line-height: 24px;
151 font-weight: 400;
152 margin-left: 22px;
153 }
154 }
155
156
157 .title-first {
158 font-size: 20px;
159 color: #212121;
160 line-height: 30px;
161 font-weight: 600;
162 }
163
164 .row-main {
165 display: flex;
166 }
167
168 .loading-img {
169 width: 28px;
170 height: 28px;
171 }
172
173 :deep(.el-icon.small) {
174 svg {
175 width: 20px;
176 height: 20px;
177 }
178 }
179
180 :deep(.el-icon.big) {
181 svg {
182 width: 32px;
183 height: 32px;
184 }
185 }
186
187 .circle-main {
188 width: 30px;
189 height: 24px;
190 display: flex;
191 justify-content: center;
192 align-items: center;
193 }
194
195 .circle {
196 border-radius: 100%;
197 border: 1px solid #b2b2b2;
198 width: 16px;
199 height: 16px;
200 }
201
202 .mt15 {
203 margin-top: 12px;
204 }
205
206 .file-down {
207 padding: 24px;
208 display: flex;
209 flex-direction: column;
210 border: 1px solid #d9d9d9;
211 background-color: #fff;
212 margin-top: 22px;
213
214 .file-row-main {
215 height: 48px;
216 background-color: #f5f5f5;
217 padding: 8px 24px;
218 margin-top: 12px;
219 justify-content: center;
220 display: flex;
221 }
222 }
223
224 .file-operate {
225 display: flex;
226 align-items: center;
227 position: relative;
228 width: 100%;
229
230 .file-img {
231 width: 30px;
232 height: 30px;
233 }
234
235 &:hover {
236 background-color: #f5f5f5;
237 }
238 }
239
240 .file-name {
241 margin-left: 4px;
242 margin-right: 4px;
243 width: calc(100% - 130px);
244 color: #212121;
245 font-size: 14px;
246 }
247
248 .upload-time {
249 color: #212121;
250 font-size: 14px;
251 }
252
253 .file-preview {
254 position: absolute;
255 cursor: pointer;
256 color: var(--el-color-primary);
257 margin-right: 8px;
258 font-size: 14px;
259 }
260 </style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -114,7 +114,11 @@ const tableInfo = ref({ ...@@ -114,7 +114,11 @@ const tableInfo = ref({
114 label: "详情", value: "detail", click: (scope) => { 114 label: "详情", value: "detail", click: (scope) => {
115 tableTempValue.value = scope.row; 115 tableTempValue.value = scope.row;
116 formItems.value.forEach((item) => { 116 formItems.value.forEach((item) => {
117 item.default = scope.row[item.field] || []; 117 if (['complianceEvaluateReport', 'complianceLegalOpinion', 'entryComplianceProgram'].includes(item.field)) {
118 item.default = scope.row[item.field] || [];
119 } else {
120 item.default = scope.row[item.field] || '';
121 }
118 }); 122 });
119 dialogInfo.value.visible = true; 123 dialogInfo.value.visible = true;
120 }, 124 },
...@@ -126,7 +130,11 @@ const tableInfo = ref({ ...@@ -126,7 +130,11 @@ const tableInfo = ref({
126 label: "上传", value: "upload", click: (scope) => { 130 label: "上传", value: "upload", click: (scope) => {
127 tableTempValue.value = scope.row; 131 tableTempValue.value = scope.row;
128 formItems.value.forEach((item) => { 132 formItems.value.forEach((item) => {
129 item.default = scope.row[item.field] || []; 133 if (['complianceEvaluateReport', 'complianceLegalOpinion', 'entryComplianceProgram'].includes(item.field)) {
134 item.default = scope.row[item.field] || [];
135 } else {
136 item.default = scope.row[item.field] || '';
137 }
130 }); 138 });
131 dialogInfo.value.visible = true; 139 dialogInfo.value.visible = true;
132 }, 140 },
...@@ -168,6 +176,25 @@ const formItems = ref([ ...@@ -168,6 +176,25 @@ const formItems = ref([
168 limit: 1, 176 limit: 1,
169 }, 177 },
170 { 178 {
179 label: '出具机构',
180 type: 'input',
181 placeholder: '请输入',
182 field: 'reportIssuingInstitution',
183 default: '',
184 required: false,
185 visible: true
186 },
187 {
188 label: '出具日期',
189 type: 'date',
190 placeholder: '请选择',
191 field: 'reportIssuingTime',
192 default: "",
193 unlink: true,
194 clearable: true,
195 required: false
196 },
197 {
171 label: '合规法律意见书', 198 label: '合规法律意见书',
172 tip: '支持格式:pdf,单个文件不能超过10MB ', 199 tip: '支持格式:pdf,单个文件不能超过10MB ',
173 type: 'upload-file', 200 type: 'upload-file',
...@@ -181,6 +208,25 @@ const formItems = ref([ ...@@ -181,6 +208,25 @@ const formItems = ref([
181 limit: 1, 208 limit: 1,
182 }, 209 },
183 { 210 {
211 label: '出具机构',
212 type: 'input',
213 placeholder: '请输入',
214 field: 'opinionIssuingInstitution',
215 default: '',
216 required: false,
217 visible: true
218 },
219 {
220 label: '出具日期',
221 type: 'date',
222 placeholder: '请选择',
223 field: 'opinionIssuingTime',
224 default: "",
225 unlink: true,
226 clearable: true,
227 required: false
228 },
229 {
184 label: '入表合规方案', 230 label: '入表合规方案',
185 tip: '支持格式:pdf,单个文件不能超过10MB ', 231 tip: '支持格式:pdf,单个文件不能超过10MB ',
186 type: 'upload-file', 232 type: 'upload-file',
...@@ -193,6 +239,25 @@ const formItems = ref([ ...@@ -193,6 +239,25 @@ const formItems = ref([
193 default: [], 239 default: [],
194 limit: 1, 240 limit: 1,
195 }, 241 },
242 {
243 label: '出具机构',
244 type: 'input',
245 placeholder: '请输入',
246 field: 'planIssuingInstitution',
247 default: '',
248 required: false,
249 visible: true
250 },
251 {
252 label: '出具日期',
253 type: 'date',
254 placeholder: '请选择',
255 field: 'planIssuingTime',
256 default: "",
257 unlink: true,
258 clearable: true,
259 required: false
260 },
196 ]); 261 ]);
197 262
198 const formRules = ref({ 263 const formRules = ref({
...@@ -230,7 +295,6 @@ const tableTempValue = ref<any>(''); ...@@ -230,7 +295,6 @@ const tableTempValue = ref<any>('');
230 const dialogBtnClick = (btn, info) => { 295 const dialogBtnClick = (btn, info) => {
231 console.log('currTableData', info); 296 console.log('currTableData', info);
232 if (btn.value == 'submit') { 297 if (btn.value == 'submit') {
233 tableInfo.value.loading = true;
234 let params: any = { 298 let params: any = {
235 damGuid: tableTempValue.value.guid, 299 damGuid: tableTempValue.value.guid,
236 complianceEvaluateReport: info.complianceEvaluateReport?.map(file => { 300 complianceEvaluateReport: info.complianceEvaluateReport?.map(file => {
...@@ -239,19 +303,56 @@ const dialogBtnClick = (btn, info) => { ...@@ -239,19 +303,56 @@ const dialogBtnClick = (btn, info) => {
239 url: file.url 303 url: file.url
240 } 304 }
241 }) || [], 305 }) || [],
306 reportIssuingInstitution: info.reportIssuingInstitution,
307 reportIssuingTime: info.reportIssuingTime,
242 complianceLegalOpinion: info.complianceLegalOpinion?.map(file => { 308 complianceLegalOpinion: info.complianceLegalOpinion?.map(file => {
243 return { 309 return {
244 name: file.name, 310 name: file.name,
245 url: file.url 311 url: file.url
246 } 312 }
247 }) || [], 313 }) || [],
314 opinionIssuingInstitution: info.opinionIssuingInstitution,
315 opinionIssuingTime: info.opinionIssuingTime,
248 entryComplianceProgram: info.entryComplianceProgram?.map(file => { 316 entryComplianceProgram: info.entryComplianceProgram?.map(file => {
249 return { 317 return {
250 name: file.name, 318 name: file.name,
251 url: file.url 319 url: file.url
252 } 320 }
253 }) || [], 321 }) || [],
322 planIssuingInstitution: info.planIssuingInstitution,
323 planIssuingTime: info.planIssuingTime
324 }
325 if (params.complianceEvaluateReport?.length) {
326 if (!params.reportIssuingInstitution) {
327 ElMessage.error('请输入合规评估报告的出具机构');
328 return;
329 }
330 if (!params.reportIssuingTime) {
331 ElMessage.error('请输入合规评估报告的出具日期');
332 return;
333 }
334 }
335 if (params.complianceLegalOpinion?.length) {
336 if (!params.opinionIssuingInstitution) {
337 ElMessage.error('请输入合规法律意见书的出具机构');
338 return;
339 }
340 if (!params.opinionIssuingTime) {
341 ElMessage.error('请输入合规法律意见书的出具日期');
342 return;
343 }
254 } 344 }
345 if (params.entryComplianceProgram?.length) {
346 if (!params.planIssuingInstitution) {
347 ElMessage.error('请输入入表合规方案的出具机构');
348 return;
349 }
350 if (!params.planIssuingTime) {
351 ElMessage.error('请输入入表合规方案的出具日期');
352 return;
353 }
354 }
355 tableInfo.value.loading = true;
255 updateComplianceInfo(params).then((res: any) => { 356 updateComplianceInfo(params).then((res: any) => {
256 tableInfo.value.loading = false; 357 tableInfo.value.loading = false;
257 if (res?.code == proxy.$passCode) { 358 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!