38bfb485 by lihua

数据资产登记专区

1 parent 58792e93
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
30 "crypto-js": "^4.2.0", 30 "crypto-js": "^4.2.0",
31 "dayjs": "^1.11.7", 31 "dayjs": "^1.11.7",
32 "echarts": "^5.4.3", 32 "echarts": "^5.4.3",
33 "element-plus": "^2.5.2", 33 "element-plus": "^2.9.0",
34 "eruda": "^3.0.0", 34 "eruda": "^3.0.0",
35 "file-saver": "^2.0.5", 35 "file-saver": "^2.0.5",
36 "hotkeys-js": "^3.10.2", 36 "hotkeys-js": "^3.10.2",
......
...@@ -51,8 +51,8 @@ dependencies: ...@@ -51,8 +51,8 @@ dependencies:
51 specifier: ^5.4.3 51 specifier: ^5.4.3
52 version: 5.5.1 52 version: 5.5.1
53 element-plus: 53 element-plus:
54 specifier: ^2.5.2 54 specifier: ^2.9.0
55 version: 2.8.8(vue@3.5.13) 55 version: 2.9.0(vue@3.5.13)
56 eruda: 56 eruda:
57 specifier: ^3.0.0 57 specifier: ^3.0.0
58 version: 3.4.1 58 version: 3.4.1
...@@ -4015,8 +4015,8 @@ packages: ...@@ -4015,8 +4015,8 @@ packages:
4015 resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==} 4015 resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==}
4016 dev: true 4016 dev: true
4017 4017
4018 /element-plus@2.8.8(vue@3.5.13): 4018 /element-plus@2.9.0(vue@3.5.13):
4019 resolution: {integrity: sha512-MLAH1x2PGTnOT7Iwqh9ASgfZhvgqQqrdbxuJH0w2fGjzE4ZjryyLQj24HXoQO7Zon66U3lrYxbdLI57M6OX0qw==} 4019 resolution: {integrity: sha512-ccOFXKsauo2dtokAr4OX7gZsb7TuAoVxA2zGRZo5o2yyDDBLBaZxOoFQPoxITSLcHbBfQuNDGK5Iag5hnyKkZA==}
4020 peerDependencies: 4020 peerDependencies:
4021 vue: ^3.2.0 4021 vue: ^3.2.0
4022 dependencies: 4022 dependencies:
......
...@@ -2,14 +2,14 @@ import request from "@/utils/request"; ...@@ -2,14 +2,14 @@ import request from "@/utils/request";
2 2
3 /** 获取登记列表。 */ 3 /** 获取登记列表。 */
4 export const getRegisterList = (params) => request({ 4 export const getRegisterList = (params) => request({
5 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/page-list`, 5 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/page-list`,
6 method: 'post', 6 method: 'post',
7 data: params 7 data: params
8 }) 8 })
9 9
10 /** 获取登记详情 */ 10 /** 获取登记详情 */
11 export const getRegiaterDetail = (params) => request({ 11 export const getRegiaterDetail = (params) => request({
12 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/detail`, 12 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/detail`,
13 method: 'get', 13 method: 'get',
14 params 14 params
15 }) 15 })
...@@ -30,9 +30,8 @@ export const registerUpdate = (params) => request({ ...@@ -30,9 +30,8 @@ export const registerUpdate = (params) => request({
30 30
31 /** 删除登记信息 */ 31 /** 删除登记信息 */
32 export const registerDelete = (params) => request({ 32 export const registerDelete = (params) => request({
33 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/delete`, 33 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/delete?guid=${params}`,
34 method: 'delete', 34 method: 'delete'
35 data: params
36 }); 35 });
37 36
38 /** 获取当前会员审批流程信息 */ 37 /** 获取当前会员审批流程信息 */
...@@ -433,7 +432,7 @@ export const updateDissentState = (params) => request({ ...@@ -433,7 +432,7 @@ export const updateDissentState = (params) => request({
433 432
434 // 获取数交所数据 433 // 获取数交所数据
435 export const getExchangeList = (params) => request({ 434 export const getExchangeList = (params) => request({
436 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-num`, 435 url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/register-num`,
437 method: 'post', 436 method: 'post',
438 data: params 437 data: params
439 }) 438 })
......
1 import request from "@/utils/request";
2
3 /** 获取登记详情 */
4 export const getRegiaterDetail = (params) => request({
5 url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/detail`,
6 method: 'get',
7 params
8 })
9
10 /** 提交登记信息。 */
11 export const registerSave = (params) => request({
12 url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/save`,
13 method: 'post',
14 data: params
15 });
16
17 /** 更新登记信息 */
18 export const registerUpdate = (params) => request({
19 url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/update`,
20 method: 'post',
21 data: params
22 });
23
24 /** 删除登记信息 */
25 export const registerDelete = (params) => request({
26 url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/delete`,
27 method: 'delete',
28 data: params
29 });
...\ No newline at end of file ...\ No newline at end of file
...@@ -310,3 +310,10 @@ export const exportTemplate = (params) => request({ ...@@ -310,3 +310,10 @@ export const exportTemplate = (params) => request({
310 method: 'post', 310 method: 'post',
311 responseType: 'blob' 311 responseType: 'blob'
312 }); 312 });
313
314 /** 获取字典列表数据 */
315 export const getParamsList = (params) => request({
316 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType`,
317 method: 'get',
318 params
319 })
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -816,7 +816,9 @@ const panelChange = (scope, row) => { ...@@ -816,7 +816,9 @@ const panelChange = (scope, row) => {
816 </span> 816 </span>
817 <el-select v-if="child.type == 'select'" v-model="formInline[child.field]" 817 <el-select v-if="child.type == 'select'" v-model="formInline[child.field]"
818 :placeholder="child.placeholder" :disabled="child.disabled || readonly" :filterable="child.filterable" 818 :placeholder="child.placeholder" :disabled="child.disabled || readonly" :filterable="child.filterable"
819 :teleported="child.teleported || true"> 819 :multiple="child.multiple ?? false"
820 :collapse-tags="child.collapse ?? false" :collapse-tags-tooltip="child.tagsTooltip ?? false"
821 :max-collapse-tags="child.maxTags ?? 1" :teleported="child.teleported || true">
820 <el-option v-for="opts in child.options" 822 <el-option v-for="opts in child.options"
821 :label="child.props?.label ? opts[child.props.label] : opts.label" 823 :label="child.props?.label ? opts[child.props.label] : opts.label"
822 :value="child.props?.value ? opts[child.props.value] : opts.value" :disabled="opts.disabled" /> 824 :value="child.props?.value ? opts[child.props.value] : opts.value" :disabled="opts.disabled" />
...@@ -1515,11 +1517,14 @@ const panelChange = (scope, row) => { ...@@ -1515,11 +1517,14 @@ const panelChange = (scope, row) => {
1515 :disabled="btn.disabled" :style="btn.style ?? {}" @click="btnClick(btn, null)">{{ btn.label }}</el-button> 1517 :disabled="btn.disabled" :style="btn.style ?? {}" @click="btnClick(btn, null)">{{ btn.label }}</el-button>
1516 </template> 1518 </template>
1517 </template> 1519 </template>
1520 <el-input-tag :class="[item.col, { is_block: item.block }]" v-else-if="item.type == 'inputTag'"
1521 v-model.trim="formInline[item.field]" :placeholder="item.placeholder" draggable
1522 :clearable="item.clearable" :maxlength="item.maxlength ?? ''" :disabled="item.disabled"
1523 :readonly="item.autocompleteSetting?.readonly || item.readonly" />
1518 <el-input :class="[item.col, { is_block: item.block }]" v-else-if="item.type == 'password'" 1524 <el-input :class="[item.col, { is_block: item.block }]" v-else-if="item.type == 'password'"
1519 v-model.trim="formInline[item.field]" type="password" :placeholder="item.placeholder" 1525 v-model.trim="formInline[item.field]" type="password" :placeholder="item.placeholder"
1520 :clearable="item.clearable" :maxlength="item.maxlength ?? ''" show-password :disabled="item.disabled" 1526 :clearable="item.clearable" :maxlength="item.maxlength ?? ''" show-password :disabled="item.disabled"
1521 :autocomplete="item.autocompleteSetting?.autocomplete || item.autocomplete 1527 :autocomplete="item.autocompleteSetting?.autocomplete || item.autocomplete" :readonly="item.autocompleteSetting?.readonly || item.readonly" @click="handlerIptClick(item)" />
1522 " :readonly="item.autocompleteSetting?.readonly || item.readonly" @click="handlerIptClick(item)" />
1523 <div class="input_def" v-else> 1528 <div class="input_def" v-else>
1524 <span v-if="item.beforeMsg" style="color: #212121;">{{ item.beforeMsg }}</span> 1529 <span v-if="item.beforeMsg" style="color: #212121;">{{ item.beforeMsg }}</span>
1525 <el-input :class="[item.col, { is_block: item.block }]" v-model.trim="formInline[item.field]" :style="item.width ? { width: item.width } : null" 1530 <el-input :class="[item.col, { is_block: item.block }]" v-model.trim="formInline[item.field]" :style="item.width ? { width: item.width } : null"
......
...@@ -426,6 +426,9 @@ onMounted(() => { ...@@ -426,6 +426,9 @@ onMounted(() => {
426 " @input="inputKeyUp(editForm[item.field].regexp, scope, editForm[item.field])" 426 " @input="inputKeyUp(editForm[item.field].regexp, scope, editForm[item.field])"
427 @change="(val) => inputChange(val, scope, item)" 427 @change="(val) => inputChange(val, scope, item)"
428 @focus="(event) => inputFocus(event, scope, editForm[item.field])"></el-input> 428 @focus="(event) => inputFocus(event, scope, editForm[item.field])"></el-input>
429 <el-date-picker v-else-if="editForm[item.field] && editForm[item.field].type == 'date'" v-model="scope.row[item.field]" :placeholder="editForm[item.field].placeholder"
430 :clearable="editForm[item.field].clearable" type="date"
431 format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
429 <template v-else-if="editForm[item.field] && editForm[item.field].type == 'defaultValue'"> 432 <template v-else-if="editForm[item.field] && editForm[item.field].type == 'defaultValue'">
430 <el-date-picker v-if="scope.row[item.dataTypeName] === 'date'" v-model="scope.row[item.field]" type="date" 433 <el-date-picker v-if="scope.row[item.dataTypeName] === 'date'" v-model="scope.row[item.field]" type="date"
431 format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="editForm[item.field].placeholder" /> 434 format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="editForm[item.field].placeholder" />
......
...@@ -23,6 +23,23 @@ const routes: RouteRecordRaw[] = [ ...@@ -23,6 +23,23 @@ const routes: RouteRecordRaw[] = [
23 }, 23 },
24 }, 24 },
25 { 25 {
26 path: 'register-start-js',
27 name: 'registerStartJS',
28 component: () => import('@/views/data_asset/registerStartJS.vue'),
29 meta: {
30 title: '新建资产登记',
31 sidebar: false,
32 breadcrumb: false,
33 cache: true,
34 editPage: true,
35 reuse: true
36 },
37 beforeEnter: (to, from) => {
38 to.meta.title = to.query.type == 'create' ? '新建资产登记' : `编辑-${to.query.name}`;
39 to.meta.editPage = true;
40 }
41 },
42 {
26 path: 'register-start', 43 path: 'register-start',
27 name: 'registerStart', 44 name: 'registerStart',
28 component: () => import('@/views/data_asset/registerStart.vue'), 45 component: () => import('@/views/data_asset/registerStart.vue'),
...@@ -50,6 +67,18 @@ const routes: RouteRecordRaw[] = [ ...@@ -50,6 +67,18 @@ const routes: RouteRecordRaw[] = [
50 cache: true, 67 cache: true,
51 reuse: true 68 reuse: true
52 }, 69 },
70 },
71 {
72 path: 'register-JQZQ-detail',
73 name: 'registerInfoJSZQDetail',
74 component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
75 meta: {
76 title: '详情-',
77 sidebar: false,
78 breadcrumb: false,
79 cache: true,
80 reuse: true
81 },
53 } 82 }
54 ], 83 ],
55 }, 84 },
...@@ -85,6 +114,18 @@ const routes: RouteRecordRaw[] = [ ...@@ -85,6 +114,18 @@ const routes: RouteRecordRaw[] = [
85 } 114 }
86 }, 115 },
87 { 116 {
117 path: 'register-JSZQ-detail',
118 name: 'registerJSZQDetail',
119 component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
120 meta: {
121 title: '详情-',
122 sidebar: false,
123 breadcrumb: false,
124 cache: true,
125 reuse: true
126 }
127 },
128 {
88 path: 'register-catalog-detail', 129 path: 'register-catalog-detail',
89 name: 'evaCatalogDetail', 130 name: 'evaCatalogDetail',
90 component: () => import('@/views/data_asset/registerCatalogDetail.vue'), 131 component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
...@@ -129,6 +170,18 @@ const routes: RouteRecordRaw[] = [ ...@@ -129,6 +170,18 @@ const routes: RouteRecordRaw[] = [
129 reuse: true 170 reuse: true
130 } 171 }
131 }, 172 },
173 {
174 path: 'register-value-JSZQ-detail',
175 name: 'registerValueJSZQDetail',
176 component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
177 meta: {
178 title: '详情-',
179 sidebar: false,
180 breadcrumb: false,
181 cache: true,
182 reuse: true
183 }
184 },
132 { 185 {
133 path: 'register-catalog-detail', 186 path: 'register-catalog-detail',
134 name: 'costAssessDetail', 187 name: 'costAssessDetail',
...@@ -174,6 +227,18 @@ const routes: RouteRecordRaw[] = [ ...@@ -174,6 +227,18 @@ const routes: RouteRecordRaw[] = [
174 reuse: true 227 reuse: true
175 } 228 }
176 }, 229 },
230 {
231 path: 'register-certi-JSZQ-detail',
232 name: 'certificateJSZQDetail',
233 component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
234 meta: {
235 title: '详情-',
236 sidebar: false,
237 breadcrumb: false,
238 cache: true,
239 reuse: true
240 }
241 },
177 { 242 {
178 path: 'register-catalog-detail', 243 path: 'register-catalog-detail',
179 name: 'certiCatalogDetail', 244 name: 'certiCatalogDetail',
......
...@@ -261,7 +261,10 @@ const tableBtnClick = (scope, btn) => { ...@@ -261,7 +261,10 @@ const tableBtnClick = (scope, btn) => {
261 }); 261 });
262 } else if (type === 'path_detail') { // 详情 262 } else if (type === 'path_detail') { // 详情
263 if (row.registerGuid) { 263 if (row.registerGuid) {
264 router.push({ 264 row.dataSource == '1' ? router.push({
265 name: 'certificateJSZQDetail',
266 query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
267 }) : router.push({
265 name: 'certificateDetail', 268 name: 'certificateDetail',
266 query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid } 269 query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
267 }); 270 });
...@@ -291,6 +294,7 @@ const formItems = ref([{ ...@@ -291,6 +294,7 @@ const formItems = ref([{
291 label: 'daName', 294 label: 'daName',
292 value: 'damGuid' 295 value: 'damGuid'
293 }, 296 },
297 filterable: true,
294 disabled: false, 298 disabled: false,
295 clearable: true, 299 clearable: true,
296 required: true, 300 required: true,
......
...@@ -399,7 +399,10 @@ const tableBtnClick = (scope, btn) => { ...@@ -399,7 +399,10 @@ const tableBtnClick = (scope, btn) => {
399 }); 399 });
400 } else if (type === 'detail') { // 详情 400 } else if (type === 'detail') { // 详情
401 if (row.registerApproveState == 'Y') { 401 if (row.registerApproveState == 'Y') {
402 router.push({ 402 row.dataSource == '1' ? router.push({
403 name: 'registerJSZQDetail',
404 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
405 }) : router.push({
403 name: 'registerDetail', 406 name: 'registerDetail',
404 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName } 407 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
405 }); 408 });
...@@ -468,6 +471,7 @@ const formItems = ref([{ ...@@ -468,6 +471,7 @@ const formItems = ref([{
468 value: 'guid', 471 value: 'guid',
469 label: 'damName' 472 label: 'damName'
470 }, 473 },
474 filterable: true,
471 visible: true, 475 visible: true,
472 required: true 476 required: true
473 }, { 477 }, {
...@@ -482,6 +486,7 @@ const formItems = ref([{ ...@@ -482,6 +486,7 @@ const formItems = ref([{
482 value: 'guid', 486 value: 'guid',
483 label: 'tenantName' 487 label: 'tenantName'
484 }, 488 },
489 filterable: true,
485 visible: false, 490 visible: false,
486 required: true 491 required: true
487 }, { 492 }, {
......
...@@ -120,7 +120,10 @@ const registerDetailTableInfo = ref({ ...@@ -120,7 +120,10 @@ const registerDetailTableInfo = ref({
120 }); 120 });
121 } else if (row.type == 'qualityEvaluate') { 121 } else if (row.type == 'qualityEvaluate') {
122 if (row.registerApproveState == 'Y') { 122 if (row.registerApproveState == 'Y') {
123 router.push({ 123 row.dataSource == '1' ? router.push({
124 name: 'registerJSZQDetail',
125 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
126 }) : router.push({
124 name: 'registerDetail', 127 name: 'registerDetail',
125 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName } 128 query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
126 }); 129 });
...@@ -132,7 +135,10 @@ const registerDetailTableInfo = ref({ ...@@ -132,7 +135,10 @@ const registerDetailTableInfo = ref({
132 } 135 }
133 } else if (row.type == 'costAssess') { 136 } else if (row.type == 'costAssess') {
134 if (row.registerApproveState == 'Y') { 137 if (row.registerApproveState == 'Y') {
135 router.push({ 138 row.dataSource == '1' ? router.push({
139 name: 'registerValueJSZQDetail',
140 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
141 }) : router.push({
136 name: 'registerValueDetail', 142 name: 'registerValueDetail',
137 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName } 143 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
138 }); 144 });
......
This diff could not be displayed because it is too large.
...@@ -44,7 +44,7 @@ const searchItemList = ref([ ...@@ -44,7 +44,7 @@ const searchItemList = ref([
44 { 44 {
45 type: "input", 45 type: "input",
46 label: "", 46 label: "",
47 field: "daName", 47 field: "damName",
48 default: "", 48 default: "",
49 placeholder: "资产名称", 49 placeholder: "资产名称",
50 clearable: true, 50 clearable: true,
...@@ -91,7 +91,7 @@ const pageInfo = ref({ ...@@ -91,7 +91,7 @@ const pageInfo = ref({
91 { label: "150", value: 150 }, 91 { label: "150", value: 150 },
92 { label: "200", value: 200 }, 92 { label: "200", value: 200 },
93 ], 93 ],
94 daName: '', 94 damName: '',
95 approveState: '', 95 approveState: '',
96 tenantGuid: '', 96 tenantGuid: '',
97 }); 97 });
...@@ -108,9 +108,9 @@ const handleApprovalDialogCancel = (reSubmit) => { ...@@ -108,9 +108,9 @@ const handleApprovalDialogCancel = (reSubmit) => {
108 } 108 }
109 109
110 const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "center" }, 110 const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "center" },
111 { label: "资产名称", field: "daName", width: 160, align: "left" }, 111 { label: "资产名称", field: "damName", width: 160, align: "left" },
112 { label: "数据分类", field: "dataCategoryName", width: 120, align: "left" }, 112 { label: "数据分类", field: "dataTypeName", width: 120, align: "left" },
113 { label: "存储方式", field: "storageFormName", width: 120, align: "left" }, 113 { label: "更新频率", field: "updateFrequencyName", width: 120, align: "left" },
114 { label: "数交所名称", field: "exchangeName", width: 160, align: "left" }, 114 { label: "数交所名称", field: "exchangeName", width: 160, align: "left" },
115 { 115 {
116 label: "审批状态", field: "approveState", type: "tag", width: 96, align: 'center', getName: (scope) => { 116 label: "审批状态", field: "approveState", type: "tag", width: 96, align: 'center', getName: (scope) => {
...@@ -227,10 +227,17 @@ const currTableData: any = ref({}); ...@@ -227,10 +227,17 @@ const currTableData: any = ref({});
227 const btnClick = (btn) => { 227 const btnClick = (btn) => {
228 const type = btn.value; 228 const type = btn.value;
229 if (type == 'create') { 229 if (type == 'create') {
230 router.push({ 230 if (btn.exchangeName.includes('数交所(勿删)') || btn.exchangeName.includes('江苏省数据交易所')) {
231 name: 'registerStart', 231 router.push({
232 query: { exchangeGuid: btn.exchangeGuid, type } 232 name: 'registerStartJS',
233 }); 233 query: { exchangeGuid: btn.exchangeGuid, type }
234 });
235 } else {
236 router.push({
237 name: 'registerStart',
238 query: { exchangeGuid: btn.exchangeGuid, type }
239 });
240 }
234 } else if (type == 'search') { 241 } else if (type == 'search') {
235 exchangGuid.value = btn.exchangeGuid; 242 exchangGuid.value = btn.exchangeGuid;
236 pageInfo.value.curr = 1; 243 pageInfo.value.curr = 1;
...@@ -244,10 +251,17 @@ const tableBtnClick = (scope, btn) => { ...@@ -244,10 +251,17 @@ const tableBtnClick = (scope, btn) => {
244 const row = scope.row; 251 const row = scope.row;
245 currTableData.value = row; 252 currTableData.value = row;
246 if (type === "edit") { //草稿中\已驳回\已撤销\已通过 状态,才可以编辑。 253 if (type === "edit") { //草稿中\已驳回\已撤销\已通过 状态,才可以编辑。
247 router.push({ 254 if (row.dataSource == '1') {
248 name: 'registerStart', 255 router.push({
249 query: { guid: row.guid, exchangeGuid: row.exchangeGuid, name: row.daName, tenantGuid: row.tenantGuid, type } 256 name: 'registerStartJS',
250 }); 257 query: { guid: row.bizGuid, exchangeGuid: row.exchangeGuid, name: row.damName, tenantGuid: row.tenantGuid, type }
258 });
259 } else {
260 router.push({
261 name: 'registerStart',
262 query: { guid: row.guid, exchangeGuid: row.exchangeGuid, name: row.damName, tenantGuid: row.tenantGuid, type }
263 });
264 }
251 } else if (type == "delete") { 265 } else if (type == "delete") {
252 delTableOpen("此操作将永久删除该资产登记,是否继续?", "warning"); 266 delTableOpen("此操作将永久删除该资产登记,是否继续?", "warning");
253 } else if (type === 'revoke') { // 撤销,状态为审批中时可以撤销。 267 } else if (type === 'revoke') { // 撤销,状态为审批中时可以撤销。
...@@ -284,10 +298,17 @@ const tableBtnClick = (scope, btn) => { ...@@ -284,10 +298,17 @@ const tableBtnClick = (scope, btn) => {
284 }); 298 });
285 }); 299 });
286 } else if (type === 'detail') { // 详情, 若是草稿中,详情就是编辑, 300 } else if (type === 'detail') { // 详情, 若是草稿中,详情就是编辑,
287 router.push({ 301 if (row.dataSource == '1') {
288 name: 'registerInfoDetail', 302 router.push({
289 query: { guid: row.guid, name: row.daName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' } 303 name: 'registerInfoJSZQDetail',
290 }); 304 query: { guid: row.guid, name: row.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
305 });
306 } else {
307 router.push({
308 name: 'registerInfoDetail',
309 query: { guid: row.guid, name: row.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
310 });
311 }
291 } else if (type === 'pass') { 312 } else if (type === 'pass') {
292 passDialogInfo.value.visible = true; 313 passDialogInfo.value.visible = true;
293 } else if (type == 'reject') { 314 } else if (type == 'reject') {
...@@ -302,7 +323,7 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => { ...@@ -302,7 +323,7 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => {
302 type: type, 323 type: type,
303 }).then(() => { 324 }).then(() => {
304 let guids: any = []; 325 let guids: any = [];
305 guids = [currTableData.value.guid] 326 guids = currTableData.value.guid;
306 loading.value = true; 327 loading.value = true;
307 registerDelete(guids).then((res: any) => { 328 registerDelete(guids).then((res: any) => {
308 loading.value = false; 329 loading.value = false;
...@@ -336,7 +357,7 @@ const getTableData = () => { ...@@ -336,7 +357,7 @@ const getTableData = () => {
336 getRegisterList({ 357 getRegisterList({
337 pageSize: pageInfo.value.limit, 358 pageSize: pageInfo.value.limit,
338 pageIndex: pageInfo.value.curr, 359 pageIndex: pageInfo.value.curr,
339 daName: pageInfo.value.daName, 360 damName: pageInfo.value.damName,
340 approveState: pageInfo.value.approveState, 361 approveState: pageInfo.value.approveState,
341 tenantGuid: pageInfo.value.tenantGuid, 362 tenantGuid: pageInfo.value.tenantGuid,
342 exchangGuid: exchangGuid.value, 363 exchangGuid: exchangGuid.value,
...@@ -376,12 +397,12 @@ const toSearch = (val: any, clear: boolean = false) => { ...@@ -376,12 +397,12 @@ const toSearch = (val: any, clear: boolean = false) => {
376 pageInfo.value.curr = 1; 397 pageInfo.value.curr = 1;
377 if (clear) { 398 if (clear) {
378 searchItemList.value.map((item) => item.default = ""); 399 searchItemList.value.map((item) => item.default = "");
379 pageInfo.value.daName = ''; 400 pageInfo.value.damName = '';
380 pageInfo.value.approveState = ""; 401 pageInfo.value.approveState = "";
381 pageInfo.value.tenantGuid = ""; 402 pageInfo.value.tenantGuid = "";
382 val && (exchangGuid.value = ''); 403 val && (exchangGuid.value = '');
383 } else { 404 } else {
384 pageInfo.value.daName = val.daName; 405 pageInfo.value.damName = val.damName;
385 pageInfo.value.approveState = val.approveState; 406 pageInfo.value.approveState = val.approveState;
386 pageInfo.value.tenantGuid = val.tenantGuid; 407 pageInfo.value.tenantGuid = val.tenantGuid;
387 } 408 }
...@@ -585,7 +606,7 @@ const rejectDialogBtnClick = (btn, info) => { ...@@ -585,7 +606,7 @@ const rejectDialogBtnClick = (btn, info) => {
585 <Dialog :dialogInfo="passDialogInfo" @btnClick="passDialogBtnClick" /> 606 <Dialog :dialogInfo="passDialogInfo" @btnClick="passDialogBtnClick" />
586 <Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" /> 607 <Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" />
587 <DialogApproval :visible="approvalDialogVisible" :currentRowInfo="systemApproveCurrentRowInfo" 608 <DialogApproval :visible="approvalDialogVisible" :currentRowInfo="systemApproveCurrentRowInfo"
588 @dialog-cancel="handleApprovalDialogCancel"></DialogApproval> 609 @dialog-cancel="handleApprovalDialogCancel"></DialogApproval>
589 </div> 610 </div>
590 </template> 611 </template>
591 612
......
1 <route lang="yaml">
2 name: registerStartJS
3 </route>
4
5 <script lang="ts" setup name="registerStartJS">
6 import { ref } from 'vue';
7 import { CirclePlus } from "@element-plus/icons-vue";
8 import { useValidator } from '@/hooks/useValidator';
9 import { TableColumnWidth } from '@/utils/enum';
10 import { scrollLastRowToView } from '@/utils/common';
11 import {
12 getAreaData,
13 getParamsList,
14 } from "@/api/modules/queryService";
15 import {
16 getDiseaseAll
17 } from '@/api/modules/dataPricing';
18 import {
19 registerSave,
20 registerUpdate,
21 getRegiaterDetail
22 } from '@/api/modules/dataAssetZq'
23 import useUserStore from "@/store/modules/user";
24 import { getCamundaDeploymentId } from "@/api/modules/workFlowService"
25 import useDataAssetStore from "@/store/modules/dataAsset";
26
27 const assetStore = useDataAssetStore();
28 const userStore = useUserStore();
29 const userData = JSON.parse(userStore.userData)
30 const { proxy } = getCurrentInstance() as any;
31 const { required } = useValidator();
32 const router = useRouter();
33 const route = useRoute();
34 const restart = ref(false);
35 const fullPath = route.fullPath;
36 const guid = route.query.guid;
37 const exGuid = route.query.exchangeGuid;
38
39 /** 全页面加载图标 */
40 const fullscreenLoading = ref(false);
41
42 /** 字典的Map,key为属性值 */
43 const dictListMap = ref({});
44
45 /** 所属疾病的下拉列表 */
46 const diseaseListData: any = ref([]);
47
48 /** 产品应用方向字典列表 */
49 const productDirectionListData: any = ref([]);
50
51 const formRef = ref();
52
53 /** 数据产品信息的表单配置 */
54 const productBaseInfoItems = ref([{
55 type: "input",
56 label: "产品名称",
57 field: "productName",
58 default: "",
59 maxlength: 50,
60 placeholder: "请输入",
61 required: true,
62 clearable: true
63 }, {
64 label: '产品编码',
65 type: 'input',
66 placeholder: '自动生成',
67 field: 'productCode',
68 default: '',
69 disabled: true,
70 required: false,
71 visible: true
72 }, {
73 label: '产品类型',
74 type: 'select',
75 placeholder: '请选择',
76 field: 'productType',
77 default: '',
78 options: dictListMap.value['productType'] || [],
79 props: {
80 value: 'value',
81 label: 'label'
82 },
83 required: true,
84 filterable: true,
85 visible: true
86 }, {
87 label: "是否需要信息主体授权",
88 type: "radio-group",
89 placeholder: "",
90 field: "authLevel",
91 default: "Y",
92 options: [
93 {
94 label: "是",
95 value: 'Y',
96 },
97 {
98 label: "否",
99 value: 'N',
100 },
101 ],
102 required: true,
103 }, {
104 label: "更新频率",
105 type: "select",
106 placeholder: "请选择",
107 field: "updateFrequency",
108 default: '',
109 props: {
110 value: 'value',
111 label: 'label'
112 },
113 multiple: false,
114 options: dictListMap.value['updateFrequency'] || [],
115 filterable: true,
116 required: true,
117 clearable: true,
118 }, {
119 type: "input",
120 label: "产品发布机构",
121 field: "productPublisherName",
122 default: userData.tenantName,
123 required: true,
124 placeholder: "请输入",
125 disabled: true,
126 clearable: true
127 }, {
128 label: '领域',
129 type: 'select',
130 placeholder: '请选择',
131 field: 'domain',
132 default: '003',
133 options: dictListMap.value['domain'] || [],
134 props: {
135 value: 'value',
136 label: 'label',
137 children: 'children'
138 },
139 required: true,
140 filterable: true,
141 visible: true
142 }, {
143 label: '应用场景',
144 type: 'select',
145 placeholder: '请选择',
146 field: 'scenario',
147 default: '',
148 options: [], // 根据所选择领域显示列表
149 props: {
150 value: 'value',
151 label: 'label'
152 },
153 required: true,
154 filterable: true,
155 visible: true
156 }, {
157 label: '所属科室',
158 type: 'tree-select',
159 placeholder: '请选择',
160 field: 'medDepartmentCode',
161 default: '',
162 options: dictListMap.value['medDepartmentCode'] || [],
163 showAllLevels: false,
164 checkStrictly: false,//只能选择叶子节点。
165 lazy: false,
166 props: {
167 value: 'value',
168 label: 'label',
169 children: 'childDictList'
170 },
171 filterable: true,
172 clearable: true,
173 visible: true,
174 required: true
175 }, {
176 label: '所属疾病',
177 type: 'tree-select',
178 placeholder: '请选择',
179 field: 'diseaseGuid',
180 options: diseaseListData.value,
181 props: {
182 value: 'guid',
183 label: 'diseaseName',
184 children: 'childList'
185 },
186 showAllLevels: false,
187 checkStrictly: false,//只能选择叶子节点。
188 lazy: false,
189 filterable: true,
190 clearable: true,
191 default: '',
192 visible: true,
193 required: true
194 }, {
195 label: '数据规模(条)',
196 type: 'input',
197 placeholder: '请输入',
198 field: 'dataScale',
199 maxlength: 19,
200 regexp: /\D/g,
201 default: '',
202 visible: true,
203 required: true
204 }, {
205 label: '病例总数(例)',
206 type: 'input',
207 placeholder: '请输入',
208 field: 'caseNumber',
209 maxlength: 19,
210 regexp: /\D/g,
211 default: '',
212 visible: true,
213 required: true
214 }, {
215 label: '所属主题',
216 type: 'tree-select',
217 placeholder: '请选择',
218 field: 'subjectDomain',
219 options: dictListMap.value['subjectDomain'],
220 showAllLevels: false,
221 checkStrictly: false,//只能选择叶子节点。
222 lazy: false,
223 props: {
224 label: "label",
225 value: "value",
226 children: 'childDictList'
227 },
228 filterable: true,
229 clearable: true,
230 default: '',
231 visible: false,
232 required: true
233 }, {
234 label: "数据来源",
235 type: "select",
236 placeholder: "",
237 field: "dataSources",
238 block: false,
239 default: '1',
240 options: dictListMap.value['dataSources'] || [],
241 filterable: true,
242 clearable: true,
243 required: true,
244 }, {
245 label: '数据覆盖范围',
246 type: 'checkbox-select',
247 placeholder: '全国',
248 field: 'dataCoverages',
249 default: "",
250 trueValue: '1',
251 falseValue: '',
252 isRequire: true,
253 children: [
254 {
255 label: '',
256 type: "select",
257 placeholder: "请选择",
258 field: "dataCoverage",
259 default: [],
260 options: dictListMap.value['dataCoverage'] || [],
261 multiple: true,
262 collapse: true,
263 tagsTooltip: true,
264 filterable: true,
265 clearable: true,
266 required: true,
267 col: 'checkbox-right',
268 visible: true
269 }
270 ],
271 clearable: false,
272 required: true,
273 col: 'checkbox-cascader'
274 }, {
275 label: '产品应用方向',
276 type: 'select',
277 placeholder: '请选择',
278 field: 'productDirection',
279 options: productDirectionListData.value,
280 props: {
281 value: 'value',
282 label: 'label'
283 },
284 filterable: true,
285 clearable: true,
286 default: '',
287 visible: true,
288 required: true
289 }, {
290 type: "input",
291 label: "版本名称",
292 field: "versionName",
293 default: "",
294 maxlength: 50,
295 placeholder: "请输入",
296 required: true,
297 clearable: true
298 }, {
299 type: "inputTag",
300 label: "产品关键词",
301 field: 'productKeywords',
302 default: [],
303 maxlength: 200,
304 placeholder: "请输入关键词,按回车键确认",
305 required: true,
306 clearable: true,
307 block: true
308 }, {
309 label: '产品描述',
310 placeholder: '该输入对该产品的描述信息',
311 field: 'productDesc',
312 type: 'textarea',
313 default: '',
314 maxlength: 250,
315 block: true,
316 clearable: true,
317 required: true,
318 }]);
319
320 /** 数据产品信息的表单配置校验规则 */
321 const productBaseInfoFormRules = ref({
322 productName: [required('请输入产品名称')],
323 productType: [required('请选择产品类型')],
324 updateFrequency: [required('请选择更新频率')],
325 productpublisher: [required('产品发布机构不能为空')],
326 domain: [required('请选择领域')],
327 scenario: [required('请选择应用场景')],
328 medDepartmentCode: [required('请选择所属科室')],
329 diseaseGuid: [required('请选择所属疾病')],
330 caseNumber: [required('请输入病例总数')],
331 subjectDomain: [required('请选择所属主题')],
332 dataSources: [required('请选择数据来源')],
333 dataScale: [required('请输入数据规模')],
334 dataCoverage: [required('请选择数据覆盖范围')],
335 productDirection: [required('请选择产品应用方向')],
336 versionName: [required('请输入版本名称')],
337 productKeywords: [required('请输入产品关键词')],
338 productDesc: [required('请输入产品描述')]
339 });
340
341 const setProductBaseFormItems = (formValue) => {
342 formValue = Object.assign({ authLevel: 'Y', productpublisher: userData.tenantName, domain: '003', dataSources: '1' }, formValue);
343 productBaseInfoItems.value.forEach(item => {
344 item.default = formValue[item.field];
345 if (item.children?.length) {
346 item.children[0].default = formValue[item.children[0].field] || [];
347 }
348 if (item.field == 'scenario') {
349 item.options = dictListMap.value['domain'].find(s => s.value == formValue['domain'])?.childDictList || []
350 } else if (item.field == 'medDepartmentCode' || item.field == 'diseaseGuid' || item.field == 'dataScale' || item.field == 'caseNumber') {
351 item.visible = formValue['domain'] == '003';
352 } else if (item.field == 'subjectDomain') {
353 item.visible = formValue['domain'] == '004';
354 } else if (item.field == 'dataCoverages') {
355 item && item.children?.length && (item.children[0].visible = formValue['dataCoverages'] != '1');
356 }
357 });
358 }
359
360 const handleProductBaseFormSelectChange = (val, row, info) => {
361 if (row.field == 'domain') {
362 info.scenario = ''; //清空下应用场景
363 setProductBaseFormItems(info);
364 }
365 }
366
367 /** checkbox 全国修改之后 */
368 const handleProductBaseFormCheckboxChange = (val, info, row) => {
369 row.field == 'dataCoverages' && setProductBaseFormItems(info);
370 }
371
372 const activeTabName = ref('reqParamList');
373
374 /** ----------------- 入参相关信息 ----------------------------- */
375 const inputParamsTableRef = ref();
376 const inputParamsData: any = ref([]);
377
378 /** 参数类型字典列表 */
379 const fieldValueTypeList: any = ref([]);
380
381 /** 基本信息的入参定义表格配置 */
382 const inputParamsTableInfo = ref({
383 id: "input-params-table",
384 height: '214px',
385 fields: [
386 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
387 { label: "参数英文", field: "fieldEnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
388 { label: "参数中文", field: "fieldCnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
389 { label: "参数类型", field: "fieldValueType", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
390 { label: "是否必填", field: "fieldMandatory", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
391 { label: "参数描述", field: "fieldComment", width: 160, required: false, columClass: 'edit-colum', type: 'edit' },
392 { label: "展示层级顺序", field: "levelCode", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
393 ],
394 editInfo: {
395 fieldEnName: {
396 label: '',
397 type: 'input',
398 field: 'fieldEnName',
399 default: '',
400 maxlength: 50,
401 regexp: /[^A-Za-z0-9_]/g,
402 placeholder: '请输入',
403 clearable: true,
404 },
405 fieldCnName: {
406 label: '',
407 type: 'input',
408 field: 'fieldCnName',
409 default: '',
410 maxlength: 50,
411 placeholder: '请输入',
412 clearable: true,
413 },
414 fieldValueType: {
415 label: '',
416 type: 'select',
417 field: 'fieldValueType',
418 default: '',
419 options: fieldValueTypeList.value,
420 props: {
421 label: 'label',
422 value: 'value'
423 },
424 placeholder: '请选择',
425 clearable: false,
426 filterable: true
427 },
428 fieldMandatory: {
429 label: '',
430 type: 'select',
431 field: 'fieldMandatory',
432 default: 'Y',
433 options: [
434 {
435 label: "是",
436 value: "Y",
437 },
438 {
439 label: "否",
440 value: "N",
441 },
442 ],
443 placeholder: '请选择',
444 },
445 levelCode: {
446 label: '',
447 type: 'input',
448 field: 'levelCode',
449 default: '',
450 maxlength: 20,
451 placeholder: '请输入',
452 regexp: /\D/g,
453 clearable: true,
454 },
455 fieldComment: {
456 label: '',
457 type: 'input',
458 field: 'fieldComment',
459 default: '',
460 maxlength: 50,
461 placeholder: '请输入',
462 clearable: true,
463 }
464 },
465 STATUS: 'edit',
466 data: inputParamsData.value,
467 showPage: false,
468 actionInfo: {
469 show: true,
470 label: "操作",
471 type: "btn",
472 width: 60,
473 fixed: 'right',
474 btns: [
475 {
476 label: "删除", value: "remove", click: (scope) => {
477 let index = scope.$index;
478 proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
479 inputParamsData.value.splice(index, 1);
480 inputParamsTableInfo.value.data = inputParamsData.value;
481 proxy.$ElMessage.success('参数删除成功');
482 }, () => {
483 proxy.$ElMessage.info("已取消");
484 });
485 }
486 },
487 ]
488 },
489 loading: false
490 });
491
492 /** 给表格添加一行入参定义。 */
493 const addInputParams = () => {
494 inputParamsData.value.push({ fieldEnName: '', fieldCnName: '', fieldMandatory: 'Y', fieldValueType: '1', fieldComment: '', levelCode: '' });
495 inputParamsTableInfo.value.data = inputParamsData.value;
496 nextTick(() => {
497 scrollLastRowToView(inputParamsTableRef.value?.tableRef, inputParamsData.value.length);
498 })
499 }
500
501 /** ----------------- 出参相关信息 ------------------------- */
502 const respParamsTableRef = ref();
503 const respParamsData: any = ref([]);
504
505 /** 基本信息的入参定义表格配置 */
506 const respParamsTableInfo = ref({
507 id: "resp-params-table",
508 height: '214px',
509 fields: [
510 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
511 { label: "参数英文", field: "fieldEnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
512 { label: "参数中文", field: "fieldCnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
513 { label: "参数类型", field: "fieldValueType", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
514 { label: "是否必填", field: "fieldMandatory", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
515 { label: "参数描述", field: "fieldComment", width: 160, required: false, columClass: 'edit-colum', type: 'edit' },
516 { label: "展示层级顺序", field: "levelCode", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
517 ],
518 editInfo: {
519 fieldEnName: {
520 label: '',
521 type: 'input',
522 field: 'fieldEnName',
523 default: '',
524 maxlength: 50,
525 regexp: /[^A-Za-z0-9_]/g,
526 placeholder: '请输入',
527 clearable: true,
528 },
529 fieldCnName: {
530 label: '',
531 type: 'input',
532 field: 'fieldCnName',
533 default: '',
534 maxlength: 50,
535 placeholder: '请输入',
536 clearable: true,
537 },
538 fieldValueType: {
539 label: '',
540 type: 'select',
541 field: 'fieldValueType',
542 default: '',
543 options: fieldValueTypeList.value,
544 props: {
545 label: 'label',
546 value: 'value'
547 },
548 placeholder: '请选择',
549 clearable: false,
550 filterable: true
551 },
552 fieldMandatory: {
553 label: '',
554 type: 'select',
555 field: 'fieldMandatory',
556 default: 'Y',
557 options: [
558 {
559 label: "是",
560 value: "Y",
561 },
562 {
563 label: "否",
564 value: "N",
565 },
566 ],
567 placeholder: '请选择',
568 },
569 levelCode: {
570 label: '',
571 type: 'input',
572 field: 'levelCode',
573 default: '',
574 maxlength: 20,
575 placeholder: '请输入',
576 regexp: /\D/g,
577 clearable: true,
578 },
579 fieldComment: {
580 label: '',
581 type: 'input',
582 field: 'fieldComment',
583 default: '',
584 maxlength: 50,
585 placeholder: '请输入',
586 clearable: true,
587 }
588 },
589 STATUS: 'edit',
590 data: respParamsData.value,
591 showPage: false,
592 actionInfo: {
593 show: true,
594 label: "操作",
595 type: "btn",
596 width: 60,
597 fixed: 'right',
598 btns: [
599 {
600 label: "删除", value: "remove", click: (scope) => {
601 let index = scope.$index;
602 proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
603 respParamsData.value.splice(index, 1);
604 respParamsTableInfo.value.data = respParamsData.value;
605 proxy.$ElMessage.success('参数删除成功');
606 }, () => {
607 proxy.$ElMessage.info("已取消");
608 });
609 }
610 },
611 ]
612 },
613 loading: false
614 });
615
616 /** 给表格添加一行入参定义。 */
617 const addRespParams = () => {
618 respParamsData.value.push({ fieldEnName: '', fieldCnName: '', fieldMandatory: 'Y', fieldValueType: '1', fieldComment: '', levelCode: '' });
619 respParamsTableInfo.value.data = respParamsData.value;
620 nextTick(() => {
621 scrollLastRowToView(respParamsTableRef.value?.tableRef, respParamsData.value.length);
622 })
623 }
624
625 /** ----------------------- 数据产品登记信息 ----------------------------- */
626
627 const registerFormRef = ref();
628
629 const getParentAreaPromise: any = ref(null);
630 const getAreaDataPromise: any = ref({});
631 const getAreaDatas: any = ref({});
632 const parentAreaData: any = ref([]);
633
634 const getArea = (node, resolve) => {
635 const { level } = node
636 let params = {
637 parentGuid: node.value
638 }
639 if (!node.value) {
640 if (getParentAreaPromise.value) {
641 getParentAreaPromise.value.then((res: any) => {
642 resolve(res);
643 })
644 } else {
645 resolve(parentAreaData.value);
646 }
647 return;
648 }
649 if (node.loaded) {
650 resolve([]);
651 return;
652 }
653 if (getAreaDatas.value[node.value]?.length) {
654 resolve(getAreaDatas.value[node.value]);
655 return;
656 }
657 if (!getAreaDataPromise.value[node.value]) {
658 getAreaDataPromise.value[node.value] = getAreaData(params).then((res: any) => {
659 node.loaded = true;
660 getAreaDataPromise.value[node.value] = null;
661 if (res?.code == proxy.$passCode) {
662 const data = res.data ?? []
663 data.map(item => {
664 item.leaf = level >= 1
665 })
666 resolve(data)
667 getAreaDatas.value[node.value] = data;
668 return data;
669 }
670 })
671 } else {
672 getAreaDataPromise.value[node.value].then((data) => {
673 getAreaDataPromise.value[node.value] = null;
674 node.loaded = true;
675 data.map(item => {
676 item.leaf = level >= 1
677 })
678 resolve(data)
679 })
680 }
681 }
682
683 const productRegisterInfoItems = ref([{
684 type: "input",
685 label: "产品登记名称",
686 field: "dataRegistName",
687 default: "",
688 maxlength: 50,
689 placeholder: "数据覆盖范围-行业分类-产品名称自动生成",
690 required: true,
691 disabled: true,
692 clearable: true
693 }, {
694 label: "数据覆盖时间",
695 type: "date-picker",
696 format: 'YYYY-MM-DD',
697 valueFormat: 'YYYY-MM-DD',
698 field: "dataCoverageTimeRange",
699 default: null,
700 placeholder: "开始时间~结束时间",
701 clearable: true,
702 required: true,
703 }, {
704 label: "数据产品和服务类型",
705 type: "input-group",
706 field: "dataProductsAndServicesTypeGroup",
707 default: "",
708 children: [
709 {
710 type: "select",
711 placeholder: "请选择",
712 field: "dataProductsAndServicesType",
713 default: "",
714 col: "w50-l",
715 options: [],
716 filterable: true,
717 clearable: true,
718 required: true,
719 },
720 {
721 label: "",
722 type: "input",
723 placeholder: "请输入其他类型",
724 col: "w50 no-margin-r",
725 field: "dataProductsAndServicesOtherType",
726 default: '',
727 maxlenght: 50,
728 clearable: true,
729 visible: false,
730 required: true,
731 },
732 ],
733 clearable: true,
734 required: true,
735 }, {
736 label: '行业分类',
737 type: 'select',
738 placeholder: '请选择',
739 field: 'industry',
740 default: '',
741 options: dictListMap.value['industry'] || [],
742 props: {
743 value: 'value',
744 label: 'label'
745 },
746 required: true,
747 filterable: true,
748 visible: true
749 }, {
750 label: '行业大类',
751 type: 'select',
752 placeholder: '请选择',
753 field: 'industryBigcode',
754 default: '',
755 options: [],
756 props: {
757 value: 'value',
758 label: 'label'
759 },
760 required: true,
761 filterable: true,
762 visible: true
763 },
764 {
765 label: '数据类型',
766 type: 'select',
767 placeholder: '请选择',
768 field: 'dataType',
769 default: '',
770 options: dictListMap.value['dataType'] || [],
771 props: {
772 value: 'value',
773 label: 'label'
774 },
775 required: true,
776 filterable: true,
777 visible: true
778 },
779 {
780 label: '资源覆盖范围',
781 type: 'checkbox-select',
782 placeholder: '全国',
783 field: 'coverageArea',
784 default: "",
785 trueValue: 'all',
786 falseValue: '',
787 isRequire: true,
788 children: [
789 {
790 label: '',
791 type: "cascader",
792 placeholder: "请选择",
793 field: "coverageAreas",
794 default: [],
795 showAllLevels: true,
796 props: {
797 label: 'name',
798 value: 'guid',
799 lazy: true,
800 checkStrictly: true,
801 lazyLoad: getArea,
802 multiple: false,
803 },
804 collapse: true,
805 tagsTooltip: true,
806 // filterable: true,
807 clearable: true,
808 required: true,
809 col: 'checkbox-right',
810 visible: true
811 }
812 // {
813 // label: '',
814 // type: "select",
815 // placeholder: "请选择",
816 // field: "coverageAreas",
817 // default: '',
818 // options: parentAreaData.value,
819 // props: {
820 // label: 'name',
821 // value: 'code',
822 // },
823 // multiple: false,
824 // collapse: true,
825 // tagsTooltip: true,
826 // filterable: true,
827 // clearable: true,
828 // required: true,
829 // col: 'checkbox-right',
830 // visible: true
831 // }
832 ],
833 clearable: false,
834 required: true,
835 col: 'checkbox-cascader'
836 },
837 {
838 label: "数据生产方式",
839 type: "input-group",
840 field: "productionMethodGroup",
841 default: "",
842 children: [
843 {
844 type: "select",
845 placeholder: "请选择",
846 field: "productionMethod",
847 default: "",
848 col: "w50-l",
849 options: [],
850 required: true,
851 },
852 {
853 label: "",
854 type: "input",
855 placeholder: "请输入",
856 col: "w50 no-margin-r",
857 field: "productionOtherMethod",
858 default: '',
859 maxlenght: 50,
860 clearable: true,
861 visible: false,
862 required: true,
863 },
864 ],
865 clearable: true,
866 required: true,
867 },
868 {
869 label: "数据结构",
870 type: "input-group",
871 field: "dataStructureGroup",
872 default: "",
873 children: [
874 {
875 type: "select",
876 placeholder: "请选择",
877 field: "dataStructure",
878 default: "",
879 col: "w50-l",
880 options: [],
881 required: true,
882 },
883 {
884 label: "",
885 type: "input",
886 placeholder: "请输入",
887 col: "w50 no-margin-r",
888 field: "dataOtherStructure",
889 default: '',
890 maxlenght: 50,
891 clearable: true,
892 visible: false,
893 required: true,
894 },
895 ],
896 clearable: true,
897 required: true,
898 },
899 {
900 label: "数据提供格式",
901 type: "input-group",
902 field: "dataProvisionFormatGroup",
903 default: "",
904 children: [
905 {
906 type: "select",
907 placeholder: "请选择",
908 field: "dataProvisionFormat",
909 default: "",
910 col: "w50-l",
911 options: [],
912 filterable: true,
913 clearable: true,
914 required: true,
915 },
916 {
917 label: "",
918 type: "input",
919 placeholder: "请输入",
920 col: "w50 no-margin-r",
921 field: "dataProvisionOtherFormat",
922 default: '',
923 maxlenght: 50,
924 clearable: true,
925 visible: false,
926 required: true,
927 },
928 ],
929 clearable: true,
930 required: true,
931 },
932 {
933 label: "存储方式",
934 type: "input-group",
935 field: "storageMethodGroup",
936 default: "",
937 children: [
938 {
939 type: "select",
940 placeholder: "请选择",
941 field: "storageMethod",
942 default: "",
943 col: "w50-l",
944 options: [],
945 required: true,
946 },
947 {
948 label: "",
949 type: "input",
950 placeholder: "请输入",
951 col: "w50 no-margin-r",
952 field: "storageOtherMethod",
953 default: '',
954 maxlenght: 50,
955 clearable: true,
956 visible: false,
957 required: true,
958 },
959 ],
960 clearable: true,
961 required: true,
962 },
963 {
964 label: '数据更新方式',
965 type: 'select',
966 placeholder: '请选择',
967 field: 'updateMethod',
968 default: '',
969 options: [],
970 props: {
971 value: 'value',
972 label: 'label'
973 },
974 required: true,
975 filterable: true,
976 clearable: true,
977 visible: true
978 },
979 {
980 label: "数据存储量(初始)",
981 type: "input-group",
982 field: "dataStorageUnitGroup",
983 default: "",
984 children: [
985 {
986 label: "",
987 type: "input",
988 placeholder: "输入数值,两位小数",
989 col: "w50-l",
990 field: "dataStorage",
991 default: '',
992 inputType: 'moneyNumber',
993 maxlenght: 19,
994 clearable: true,
995 visible: true,
996 required: true,
997 },
998 {
999 type: "select",
1000 placeholder: "请选择",
1001 field: "dataStorageUnit",
1002 default: "",
1003 col: "w50 no-margin-r",
1004 options: [],
1005 clearable: true,
1006 filterable: true,
1007 required: true,
1008 },
1009 ],
1010 clearable: true,
1011 required: true,
1012 },
1013 {
1014 label: "数据存储量(增长)",
1015 type: "input-group",
1016 field: "dataStorageIncreaseUnitGroup",
1017 default: "",
1018 children: [
1019 {
1020 label: "",
1021 type: "input",
1022 placeholder: "输入数值,两位小数",
1023 col: "w50-l",
1024 field: "dataStorageIncrease",
1025 default: '',
1026 inputType: 'moneyNumber',
1027 maxlenght: 19,
1028 clearable: true,
1029 visible: true,
1030 required: true,
1031 },
1032 {
1033 type: "select",
1034 placeholder: "请选择",
1035 field: "dataStorageIncreaseUnit",
1036 default: "",
1037 col: "w50 no-margin-r",
1038 options: [],
1039 clearable: true,
1040 filterable: true,
1041 required: true,
1042 },
1043 ],
1044 clearable: true,
1045 required: true,
1046 },
1047 {
1048 label: "是否包含敏感信息",
1049 type: "radio-group",
1050 placeholder: "",
1051 field: "sensitiveInformation",
1052 col: 'other-group-flex',
1053 default: "Y",
1054 options: [
1055 {
1056 label: "是",
1057 value: "Y",
1058 },
1059 {
1060 label: "否",
1061 value: "N",
1062 },
1063 ],
1064 inputOptions: {
1065 label: '',
1066 col: 'other-input',
1067 width: '100%',
1068 type: "select",
1069 placeholder: "敏感信息主体",
1070 field: "sensitiveInvolvingSubject",
1071 default: '',
1072 props: {
1073 value: "value",
1074 label: "label",
1075 },
1076 options: [],
1077 filterable: true,
1078 clearable: true,
1079 visible: true,
1080 required: true,
1081 },
1082 required: true,
1083 },
1084 { // 只有是敏感时才展示
1085 label: '敏感数据覆盖数量(条)',
1086 field: 'sensitiveDataCoverageNumber',
1087 placeholder: "请输入整数",
1088 type: 'input',
1089 inputType: 'integerNumber',
1090 maxlength: 6,
1091 default: null,
1092 clearable: true,
1093 required: true,
1094 },
1095 {
1096 label: '是否脱敏',
1097 type: "radio-group",
1098 placeholder: '请选择',
1099 field: 'desensitizationSituation',
1100 default: 'Y',
1101 options: [{
1102 value: 'Y',
1103 label: '是'
1104 }, {
1105 value: 'N',
1106 label: '否'
1107 }],
1108 props: {
1109 value: 'value',
1110 label: 'label'
1111 },
1112 required: true,
1113 filterable: true,
1114 clearable: true,
1115 visible: true
1116 },
1117 {
1118 label: "脱敏方式",
1119 type: "input-group",
1120 field: "desensitizationMethodGroup",
1121 default: "",
1122 children: [
1123 {
1124 type: "select",
1125 placeholder: "请选择",
1126 field: "desensitizationMethod",
1127 default: "",
1128 col: "w50-l",
1129 options: [],
1130 filterable: true,
1131 clearable: false,
1132 required: true,
1133 },
1134 {
1135 label: "",
1136 type: "input",
1137 placeholder: "请输入其他方式",
1138 col: "w50 no-margin-r",
1139 field: "desensitizationOtherMethod",
1140 default: '',
1141 maxlenght: 50,
1142 clearable: true,
1143 visible: false,
1144 required: true,
1145 },
1146 ],
1147 clearable: true,
1148 required: true,
1149 },
1150 {
1151 label: '存证方式',
1152 type: 'select',
1153 placeholder: '请选择',
1154 field: 'depositMethod',
1155 default: '',
1156 options: [],
1157 props: {
1158 value: 'value',
1159 label: 'label'
1160 },
1161 required: true,
1162 filterable: true,
1163 clearable: true,
1164 visible: true
1165 },
1166 {
1167 type: "input",
1168 label: "禁用场景",
1169 field: "disableScene",
1170 default: "",
1171 maxlength: 50,
1172 placeholder: "请输入",
1173 required: true,
1174 clearable: true
1175 },
1176 {
1177 label: "共享类型",
1178 type: "input-group",
1179 field: "sharingTypeGroup",
1180 default: "",
1181 children: [
1182 {
1183 type: "select",
1184 placeholder: "请选择",
1185 field: "sharingType",
1186 default: "",
1187 col: "w50-l",
1188 options: [],
1189 filterable: true,
1190 clearable: true,
1191 required: true,
1192 },
1193 {
1194 label: "",
1195 type: "input",
1196 placeholder: "请输入",
1197 col: "w50 no-margin-r",
1198 field: "sharingConditions",
1199 default: '',
1200 maxlenght: 50,
1201 clearable: true,
1202 visible: false,
1203 required: true,
1204 },
1205 ],
1206 clearable: true,
1207 required: true,
1208 },
1209 {
1210 label: "共享方式",
1211 type: "input-group",
1212 field: "sharingMethodGroup",
1213 default: "",
1214 children: [
1215 {
1216 type: "select",
1217 placeholder: "请选择",
1218 field: "sharingMethod",
1219 default: "",
1220 col: "w50-l",
1221 options: [],
1222 filterable: true,
1223 clearable: false,
1224 required: true,
1225 },
1226 {
1227 label: "",
1228 type: "input",
1229 placeholder: "请输入其他方式",
1230 col: "w50 no-margin-r",
1231 field: "sharingOtherMethod",
1232 default: '',
1233 maxlenght: 50,
1234 clearable: true,
1235 visible: false,
1236 required: true,
1237 },
1238 ],
1239 clearable: true,
1240 required: true,
1241 },
1242 {
1243 label: '产品用途',
1244 type: 'select',
1245 placeholder: '请选择',
1246 field: 'productUsage',
1247 default: '',
1248 options: [],
1249 props: {
1250 value: 'value',
1251 label: 'label'
1252 },
1253 required: true,
1254 filterable: true,
1255 clearable: true,
1256 visible: true
1257 },
1258 {
1259 label: "是否向社会开放",
1260 type: "radio-group",
1261 placeholder: "",
1262 field: "isSocialOpenness",
1263 col: 'other-group-flex',
1264 default: "Y",
1265 options: [
1266 {
1267 label: "是",
1268 value: "Y",
1269 },
1270 {
1271 label: "否",
1272 value: "N",
1273 },
1274 ],
1275 inputOptions: {
1276 label: '',
1277 col: 'other-input',
1278 width: '100%',
1279 type: "input",
1280 placeholder: "请输入开放条件",
1281 field: "opennessConditions",
1282 default: '',
1283 clearable: true,
1284 visible: true,
1285 required: true,
1286 },
1287 required: true,
1288 },
1289 {
1290 label: "是否基于被授权资源开发",
1291 type: "radio-group",
1292 placeholder: "",
1293 field: "isAuthreSourceDevelop",
1294 default: 'N',
1295 options: [{
1296 value: 'Y',
1297 label: '是',
1298 }, {
1299 value: 'N',
1300 label: '否',
1301 }],
1302 required: true,
1303 },
1304 {
1305 label: "是否共有数据",
1306 type: "radio-group",
1307 placeholder: "",
1308 field: "isSharedData",
1309 default: 'N',
1310 options: [{
1311 value: 'Y',
1312 label: '是',
1313 }, {
1314 value: 'N',
1315 label: '否',
1316 }],
1317 required: true,
1318 },
1319 ]);
1320
1321 const productRegisterInfoFormRules = ref({
1322 // dataRegistName: [required('产品登记名称不能为空')],
1323 dataCoverageTimeRange: [{
1324 type: 'array', required: true, message: '请选择数据覆盖时间', trigger: 'change',
1325 }],
1326 industry: [required('请选择行业分类')],
1327 industryBigcode: [required('请选择行业大类')],
1328 dataType: [required('请选择数据类型')],
1329 coverageAreas: [required('请选择资源覆盖地域')],
1330 dataProductsAndServicesType: [required('请选择数据产品和服务类型')],
1331 dataProductsAndServicesOtherType: [required('请输入其他类型')],
1332 productionMethod: [required('请选择数据生产方式')],
1333 productionOtherMethod: [required('请输入其他生产方式')],
1334 dataStructure: [required('请选择数据结构')],
1335 dataOtherStructure: [required('请输入其他数据结构')],
1336 dataProvisionFormat: [required('请选择数据提供格式')],
1337 dataProvisionOtherFormat: [required('请输入其他格式')],
1338 storageMethod: [required('请选择存储方式')],
1339 storageOtherMethod: [required('请输入其他存储方式')],
1340 updateMethod: [required('请选择数据更新方式')],
1341 dataStorage: [required('请输入数据存储量(初始)')],
1342 dataStorageUnit: [required('请选择单位')],
1343 dataStorageIncrease: [required('请输入数据存储量(增长)')],
1344 dataStorageIncreaseUnit: [required('请选择单位')],
1345 sensitiveInformation: [required('请选择是否包含敏感信息')],
1346 sensitiveInvolvingSubject: [required('请选择敏感信息主体')],
1347 sensitiveDataCoverageNumber: [required('请输入敏感数据覆盖数量')],
1348 desensitizationSituation: [required('请选择是否脱敏')],
1349 desensitizationMethod: [required('请选择脱敏方式')],
1350 desensitizationOtherMethod: [required('请输入其他脱敏方式')],
1351 depositMethod: [required('请选择存证方式')],
1352 disableScene: [required('请输入禁用场景')],
1353 sharingType: [required('请选择共享类型')],
1354 sharingConditions: [required('请输入共享条件')],
1355 sharingMethod: [required('请选择共享方式')],
1356 sharingOtherMethod: [required('请输入其他共享方式')],
1357 opennessConditions: [required('请输入开放条件')],
1358 productUsage: [required('请选择产品用途')],
1359
1360 });
1361
1362 const setRegisterFormItems = (formValue, isEdit = false) => {
1363 formValue = Object.assign({ desensitizationSituation: 'Y', sensitiveInformation: 'Y', isAuthreSourceDevelop: 'N', isSharedData: 'N' }, formValue);
1364 productRegisterInfoItems.value.forEach((item, index) => {
1365 item.default = formValue[item.field];
1366 if (item.children?.length) {
1367 item.children.forEach(child => {
1368 child.default = formValue[child.field];
1369 })
1370 }
1371 if (item.field == 'dataProductsAndServicesTypeGroup') {
1372 item.children && (item.children[1].visible = item.children[0].default == '6');
1373 } else if (item.field == 'productionMethodGroup') {
1374 item.children && (item.children[1].visible = item.children[0].default == '8');
1375 } else if (item.field == 'dataStructureGroup') {
1376 item.children && (item.children[1].visible = item.children[0].default == '4');
1377 } else if (item.field == 'dataProvisionFormatGroup') {
1378 item.children && (item.children[1].visible = item.children[0].default == '5');
1379 } else if (item.field == 'storageMethodGroup') {
1380 item.children && (item.children[1].visible = item.children[0].default == '7');
1381 } else if (item.field == 'sharingMethodGroup') {
1382 // item.visible = formValue.sharingType == '1' || formValue.sharingType == '2'
1383 item.children && (item.children[1].visible = item.children[0].default == '5');
1384 } else if (item.field == 'desensitizationMethodGroup') { //脱敏方式,现实条件,脱敏为是
1385 item.visible = formValue['desensitizationSituation'] == 'Y';
1386 item.children && (item.children[1].visible = item.children[0].default == '7');
1387 } else if (item.field == 'sharingTypeGroup') {
1388 item.children && (item.children[1].visible = item.children[0].default == '2');
1389 productRegisterInfoItems.value[index + 1].visible = formValue['sharingType'] != '3';
1390 } else if (item.field == 'industryBigcode') {// 带出行业大类列表
1391 item.options = !formValue['industry'] ? [] : (dictListMap.value['industry'].find(v => v.value == formValue['industry']).childDictList || []);
1392 } else if (item.field == 'coverageArea') {
1393 item && item.children?.length && (item.children[0].visible = formValue['coverageArea'] != 'all');
1394 let coverageArea = formValue.coverageArea;
1395 if (coverageArea && Array.isArray(coverageArea) && coverageArea.length > 0) {
1396 if (coverageArea[0][0] == 'all') {
1397 item.default = 'all';
1398 if (item.children?.length) {
1399 item.children[0].visible = false;
1400 item.children[0].default = [];
1401 }
1402 } else {
1403 item.default = '';
1404 if (item.children?.length) {
1405 item.children[0].visible = true;
1406 item.children[0].default = coverageArea[0] as any;
1407 let p: any = [];
1408 coverageArea?.forEach(area => {
1409 if (p.includes(area[0])) {
1410 return;
1411 }
1412 p.push(area[0]);
1413 getArea({ value: area[0], level: 1 }, () => { })
1414 });
1415 let ps: any = []
1416 for (const key in getAreaDataPromise.value) {
1417 ps.push(getAreaDataPromise.value[key])
1418 }
1419 Promise.all(ps).then(() => {
1420 item.children[0].default = coverageArea[0];
1421 });
1422 }
1423 }
1424 } else {
1425 item.default = '';
1426 }
1427 } else if (item.field == 'sensitiveInformation') {
1428 item.inputOptions && (item.inputOptions.default = formValue[item.inputOptions.field]);
1429 item.inputOptions && (item.inputOptions.visible = item.default == 'Y');
1430 productRegisterInfoItems.value[index + 1].visible = item.default == 'Y';// 敏感数据覆盖量
1431 productRegisterInfoItems.value[index + 2].visible = item.default == 'Y';// 是否脱敏
1432 productRegisterInfoItems.value[index + 3].visible = item.default == 'Y' && formValue['desensitizationSituation'] == 'Y';// 脱敏方式
1433 } else if (item.field == 'isSocialOpenness') { //是否向社会开放,否需要填写开放条件
1434 item.inputOptions && (item.inputOptions.default = formValue[item.inputOptions.field]);
1435 item.inputOptions && (item.inputOptions.visible = item.default == 'Y');
1436 }
1437 });
1438 }
1439
1440 const handleRegisterFormSelectChange = (val, row, info) => {
1441 if (row.field == 'dataProductsAndServicesType' || row.field == 'productionMethod' || row.field == 'dataStructure' ||
1442 row.field == 'dataProvisionFormat' || row.field == 'storageMethod' || row.field == 'desensitizationMethod' || row.field == 'sharingType'
1443 || row.field == 'sharingMethod') {
1444 setRegisterFormItems(info);
1445 } else if (row.field == 'industry') {
1446 info.industryBigcode = '';
1447 setRegisterFormItems(info);
1448 // if (val) {
1449 // //判断自动生成产品登记名称
1450 // let formInline = formRef.value.formInline;
1451 // let dataCoverages = formInline.dataCoverages;
1452 // let cov = dataCoverages == '1' ? '全国' : (!formInline.formInline ? 'XX' : dictListMap.value['dataCoverage'].find(f => f.value == formInline.dataCoverage).label);
1453 // productRegisterInfoItems.value[0].default = cov + '-' + (val || 'XX') + '-' + (formInline.productName || 'XX')
1454 // }
1455 }
1456 }
1457
1458 const handleRegisterFormCheckboxChange = (val, info, row) => {
1459 row.field == 'coverageArea' && setRegisterFormItems(info);
1460 }
1461
1462 const handleRegisterRadioGroupChange = (val, info, row) => {
1463 row.field == 'sensitiveInformation' && setRegisterFormItems(info);
1464 row.field == 'desensitizationSituation' && setRegisterFormItems(info);
1465 row.field == 'isSocialOpenness' && setRegisterFormItems(info);
1466 if (row.field == 'isAuthreSourceDevelop') {
1467 if (val == 'N' && registerFormRef.value?.formInline.isSharedData == 'Y' && activeShareTabName.value == 'authSource') {
1468 activeShareTabName.value = 'shareOrgs';
1469 } else if (val == 'Y' && activeShareTabName.value == 'shareOrgs' && registerFormRef.value?.formInline.isSharedData == 'N') {
1470 activeShareTabName.value = 'authSource';
1471 }
1472 } else if (row.field == 'isSharedData') {
1473 if (val == 'N' && registerFormRef.value?.formInline.isAuthreSourceDevelop == 'Y' && activeShareTabName.value == 'shareOrgs') {
1474 activeShareTabName.value = 'authSource';
1475 } else if (val == 'Y' && activeShareTabName.value == 'authSource' && registerFormRef.value?.formInline.isAuthreSourceDevelop == 'N') {
1476 activeShareTabName.value = 'shareOrgs';
1477 }
1478 }
1479 }
1480
1481 const activeShareTabName = ref('authSource');
1482
1483 /** ----------------- 被授权资源相关信息 ------------------------- */
1484 const authSourceTableRef = ref();
1485 const authSourceData: any = ref([]);
1486
1487 /** 被授权资源信息的表格配置 */
1488 const authSourceTableInfo = ref({
1489 id: "auth-table",
1490 height: '214px',
1491 fields: [
1492 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
1493 { label: "授权运营时间起", field: "authOperatTimeStart", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
1494 { label: "授权运营时间止", field: "authOperatTimeEnd", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
1495 { label: "数据资源登记确认单编码", field: "dataRegistCode", width: 200, required: true, columClass: 'edit-colum', type: 'edit' },
1496 { label: "数据资源登记名称", field: "dataRegistName", width: 160, required: true, columClass: 'edit-colum', type: 'edit' },
1497 ],
1498 editInfo: {
1499 dataRegistCode: {
1500 label: '',
1501 type: 'input',
1502 field: 'dataRegistCode',
1503 default: '',
1504 maxlength: 50,
1505 placeholder: '请输入',
1506 clearable: true,
1507 },
1508 dataRegistName: {
1509 label: '',
1510 type: 'input',
1511 field: 'dataRegistName',
1512 default: '',
1513 maxlength: 50,
1514 placeholder: '请输入',
1515 clearable: true,
1516 },
1517 authOperatTimeStart: {
1518 label: '',
1519 type: 'date',
1520 field: 'authOperatTimeStart',
1521 default: '',
1522 placeholder: '请选择',
1523 clearable: true,
1524 },
1525 authOperatTimeEnd: {
1526 label: '',
1527 type: 'date',
1528 field: 'authOperatTimeEnd',
1529 default: '',
1530 placeholder: '请选择',
1531 clearable: true,
1532 },
1533 },
1534 STATUS: 'edit',
1535 data: authSourceData.value,
1536 showPage: false,
1537 actionInfo: {
1538 show: true,
1539 label: "操作",
1540 type: "btn",
1541 width: 60,
1542 fixed: 'right',
1543 btns: [
1544 {
1545 label: "删除", value: "remove", click: (scope) => {
1546 let index = scope.$index;
1547 proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
1548 authSourceData.value.splice(index, 1);
1549 authSourceTableInfo.value.data = authSourceData.value;
1550 proxy.$ElMessage.success('被授权资源删除成功');
1551 }, () => {
1552 proxy.$ElMessage.info("已取消");
1553 });
1554 }
1555 },
1556 ]
1557 },
1558 loading: false
1559 });
1560
1561 /** 给表格添加一行入参定义。 */
1562 const addAuthSources = () => {
1563 authSourceData.value.push({ authOperatTimeStart: '', authOperatTimeEnd: '', dataRegistCode: '', dataRegistName: '' });
1564 authSourceTableInfo.value.data = authSourceData.value;
1565 nextTick(() => {
1566 scrollLastRowToView(authSourceTableRef.value?.tableRef, authSourceData.value.length);
1567 })
1568 }
1569
1570 /** ------------------- 共有组织机构表格信息 --------------- */
1571 const orgTableRef = ref();
1572 const orgData: any = ref([]);
1573 /** 组织机构性质 */
1574 const sharedInstitutiontTypeList: any = ref([]);
1575 /** 被授权资源信息的表格配置 */
1576 const orgTableInfo = ref({
1577 id: "org-table",
1578 height: '214px',
1579 fields: [
1580 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
1581 { label: "共有组织统一社会信用代码", field: "sharedInstitutionCode", width: 220, required: true, columClass: 'edit-colum', type: 'edit' },
1582 { label: "共有组织机构名称", field: "sharedInstitutionName", width: 160, required: true, columClass: 'edit-colum', type: 'edit' },
1583 { label: "组织机构性质", field: "sharedInstitutiontType", width: 130, required: true, columClass: 'edit-colum', type: 'edit' },
1584 { label: "注册地址", field: "sharedInstitutionAdress", width: 170, required: false, columClass: 'edit-colum', type: 'edit' },
1585 ],
1586 editInfo: {
1587 sharedInstitutionCode: {
1588 label: '',
1589 type: 'input',
1590 field: 'sharedInstitutionCode',
1591 default: '',
1592 maxlength: 50,
1593 placeholder: '请输入',
1594 clearable: true,
1595 },
1596 sharedInstitutionName: {
1597 label: '',
1598 type: 'input',
1599 field: 'sharedInstitutionName',
1600 default: '',
1601 maxlength: 50,
1602 placeholder: '请输入',
1603 clearable: true,
1604 },
1605 sharedInstitutiontType: {
1606 label: '',
1607 type: 'select',
1608 field: 'sharedInstitutiontType',
1609 default: '',
1610 options: sharedInstitutiontTypeList.value,
1611 props: {
1612 label: 'label',
1613 value: 'value'
1614 },
1615 placeholder: '请选择',
1616 clearable: true,
1617 filterable: true
1618 },
1619 sharedInstitutionAdress: {
1620 label: '',
1621 type: 'input',
1622 field: 'sharedInstitutionAdress',
1623 default: '',
1624 maxlength: 100,
1625 placeholder: '请输入',
1626 clearable: true,
1627 },
1628 },
1629 STATUS: 'edit',
1630 data: orgData.value,
1631 showPage: false,
1632 actionInfo: {
1633 show: true,
1634 label: "操作",
1635 type: "btn",
1636 width: 60,
1637 fixed: 'right',
1638 btns: [
1639 {
1640 label: "删除", value: "remove", click: (scope) => {
1641 let index = scope.$index;
1642 proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
1643 orgData.value.splice(index, 1);
1644 orgTableInfo.value.data = orgData.value;
1645 proxy.$ElMessage.success('被授权资源删除成功');
1646 }, () => {
1647 proxy.$ElMessage.info("已取消");
1648 });
1649 }
1650 },
1651 ]
1652 },
1653 loading: false
1654 });
1655
1656 /** 给表格添加一行入参定义。 */
1657 const addOrgs = () => {
1658 orgData.value.push({ sharedInstitutionCode: '', sharedInstitutionName: '', sharedInstitutiontType: '', sharedInstitutionAdress: '' });
1659 orgTableInfo.value.data = orgData.value;
1660 nextTick(() => {
1661 scrollLastRowToView(orgTableRef.value?.tableRef, orgData.value.length);
1662 })
1663 }
1664
1665 /** --------------------- 产品附件信息 ------------- */
1666 const uploadFormRef = ref();
1667 const uploadFormItems: any = ref([]);
1668 /** 上传文件类型的字典列表 */
1669 const uploadFileList: any = ref([]);
1670 const uploadFormRules: any = ref({});
1671
1672 /** 获取产品基本信息的字典列表并设置 */
1673 const getDictListDataByKey = (key, dictType) => {
1674 getParamsList({ dictType: dictType }).then((res: any) => {
1675 if (res?.code == proxy.$passCode) {
1676 dictListMap.value[key] = res.data || [];
1677 let item = productBaseInfoItems.value.find(i => i.field == key);
1678 item && (item.options = dictListMap.value[key]);
1679 } else {
1680 proxy.$ElMessage.error(res.msg);
1681 }
1682 })
1683 }
1684
1685 /** 获取产品登记信息的字典列表并设置 */
1686 const getRegisterDictDataByKey = (key, dictType, isChild = false) => {
1687 return getParamsList({ dictType: dictType }).then((res: any) => {
1688 if (res?.code == proxy.$passCode) {
1689 dictListMap.value[key] = res.data || [];
1690 let item = productRegisterInfoItems.value.find(i => !isChild ? i.field == key : i.field == `${key}Group`);
1691 if (isChild) {
1692 let childItem: any = item && item.children?.length && item.children.find(c => c.field == key);
1693 if (childItem && childItem.field == 'productionMethod') {
1694 childItem.options = dictListMap.value['productionMethod'].filter(d => ['1', '2', '3', '5', '8'].includes(d.value));
1695 } else {
1696 childItem && (childItem.options = dictListMap.value[key]);
1697 }
1698 } else {
1699 item && (item.options = dictListMap.value[key]);
1700 }
1701 return;
1702 } else {
1703 proxy.$ElMessage.error(res.msg);
1704 }
1705 })
1706 }
1707
1708 const deploymentId = ref('');
1709
1710 const baseInfoExpand = ref(true);
1711 const paramsInfoExpand = ref(true);
1712 const registerInfoExpand = ref(true);
1713 const authInfoExpand = ref(true);
1714 const uploadInfoExpand = ref(true);
1715 /** 获取详情信息接口 */
1716 const detailInfo: any = ref({});
1717
1718 onBeforeMount(async () => {
1719 if (guid) {
1720 fullscreenLoading.value = true;
1721 }
1722 getDictListDataByKey('productType', '资产类型');
1723 getDictListDataByKey('updateFrequency', '更新周期');
1724 getDictListDataByKey('medDepartmentCode', '科室');
1725 getParamsList({ dictType: '数据资产目录主题名称' }).then((res: any) => {
1726 if (res?.code == proxy.$passCode) {
1727 let key = 'subjectDomain';
1728 dictListMap.value[key] = res.data || [];
1729 let item = productBaseInfoItems.value.find(i => i.field == key);
1730 item && (item.options = dictListMap.value[key]?.find(d => d.value == '1')?.childDictList || []);
1731 } else {
1732 proxy.$ElMessage.error(res.msg);
1733 }
1734 })
1735 getDictListDataByKey('dataSources', '数据来源');
1736 getDiseaseAll().then((res: any) => {
1737 if (res?.code == proxy.$passCode) {
1738 let key = 'diseaseGuid';
1739 dictListMap.value[key] = res.data || [];
1740 let item = productBaseInfoItems.value.find(i => i.field == key);
1741 item && (item.options = dictListMap.value[key]);
1742 }
1743 })
1744 getParamsList({ dictType: '数据覆盖范围' }).then((res: any) => {
1745 if (res?.code == proxy.$passCode) {
1746 let key = 'dataCoverage';
1747 dictListMap.value[key] = res.data || [];
1748 let item = productBaseInfoItems.value.find(i => i.field == 'dataCoverages');
1749 item && item.children?.[0] && (item.children[0].options = dictListMap.value[key]?.slice(1) || []);
1750 } else {
1751 proxy.$ElMessage.error(res.msg);
1752 }
1753 })
1754 getDictListDataByKey('productDirection', '产品应用方向');
1755 getParamsList({ dictType: '参数类型' }).then((res: any) => {
1756 if (res?.code == proxy.$passCode) {
1757 fieldValueTypeList.value = res.data || [];
1758 inputParamsTableInfo.value.editInfo.fieldValueType.options = fieldValueTypeList.value;
1759 respParamsTableInfo.value.editInfo.fieldValueType.options = fieldValueTypeList.value;
1760 } else {
1761 proxy.$ElMessage.error(res.msg);
1762 }
1763 })
1764 getRegisterDictDataByKey('dataProductsAndServicesType', '数据产品和服务类型', true);
1765 getRegisterDictDataByKey('dataType', '数据分类', false);
1766 getParentAreaPromise.value = getAreaData({ parentId: null }).then((res: any) => {
1767 if (res?.code == proxy.$passCode) {
1768 parentAreaData.value = res.data ?? [];
1769 return parentAreaData.value;
1770 }
1771 })
1772 // getAreaData({ parentId: null }).then((res: any) => {
1773 // if (res?.code == proxy.$passCode) {
1774 // parentAreaData.value = res.data ?? [];
1775 // let item = productRegisterInfoItems.value.find(i => i.field == 'coverageArea');
1776 // item && item.children?.length && (item.children[0].options = parentAreaData.value);
1777 // } else {
1778 // proxy.$ElMessage.error(res.msg);
1779 // }
1780 // });
1781 getRegisterDictDataByKey('productionMethod', '数据取得方式', true);
1782 getRegisterDictDataByKey('dataStructure', '数据结构', true);
1783 getRegisterDictDataByKey('dataProvisionFormat', '数据提供格式', true);
1784 getRegisterDictDataByKey('storageMethod', '数据存储方式', true);
1785 getRegisterDictDataByKey('updateMethod', '数据更新方式', false);
1786 getRegisterDictDataByKey('dataStorageUnit', '数据存储量单位', true).then(() => {
1787 let item = productRegisterInfoItems.value.find(i => i.field == 'dataStorageIncreaseUnitGroup');
1788 item && item.children?.length && (item.children[1].options = dictListMap.value['dataStorageUnit']);
1789 });
1790 getParamsList({ dictType: '敏感信息主体' }).then((res: any) => {
1791 if (res?.code == proxy.$passCode) {
1792 let key = 'sensitiveInvolvingSubject';
1793 dictListMap.value[key] = res.data || [];
1794 let item = productRegisterInfoItems.value.find(i => i.field == 'sensitiveInformation');
1795 item?.inputOptions && (item.inputOptions.options = dictListMap.value[key]);
1796 return;
1797 } else {
1798 proxy.$ElMessage.error(res.msg);
1799 }
1800 });
1801 getRegisterDictDataByKey('desensitizationMethod', '脱敏方式', true);
1802 getRegisterDictDataByKey('depositMethod', '存证方式', false);
1803 getRegisterDictDataByKey('sharingType', '共享类型', true);
1804 getRegisterDictDataByKey('sharingMethod', '共享方式', true);
1805 getRegisterDictDataByKey('productUsage', '产品用途', false);
1806 getCamundaDeploymentId('10030', userData.tenantGuid, userData.staffGuid).then((res: any) => {
1807 if (res?.code == proxy.$passCode) {
1808 deploymentId.value = res.data;
1809 } else {
1810 proxy.$ElMessage.error(res.msg);
1811 }
1812 })
1813 getParamsList({ dictType: '组织机构性质' }).then((res: any) => {
1814 if (res?.code == proxy.$passCode) {
1815 sharedInstitutiontTypeList.value = res.data || [];
1816 orgTableInfo.value.editInfo.sharedInstitutiontType.options = sharedInstitutiontTypeList.value;
1817 } else {
1818 proxy.$ElMessage.error(res.msg);
1819 }
1820 });
1821 const res: any = await getParamsList({ dictType: '领域' });
1822 if (res?.code == proxy.$passCode) {
1823 let key = 'domain';
1824 dictListMap.value[key] = res.data || [];
1825 let itemIndex = productBaseInfoItems.value.findIndex(i => i.field == key);
1826 let item = productBaseInfoItems.value[itemIndex];
1827 item && (item.options = dictListMap.value[key]);
1828 let item1 = productBaseInfoItems.value[itemIndex + 1];
1829 item1 && item.default && (item1.options = dictListMap.value[key].find(s => s.value == item.default)?.childDictList || []);
1830 } else {
1831 proxy.$ElMessage.error(res.msg);
1832 }
1833 let ps1 = getRegisterDictDataByKey('industry', '行业分类', false);
1834 let ps2 = getParamsList({ dictType: '文件类型' }).then((res: any) => {
1835 if (res?.code == proxy.$passCode) {
1836 let data = uploadFileList.value = res.data || [];
1837 uploadFormRules.value = {};
1838 uploadFormItems.value = data.map(d => {
1839 // uploadFormRules.value[`files-${d.value}`] = [{
1840 // validator: (rule: any, value: any, callback: any) => {
1841 // if (!value?.length) {
1842 // callback(new Error('请上传文件'))
1843 // } else {
1844 // callback();
1845 // }
1846 // }, trigger: 'change'
1847 // }];
1848 return {
1849 label: d.label,
1850 tip: '支持扩展名:pdf、png、jpg、gif、rar、zip,单个文件不得大于10M',
1851 type: 'upload-file',
1852 accept: '.pdf, .png, .jpg, .gif, .rar, .zip',
1853 required: false,
1854 limitSize: 10,
1855 default: [],
1856 field: `files-${d.value}`,
1857 }
1858 })
1859 } else {
1860 proxy.$ElMessage.error(res.msg);
1861 }
1862 })
1863 if (guid) {
1864 fullscreenLoading.value = true;
1865 Promise.all([ps1, ps2]).then(() => {
1866 getRegiaterDetail({ guid: guid }).then((res: any) => {
1867 fullscreenLoading.value = false;
1868 if (res?.code == proxy.$passCode) {
1869 detailInfo.value = res.data || {};
1870 detailInfo.value.dataSources = (detailInfo.value.dataSources || '') + '';
1871 detailInfo.value.productKeywords = !detailInfo.value.productKeywords ? [] : detailInfo.value.productKeywords.split(',');
1872 let dataCoverage = detailInfo.value.dataCoverage;
1873 if (dataCoverage.length == 1 && dataCoverage[0] == '1') {
1874 detailInfo.value.dataCoverages = '1';
1875 detailInfo.value.dataCoverage = [];
1876 } else {
1877 detailInfo.value.dataCoverages = '';
1878 detailInfo.value.dataCoverage = dataCoverage;
1879 }
1880 let approveVO = detailInfo.value.approveVO;
1881 if (approveVO && (approveVO.approveState == 'C' || approveVO.approveState == 'R') && approveVO.staffGuid == userData.staffGuid && detailInfo.value.bizApproveState != 'D') {
1882 restart.value = true;
1883 }
1884 setProductBaseFormItems(detailInfo.value);
1885 let dataCoverageTimeRange: string[] = [];
1886 let dataCoverageStartTime = detailInfo.value.registerRSVO.dataCoverageStartTime;
1887 let dataCoverageEndTime = detailInfo.value.registerRSVO.dataCoverageEndTime;
1888 if (dataCoverageStartTime && dataCoverageEndTime) {
1889 dataCoverageTimeRange = [dataCoverageStartTime, dataCoverageEndTime];
1890 }
1891 setRegisterFormItems(Object.assign({}, detailInfo.value.registerRSVO || {}, {
1892 dataCoverageTimeRange: dataCoverageTimeRange
1893 }), true);
1894 inputParamsData.value = detailInfo.value.reqParamListRSVOS?.map(d => {
1895 return {
1896 fieldEnName: d.fieldEnName,
1897 fieldCnName: d.fieldCnName,
1898 fieldValueType: d.fieldValueType,
1899 fieldMandatory: d.fieldMandatory,
1900 fieldComment: d.fieldComment,
1901 levelCode: d.levelCode
1902 }
1903 }) || [];
1904 inputParamsTableInfo.value.data = inputParamsData.value;
1905 respParamsData.value = detailInfo.value.respParamListRSVOS?.map(d => {
1906 return {
1907 fieldEnName: d.fieldEnName,
1908 fieldCnName: d.fieldCnName,
1909 fieldValueType: d.fieldValueType,
1910 fieldMandatory: d.fieldMandatory,
1911 fieldComment: d.fieldComment,
1912 levelCode: d.levelCode
1913 }
1914 }) || [];
1915 respParamsTableInfo.value.data = respParamsData.value;
1916 authSourceData.value = detailInfo.value.resourcesRSVOS?.map(d => {
1917 return {
1918 authOperatTimeStart: d.authOperatTimeStart,
1919 authOperatTimeEnd: d.authOperatTimeEnd,
1920 dataRegistCode: d.dataRegistCode,
1921 dataRegistName: d.dataRegistName
1922 }
1923 }) || [];
1924 authSourceTableInfo.value.data = authSourceData.value;
1925 orgData.value = detailInfo.value.organizationRSVOS?.map(d => {
1926 return {
1927 sharedInstitutionCode: d.sharedInstitutionCode,
1928 sharedInstitutionName: d.sharedInstitutionName,
1929 sharedInstitutiontType: d.sharedInstitutiontType,
1930 sharedInstitutionAdress: d.sharedInstitutionAdress
1931 }
1932 }) || [];
1933 orgTableInfo.value.data = orgData.value;
1934 let attachmentRQVOS = detailInfo.value.attachmentRSVOS || [];
1935 uploadFormItems.value.forEach(item => {
1936 let field = item.field;
1937 let key = field.slice(6);
1938 item.default = attachmentRQVOS.filter(a => a.fileType == key).map(f => {
1939 return {
1940 name: f.fileName,
1941 url: f.fileUrl
1942 }
1943 })
1944 })
1945 } else {
1946 proxy.$ElMessage.error(res.msg);
1947 }
1948 })
1949 }).catch(() => {
1950 fullscreenLoading.value = false;
1951 })
1952 }
1953 })
1954
1955 const cancel = () => {
1956 proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => {
1957 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
1958 router.push({
1959 name: 'registerManagemant'
1960 });
1961 }, () => {
1962 proxy.$ElMessage.info("已取消");
1963 });
1964 }
1965
1966 /** 提交草稿,不需要检验 */
1967 const saveDraft = () => {
1968 let params: any = { isSubmit: false };
1969 let baseInfoValue = formRef.value.formInline;
1970 let registerInfoValue = registerFormRef.value.formInline;
1971 /** 产品登记名称,是覆盖范围-行业大类-产品名称 */
1972 let coverName = baseInfoValue.dataCoverages == '1' ? '全国' : (baseInfoValue.dataCoverage?.length && dictListMap.value['dataCoverage'].find(f => f.value == baseInfoValue.dataCoverage[0])?.label || '');
1973 let industryName = registerInfoValue.industry && dictListMap.value['industry'].find(d => d.value == registerInfoValue.industry)?.label || '';
1974 let dataRegistName = coverName + '-' + industryName + '-' + baseInfoValue.productName;
1975 let uploadValue = uploadFormRef.value.formInline;
1976 let attachmentRQVOS: any[] = [];
1977 for (const key in uploadValue) {
1978 if (!uploadValue[key]?.length) {
1979 continue;
1980 }
1981 let n = key.slice(6);
1982 uploadValue[key].forEach(uf => {
1983 attachmentRQVOS.push({
1984 fileName: uf.name,
1985 fileType: n,
1986 fileUrl: uf.url,
1987 });
1988 })
1989 }
1990 Object.assign(params, {
1991 ...baseInfoValue,
1992 dataCoverage: baseInfoValue.dataCoverages == '1' ? ['1'] : baseInfoValue.dataCoverage,
1993 productKeywords: baseInfoValue.productKeywords.join(',')
1994 }, {
1995 reqParamListRQVOS: inputParamsData.value,
1996 respParamListRQVOS: respParamsData.value,
1997 resourcesRQVOS: authSourceData.value,
1998 organizationRQVOS: orgData.value
1999 }, {
2000 registerRQVO: {
2001 ...registerInfoValue,
2002 dataRegistName: dataRegistName,
2003 dataCoverageStartTime: registerInfoValue.dataCoverageTimeRange?.[0],
2004 dataCoverageEndTime: registerInfoValue.dataCoverageTimeRange?.[1],
2005 // coverageArea: !registerInfoValue.coverageAreas ? [] : (registerInfoValue.coverageArea == 'all' ? ['all'] : [registerInfoValue.coverageAreas])
2006 },
2007 attachmentRQVOS: attachmentRQVOS,
2008 exchangeGuid: exGuid,
2009 productPublisher: userData.tenantGuid,
2010 productPublisherName: userData.tenantName
2011 });
2012 if (registerInfoValue.coverageArea == 'all') {
2013 params.registerRQVO.coverageArea = [['all']];
2014 } else if (!registerInfoValue.coverageArea) {
2015 params.registerRQVO.coverageArea = [registerInfoValue.coverageAreas];
2016 }
2017 fullscreenLoading.value = true;
2018 if (guid) {
2019 params.guid = guid;
2020 registerUpdate(params).then((res: any) => {
2021 fullscreenLoading.value = false;
2022 if (res?.code == proxy.$passCode) {
2023 proxy.$ElMessage.success('资产登记编辑保存成功');
2024 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
2025 router.push({
2026 name: 'registerManagemant',
2027 });
2028 assetStore.set(true);
2029 } else {
2030 proxy.$ElMessage.error(res.msg);
2031 }
2032 });
2033 } else {
2034 registerSave(params).then((res: any) => {
2035 fullscreenLoading.value = false;
2036 if (res?.code == proxy.$passCode) {
2037 proxy.$ElMessage.success('新建资产登记保存成功');
2038 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
2039 router.push({
2040 name: 'registerManagemant',
2041 });
2042 assetStore.set(true);
2043 } else {
2044 proxy.$ElMessage.error(res.msg);
2045 }
2046 });
2047 }
2048 }
2049
2050 /** 提交申请,需要检验。 */
2051 const save = () => {
2052 formRef.value.ruleFormRef?.validate((valid1, errorItem) => {
2053 if (valid1) {
2054 /** 先检验入参出参信息 */
2055 if (!inputParamsData.value.length) {
2056 activeTabName.value = 'reqParamList';
2057 proxy.$ElMessage.error('入参信息不能为空');
2058 return;
2059 }
2060 if (!respParamsData.value.length) {
2061 activeTabName.value = 'respParamList';
2062 proxy.$ElMessage.error('出参信息不能为空');
2063 return;
2064 }
2065 for (const d of inputParamsData.value) {
2066 if (!d.fieldEnName) {
2067 activeTabName.value = 'reqParamList';
2068 proxy.$ElMessage.error('入参信息的参数英文不能为空');
2069 return;
2070 }
2071 if (!d.fieldCnName) {
2072 activeTabName.value = 'reqParamList';
2073 proxy.$ElMessage.error('入参信息的参数中文不能为空');
2074 return;
2075 }
2076 if (!d.levelCode) {
2077 activeTabName.value = 'reqParamList';
2078 proxy.$ElMessage.error('入参信息的展示层级顺序不能为空');
2079 return;
2080 }
2081 }
2082 for (const d of respParamsData.value) {
2083 if (!d.fieldEnName) {
2084 activeTabName.value = 'respParamList';
2085 proxy.$ElMessage.error('出参信息的参数英文不能为空');
2086 return;
2087 }
2088 if (!d.fieldCnName) {
2089 activeTabName.value = 'respParamList';
2090 proxy.$ElMessage.error('出参信息的参数中文不能为空');
2091 return;
2092 }
2093 if (!d.levelCode) {
2094 activeTabName.value = 'respParamList';
2095 proxy.$ElMessage.error('出参信息的展示层级顺序不能为空');
2096 return;
2097 }
2098 }
2099 registerFormRef.value.ruleFormRef?.validate((valid2, errorItem) => {
2100 if (valid2) {
2101 let registerInfo = registerFormRef.value.formInline;
2102 if (registerInfo.isAuthreSourceDevelop == 'Y') {
2103 if (!authSourceData.value.length) {
2104 activeShareTabName.value = 'authSource';
2105 proxy.$ElMessage.error('被授权资源信息不能为空');
2106 return;
2107 }
2108 for (const d of authSourceData.value) {
2109 if (!d.authOperatTimeStart) {
2110 activeShareTabName.value = 'authSource';
2111 proxy.$ElMessage.error('授权运营时间起不能为空');
2112 return;
2113 }
2114 if (!d.authOperatTimeEnd) {
2115 activeShareTabName.value = 'authSource';
2116 proxy.$ElMessage.error('授权运营时间止不能为空');
2117 return;
2118 }
2119 if (!d.dataRegistCode) {
2120 activeShareTabName.value = 'authSource';
2121 proxy.$ElMessage.error('数据资源登记确认单编码不能为空');
2122 return;
2123 }
2124 if (!d.dataRegistName) {
2125 activeShareTabName.value = 'authSource';
2126 proxy.$ElMessage.error('数据资源登记名称不能为空');
2127 return;
2128 }
2129 if (d.authOperatTimeStart > d.authOperatTimeEnd) {
2130 activeShareTabName.value = 'authSource';
2131 proxy.$ElMessage.error('授权运营时间起不能大于授权运营时间止');
2132 return;
2133 }
2134 }
2135 }
2136 if (registerInfo.isSharedData == 'Y') {
2137 if (!orgData.value.length) {
2138 activeShareTabName.value = 'shareOrgs';
2139 proxy.$ElMessage.error('共有组织机构不能为空');
2140 return;
2141 }
2142 for (const d of orgData.value) {
2143 if (!d.sharedInstitutionCode) {
2144 activeShareTabName.value = 'shareOrgs';
2145 proxy.$ElMessage.error('共有组织统一社会信用代码不能为空');
2146 return;
2147 }
2148 if (!d.sharedInstitutionName) {
2149 activeShareTabName.value = 'shareOrgs';
2150 proxy.$ElMessage.error('共有组织机构名称不能为空');
2151 return;
2152 }
2153 if (!d.sharedInstitutiontType) {
2154 activeShareTabName.value = 'shareOrgs';
2155 proxy.$ElMessage.error('组织机构性质不能为空');
2156 return;
2157 }
2158 }
2159 }
2160 uploadFormRef.value.ruleFormRef.validate((valid3, errorItem) => {
2161 if (valid3) {
2162 let params: any = { isSubmit: true, immediateApprove: true, };
2163 let baseInfoValue = formRef.value.formInline;
2164 let registerInfoValue = registerFormRef.value.formInline;
2165 /** 产品登记名称,是覆盖范围-行业大类-产品名称 */
2166 let coverName = baseInfoValue.dataCoverages == '1' ? '全国' : dictListMap.value['dataCoverage'].find(f => f.value == baseInfoValue.dataCoverage[0])?.label || 'XX';
2167 let industryName = dictListMap.value['industry'].find(d => d.value == registerInfoValue.industry)?.label || 'XX';
2168 let dataRegistName = coverName + '-' + industryName + '-' + baseInfoValue.productName;
2169 let uploadValue = uploadFormRef.value.formInline;
2170 let attachmentRQVOS: any[] = [];
2171 for (const key in uploadValue) {
2172 if (!uploadValue[key]?.length) {
2173 continue;
2174 }
2175 let n = key.slice(6);
2176 uploadValue[key].forEach(uf => {
2177 attachmentRQVOS.push({
2178 fileName: uf.name,
2179 fileType: n,
2180 fileUrl: uf.url,
2181 });
2182 })
2183 }
2184 Object.assign(params, {
2185 ...baseInfoValue,
2186 dataCoverage: baseInfoValue.dataCoverages == '1' ? ['1'] : baseInfoValue.dataCoverage,
2187 productKeywords: baseInfoValue.productKeywords.join(',')
2188 }, {
2189 reqParamListRQVOS: inputParamsData.value,
2190 respParamListRQVOS: respParamsData.value,
2191 resourcesRQVOS: authSourceData.value,
2192 organizationRQVOS: orgData.value
2193 }, {
2194 registerRQVO: {
2195 ...registerInfoValue,
2196 exchangeGuid: exGuid,
2197 dataRegistName: dataRegistName,
2198 dataCoverageStartTime: registerInfoValue.dataCoverageTimeRange[0],
2199 dataCoverageEndTime: registerInfoValue.dataCoverageTimeRange[1],
2200 // coverageArea: registerInfoValue.coverageArea == 'all' ? ['all'] : [registerInfoValue.coverageAreas]
2201 },
2202 attachmentRQVOS: attachmentRQVOS,
2203 exchangeGuid: exGuid,
2204 productPublisher: userData.tenantGuid,
2205 productPublisherName: userData.tenantName
2206 });
2207 if (registerInfoValue.coverageArea == 'all') {
2208 params.registerRQVO.coverageArea = [['all']];
2209 } else if (!registerInfoValue.coverageArea) {
2210 params.registerRQVO.coverageArea = [registerInfoValue.coverageAreas];
2211 }
2212 fullscreenLoading.value = true;
2213 if (guid) {
2214 params.guid = guid;
2215 registerUpdate(params).then((res: any) => {
2216 fullscreenLoading.value = false;
2217 if (res?.code == proxy.$passCode) {
2218 proxy.$ElMessage.success('资产登记编辑提交申请成功');
2219 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
2220 router.push({
2221 name: 'registerManagemant',
2222 });
2223 assetStore.set(true);
2224 } else {
2225 proxy.$ElMessage.error(res.msg);
2226 }
2227 });
2228 } else {
2229 registerSave(params).then((res: any) => {
2230 fullscreenLoading.value = false;
2231 if (res?.code == proxy.$passCode) {
2232 proxy.$ElMessage.success('新建资产登记提交申请成功');
2233 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
2234 router.push({
2235 name: 'registerManagemant',
2236 });
2237 assetStore.set(true);
2238 } else {
2239 proxy.$ElMessage.error(res.msg);
2240 }
2241 });
2242 }
2243 } else {
2244 var obj = Object.keys(errorItem);
2245 uploadFormRef.value.ruleFormRef.scrollToField(obj[0]);
2246 }
2247 });
2248 } else {
2249 var obj = Object.keys(errorItem);
2250 registerFormRef.value.ruleFormRef.scrollToField(obj[0])
2251 registerInfoExpand.value = true;
2252 uploadFormRef.value.ruleFormRef.validate(() => { });
2253 }
2254 })
2255 } else {
2256 var obj = Object.keys(errorItem);
2257 formRef.value.ruleFormRef.scrollToField(obj[0])
2258 baseInfoExpand.value = true;
2259 registerFormRef.value.ruleFormRef.validate(() => { });
2260 uploadFormRef.value.ruleFormRef.validate(() => { });
2261 }
2262 });
2263 }
2264
2265 </script>
2266
2267 <template>
2268 <div class="container_wrap" v-loading="fullscreenLoading">
2269 <div class="content_main">
2270 <ContentWrap id="id-baseInfo" title="数据产品信息" description="" :isExpand="baseInfoExpand" expandSwicth
2271 @expand="(v) => baseInfoExpand = v">
2272 <Form ref="formRef" :itemList="productBaseInfoItems" :rules="productBaseInfoFormRules" formId="base-info-edit"
2273 @selectChange="handleProductBaseFormSelectChange" @checkboxChange="handleProductBaseFormCheckboxChange"
2274 col="col3 custom-form" />
2275 </ContentWrap>
2276 <ContentWrap id="id-params" title="入参出参信息" description="" :expandSwicth="true" class="mt16"
2277 :isExpand="paramsInfoExpand" @expand="(v) => paramsInfoExpand = v">
2278 <el-tabs v-model="activeTabName" class="param-tabs">
2279 <el-tab-pane label="入参信息" name="reqParamList">
2280 <Table ref="inputParamsTableRef" :tableInfo="inputParamsTableInfo" class="fiveRow-table" />
2281 <div class="row-add-btn">
2282 <el-button link @click="addInputParams" :icon="CirclePlus" v-preReClick>添加</el-button>
2283 </div>
2284 </el-tab-pane>
2285 <el-tab-pane label="出参信息" name="respParamList">
2286 <Table ref="respParamsTableRef" :tableInfo="respParamsTableInfo" class="fiveRow-table" />
2287 <div class="row-add-btn">
2288 <el-button link @click="addRespParams" :icon="CirclePlus" v-preReClick>添加</el-button>
2289 </div>
2290 </el-tab-pane>
2291 </el-tabs>
2292 </ContentWrap>
2293 <ContentWrap id="id-registerInfo" title="数据产品登记信息" description="" :expandSwicth="true" class="mt16"
2294 :isExpand="registerInfoExpand" @expand="(v) => registerInfoExpand = v">
2295 <Form ref="registerFormRef" :itemList="productRegisterInfoItems" :rules="productRegisterInfoFormRules"
2296 formId="register-edit" col="col3 custom-form" @selectChange="handleRegisterFormSelectChange"
2297 @checkboxChange="handleRegisterFormCheckboxChange" @radioGroupChange="handleRegisterRadioGroupChange" />
2298 </ContentWrap>
2299 <ContentWrap
2300 v-show="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' || registerFormRef?.formInline.isSharedData == 'Y'"
2301 id="id-anthor" :isExpand="authInfoExpand" @expand="(v) => authInfoExpand = v"
2302 :title="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' && registerFormRef?.formInline.isSharedData == 'Y' ? '被授权资源信息和共有组织机构' : (registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' ? '被授权资源信息' : '共有组织机构信息')"
2303 description="" :expandSwicth="true" class="mt16">
2304 <el-tabs v-model="activeShareTabName" class="param-tabs">
2305 <el-tab-pane label="被授权资源" v-if="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y'" name="authSource">
2306 <Table ref="authSourceTableRef" :tableInfo="authSourceTableInfo" class="fiveRow-table" />
2307 <div class="row-add-btn">
2308 <el-button link @click="addAuthSources" :icon="CirclePlus" v-preReClick>添加</el-button>
2309 </div>
2310 </el-tab-pane>
2311 <el-tab-pane label="共有组织机构" v-if="registerFormRef?.formInline.isSharedData == 'Y'" name="shareOrgs">
2312 <Table ref="orgsTableRef" :tableInfo="orgTableInfo" class="fiveRow-table" />
2313 <div class="row-add-btn">
2314 <el-button link @click="addOrgs" :icon="CirclePlus" v-preReClick>添加</el-button>
2315 </div>
2316 </el-tab-pane>
2317 </el-tabs>
2318 </ContentWrap>
2319 <ContentWrap id="id-files" title="产品附件信息" description="" expandSwicth class="mt16" :isExpand="uploadInfoExpand"
2320 @expand="(v) => uploadInfoExpand = v">
2321 <Form class='uploadForm' ref="uploadFormRef" :itemList="uploadFormItems" formId="upload-form"
2322 :rules="uploadFormRules" col="col2" />
2323 </ContentWrap>
2324 <ContentWrap id="id-approveInfo" title="审批信息" expandSwicth class="mt16">
2325 <ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :definitionId="''">
2326 </ApprovalProcess>
2327 </ContentWrap>
2328 </div>
2329 <div class="tool_btns">
2330 <div class="btns">
2331 <el-button plain @click="cancel">取消</el-button>
2332 <el-button type="primary" @click="saveDraft" v-if="!restart">保存</el-button>
2333 <el-button type="primary" @click="save">提交申请</el-button>
2334 </div>
2335 </div>
2336 </div>
2337 </template>
2338
2339 <style lang="scss" scoped>
2340 .container_wrap {
2341 padding: 0;
2342 height: 100%;
2343 overflow: hidden;
2344
2345 &>.content_main {
2346 padding: 16px;
2347 height: calc(100% - 44px);
2348 overflow: hidden auto;
2349
2350 &.full {
2351 height: 100%;
2352 }
2353 }
2354 }
2355
2356 :deep(.el-form) {
2357 .checkbox-cascader {
2358 display: flex;
2359
2360 .el-cascader {
2361 margin-left: 8px;
2362 }
2363 }
2364
2365 .checkbox-right {
2366 width: calc(100% - 50px);
2367
2368 &.el-form-item {
2369 margin-bottom: 0px;
2370 margin-right: 0px;
2371 width: 100%;
2372 }
2373 }
2374 }
2375
2376 .row-add-btn {
2377 .el-button--default {
2378 padding: 4px 0px;
2379 margin-top: 4px;
2380 }
2381
2382 :deep(.el-icon) {
2383 width: 16px;
2384 height: 16px;
2385
2386 svg {
2387 width: 16px;
2388 height: 16px;
2389 }
2390 }
2391 }
2392
2393 :deep(.el-tabs) {
2394 margin-top: -8px;
2395
2396 .el-tabs__header {
2397 margin-bottom: 8px;
2398 }
2399
2400 .el-tabs__item {
2401 height: 32px;
2402
2403 &:nth-child(2) {
2404 padding-left: 16px;
2405 }
2406
2407 }
2408 }
2409
2410 .mt16 {
2411 margin-top: 16px;
2412 }
2413
2414 .tool_btns {
2415 display: flex;
2416 justify-content: center;
2417 align-items: center;
2418 height: 44px;
2419 padding: 0 16px;
2420 border-top: 1px solid #d9d9d9;
2421 }
2422
2423 :deep(.dialog-form-inline.col3) {
2424 .w50-l {
2425 width: 100%;
2426 margin-right: 4px;
2427 }
2428
2429 .w50 {
2430 width: 100%;
2431 }
2432 }
2433
2434 .uploadForm {
2435 align-items: flex-start;
2436 }
2437
2438 :deep(.other-group-flex.el-radio-group) {
2439 .el-radio:last-child {
2440 width: calc(100% - 64px);
2441
2442 .el-radio__label {
2443 width: 100%;
2444
2445 .other-input {
2446 width: 100%;
2447 }
2448 }
2449 }
2450 }
2451 </style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -422,7 +422,10 @@ const tableBtnClick = (scope, btn) => { ...@@ -422,7 +422,10 @@ const tableBtnClick = (scope, btn) => {
422 }); 422 });
423 } else if (type === 'detail') { // 详情 423 } else if (type === 'detail') { // 详情
424 if (row.registerApproveState == 'Y') { 424 if (row.registerApproveState == 'Y') {
425 router.push({ 425 row.dataSource == '1' ? router.push({
426 name: 'registerValueJSZQDetail',
427 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
428 }) : router.push({
426 name: 'registerValueDetail', 429 name: 'registerValueDetail',
427 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName } 430 query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
428 }); 431 });
...@@ -495,6 +498,7 @@ const formItems = ref<any>([ ...@@ -495,6 +498,7 @@ const formItems = ref<any>([
495 value: 'guid', 498 value: 'guid',
496 label: 'damName' 499 label: 'damName'
497 }, 500 },
501 filterable: true,
498 visible: true, 502 visible: true,
499 required: true 503 required: true
500 }, { 504 }, {
...@@ -509,6 +513,7 @@ const formItems = ref<any>([ ...@@ -509,6 +513,7 @@ const formItems = ref<any>([
509 value: 'guid', 513 value: 'guid',
510 label: 'tenantName' 514 label: 'tenantName'
511 }, 515 },
516 filterable: true,
512 visible: false, 517 visible: false,
513 required: true 518 required: true
514 }, 519 },
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!