38bfb485 by lihua

数据资产登记专区

1 parent 58792e93
......@@ -30,7 +30,7 @@
"crypto-js": "^4.2.0",
"dayjs": "^1.11.7",
"echarts": "^5.4.3",
"element-plus": "^2.5.2",
"element-plus": "^2.9.0",
"eruda": "^3.0.0",
"file-saver": "^2.0.5",
"hotkeys-js": "^3.10.2",
......
......@@ -51,8 +51,8 @@ dependencies:
specifier: ^5.4.3
version: 5.5.1
element-plus:
specifier: ^2.5.2
version: 2.8.8(vue@3.5.13)
specifier: ^2.9.0
version: 2.9.0(vue@3.5.13)
eruda:
specifier: ^3.0.0
version: 3.4.1
......@@ -4015,8 +4015,8 @@ packages:
resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==}
dev: true
/element-plus@2.8.8(vue@3.5.13):
resolution: {integrity: sha512-MLAH1x2PGTnOT7Iwqh9ASgfZhvgqQqrdbxuJH0w2fGjzE4ZjryyLQj24HXoQO7Zon66U3lrYxbdLI57M6OX0qw==}
/element-plus@2.9.0(vue@3.5.13):
resolution: {integrity: sha512-ccOFXKsauo2dtokAr4OX7gZsb7TuAoVxA2zGRZo5o2yyDDBLBaZxOoFQPoxITSLcHbBfQuNDGK5Iag5hnyKkZA==}
peerDependencies:
vue: ^3.2.0
dependencies:
......
......@@ -2,14 +2,14 @@ import request from "@/utils/request";
/** 获取登记列表。 */
export const getRegisterList = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/page-list`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/page-list`,
method: 'post',
data: params
})
/** 获取登记详情 */
export const getRegiaterDetail = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/detail`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/detail`,
method: 'get',
params
})
......@@ -30,9 +30,8 @@ export const registerUpdate = (params) => request({
/** 删除登记信息 */
export const registerDelete = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/delete`,
method: 'delete',
data: params
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/delete?guid=${params}`,
method: 'delete'
});
/** 获取当前会员审批流程信息 */
......@@ -433,7 +432,7 @@ export const updateDissentState = (params) => request({
// 获取数交所数据
export const getExchangeList = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-num`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-register-overview/register-num`,
method: 'post',
data: params
})
......
import request from "@/utils/request";
/** 获取登记详情 */
export const getRegiaterDetail = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/detail`,
method: 'get',
params
})
/** 提交登记信息。 */
export const registerSave = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/save`,
method: 'post',
data: params
});
/** 更新登记信息 */
export const registerUpdate = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/update`,
method: 'post',
data: params
});
/** 删除登记信息 */
export const registerDelete = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/public-data-products-main/delete`,
method: 'delete',
data: params
});
\ No newline at end of file
......@@ -310,3 +310,10 @@ export const exportTemplate = (params) => request({
method: 'post',
responseType: 'blob'
});
/** 获取字典列表数据 */
export const getParamsList = (params) => request({
url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType`,
method: 'get',
params
})
\ No newline at end of file
......
......@@ -816,7 +816,9 @@ const panelChange = (scope, row) => {
</span>
<el-select v-if="child.type == 'select'" v-model="formInline[child.field]"
:placeholder="child.placeholder" :disabled="child.disabled || readonly" :filterable="child.filterable"
:teleported="child.teleported || true">
:multiple="child.multiple ?? false"
:collapse-tags="child.collapse ?? false" :collapse-tags-tooltip="child.tagsTooltip ?? false"
:max-collapse-tags="child.maxTags ?? 1" :teleported="child.teleported || true">
<el-option v-for="opts in child.options"
:label="child.props?.label ? opts[child.props.label] : opts.label"
:value="child.props?.value ? opts[child.props.value] : opts.value" :disabled="opts.disabled" />
......@@ -1515,11 +1517,14 @@ const panelChange = (scope, row) => {
:disabled="btn.disabled" :style="btn.style ?? {}" @click="btnClick(btn, null)">{{ btn.label }}</el-button>
</template>
</template>
<el-input-tag :class="[item.col, { is_block: item.block }]" v-else-if="item.type == 'inputTag'"
v-model.trim="formInline[item.field]" :placeholder="item.placeholder" draggable
:clearable="item.clearable" :maxlength="item.maxlength ?? ''" :disabled="item.disabled"
:readonly="item.autocompleteSetting?.readonly || item.readonly" />
<el-input :class="[item.col, { is_block: item.block }]" v-else-if="item.type == 'password'"
v-model.trim="formInline[item.field]" type="password" :placeholder="item.placeholder"
:clearable="item.clearable" :maxlength="item.maxlength ?? ''" show-password :disabled="item.disabled"
:autocomplete="item.autocompleteSetting?.autocomplete || item.autocomplete
" :readonly="item.autocompleteSetting?.readonly || item.readonly" @click="handlerIptClick(item)" />
:autocomplete="item.autocompleteSetting?.autocomplete || item.autocomplete" :readonly="item.autocompleteSetting?.readonly || item.readonly" @click="handlerIptClick(item)" />
<div class="input_def" v-else>
<span v-if="item.beforeMsg" style="color: #212121;">{{ item.beforeMsg }}</span>
<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(() => {
" @input="inputKeyUp(editForm[item.field].regexp, scope, editForm[item.field])"
@change="(val) => inputChange(val, scope, item)"
@focus="(event) => inputFocus(event, scope, editForm[item.field])"></el-input>
<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"
:clearable="editForm[item.field].clearable" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
<template v-else-if="editForm[item.field] && editForm[item.field].type == 'defaultValue'">
<el-date-picker v-if="scope.row[item.dataTypeName] === 'date'" v-model="scope.row[item.field]" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="editForm[item.field].placeholder" />
......
......@@ -23,6 +23,23 @@ const routes: RouteRecordRaw[] = [
},
},
{
path: 'register-start-js',
name: 'registerStartJS',
component: () => import('@/views/data_asset/registerStartJS.vue'),
meta: {
title: '新建资产登记',
sidebar: false,
breadcrumb: false,
cache: true,
editPage: true,
reuse: true
},
beforeEnter: (to, from) => {
to.meta.title = to.query.type == 'create' ? '新建资产登记' : `编辑-${to.query.name}`;
to.meta.editPage = true;
}
},
{
path: 'register-start',
name: 'registerStart',
component: () => import('@/views/data_asset/registerStart.vue'),
......@@ -50,6 +67,18 @@ const routes: RouteRecordRaw[] = [
cache: true,
reuse: true
},
},
{
path: 'register-JQZQ-detail',
name: 'registerInfoJSZQDetail',
component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
},
}
],
},
......@@ -85,6 +114,18 @@ const routes: RouteRecordRaw[] = [
}
},
{
path: 'register-JSZQ-detail',
name: 'registerJSZQDetail',
component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-detail',
name: 'evaCatalogDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
......@@ -130,6 +171,18 @@ const routes: RouteRecordRaw[] = [
}
},
{
path: 'register-value-JSZQ-detail',
name: 'registerValueJSZQDetail',
component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-detail',
name: 'costAssessDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
......@@ -175,6 +228,18 @@ const routes: RouteRecordRaw[] = [
}
},
{
path: 'register-certi-JSZQ-detail',
name: 'certificateJSZQDetail',
component: () => import('@/views/data_asset/registerJSZQDetail.vue'),
meta: {
title: '详情-',
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true
}
},
{
path: 'register-catalog-detail',
name: 'certiCatalogDetail',
component: () => import('@/views/data_asset/registerCatalogDetail.vue'),
......
......@@ -261,7 +261,10 @@ const tableBtnClick = (scope, btn) => {
});
} else if (type === 'path_detail') { // 详情
if (row.registerGuid) {
router.push({
row.dataSource == '1' ? router.push({
name: 'certificateJSZQDetail',
query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
}) : router.push({
name: 'certificateDetail',
query: { guid: row.registerGuid, certificateGuid: row.guid, type: 'certificate', tenantGuid: row.tenantGuid }
});
......@@ -291,6 +294,7 @@ const formItems = ref([{
label: 'daName',
value: 'damGuid'
},
filterable: true,
disabled: false,
clearable: true,
required: true,
......
......@@ -399,7 +399,10 @@ const tableBtnClick = (scope, btn) => {
});
} else if (type === 'detail') { // 详情
if (row.registerApproveState == 'Y') {
router.push({
row.dataSource == '1' ? router.push({
name: 'registerJSZQDetail',
query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
}) : router.push({
name: 'registerDetail',
query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
......@@ -468,6 +471,7 @@ const formItems = ref([{
value: 'guid',
label: 'damName'
},
filterable: true,
visible: true,
required: true
}, {
......@@ -482,6 +486,7 @@ const formItems = ref([{
value: 'guid',
label: 'tenantName'
},
filterable: true,
visible: false,
required: true
}, {
......
......@@ -120,7 +120,10 @@ const registerDetailTableInfo = ref({
});
} else if (row.type == 'qualityEvaluate') {
if (row.registerApproveState == 'Y') {
router.push({
row.dataSource == '1' ? router.push({
name: 'registerJSZQDetail',
query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
}) : router.push({
name: 'registerDetail',
query: { guid: row.registerGuid, evaGuid: row.guid, type: 'qualityEvaluate', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
......@@ -132,7 +135,10 @@ const registerDetailTableInfo = ref({
}
} else if (row.type == 'costAssess') {
if (row.registerApproveState == 'Y') {
router.push({
row.dataSource == '1' ? router.push({
name: 'registerValueJSZQDetail',
query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
}) : router.push({
name: 'registerValueDetail',
query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
......
This diff could not be displayed because it is too large.
......@@ -44,7 +44,7 @@ const searchItemList = ref([
{
type: "input",
label: "",
field: "daName",
field: "damName",
default: "",
placeholder: "资产名称",
clearable: true,
......@@ -91,7 +91,7 @@ const pageInfo = ref({
{ label: "150", value: 150 },
{ label: "200", value: 200 },
],
daName: '',
damName: '',
approveState: '',
tenantGuid: '',
});
......@@ -108,9 +108,9 @@ const handleApprovalDialogCancel = (reSubmit) => {
}
const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "center" },
{ label: "资产名称", field: "daName", width: 160, align: "left" },
{ label: "数据分类", field: "dataCategoryName", width: 120, align: "left" },
{ label: "存储方式", field: "storageFormName", width: 120, align: "left" },
{ label: "资产名称", field: "damName", width: 160, align: "left" },
{ label: "数据分类", field: "dataTypeName", width: 120, align: "left" },
{ label: "更新频率", field: "updateFrequencyName", width: 120, align: "left" },
{ label: "数交所名称", field: "exchangeName", width: 160, align: "left" },
{
label: "审批状态", field: "approveState", type: "tag", width: 96, align: 'center', getName: (scope) => {
......@@ -227,10 +227,17 @@ const currTableData: any = ref({});
const btnClick = (btn) => {
const type = btn.value;
if (type == 'create') {
if (btn.exchangeName.includes('数交所(勿删)') || btn.exchangeName.includes('江苏省数据交易所')) {
router.push({
name: 'registerStartJS',
query: { exchangeGuid: btn.exchangeGuid, type }
});
} else {
router.push({
name: 'registerStart',
query: { exchangeGuid: btn.exchangeGuid, type }
});
}
} else if (type == 'search') {
exchangGuid.value = btn.exchangeGuid;
pageInfo.value.curr = 1;
......@@ -244,10 +251,17 @@ const tableBtnClick = (scope, btn) => {
const row = scope.row;
currTableData.value = row;
if (type === "edit") { //草稿中\已驳回\已撤销\已通过 状态,才可以编辑。
if (row.dataSource == '1') {
router.push({
name: 'registerStartJS',
query: { guid: row.bizGuid, exchangeGuid: row.exchangeGuid, name: row.damName, tenantGuid: row.tenantGuid, type }
});
} else {
router.push({
name: 'registerStart',
query: { guid: row.guid, exchangeGuid: row.exchangeGuid, name: row.daName, tenantGuid: row.tenantGuid, type }
query: { guid: row.guid, exchangeGuid: row.exchangeGuid, name: row.damName, tenantGuid: row.tenantGuid, type }
});
}
} else if (type == "delete") {
delTableOpen("此操作将永久删除该资产登记,是否继续?", "warning");
} else if (type === 'revoke') { // 撤销,状态为审批中时可以撤销。
......@@ -284,10 +298,17 @@ const tableBtnClick = (scope, btn) => {
});
});
} else if (type === 'detail') { // 详情, 若是草稿中,详情就是编辑,
if (row.dataSource == '1') {
router.push({
name: 'registerInfoJSZQDetail',
query: { guid: row.guid, name: row.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
});
} else {
router.push({
name: 'registerInfoDetail',
query: { guid: row.guid, name: row.daName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
query: { guid: row.guid, name: row.damName, tenantGuid: row.tenantGuid, tenantName: row.tenantName, type: 'asset' }
});
}
} else if (type === 'pass') {
passDialogInfo.value.visible = true;
} else if (type == 'reject') {
......@@ -302,7 +323,7 @@ const delTableOpen = (msg, type, isBatch: boolean = false) => {
type: type,
}).then(() => {
let guids: any = [];
guids = [currTableData.value.guid]
guids = currTableData.value.guid;
loading.value = true;
registerDelete(guids).then((res: any) => {
loading.value = false;
......@@ -336,7 +357,7 @@ const getTableData = () => {
getRegisterList({
pageSize: pageInfo.value.limit,
pageIndex: pageInfo.value.curr,
daName: pageInfo.value.daName,
damName: pageInfo.value.damName,
approveState: pageInfo.value.approveState,
tenantGuid: pageInfo.value.tenantGuid,
exchangGuid: exchangGuid.value,
......@@ -376,12 +397,12 @@ const toSearch = (val: any, clear: boolean = false) => {
pageInfo.value.curr = 1;
if (clear) {
searchItemList.value.map((item) => item.default = "");
pageInfo.value.daName = '';
pageInfo.value.damName = '';
pageInfo.value.approveState = "";
pageInfo.value.tenantGuid = "";
val && (exchangGuid.value = '');
} else {
pageInfo.value.daName = val.daName;
pageInfo.value.damName = val.damName;
pageInfo.value.approveState = val.approveState;
pageInfo.value.tenantGuid = val.tenantGuid;
}
......
<route lang="yaml">
name: registerStartJS
</route>
<script lang="ts" setup name="registerStartJS">
import { ref } from 'vue';
import { CirclePlus } from "@element-plus/icons-vue";
import { useValidator } from '@/hooks/useValidator';
import { TableColumnWidth } from '@/utils/enum';
import { scrollLastRowToView } from '@/utils/common';
import {
getAreaData,
getParamsList,
} from "@/api/modules/queryService";
import {
getDiseaseAll
} from '@/api/modules/dataPricing';
import {
registerSave,
registerUpdate,
getRegiaterDetail
} from '@/api/modules/dataAssetZq'
import useUserStore from "@/store/modules/user";
import { getCamundaDeploymentId } from "@/api/modules/workFlowService"
import useDataAssetStore from "@/store/modules/dataAsset";
const assetStore = useDataAssetStore();
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData)
const { proxy } = getCurrentInstance() as any;
const { required } = useValidator();
const router = useRouter();
const route = useRoute();
const restart = ref(false);
const fullPath = route.fullPath;
const guid = route.query.guid;
const exGuid = route.query.exchangeGuid;
/** 全页面加载图标 */
const fullscreenLoading = ref(false);
/** 字典的Map,key为属性值 */
const dictListMap = ref({});
/** 所属疾病的下拉列表 */
const diseaseListData: any = ref([]);
/** 产品应用方向字典列表 */
const productDirectionListData: any = ref([]);
const formRef = ref();
/** 数据产品信息的表单配置 */
const productBaseInfoItems = ref([{
type: "input",
label: "产品名称",
field: "productName",
default: "",
maxlength: 50,
placeholder: "请输入",
required: true,
clearable: true
}, {
label: '产品编码',
type: 'input',
placeholder: '自动生成',
field: 'productCode',
default: '',
disabled: true,
required: false,
visible: true
}, {
label: '产品类型',
type: 'select',
placeholder: '请选择',
field: 'productType',
default: '',
options: dictListMap.value['productType'] || [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
visible: true
}, {
label: "是否需要信息主体授权",
type: "radio-group",
placeholder: "",
field: "authLevel",
default: "Y",
options: [
{
label: "是",
value: 'Y',
},
{
label: "否",
value: 'N',
},
],
required: true,
}, {
label: "更新频率",
type: "select",
placeholder: "请选择",
field: "updateFrequency",
default: '',
props: {
value: 'value',
label: 'label'
},
multiple: false,
options: dictListMap.value['updateFrequency'] || [],
filterable: true,
required: true,
clearable: true,
}, {
type: "input",
label: "产品发布机构",
field: "productPublisherName",
default: userData.tenantName,
required: true,
placeholder: "请输入",
disabled: true,
clearable: true
}, {
label: '领域',
type: 'select',
placeholder: '请选择',
field: 'domain',
default: '003',
options: dictListMap.value['domain'] || [],
props: {
value: 'value',
label: 'label',
children: 'children'
},
required: true,
filterable: true,
visible: true
}, {
label: '应用场景',
type: 'select',
placeholder: '请选择',
field: 'scenario',
default: '',
options: [], // 根据所选择领域显示列表
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
visible: true
}, {
label: '所属科室',
type: 'tree-select',
placeholder: '请选择',
field: 'medDepartmentCode',
default: '',
options: dictListMap.value['medDepartmentCode'] || [],
showAllLevels: false,
checkStrictly: false,//只能选择叶子节点。
lazy: false,
props: {
value: 'value',
label: 'label',
children: 'childDictList'
},
filterable: true,
clearable: true,
visible: true,
required: true
}, {
label: '所属疾病',
type: 'tree-select',
placeholder: '请选择',
field: 'diseaseGuid',
options: diseaseListData.value,
props: {
value: 'guid',
label: 'diseaseName',
children: 'childList'
},
showAllLevels: false,
checkStrictly: false,//只能选择叶子节点。
lazy: false,
filterable: true,
clearable: true,
default: '',
visible: true,
required: true
}, {
label: '数据规模(条)',
type: 'input',
placeholder: '请输入',
field: 'dataScale',
maxlength: 19,
regexp: /\D/g,
default: '',
visible: true,
required: true
}, {
label: '病例总数(例)',
type: 'input',
placeholder: '请输入',
field: 'caseNumber',
maxlength: 19,
regexp: /\D/g,
default: '',
visible: true,
required: true
}, {
label: '所属主题',
type: 'tree-select',
placeholder: '请选择',
field: 'subjectDomain',
options: dictListMap.value['subjectDomain'],
showAllLevels: false,
checkStrictly: false,//只能选择叶子节点。
lazy: false,
props: {
label: "label",
value: "value",
children: 'childDictList'
},
filterable: true,
clearable: true,
default: '',
visible: false,
required: true
}, {
label: "数据来源",
type: "select",
placeholder: "",
field: "dataSources",
block: false,
default: '1',
options: dictListMap.value['dataSources'] || [],
filterable: true,
clearable: true,
required: true,
}, {
label: '数据覆盖范围',
type: 'checkbox-select',
placeholder: '全国',
field: 'dataCoverages',
default: "",
trueValue: '1',
falseValue: '',
isRequire: true,
children: [
{
label: '',
type: "select",
placeholder: "请选择",
field: "dataCoverage",
default: [],
options: dictListMap.value['dataCoverage'] || [],
multiple: true,
collapse: true,
tagsTooltip: true,
filterable: true,
clearable: true,
required: true,
col: 'checkbox-right',
visible: true
}
],
clearable: false,
required: true,
col: 'checkbox-cascader'
}, {
label: '产品应用方向',
type: 'select',
placeholder: '请选择',
field: 'productDirection',
options: productDirectionListData.value,
props: {
value: 'value',
label: 'label'
},
filterable: true,
clearable: true,
default: '',
visible: true,
required: true
}, {
type: "input",
label: "版本名称",
field: "versionName",
default: "",
maxlength: 50,
placeholder: "请输入",
required: true,
clearable: true
}, {
type: "inputTag",
label: "产品关键词",
field: 'productKeywords',
default: [],
maxlength: 200,
placeholder: "请输入关键词,按回车键确认",
required: true,
clearable: true,
block: true
}, {
label: '产品描述',
placeholder: '该输入对该产品的描述信息',
field: 'productDesc',
type: 'textarea',
default: '',
maxlength: 250,
block: true,
clearable: true,
required: true,
}]);
/** 数据产品信息的表单配置校验规则 */
const productBaseInfoFormRules = ref({
productName: [required('请输入产品名称')],
productType: [required('请选择产品类型')],
updateFrequency: [required('请选择更新频率')],
productpublisher: [required('产品发布机构不能为空')],
domain: [required('请选择领域')],
scenario: [required('请选择应用场景')],
medDepartmentCode: [required('请选择所属科室')],
diseaseGuid: [required('请选择所属疾病')],
caseNumber: [required('请输入病例总数')],
subjectDomain: [required('请选择所属主题')],
dataSources: [required('请选择数据来源')],
dataScale: [required('请输入数据规模')],
dataCoverage: [required('请选择数据覆盖范围')],
productDirection: [required('请选择产品应用方向')],
versionName: [required('请输入版本名称')],
productKeywords: [required('请输入产品关键词')],
productDesc: [required('请输入产品描述')]
});
const setProductBaseFormItems = (formValue) => {
formValue = Object.assign({ authLevel: 'Y', productpublisher: userData.tenantName, domain: '003', dataSources: '1' }, formValue);
productBaseInfoItems.value.forEach(item => {
item.default = formValue[item.field];
if (item.children?.length) {
item.children[0].default = formValue[item.children[0].field] || [];
}
if (item.field == 'scenario') {
item.options = dictListMap.value['domain'].find(s => s.value == formValue['domain'])?.childDictList || []
} else if (item.field == 'medDepartmentCode' || item.field == 'diseaseGuid' || item.field == 'dataScale' || item.field == 'caseNumber') {
item.visible = formValue['domain'] == '003';
} else if (item.field == 'subjectDomain') {
item.visible = formValue['domain'] == '004';
} else if (item.field == 'dataCoverages') {
item && item.children?.length && (item.children[0].visible = formValue['dataCoverages'] != '1');
}
});
}
const handleProductBaseFormSelectChange = (val, row, info) => {
if (row.field == 'domain') {
info.scenario = ''; //清空下应用场景
setProductBaseFormItems(info);
}
}
/** checkbox 全国修改之后 */
const handleProductBaseFormCheckboxChange = (val, info, row) => {
row.field == 'dataCoverages' && setProductBaseFormItems(info);
}
const activeTabName = ref('reqParamList');
/** ----------------- 入参相关信息 ----------------------------- */
const inputParamsTableRef = ref();
const inputParamsData: any = ref([]);
/** 参数类型字典列表 */
const fieldValueTypeList: any = ref([]);
/** 基本信息的入参定义表格配置 */
const inputParamsTableInfo = ref({
id: "input-params-table",
height: '214px',
fields: [
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "参数英文", field: "fieldEnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数中文", field: "fieldCnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数类型", field: "fieldValueType", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "是否必填", field: "fieldMandatory", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数描述", field: "fieldComment", width: 160, required: false, columClass: 'edit-colum', type: 'edit' },
{ label: "展示层级顺序", field: "levelCode", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
],
editInfo: {
fieldEnName: {
label: '',
type: 'input',
field: 'fieldEnName',
default: '',
maxlength: 50,
regexp: /[^A-Za-z0-9_]/g,
placeholder: '请输入',
clearable: true,
},
fieldCnName: {
label: '',
type: 'input',
field: 'fieldCnName',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
fieldValueType: {
label: '',
type: 'select',
field: 'fieldValueType',
default: '',
options: fieldValueTypeList.value,
props: {
label: 'label',
value: 'value'
},
placeholder: '请选择',
clearable: false,
filterable: true
},
fieldMandatory: {
label: '',
type: 'select',
field: 'fieldMandatory',
default: 'Y',
options: [
{
label: "是",
value: "Y",
},
{
label: "否",
value: "N",
},
],
placeholder: '请选择',
},
levelCode: {
label: '',
type: 'input',
field: 'levelCode',
default: '',
maxlength: 20,
placeholder: '请输入',
regexp: /\D/g,
clearable: true,
},
fieldComment: {
label: '',
type: 'input',
field: 'fieldComment',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
}
},
STATUS: 'edit',
data: inputParamsData.value,
showPage: false,
actionInfo: {
show: true,
label: "操作",
type: "btn",
width: 60,
fixed: 'right',
btns: [
{
label: "删除", value: "remove", click: (scope) => {
let index = scope.$index;
proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
inputParamsData.value.splice(index, 1);
inputParamsTableInfo.value.data = inputParamsData.value;
proxy.$ElMessage.success('参数删除成功');
}, () => {
proxy.$ElMessage.info("已取消");
});
}
},
]
},
loading: false
});
/** 给表格添加一行入参定义。 */
const addInputParams = () => {
inputParamsData.value.push({ fieldEnName: '', fieldCnName: '', fieldMandatory: 'Y', fieldValueType: '1', fieldComment: '', levelCode: '' });
inputParamsTableInfo.value.data = inputParamsData.value;
nextTick(() => {
scrollLastRowToView(inputParamsTableRef.value?.tableRef, inputParamsData.value.length);
})
}
/** ----------------- 出参相关信息 ------------------------- */
const respParamsTableRef = ref();
const respParamsData: any = ref([]);
/** 基本信息的入参定义表格配置 */
const respParamsTableInfo = ref({
id: "resp-params-table",
height: '214px',
fields: [
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "参数英文", field: "fieldEnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数中文", field: "fieldCnName", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数类型", field: "fieldValueType", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "是否必填", field: "fieldMandatory", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "参数描述", field: "fieldComment", width: 160, required: false, columClass: 'edit-colum', type: 'edit' },
{ label: "展示层级顺序", field: "levelCode", width: 120, required: true, columClass: 'edit-colum', type: 'edit' },
],
editInfo: {
fieldEnName: {
label: '',
type: 'input',
field: 'fieldEnName',
default: '',
maxlength: 50,
regexp: /[^A-Za-z0-9_]/g,
placeholder: '请输入',
clearable: true,
},
fieldCnName: {
label: '',
type: 'input',
field: 'fieldCnName',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
fieldValueType: {
label: '',
type: 'select',
field: 'fieldValueType',
default: '',
options: fieldValueTypeList.value,
props: {
label: 'label',
value: 'value'
},
placeholder: '请选择',
clearable: false,
filterable: true
},
fieldMandatory: {
label: '',
type: 'select',
field: 'fieldMandatory',
default: 'Y',
options: [
{
label: "是",
value: "Y",
},
{
label: "否",
value: "N",
},
],
placeholder: '请选择',
},
levelCode: {
label: '',
type: 'input',
field: 'levelCode',
default: '',
maxlength: 20,
placeholder: '请输入',
regexp: /\D/g,
clearable: true,
},
fieldComment: {
label: '',
type: 'input',
field: 'fieldComment',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
}
},
STATUS: 'edit',
data: respParamsData.value,
showPage: false,
actionInfo: {
show: true,
label: "操作",
type: "btn",
width: 60,
fixed: 'right',
btns: [
{
label: "删除", value: "remove", click: (scope) => {
let index = scope.$index;
proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
respParamsData.value.splice(index, 1);
respParamsTableInfo.value.data = respParamsData.value;
proxy.$ElMessage.success('参数删除成功');
}, () => {
proxy.$ElMessage.info("已取消");
});
}
},
]
},
loading: false
});
/** 给表格添加一行入参定义。 */
const addRespParams = () => {
respParamsData.value.push({ fieldEnName: '', fieldCnName: '', fieldMandatory: 'Y', fieldValueType: '1', fieldComment: '', levelCode: '' });
respParamsTableInfo.value.data = respParamsData.value;
nextTick(() => {
scrollLastRowToView(respParamsTableRef.value?.tableRef, respParamsData.value.length);
})
}
/** ----------------------- 数据产品登记信息 ----------------------------- */
const registerFormRef = ref();
const getParentAreaPromise: any = ref(null);
const getAreaDataPromise: any = ref({});
const getAreaDatas: any = ref({});
const parentAreaData: any = ref([]);
const getArea = (node, resolve) => {
const { level } = node
let params = {
parentGuid: node.value
}
if (!node.value) {
if (getParentAreaPromise.value) {
getParentAreaPromise.value.then((res: any) => {
resolve(res);
})
} else {
resolve(parentAreaData.value);
}
return;
}
if (node.loaded) {
resolve([]);
return;
}
if (getAreaDatas.value[node.value]?.length) {
resolve(getAreaDatas.value[node.value]);
return;
}
if (!getAreaDataPromise.value[node.value]) {
getAreaDataPromise.value[node.value] = getAreaData(params).then((res: any) => {
node.loaded = true;
getAreaDataPromise.value[node.value] = null;
if (res?.code == proxy.$passCode) {
const data = res.data ?? []
data.map(item => {
item.leaf = level >= 1
})
resolve(data)
getAreaDatas.value[node.value] = data;
return data;
}
})
} else {
getAreaDataPromise.value[node.value].then((data) => {
getAreaDataPromise.value[node.value] = null;
node.loaded = true;
data.map(item => {
item.leaf = level >= 1
})
resolve(data)
})
}
}
const productRegisterInfoItems = ref([{
type: "input",
label: "产品登记名称",
field: "dataRegistName",
default: "",
maxlength: 50,
placeholder: "数据覆盖范围-行业分类-产品名称自动生成",
required: true,
disabled: true,
clearable: true
}, {
label: "数据覆盖时间",
type: "date-picker",
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
field: "dataCoverageTimeRange",
default: null,
placeholder: "开始时间~结束时间",
clearable: true,
required: true,
}, {
label: "数据产品和服务类型",
type: "input-group",
field: "dataProductsAndServicesTypeGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "dataProductsAndServicesType",
default: "",
col: "w50-l",
options: [],
filterable: true,
clearable: true,
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入其他类型",
col: "w50 no-margin-r",
field: "dataProductsAndServicesOtherType",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
}, {
label: '行业分类',
type: 'select',
placeholder: '请选择',
field: 'industry',
default: '',
options: dictListMap.value['industry'] || [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
visible: true
}, {
label: '行业大类',
type: 'select',
placeholder: '请选择',
field: 'industryBigcode',
default: '',
options: [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
visible: true
},
{
label: '数据类型',
type: 'select',
placeholder: '请选择',
field: 'dataType',
default: '',
options: dictListMap.value['dataType'] || [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
visible: true
},
{
label: '资源覆盖范围',
type: 'checkbox-select',
placeholder: '全国',
field: 'coverageArea',
default: "",
trueValue: 'all',
falseValue: '',
isRequire: true,
children: [
{
label: '',
type: "cascader",
placeholder: "请选择",
field: "coverageAreas",
default: [],
showAllLevels: true,
props: {
label: 'name',
value: 'guid',
lazy: true,
checkStrictly: true,
lazyLoad: getArea,
multiple: false,
},
collapse: true,
tagsTooltip: true,
// filterable: true,
clearable: true,
required: true,
col: 'checkbox-right',
visible: true
}
// {
// label: '',
// type: "select",
// placeholder: "请选择",
// field: "coverageAreas",
// default: '',
// options: parentAreaData.value,
// props: {
// label: 'name',
// value: 'code',
// },
// multiple: false,
// collapse: true,
// tagsTooltip: true,
// filterable: true,
// clearable: true,
// required: true,
// col: 'checkbox-right',
// visible: true
// }
],
clearable: false,
required: true,
col: 'checkbox-cascader'
},
{
label: "数据生产方式",
type: "input-group",
field: "productionMethodGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "productionMethod",
default: "",
col: "w50-l",
options: [],
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入",
col: "w50 no-margin-r",
field: "productionOtherMethod",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "数据结构",
type: "input-group",
field: "dataStructureGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "dataStructure",
default: "",
col: "w50-l",
options: [],
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入",
col: "w50 no-margin-r",
field: "dataOtherStructure",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "数据提供格式",
type: "input-group",
field: "dataProvisionFormatGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "dataProvisionFormat",
default: "",
col: "w50-l",
options: [],
filterable: true,
clearable: true,
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入",
col: "w50 no-margin-r",
field: "dataProvisionOtherFormat",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "存储方式",
type: "input-group",
field: "storageMethodGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "storageMethod",
default: "",
col: "w50-l",
options: [],
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入",
col: "w50 no-margin-r",
field: "storageOtherMethod",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: '数据更新方式',
type: 'select',
placeholder: '请选择',
field: 'updateMethod',
default: '',
options: [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
clearable: true,
visible: true
},
{
label: "数据存储量(初始)",
type: "input-group",
field: "dataStorageUnitGroup",
default: "",
children: [
{
label: "",
type: "input",
placeholder: "输入数值,两位小数",
col: "w50-l",
field: "dataStorage",
default: '',
inputType: 'moneyNumber',
maxlenght: 19,
clearable: true,
visible: true,
required: true,
},
{
type: "select",
placeholder: "请选择",
field: "dataStorageUnit",
default: "",
col: "w50 no-margin-r",
options: [],
clearable: true,
filterable: true,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "数据存储量(增长)",
type: "input-group",
field: "dataStorageIncreaseUnitGroup",
default: "",
children: [
{
label: "",
type: "input",
placeholder: "输入数值,两位小数",
col: "w50-l",
field: "dataStorageIncrease",
default: '',
inputType: 'moneyNumber',
maxlenght: 19,
clearable: true,
visible: true,
required: true,
},
{
type: "select",
placeholder: "请选择",
field: "dataStorageIncreaseUnit",
default: "",
col: "w50 no-margin-r",
options: [],
clearable: true,
filterable: true,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "是否包含敏感信息",
type: "radio-group",
placeholder: "",
field: "sensitiveInformation",
col: 'other-group-flex',
default: "Y",
options: [
{
label: "是",
value: "Y",
},
{
label: "否",
value: "N",
},
],
inputOptions: {
label: '',
col: 'other-input',
width: '100%',
type: "select",
placeholder: "敏感信息主体",
field: "sensitiveInvolvingSubject",
default: '',
props: {
value: "value",
label: "label",
},
options: [],
filterable: true,
clearable: true,
visible: true,
required: true,
},
required: true,
},
{ // 只有是敏感时才展示
label: '敏感数据覆盖数量(条)',
field: 'sensitiveDataCoverageNumber',
placeholder: "请输入整数",
type: 'input',
inputType: 'integerNumber',
maxlength: 6,
default: null,
clearable: true,
required: true,
},
{
label: '是否脱敏',
type: "radio-group",
placeholder: '请选择',
field: 'desensitizationSituation',
default: 'Y',
options: [{
value: 'Y',
label: '是'
}, {
value: 'N',
label: '否'
}],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
clearable: true,
visible: true
},
{
label: "脱敏方式",
type: "input-group",
field: "desensitizationMethodGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "desensitizationMethod",
default: "",
col: "w50-l",
options: [],
filterable: true,
clearable: false,
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入其他方式",
col: "w50 no-margin-r",
field: "desensitizationOtherMethod",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: '存证方式',
type: 'select',
placeholder: '请选择',
field: 'depositMethod',
default: '',
options: [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
clearable: true,
visible: true
},
{
type: "input",
label: "禁用场景",
field: "disableScene",
default: "",
maxlength: 50,
placeholder: "请输入",
required: true,
clearable: true
},
{
label: "共享类型",
type: "input-group",
field: "sharingTypeGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "sharingType",
default: "",
col: "w50-l",
options: [],
filterable: true,
clearable: true,
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入",
col: "w50 no-margin-r",
field: "sharingConditions",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: "共享方式",
type: "input-group",
field: "sharingMethodGroup",
default: "",
children: [
{
type: "select",
placeholder: "请选择",
field: "sharingMethod",
default: "",
col: "w50-l",
options: [],
filterable: true,
clearable: false,
required: true,
},
{
label: "",
type: "input",
placeholder: "请输入其他方式",
col: "w50 no-margin-r",
field: "sharingOtherMethod",
default: '',
maxlenght: 50,
clearable: true,
visible: false,
required: true,
},
],
clearable: true,
required: true,
},
{
label: '产品用途',
type: 'select',
placeholder: '请选择',
field: 'productUsage',
default: '',
options: [],
props: {
value: 'value',
label: 'label'
},
required: true,
filterable: true,
clearable: true,
visible: true
},
{
label: "是否向社会开放",
type: "radio-group",
placeholder: "",
field: "isSocialOpenness",
col: 'other-group-flex',
default: "Y",
options: [
{
label: "是",
value: "Y",
},
{
label: "否",
value: "N",
},
],
inputOptions: {
label: '',
col: 'other-input',
width: '100%',
type: "input",
placeholder: "请输入开放条件",
field: "opennessConditions",
default: '',
clearable: true,
visible: true,
required: true,
},
required: true,
},
{
label: "是否基于被授权资源开发",
type: "radio-group",
placeholder: "",
field: "isAuthreSourceDevelop",
default: 'N',
options: [{
value: 'Y',
label: '是',
}, {
value: 'N',
label: '否',
}],
required: true,
},
{
label: "是否共有数据",
type: "radio-group",
placeholder: "",
field: "isSharedData",
default: 'N',
options: [{
value: 'Y',
label: '是',
}, {
value: 'N',
label: '否',
}],
required: true,
},
]);
const productRegisterInfoFormRules = ref({
// dataRegistName: [required('产品登记名称不能为空')],
dataCoverageTimeRange: [{
type: 'array', required: true, message: '请选择数据覆盖时间', trigger: 'change',
}],
industry: [required('请选择行业分类')],
industryBigcode: [required('请选择行业大类')],
dataType: [required('请选择数据类型')],
coverageAreas: [required('请选择资源覆盖地域')],
dataProductsAndServicesType: [required('请选择数据产品和服务类型')],
dataProductsAndServicesOtherType: [required('请输入其他类型')],
productionMethod: [required('请选择数据生产方式')],
productionOtherMethod: [required('请输入其他生产方式')],
dataStructure: [required('请选择数据结构')],
dataOtherStructure: [required('请输入其他数据结构')],
dataProvisionFormat: [required('请选择数据提供格式')],
dataProvisionOtherFormat: [required('请输入其他格式')],
storageMethod: [required('请选择存储方式')],
storageOtherMethod: [required('请输入其他存储方式')],
updateMethod: [required('请选择数据更新方式')],
dataStorage: [required('请输入数据存储量(初始)')],
dataStorageUnit: [required('请选择单位')],
dataStorageIncrease: [required('请输入数据存储量(增长)')],
dataStorageIncreaseUnit: [required('请选择单位')],
sensitiveInformation: [required('请选择是否包含敏感信息')],
sensitiveInvolvingSubject: [required('请选择敏感信息主体')],
sensitiveDataCoverageNumber: [required('请输入敏感数据覆盖数量')],
desensitizationSituation: [required('请选择是否脱敏')],
desensitizationMethod: [required('请选择脱敏方式')],
desensitizationOtherMethod: [required('请输入其他脱敏方式')],
depositMethod: [required('请选择存证方式')],
disableScene: [required('请输入禁用场景')],
sharingType: [required('请选择共享类型')],
sharingConditions: [required('请输入共享条件')],
sharingMethod: [required('请选择共享方式')],
sharingOtherMethod: [required('请输入其他共享方式')],
opennessConditions: [required('请输入开放条件')],
productUsage: [required('请选择产品用途')],
});
const setRegisterFormItems = (formValue, isEdit = false) => {
formValue = Object.assign({ desensitizationSituation: 'Y', sensitiveInformation: 'Y', isAuthreSourceDevelop: 'N', isSharedData: 'N' }, formValue);
productRegisterInfoItems.value.forEach((item, index) => {
item.default = formValue[item.field];
if (item.children?.length) {
item.children.forEach(child => {
child.default = formValue[child.field];
})
}
if (item.field == 'dataProductsAndServicesTypeGroup') {
item.children && (item.children[1].visible = item.children[0].default == '6');
} else if (item.field == 'productionMethodGroup') {
item.children && (item.children[1].visible = item.children[0].default == '8');
} else if (item.field == 'dataStructureGroup') {
item.children && (item.children[1].visible = item.children[0].default == '4');
} else if (item.field == 'dataProvisionFormatGroup') {
item.children && (item.children[1].visible = item.children[0].default == '5');
} else if (item.field == 'storageMethodGroup') {
item.children && (item.children[1].visible = item.children[0].default == '7');
} else if (item.field == 'sharingMethodGroup') {
// item.visible = formValue.sharingType == '1' || formValue.sharingType == '2'
item.children && (item.children[1].visible = item.children[0].default == '5');
} else if (item.field == 'desensitizationMethodGroup') { //脱敏方式,现实条件,脱敏为是
item.visible = formValue['desensitizationSituation'] == 'Y';
item.children && (item.children[1].visible = item.children[0].default == '7');
} else if (item.field == 'sharingTypeGroup') {
item.children && (item.children[1].visible = item.children[0].default == '2');
productRegisterInfoItems.value[index + 1].visible = formValue['sharingType'] != '3';
} else if (item.field == 'industryBigcode') {// 带出行业大类列表
item.options = !formValue['industry'] ? [] : (dictListMap.value['industry'].find(v => v.value == formValue['industry']).childDictList || []);
} else if (item.field == 'coverageArea') {
item && item.children?.length && (item.children[0].visible = formValue['coverageArea'] != 'all');
let coverageArea = formValue.coverageArea;
if (coverageArea && Array.isArray(coverageArea) && coverageArea.length > 0) {
if (coverageArea[0][0] == 'all') {
item.default = 'all';
if (item.children?.length) {
item.children[0].visible = false;
item.children[0].default = [];
}
} else {
item.default = '';
if (item.children?.length) {
item.children[0].visible = true;
item.children[0].default = coverageArea[0] as any;
let p: any = [];
coverageArea?.forEach(area => {
if (p.includes(area[0])) {
return;
}
p.push(area[0]);
getArea({ value: area[0], level: 1 }, () => { })
});
let ps: any = []
for (const key in getAreaDataPromise.value) {
ps.push(getAreaDataPromise.value[key])
}
Promise.all(ps).then(() => {
item.children[0].default = coverageArea[0];
});
}
}
} else {
item.default = '';
}
} else if (item.field == 'sensitiveInformation') {
item.inputOptions && (item.inputOptions.default = formValue[item.inputOptions.field]);
item.inputOptions && (item.inputOptions.visible = item.default == 'Y');
productRegisterInfoItems.value[index + 1].visible = item.default == 'Y';// 敏感数据覆盖量
productRegisterInfoItems.value[index + 2].visible = item.default == 'Y';// 是否脱敏
productRegisterInfoItems.value[index + 3].visible = item.default == 'Y' && formValue['desensitizationSituation'] == 'Y';// 脱敏方式
} else if (item.field == 'isSocialOpenness') { //是否向社会开放,否需要填写开放条件
item.inputOptions && (item.inputOptions.default = formValue[item.inputOptions.field]);
item.inputOptions && (item.inputOptions.visible = item.default == 'Y');
}
});
}
const handleRegisterFormSelectChange = (val, row, info) => {
if (row.field == 'dataProductsAndServicesType' || row.field == 'productionMethod' || row.field == 'dataStructure' ||
row.field == 'dataProvisionFormat' || row.field == 'storageMethod' || row.field == 'desensitizationMethod' || row.field == 'sharingType'
|| row.field == 'sharingMethod') {
setRegisterFormItems(info);
} else if (row.field == 'industry') {
info.industryBigcode = '';
setRegisterFormItems(info);
// if (val) {
// //判断自动生成产品登记名称
// let formInline = formRef.value.formInline;
// let dataCoverages = formInline.dataCoverages;
// let cov = dataCoverages == '1' ? '全国' : (!formInline.formInline ? 'XX' : dictListMap.value['dataCoverage'].find(f => f.value == formInline.dataCoverage).label);
// productRegisterInfoItems.value[0].default = cov + '-' + (val || 'XX') + '-' + (formInline.productName || 'XX')
// }
}
}
const handleRegisterFormCheckboxChange = (val, info, row) => {
row.field == 'coverageArea' && setRegisterFormItems(info);
}
const handleRegisterRadioGroupChange = (val, info, row) => {
row.field == 'sensitiveInformation' && setRegisterFormItems(info);
row.field == 'desensitizationSituation' && setRegisterFormItems(info);
row.field == 'isSocialOpenness' && setRegisterFormItems(info);
if (row.field == 'isAuthreSourceDevelop') {
if (val == 'N' && registerFormRef.value?.formInline.isSharedData == 'Y' && activeShareTabName.value == 'authSource') {
activeShareTabName.value = 'shareOrgs';
} else if (val == 'Y' && activeShareTabName.value == 'shareOrgs' && registerFormRef.value?.formInline.isSharedData == 'N') {
activeShareTabName.value = 'authSource';
}
} else if (row.field == 'isSharedData') {
if (val == 'N' && registerFormRef.value?.formInline.isAuthreSourceDevelop == 'Y' && activeShareTabName.value == 'shareOrgs') {
activeShareTabName.value = 'authSource';
} else if (val == 'Y' && activeShareTabName.value == 'authSource' && registerFormRef.value?.formInline.isAuthreSourceDevelop == 'N') {
activeShareTabName.value = 'shareOrgs';
}
}
}
const activeShareTabName = ref('authSource');
/** ----------------- 被授权资源相关信息 ------------------------- */
const authSourceTableRef = ref();
const authSourceData: any = ref([]);
/** 被授权资源信息的表格配置 */
const authSourceTableInfo = ref({
id: "auth-table",
height: '214px',
fields: [
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "授权运营时间起", field: "authOperatTimeStart", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "授权运营时间止", field: "authOperatTimeEnd", width: 140, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "数据资源登记确认单编码", field: "dataRegistCode", width: 200, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "数据资源登记名称", field: "dataRegistName", width: 160, required: true, columClass: 'edit-colum', type: 'edit' },
],
editInfo: {
dataRegistCode: {
label: '',
type: 'input',
field: 'dataRegistCode',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
dataRegistName: {
label: '',
type: 'input',
field: 'dataRegistName',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
authOperatTimeStart: {
label: '',
type: 'date',
field: 'authOperatTimeStart',
default: '',
placeholder: '请选择',
clearable: true,
},
authOperatTimeEnd: {
label: '',
type: 'date',
field: 'authOperatTimeEnd',
default: '',
placeholder: '请选择',
clearable: true,
},
},
STATUS: 'edit',
data: authSourceData.value,
showPage: false,
actionInfo: {
show: true,
label: "操作",
type: "btn",
width: 60,
fixed: 'right',
btns: [
{
label: "删除", value: "remove", click: (scope) => {
let index = scope.$index;
proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
authSourceData.value.splice(index, 1);
authSourceTableInfo.value.data = authSourceData.value;
proxy.$ElMessage.success('被授权资源删除成功');
}, () => {
proxy.$ElMessage.info("已取消");
});
}
},
]
},
loading: false
});
/** 给表格添加一行入参定义。 */
const addAuthSources = () => {
authSourceData.value.push({ authOperatTimeStart: '', authOperatTimeEnd: '', dataRegistCode: '', dataRegistName: '' });
authSourceTableInfo.value.data = authSourceData.value;
nextTick(() => {
scrollLastRowToView(authSourceTableRef.value?.tableRef, authSourceData.value.length);
})
}
/** ------------------- 共有组织机构表格信息 --------------- */
const orgTableRef = ref();
const orgData: any = ref([]);
/** 组织机构性质 */
const sharedInstitutiontTypeList: any = ref([]);
/** 被授权资源信息的表格配置 */
const orgTableInfo = ref({
id: "org-table",
height: '214px',
fields: [
{ label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
{ label: "共有组织统一社会信用代码", field: "sharedInstitutionCode", width: 220, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "共有组织机构名称", field: "sharedInstitutionName", width: 160, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "组织机构性质", field: "sharedInstitutiontType", width: 130, required: true, columClass: 'edit-colum', type: 'edit' },
{ label: "注册地址", field: "sharedInstitutionAdress", width: 170, required: false, columClass: 'edit-colum', type: 'edit' },
],
editInfo: {
sharedInstitutionCode: {
label: '',
type: 'input',
field: 'sharedInstitutionCode',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
sharedInstitutionName: {
label: '',
type: 'input',
field: 'sharedInstitutionName',
default: '',
maxlength: 50,
placeholder: '请输入',
clearable: true,
},
sharedInstitutiontType: {
label: '',
type: 'select',
field: 'sharedInstitutiontType',
default: '',
options: sharedInstitutiontTypeList.value,
props: {
label: 'label',
value: 'value'
},
placeholder: '请选择',
clearable: true,
filterable: true
},
sharedInstitutionAdress: {
label: '',
type: 'input',
field: 'sharedInstitutionAdress',
default: '',
maxlength: 100,
placeholder: '请输入',
clearable: true,
},
},
STATUS: 'edit',
data: orgData.value,
showPage: false,
actionInfo: {
show: true,
label: "操作",
type: "btn",
width: 60,
fixed: 'right',
btns: [
{
label: "删除", value: "remove", click: (scope) => {
let index = scope.$index;
proxy.$openMessageBox("此操作将永久删除, 是否继续?", () => {
orgData.value.splice(index, 1);
orgTableInfo.value.data = orgData.value;
proxy.$ElMessage.success('被授权资源删除成功');
}, () => {
proxy.$ElMessage.info("已取消");
});
}
},
]
},
loading: false
});
/** 给表格添加一行入参定义。 */
const addOrgs = () => {
orgData.value.push({ sharedInstitutionCode: '', sharedInstitutionName: '', sharedInstitutiontType: '', sharedInstitutionAdress: '' });
orgTableInfo.value.data = orgData.value;
nextTick(() => {
scrollLastRowToView(orgTableRef.value?.tableRef, orgData.value.length);
})
}
/** --------------------- 产品附件信息 ------------- */
const uploadFormRef = ref();
const uploadFormItems: any = ref([]);
/** 上传文件类型的字典列表 */
const uploadFileList: any = ref([]);
const uploadFormRules: any = ref({});
/** 获取产品基本信息的字典列表并设置 */
const getDictListDataByKey = (key, dictType) => {
getParamsList({ dictType: dictType }).then((res: any) => {
if (res?.code == proxy.$passCode) {
dictListMap.value[key] = res.data || [];
let item = productBaseInfoItems.value.find(i => i.field == key);
item && (item.options = dictListMap.value[key]);
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
/** 获取产品登记信息的字典列表并设置 */
const getRegisterDictDataByKey = (key, dictType, isChild = false) => {
return getParamsList({ dictType: dictType }).then((res: any) => {
if (res?.code == proxy.$passCode) {
dictListMap.value[key] = res.data || [];
let item = productRegisterInfoItems.value.find(i => !isChild ? i.field == key : i.field == `${key}Group`);
if (isChild) {
let childItem: any = item && item.children?.length && item.children.find(c => c.field == key);
if (childItem && childItem.field == 'productionMethod') {
childItem.options = dictListMap.value['productionMethod'].filter(d => ['1', '2', '3', '5', '8'].includes(d.value));
} else {
childItem && (childItem.options = dictListMap.value[key]);
}
} else {
item && (item.options = dictListMap.value[key]);
}
return;
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
const deploymentId = ref('');
const baseInfoExpand = ref(true);
const paramsInfoExpand = ref(true);
const registerInfoExpand = ref(true);
const authInfoExpand = ref(true);
const uploadInfoExpand = ref(true);
/** 获取详情信息接口 */
const detailInfo: any = ref({});
onBeforeMount(async () => {
if (guid) {
fullscreenLoading.value = true;
}
getDictListDataByKey('productType', '资产类型');
getDictListDataByKey('updateFrequency', '更新周期');
getDictListDataByKey('medDepartmentCode', '科室');
getParamsList({ dictType: '数据资产目录主题名称' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
let key = 'subjectDomain';
dictListMap.value[key] = res.data || [];
let item = productBaseInfoItems.value.find(i => i.field == key);
item && (item.options = dictListMap.value[key]?.find(d => d.value == '1')?.childDictList || []);
} else {
proxy.$ElMessage.error(res.msg);
}
})
getDictListDataByKey('dataSources', '数据来源');
getDiseaseAll().then((res: any) => {
if (res?.code == proxy.$passCode) {
let key = 'diseaseGuid';
dictListMap.value[key] = res.data || [];
let item = productBaseInfoItems.value.find(i => i.field == key);
item && (item.options = dictListMap.value[key]);
}
})
getParamsList({ dictType: '数据覆盖范围' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
let key = 'dataCoverage';
dictListMap.value[key] = res.data || [];
let item = productBaseInfoItems.value.find(i => i.field == 'dataCoverages');
item && item.children?.[0] && (item.children[0].options = dictListMap.value[key]?.slice(1) || []);
} else {
proxy.$ElMessage.error(res.msg);
}
})
getDictListDataByKey('productDirection', '产品应用方向');
getParamsList({ dictType: '参数类型' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
fieldValueTypeList.value = res.data || [];
inputParamsTableInfo.value.editInfo.fieldValueType.options = fieldValueTypeList.value;
respParamsTableInfo.value.editInfo.fieldValueType.options = fieldValueTypeList.value;
} else {
proxy.$ElMessage.error(res.msg);
}
})
getRegisterDictDataByKey('dataProductsAndServicesType', '数据产品和服务类型', true);
getRegisterDictDataByKey('dataType', '数据分类', false);
getParentAreaPromise.value = getAreaData({ parentId: null }).then((res: any) => {
if (res?.code == proxy.$passCode) {
parentAreaData.value = res.data ?? [];
return parentAreaData.value;
}
})
// getAreaData({ parentId: null }).then((res: any) => {
// if (res?.code == proxy.$passCode) {
// parentAreaData.value = res.data ?? [];
// let item = productRegisterInfoItems.value.find(i => i.field == 'coverageArea');
// item && item.children?.length && (item.children[0].options = parentAreaData.value);
// } else {
// proxy.$ElMessage.error(res.msg);
// }
// });
getRegisterDictDataByKey('productionMethod', '数据取得方式', true);
getRegisterDictDataByKey('dataStructure', '数据结构', true);
getRegisterDictDataByKey('dataProvisionFormat', '数据提供格式', true);
getRegisterDictDataByKey('storageMethod', '数据存储方式', true);
getRegisterDictDataByKey('updateMethod', '数据更新方式', false);
getRegisterDictDataByKey('dataStorageUnit', '数据存储量单位', true).then(() => {
let item = productRegisterInfoItems.value.find(i => i.field == 'dataStorageIncreaseUnitGroup');
item && item.children?.length && (item.children[1].options = dictListMap.value['dataStorageUnit']);
});
getParamsList({ dictType: '敏感信息主体' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
let key = 'sensitiveInvolvingSubject';
dictListMap.value[key] = res.data || [];
let item = productRegisterInfoItems.value.find(i => i.field == 'sensitiveInformation');
item?.inputOptions && (item.inputOptions.options = dictListMap.value[key]);
return;
} else {
proxy.$ElMessage.error(res.msg);
}
});
getRegisterDictDataByKey('desensitizationMethod', '脱敏方式', true);
getRegisterDictDataByKey('depositMethod', '存证方式', false);
getRegisterDictDataByKey('sharingType', '共享类型', true);
getRegisterDictDataByKey('sharingMethod', '共享方式', true);
getRegisterDictDataByKey('productUsage', '产品用途', false);
getCamundaDeploymentId('10030', userData.tenantGuid, userData.staffGuid).then((res: any) => {
if (res?.code == proxy.$passCode) {
deploymentId.value = res.data;
} else {
proxy.$ElMessage.error(res.msg);
}
})
getParamsList({ dictType: '组织机构性质' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
sharedInstitutiontTypeList.value = res.data || [];
orgTableInfo.value.editInfo.sharedInstitutiontType.options = sharedInstitutiontTypeList.value;
} else {
proxy.$ElMessage.error(res.msg);
}
});
const res: any = await getParamsList({ dictType: '领域' });
if (res?.code == proxy.$passCode) {
let key = 'domain';
dictListMap.value[key] = res.data || [];
let itemIndex = productBaseInfoItems.value.findIndex(i => i.field == key);
let item = productBaseInfoItems.value[itemIndex];
item && (item.options = dictListMap.value[key]);
let item1 = productBaseInfoItems.value[itemIndex + 1];
item1 && item.default && (item1.options = dictListMap.value[key].find(s => s.value == item.default)?.childDictList || []);
} else {
proxy.$ElMessage.error(res.msg);
}
let ps1 = getRegisterDictDataByKey('industry', '行业分类', false);
let ps2 = getParamsList({ dictType: '文件类型' }).then((res: any) => {
if (res?.code == proxy.$passCode) {
let data = uploadFileList.value = res.data || [];
uploadFormRules.value = {};
uploadFormItems.value = data.map(d => {
// uploadFormRules.value[`files-${d.value}`] = [{
// validator: (rule: any, value: any, callback: any) => {
// if (!value?.length) {
// callback(new Error('请上传文件'))
// } else {
// callback();
// }
// }, trigger: 'change'
// }];
return {
label: d.label,
tip: '支持扩展名:pdf、png、jpg、gif、rar、zip,单个文件不得大于10M',
type: 'upload-file',
accept: '.pdf, .png, .jpg, .gif, .rar, .zip',
required: false,
limitSize: 10,
default: [],
field: `files-${d.value}`,
}
})
} else {
proxy.$ElMessage.error(res.msg);
}
})
if (guid) {
fullscreenLoading.value = true;
Promise.all([ps1, ps2]).then(() => {
getRegiaterDetail({ guid: guid }).then((res: any) => {
fullscreenLoading.value = false;
if (res?.code == proxy.$passCode) {
detailInfo.value = res.data || {};
detailInfo.value.dataSources = (detailInfo.value.dataSources || '') + '';
detailInfo.value.productKeywords = !detailInfo.value.productKeywords ? [] : detailInfo.value.productKeywords.split(',');
let dataCoverage = detailInfo.value.dataCoverage;
if (dataCoverage.length == 1 && dataCoverage[0] == '1') {
detailInfo.value.dataCoverages = '1';
detailInfo.value.dataCoverage = [];
} else {
detailInfo.value.dataCoverages = '';
detailInfo.value.dataCoverage = dataCoverage;
}
let approveVO = detailInfo.value.approveVO;
if (approveVO && (approveVO.approveState == 'C' || approveVO.approveState == 'R') && approveVO.staffGuid == userData.staffGuid && detailInfo.value.bizApproveState != 'D') {
restart.value = true;
}
setProductBaseFormItems(detailInfo.value);
let dataCoverageTimeRange: string[] = [];
let dataCoverageStartTime = detailInfo.value.registerRSVO.dataCoverageStartTime;
let dataCoverageEndTime = detailInfo.value.registerRSVO.dataCoverageEndTime;
if (dataCoverageStartTime && dataCoverageEndTime) {
dataCoverageTimeRange = [dataCoverageStartTime, dataCoverageEndTime];
}
setRegisterFormItems(Object.assign({}, detailInfo.value.registerRSVO || {}, {
dataCoverageTimeRange: dataCoverageTimeRange
}), true);
inputParamsData.value = detailInfo.value.reqParamListRSVOS?.map(d => {
return {
fieldEnName: d.fieldEnName,
fieldCnName: d.fieldCnName,
fieldValueType: d.fieldValueType,
fieldMandatory: d.fieldMandatory,
fieldComment: d.fieldComment,
levelCode: d.levelCode
}
}) || [];
inputParamsTableInfo.value.data = inputParamsData.value;
respParamsData.value = detailInfo.value.respParamListRSVOS?.map(d => {
return {
fieldEnName: d.fieldEnName,
fieldCnName: d.fieldCnName,
fieldValueType: d.fieldValueType,
fieldMandatory: d.fieldMandatory,
fieldComment: d.fieldComment,
levelCode: d.levelCode
}
}) || [];
respParamsTableInfo.value.data = respParamsData.value;
authSourceData.value = detailInfo.value.resourcesRSVOS?.map(d => {
return {
authOperatTimeStart: d.authOperatTimeStart,
authOperatTimeEnd: d.authOperatTimeEnd,
dataRegistCode: d.dataRegistCode,
dataRegistName: d.dataRegistName
}
}) || [];
authSourceTableInfo.value.data = authSourceData.value;
orgData.value = detailInfo.value.organizationRSVOS?.map(d => {
return {
sharedInstitutionCode: d.sharedInstitutionCode,
sharedInstitutionName: d.sharedInstitutionName,
sharedInstitutiontType: d.sharedInstitutiontType,
sharedInstitutionAdress: d.sharedInstitutionAdress
}
}) || [];
orgTableInfo.value.data = orgData.value;
let attachmentRQVOS = detailInfo.value.attachmentRSVOS || [];
uploadFormItems.value.forEach(item => {
let field = item.field;
let key = field.slice(6);
item.default = attachmentRQVOS.filter(a => a.fileType == key).map(f => {
return {
name: f.fileName,
url: f.fileUrl
}
})
})
} else {
proxy.$ElMessage.error(res.msg);
}
})
}).catch(() => {
fullscreenLoading.value = false;
})
}
})
const cancel = () => {
proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => {
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
name: 'registerManagemant'
});
}, () => {
proxy.$ElMessage.info("已取消");
});
}
/** 提交草稿,不需要检验 */
const saveDraft = () => {
let params: any = { isSubmit: false };
let baseInfoValue = formRef.value.formInline;
let registerInfoValue = registerFormRef.value.formInline;
/** 产品登记名称,是覆盖范围-行业大类-产品名称 */
let coverName = baseInfoValue.dataCoverages == '1' ? '全国' : (baseInfoValue.dataCoverage?.length && dictListMap.value['dataCoverage'].find(f => f.value == baseInfoValue.dataCoverage[0])?.label || '');
let industryName = registerInfoValue.industry && dictListMap.value['industry'].find(d => d.value == registerInfoValue.industry)?.label || '';
let dataRegistName = coverName + '-' + industryName + '-' + baseInfoValue.productName;
let uploadValue = uploadFormRef.value.formInline;
let attachmentRQVOS: any[] = [];
for (const key in uploadValue) {
if (!uploadValue[key]?.length) {
continue;
}
let n = key.slice(6);
uploadValue[key].forEach(uf => {
attachmentRQVOS.push({
fileName: uf.name,
fileType: n,
fileUrl: uf.url,
});
})
}
Object.assign(params, {
...baseInfoValue,
dataCoverage: baseInfoValue.dataCoverages == '1' ? ['1'] : baseInfoValue.dataCoverage,
productKeywords: baseInfoValue.productKeywords.join(',')
}, {
reqParamListRQVOS: inputParamsData.value,
respParamListRQVOS: respParamsData.value,
resourcesRQVOS: authSourceData.value,
organizationRQVOS: orgData.value
}, {
registerRQVO: {
...registerInfoValue,
dataRegistName: dataRegistName,
dataCoverageStartTime: registerInfoValue.dataCoverageTimeRange?.[0],
dataCoverageEndTime: registerInfoValue.dataCoverageTimeRange?.[1],
// coverageArea: !registerInfoValue.coverageAreas ? [] : (registerInfoValue.coverageArea == 'all' ? ['all'] : [registerInfoValue.coverageAreas])
},
attachmentRQVOS: attachmentRQVOS,
exchangeGuid: exGuid,
productPublisher: userData.tenantGuid,
productPublisherName: userData.tenantName
});
if (registerInfoValue.coverageArea == 'all') {
params.registerRQVO.coverageArea = [['all']];
} else if (!registerInfoValue.coverageArea) {
params.registerRQVO.coverageArea = [registerInfoValue.coverageAreas];
}
fullscreenLoading.value = true;
if (guid) {
params.guid = guid;
registerUpdate(params).then((res: any) => {
fullscreenLoading.value = false;
if (res?.code == proxy.$passCode) {
proxy.$ElMessage.success('资产登记编辑保存成功');
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
name: 'registerManagemant',
});
assetStore.set(true);
} else {
proxy.$ElMessage.error(res.msg);
}
});
} else {
registerSave(params).then((res: any) => {
fullscreenLoading.value = false;
if (res?.code == proxy.$passCode) {
proxy.$ElMessage.success('新建资产登记保存成功');
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
name: 'registerManagemant',
});
assetStore.set(true);
} else {
proxy.$ElMessage.error(res.msg);
}
});
}
}
/** 提交申请,需要检验。 */
const save = () => {
formRef.value.ruleFormRef?.validate((valid1, errorItem) => {
if (valid1) {
/** 先检验入参出参信息 */
if (!inputParamsData.value.length) {
activeTabName.value = 'reqParamList';
proxy.$ElMessage.error('入参信息不能为空');
return;
}
if (!respParamsData.value.length) {
activeTabName.value = 'respParamList';
proxy.$ElMessage.error('出参信息不能为空');
return;
}
for (const d of inputParamsData.value) {
if (!d.fieldEnName) {
activeTabName.value = 'reqParamList';
proxy.$ElMessage.error('入参信息的参数英文不能为空');
return;
}
if (!d.fieldCnName) {
activeTabName.value = 'reqParamList';
proxy.$ElMessage.error('入参信息的参数中文不能为空');
return;
}
if (!d.levelCode) {
activeTabName.value = 'reqParamList';
proxy.$ElMessage.error('入参信息的展示层级顺序不能为空');
return;
}
}
for (const d of respParamsData.value) {
if (!d.fieldEnName) {
activeTabName.value = 'respParamList';
proxy.$ElMessage.error('出参信息的参数英文不能为空');
return;
}
if (!d.fieldCnName) {
activeTabName.value = 'respParamList';
proxy.$ElMessage.error('出参信息的参数中文不能为空');
return;
}
if (!d.levelCode) {
activeTabName.value = 'respParamList';
proxy.$ElMessage.error('出参信息的展示层级顺序不能为空');
return;
}
}
registerFormRef.value.ruleFormRef?.validate((valid2, errorItem) => {
if (valid2) {
let registerInfo = registerFormRef.value.formInline;
if (registerInfo.isAuthreSourceDevelop == 'Y') {
if (!authSourceData.value.length) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('被授权资源信息不能为空');
return;
}
for (const d of authSourceData.value) {
if (!d.authOperatTimeStart) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('授权运营时间起不能为空');
return;
}
if (!d.authOperatTimeEnd) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('授权运营时间止不能为空');
return;
}
if (!d.dataRegistCode) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('数据资源登记确认单编码不能为空');
return;
}
if (!d.dataRegistName) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('数据资源登记名称不能为空');
return;
}
if (d.authOperatTimeStart > d.authOperatTimeEnd) {
activeShareTabName.value = 'authSource';
proxy.$ElMessage.error('授权运营时间起不能大于授权运营时间止');
return;
}
}
}
if (registerInfo.isSharedData == 'Y') {
if (!orgData.value.length) {
activeShareTabName.value = 'shareOrgs';
proxy.$ElMessage.error('共有组织机构不能为空');
return;
}
for (const d of orgData.value) {
if (!d.sharedInstitutionCode) {
activeShareTabName.value = 'shareOrgs';
proxy.$ElMessage.error('共有组织统一社会信用代码不能为空');
return;
}
if (!d.sharedInstitutionName) {
activeShareTabName.value = 'shareOrgs';
proxy.$ElMessage.error('共有组织机构名称不能为空');
return;
}
if (!d.sharedInstitutiontType) {
activeShareTabName.value = 'shareOrgs';
proxy.$ElMessage.error('组织机构性质不能为空');
return;
}
}
}
uploadFormRef.value.ruleFormRef.validate((valid3, errorItem) => {
if (valid3) {
let params: any = { isSubmit: true, immediateApprove: true, };
let baseInfoValue = formRef.value.formInline;
let registerInfoValue = registerFormRef.value.formInline;
/** 产品登记名称,是覆盖范围-行业大类-产品名称 */
let coverName = baseInfoValue.dataCoverages == '1' ? '全国' : dictListMap.value['dataCoverage'].find(f => f.value == baseInfoValue.dataCoverage[0])?.label || 'XX';
let industryName = dictListMap.value['industry'].find(d => d.value == registerInfoValue.industry)?.label || 'XX';
let dataRegistName = coverName + '-' + industryName + '-' + baseInfoValue.productName;
let uploadValue = uploadFormRef.value.formInline;
let attachmentRQVOS: any[] = [];
for (const key in uploadValue) {
if (!uploadValue[key]?.length) {
continue;
}
let n = key.slice(6);
uploadValue[key].forEach(uf => {
attachmentRQVOS.push({
fileName: uf.name,
fileType: n,
fileUrl: uf.url,
});
})
}
Object.assign(params, {
...baseInfoValue,
dataCoverage: baseInfoValue.dataCoverages == '1' ? ['1'] : baseInfoValue.dataCoverage,
productKeywords: baseInfoValue.productKeywords.join(',')
}, {
reqParamListRQVOS: inputParamsData.value,
respParamListRQVOS: respParamsData.value,
resourcesRQVOS: authSourceData.value,
organizationRQVOS: orgData.value
}, {
registerRQVO: {
...registerInfoValue,
exchangeGuid: exGuid,
dataRegistName: dataRegistName,
dataCoverageStartTime: registerInfoValue.dataCoverageTimeRange[0],
dataCoverageEndTime: registerInfoValue.dataCoverageTimeRange[1],
// coverageArea: registerInfoValue.coverageArea == 'all' ? ['all'] : [registerInfoValue.coverageAreas]
},
attachmentRQVOS: attachmentRQVOS,
exchangeGuid: exGuid,
productPublisher: userData.tenantGuid,
productPublisherName: userData.tenantName
});
if (registerInfoValue.coverageArea == 'all') {
params.registerRQVO.coverageArea = [['all']];
} else if (!registerInfoValue.coverageArea) {
params.registerRQVO.coverageArea = [registerInfoValue.coverageAreas];
}
fullscreenLoading.value = true;
if (guid) {
params.guid = guid;
registerUpdate(params).then((res: any) => {
fullscreenLoading.value = false;
if (res?.code == proxy.$passCode) {
proxy.$ElMessage.success('资产登记编辑提交申请成功');
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
name: 'registerManagemant',
});
assetStore.set(true);
} else {
proxy.$ElMessage.error(res.msg);
}
});
} else {
registerSave(params).then((res: any) => {
fullscreenLoading.value = false;
if (res?.code == proxy.$passCode) {
proxy.$ElMessage.success('新建资产登记提交申请成功');
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
name: 'registerManagemant',
});
assetStore.set(true);
} else {
proxy.$ElMessage.error(res.msg);
}
});
}
} else {
var obj = Object.keys(errorItem);
uploadFormRef.value.ruleFormRef.scrollToField(obj[0]);
}
});
} else {
var obj = Object.keys(errorItem);
registerFormRef.value.ruleFormRef.scrollToField(obj[0])
registerInfoExpand.value = true;
uploadFormRef.value.ruleFormRef.validate(() => { });
}
})
} else {
var obj = Object.keys(errorItem);
formRef.value.ruleFormRef.scrollToField(obj[0])
baseInfoExpand.value = true;
registerFormRef.value.ruleFormRef.validate(() => { });
uploadFormRef.value.ruleFormRef.validate(() => { });
}
});
}
</script>
<template>
<div class="container_wrap" v-loading="fullscreenLoading">
<div class="content_main">
<ContentWrap id="id-baseInfo" title="数据产品信息" description="" :isExpand="baseInfoExpand" expandSwicth
@expand="(v) => baseInfoExpand = v">
<Form ref="formRef" :itemList="productBaseInfoItems" :rules="productBaseInfoFormRules" formId="base-info-edit"
@selectChange="handleProductBaseFormSelectChange" @checkboxChange="handleProductBaseFormCheckboxChange"
col="col3 custom-form" />
</ContentWrap>
<ContentWrap id="id-params" title="入参出参信息" description="" :expandSwicth="true" class="mt16"
:isExpand="paramsInfoExpand" @expand="(v) => paramsInfoExpand = v">
<el-tabs v-model="activeTabName" class="param-tabs">
<el-tab-pane label="入参信息" name="reqParamList">
<Table ref="inputParamsTableRef" :tableInfo="inputParamsTableInfo" class="fiveRow-table" />
<div class="row-add-btn">
<el-button link @click="addInputParams" :icon="CirclePlus" v-preReClick>添加</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="出参信息" name="respParamList">
<Table ref="respParamsTableRef" :tableInfo="respParamsTableInfo" class="fiveRow-table" />
<div class="row-add-btn">
<el-button link @click="addRespParams" :icon="CirclePlus" v-preReClick>添加</el-button>
</div>
</el-tab-pane>
</el-tabs>
</ContentWrap>
<ContentWrap id="id-registerInfo" title="数据产品登记信息" description="" :expandSwicth="true" class="mt16"
:isExpand="registerInfoExpand" @expand="(v) => registerInfoExpand = v">
<Form ref="registerFormRef" :itemList="productRegisterInfoItems" :rules="productRegisterInfoFormRules"
formId="register-edit" col="col3 custom-form" @selectChange="handleRegisterFormSelectChange"
@checkboxChange="handleRegisterFormCheckboxChange" @radioGroupChange="handleRegisterRadioGroupChange" />
</ContentWrap>
<ContentWrap
v-show="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' || registerFormRef?.formInline.isSharedData == 'Y'"
id="id-anthor" :isExpand="authInfoExpand" @expand="(v) => authInfoExpand = v"
:title="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' && registerFormRef?.formInline.isSharedData == 'Y' ? '被授权资源信息和共有组织机构' : (registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y' ? '被授权资源信息' : '共有组织机构信息')"
description="" :expandSwicth="true" class="mt16">
<el-tabs v-model="activeShareTabName" class="param-tabs">
<el-tab-pane label="被授权资源" v-if="registerFormRef?.formInline?.isAuthreSourceDevelop == 'Y'" name="authSource">
<Table ref="authSourceTableRef" :tableInfo="authSourceTableInfo" class="fiveRow-table" />
<div class="row-add-btn">
<el-button link @click="addAuthSources" :icon="CirclePlus" v-preReClick>添加</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="共有组织机构" v-if="registerFormRef?.formInline.isSharedData == 'Y'" name="shareOrgs">
<Table ref="orgsTableRef" :tableInfo="orgTableInfo" class="fiveRow-table" />
<div class="row-add-btn">
<el-button link @click="addOrgs" :icon="CirclePlus" v-preReClick>添加</el-button>
</div>
</el-tab-pane>
</el-tabs>
</ContentWrap>
<ContentWrap id="id-files" title="产品附件信息" description="" expandSwicth class="mt16" :isExpand="uploadInfoExpand"
@expand="(v) => uploadInfoExpand = v">
<Form class='uploadForm' ref="uploadFormRef" :itemList="uploadFormItems" formId="upload-form"
:rules="uploadFormRules" col="col2" />
</ContentWrap>
<ContentWrap id="id-approveInfo" title="审批信息" expandSwicth class="mt16">
<ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :definitionId="''">
</ApprovalProcess>
</ContentWrap>
</div>
<div class="tool_btns">
<div class="btns">
<el-button plain @click="cancel">取消</el-button>
<el-button type="primary" @click="saveDraft" v-if="!restart">保存</el-button>
<el-button type="primary" @click="save">提交申请</el-button>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.container_wrap {
padding: 0;
height: 100%;
overflow: hidden;
&>.content_main {
padding: 16px;
height: calc(100% - 44px);
overflow: hidden auto;
&.full {
height: 100%;
}
}
}
:deep(.el-form) {
.checkbox-cascader {
display: flex;
.el-cascader {
margin-left: 8px;
}
}
.checkbox-right {
width: calc(100% - 50px);
&.el-form-item {
margin-bottom: 0px;
margin-right: 0px;
width: 100%;
}
}
}
.row-add-btn {
.el-button--default {
padding: 4px 0px;
margin-top: 4px;
}
:deep(.el-icon) {
width: 16px;
height: 16px;
svg {
width: 16px;
height: 16px;
}
}
}
:deep(.el-tabs) {
margin-top: -8px;
.el-tabs__header {
margin-bottom: 8px;
}
.el-tabs__item {
height: 32px;
&:nth-child(2) {
padding-left: 16px;
}
}
}
.mt16 {
margin-top: 16px;
}
.tool_btns {
display: flex;
justify-content: center;
align-items: center;
height: 44px;
padding: 0 16px;
border-top: 1px solid #d9d9d9;
}
:deep(.dialog-form-inline.col3) {
.w50-l {
width: 100%;
margin-right: 4px;
}
.w50 {
width: 100%;
}
}
.uploadForm {
align-items: flex-start;
}
:deep(.other-group-flex.el-radio-group) {
.el-radio:last-child {
width: calc(100% - 64px);
.el-radio__label {
width: 100%;
.other-input {
width: 100%;
}
}
}
}
</style>
\ No newline at end of file
......@@ -422,7 +422,10 @@ const tableBtnClick = (scope, btn) => {
});
} else if (type === 'detail') { // 详情
if (row.registerApproveState == 'Y') {
router.push({
row.dataSource == '1' ? router.push({
name: 'registerValueJSZQDetail',
query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
}) : router.push({
name: 'registerValueDetail',
query: { guid: row.registerGuid, costAssessGuid: row.guid, type: 'costAssess', tenantGuid: row.tenantGuid, tenantName: row.tenantName }
});
......@@ -495,6 +498,7 @@ const formItems = ref<any>([
value: 'guid',
label: 'damName'
},
filterable: true,
visible: true,
required: true
}, {
......@@ -509,6 +513,7 @@ const formItems = ref<any>([
value: 'guid',
label: 'tenantName'
},
filterable: true,
visible: false,
required: true
},
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!