e9767fa0 by lxs

数据定价更新

1 parent 264403ea
......@@ -188,6 +188,15 @@ export const deleteConfigure = (params) => {
});
};
// 复制配置
export const addCopyConfigure = (params) => {
return request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/pricing-configure/copy`,
method: "post",
data: params,
});
};
// 获取数据定价
export const getPriceList = (params) => {
return request({
......@@ -245,9 +254,9 @@ export const deletePrice = (params) => {
// 获取数据资源目录
export const getDamCatalogList = (params) => {
return request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-grounding/not-exclude-overview-page-list`,
method: "post",
data: params,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/get-table-select-new`,
method: "get",
params,
});
};
......
......@@ -303,3 +303,10 @@ export const getCurrentUserInfo = (params) => {
params
});
};
/** 下载文件模板 */
export const exportTemplate = (params) => request({
url: `${import.meta.env.VITE_APP_ADD_FILE}/import-config/export-template?bizGuid=${params.bizGuid}&importType=${params.importType}`,
method: 'post',
responseType: 'blob'
});
......
......@@ -248,6 +248,7 @@ onMounted(() => {
:show-header="props.tableInfo.showHeader ?? true" stripe :border="props.tableInfo.border
?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')"
:max-height="maxHeight" :row-key="rowKey" :current-row-key="currentRowKey" :row-class-name="rowClassName"
:tree-props="props.tableInfo.treeProps" :default-expand-all="props.tableInfo.expandAll ?? false"
:expand-row-keys="props.tableInfo.expandedKey" v-loading="tableDataLoading" @row-click="rowClick"
@row-dblclick="rowDblClick" @selection-change="selectionChange" @select="tableCheckboxSelectChange"
@select-all="tableCheckboxAllSelectChange" style="width: 100%; display: inline-block"
......
......@@ -113,11 +113,14 @@ defineExpose({
<span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label
}}:</span>
<el-select v-model="extraParams[item.selectInfo.field]" :placeholder="item.selectInfo.placeholder"
:disabled="item.selectInfo.disabled" @change="selectChange">
<el-option v-for="opts in item.selectInfo.options" :label="opts.label" :value="opts.value" />
:disabled="item.selectInfo.disabled" @change="selectChange" :filterable="item.selectInfo.filterable" :style="item.selectInfo.style">
<el-option v-for="opts in item.selectInfo.options"
:label="item.selectInfo.props?.label ? opts[item.selectInfo.props.label] : opts.label"
:value="item.selectInfo.props?.value ? opts[item.selectInfo.props.value] : opts.value"
:disabled="opts.disabled" />
</el-select>
</div>
<div class="form_item" v-if="item.type == 'tree-select'">
<div class="form_item" v-else-if="item.type == 'tree-select'">
<span class="item_label" :class="{ required_mark: item.selectInfo.required }">{{ item.selectInfo.label
}}:</span>
<el-tree-select
......@@ -176,7 +179,7 @@ defineExpose({
</el-button>
</div>
<el-upload v-else ref="fileUploadRef" class="upload_panel" :class="[props.uploadInfo.col]"
v-model:file-list="fileList" :action="item.uploadInfo.action" :auto-upload="item.uploadInfo.auto ?? ''"
v-model:file-list="fileList" :action="item.uploadInfo.action ?? ''" :auto-upload="item.uploadInfo.auto ?? ''"
:drag="item.uploadInfo.drag ?? false" :accept="item.uploadInfo.accept" :limit="item.uploadInfo.limit ?? 1"
:on-change="onUpload" :on-exceed="val => exceedFile(val, item.uploadInfo.cover ?? false)"
:on-error="handleError" :on-success="handleSuccess" :before-upload="beforeUPload"
......
......@@ -9,7 +9,7 @@ import useUserStore from "@/store/modules/user";
import useDataAssetStore from "@/store/modules/dataAsset";
import { getAllFlowData } from '@/api/modules/queryService';
import { getDamCatalogList } from "@/api/modules/dataPricing";
import { getRegisterCatalogDetail, getDataResourceUpSummaryList, getRegisterCatalogTableDetail } from "@/api/modules/dataResourceUpService";
import { getRegisterCatalogDetail, getRegisterCatalogTableDetail } from "@/api/modules/dataAsset";
import { download } from '@/utils/common'
import {
getConfigureList,
......@@ -24,7 +24,6 @@ import {
exportModelScore
} from '@/api/modules/dataPricing';
import { changeNum } from "@/utils/common";
import { merge } from 'lodash-es';
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
......@@ -202,7 +201,7 @@ const getDiseaseData = () => {
}
// 获取数据资源
const getDataCatalog = () => {
return getDamCatalogList({ damName: "", pageIndex: 1, pageSize: -1, bizApproveState: "Y" }).then((res: any) => {
return getDamCatalogList({ dataType: userData.superTubeFlag == 'Y' ? "P" : "D", sceneType: "D" }).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data.records || [];
typeMap.value.dataResourceGuid = JSON.parse(JSON.stringify(data));
......@@ -696,24 +695,6 @@ const getDemandField = (rGuid, rIndex) => {
}
});
tableData.value[rIndex].dataFields = tData;
// // 合并数组
// const arr1Map = new Map(fData.map(item => [item.guid, item]));
// const merged = tFields.map(item => {
// if (item.demandFieldGuid && arr1Map.has(item.demandFieldGuid)) {
// return merge({}, arr1Map.get(item.demandFieldGuid), item);
// }
// return item;
// });
// fData.forEach(item => {
// if (!tFields.some(x => x.demandFieldGuid === item.guid)) {
// merged.push(item);
// }
// });
// const tData = merged;
// tableData.value[rIndex].dataFields = tData;
} else {
proxy.$ElMessage.error(res.msg);
......
......@@ -84,9 +84,10 @@ const tableInfo = ref({
label: "操作",
type: "btn",
isMore: false,
width: 120,
width: 160,
btns: [
{ label: "编辑", value: "edit" },
{ label: "复制", value: "copy" },
{ label: "删除", value: "del" }
]
}
......@@ -171,6 +172,17 @@ const tableBtnClick = (scope, btn) => {
}
}
);
} else if(type == 'copy'){ //复制
router.push(
{
name: 'priceModel',
query: {
guid: row.guid,
name: `${row.modelName}_副本`,
type
}
}
);
} else if (type === 'del') { // 删除
open('确定要删除该条数据吗?', 'warning');
}
......
......@@ -15,7 +15,8 @@ import {
getDemandTreeList,
getConfigureDetail,
saveConfigure,
updateConfigure
updateConfigure,
addCopyConfigure
} from '@/api/modules/dataPricing';
const { proxy } = getCurrentInstance() as any;
......@@ -27,6 +28,7 @@ const fullPath = route.fullPath;
const userData = JSON.parse(localStorage.userData);
const guid = route.query.guid;
const modelName = route.query.name;
const detailType = route.query.type;
const loading = ref(false);
const flowDetail: any = ref({});
......@@ -792,6 +794,7 @@ const getModelDetail = () => {
getConfigureDetail({ guid }).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data || {};
detailType == 'copy' && (data.modelName = `${data.modelName}_副本`);
flowDetail.value = data;
getDataTypeList()
}
......@@ -939,7 +942,7 @@ const btnClick = async (btn, row: any = null) => {
targetFormItems.value[2].visible = row.computationalFormula == '1';
targetFormItems.value.at(-2).options.map(o => {
const fData = tData.filter(t => t.targetType == '2' && t.functionName == '3');
o.disabled = fData.find(f => f.demandTableGuid == o.guid)? true: false;
o.disabled = fData.find(f => f.demandTableGuid == o.guid) ? true : false;
});
drawerInfo.value.container.contents[0] = contents.value.target;
tableData.value = [];
......@@ -990,6 +993,22 @@ const btnClick = async (btn, row: any = null) => {
};
if (guid) {
params.guid = guid
if (detailType == 'copy') {
addCopyConfigure(params).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
ElMessage({
type: "success",
message: "复制定价配置成功",
});
toPath()
} else {
proxy.$ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
});
} else {
updateConfigure(params).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
......@@ -1004,6 +1023,7 @@ const btnClick = async (btn, row: any = null) => {
}).catch(() => {
loading.value = false;
});
}
} else {
saveConfigure(params).then((res: any) => {
loading.value = false;
......@@ -1059,7 +1079,7 @@ const tableBtnClick = async (scope, btn, lData: any = null) => {
targetFormItems.value[2].visible = lData.computationalFormula == '1';
targetFormItems.value.at(-2).options.map(o => {
const fData = tData.filter(t => t.targetType == '2' && t.functionName == '3');
o.disabled = fData.find(f => f.demandTableGuid == o.guid) ? true: false;
o.disabled = fData.find(f => f.demandTableGuid == o.guid) ? true : false;
});
drawerInfo.value.container.contents[0] = contents.value.target;
drawerInfo.value.visible = true;
......
......@@ -25,12 +25,13 @@ import {
getDatabase,
getRuleTypeList
} from '@/api/modules/dataQuality';
import { getDamCatalogList } from '@/api/modules/dataPricing';
import useDataQualityStore from "@/store/modules/dataQuality";
import { useValidator } from '@/hooks/useValidator';
import { TableColumnWidth } from '@/utils/enum';
const dataQualityStore = useDataQualityStore();
const userData = JSON.parse(localStorage.userData);
const { proxy } = getCurrentInstance() as any;
const { orderNum, description } = useValidator();
......@@ -39,6 +40,8 @@ const cacheStore = useCatchStore();
/** 可选择的质量规则列表。 */
const ruleTypeList: any = ref([]);
const productList: any = ref([]);
/** 质量规则集表对象。 */
const qualityModelTreeRef = ref();
/** 树选中不同层级的,代表的类型, model, group, table */
......@@ -281,7 +284,21 @@ const formItems: any = ref([
default: '',
maxlength: 6,
required: true
}, {
},
{
label: '数据产品',
type: 'select',
field: 'damGuid',
default: '',
placeholder: '请选择',
options: productList.value,
props: {
value: 'damGuid',
label: 'damName'
},
clearable: true,
},
{
label: '描述',
type: 'textarea',
placeholder: '请输入',
......@@ -929,6 +946,16 @@ onActivated(async () => {
}
})
// 获取数据产品列表
const getProducts = () => {
getDamCatalogList({ dataType: userData.superTubeFlag == 'Y' ? "P" : "D", sceneType: "Z" }).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data.records || [];
productList.value = data;
}
})
}
onBeforeMount(() => {
getQualityGroupTreeData();
getGroupTableData();
......@@ -945,6 +972,7 @@ onBeforeMount(() => {
ElMessage.error(res.msg);
}
})
getProducts();
})
</script>
......
......@@ -18,7 +18,7 @@ import {
getImportData,
exportDictionary,
exportCollectTask,
// getImageContent
exportTemplate
} from '@/api/modules/queryService';
import {
parseAndDecodeUrl,
......@@ -29,6 +29,7 @@ import {
getDictionaryTree
} from '@/api/modules/dataInventory';
import { commonPageConfig } from '@/utils/enum';
import { getDemandTreeList, getDiseaseAll } from '@/api/modules/dataPricing';
const { proxy } = getCurrentInstance() as any;
......@@ -156,6 +157,29 @@ const getDictList = () => {
})
}
// 获取需求表树形数据
const getTreeData = () => {
if (isfileImport == '7') {
getDemandTreeList({ pageIndex: 1, pageSize: 100000, isCatalog: 'N' }).then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data?.records || [];
dictionaryList.value = data;
} else {
proxy.$ElMessage.error(res.msg);
}
})
} else {
getDiseaseAll().then((res: any) => {
if (res.code == proxy.$passCode) {
const data = res.data || [];
dictionaryList.value = data;
} else {
proxy.$ElMessage.error(res.msg);
}
})
}
}
const tabsChange = (name) => {
tabsActiveName.value = name
let info: any = {
......@@ -283,11 +307,16 @@ const batching = (type) => {
}
open("此操作将永久删除, 是否继续?", "warning", true);
} else if (type === 'importFile') {
if (isfileImport == '2' || isfileImport == '4') {
if (isfileImport == '2' || isfileImport == '4' || isfileImport == '7' || isfileImport == '8') {
dialogInfo.value.header.title = '导入数据'
dialogInfo.value.type = 'upload'
dialogInfo.value.size = isfileImport == '4' ? 600 : 500;
uploadFiles.value = []
if (isfileImport == '7') {
uploadSteps.value[0].selectInfo.options = dictionaryList.value;
} else if (isfileImport == '8') {
uploadSteps.value[0].cascaderInfo.options = dictionaryList.value;
}
uploadInfo.value.uploadInfo.steps = uploadSteps.value
const content: any = [uploadInfo.value]
dialogInfo.value.contents = content
......@@ -377,6 +406,20 @@ const exportData = (ids: any = null) => {
res?.msg && ElMessage.error(res?.msg);
}
});
} else if (tabsActiveName.value == 'importFile' && isfileImport == '7') {
exportTemplate({
bizGuid: '',
importType: "0046"
}).then((res: any) => {
download(res, '需求表管理导入模板.xlsx', 'excel')
});
} else if (tabsActiveName.value == 'importFile' && isfileImport == '8') {
exportTemplate({
bizGuid: '',
importType: "0047"
}).then((res: any) => {
download(res, '疾病管理导入模板.xlsx', 'excel')
});
}
}
......@@ -390,11 +433,11 @@ const importData = (info) => {
// dialogInfo.value.footer.btns.map((item: any) => delete item.disabled)
return
}
let paramUrl = '';
if (isfileImport == '2') {
uploadFiles.value.forEach((item: any, index: number) => {
params.append("file", item.raw);
});
let paramUrl = '';
if (isfileImport == '2') {
paramUrl = `ms-daop-zcgl-asset-dam-service/dam-catalog-table/excel-by-subject-guid?staffGuid=${userData.staffGuid}&subjectGuid=${route.query.bizGuid}`
} else if (isfileImport == '4') {
if (!info.databaseNameZh) {
......@@ -411,14 +454,17 @@ const importData = (info) => {
})
return;
}
uploadFiles.value.forEach((item: any, index: number) => {
params.append("uploadFile", item.raw);
});
paramUrl = `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/meta-collect-import?staffGuid=${userData.staffGuid}&databaseNameZh=${info.databaseNameZh}&databaseNameEn=${info.databaseNameEn}&isCover=${info.isCover}`
} else if (isfileImport == '7') {
info.bizGuid = '0046';
paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}`
paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}`
} else if (isfileImport == '8') {
info.bizGuid = '0047';
paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}`
paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}`
} else {
uploadFiles.value.forEach((item: any, index: number) => {
params.append("file", item.raw);
});
paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}&dataType=2`
if (info && Object.keys(info).length) {
paramUrl += `&extendFields=${encodeURIComponent(JSON.stringify(info))}`
......@@ -452,6 +498,10 @@ const dialogBtnClick = (btn, info) => {
if (dialogInfo.value.type == 'upload') {
if (tabsActiveName.value == 'dictionary') {
importData({ bizGuid: dictionaryGuid.value })
} else if (tabsActiveName.value == 'importFile' && isfileImport == '7') {
importData(info)
} else if (tabsActiveName.value == 'importFile' && isfileImport == '8') {
importData(info)
} else {
importData(info)
}
......@@ -478,6 +528,10 @@ const setUploadInfo = () => {
importType.value = '0034';
} else if (isfileImport == '4') {
importType.value = '0042';
} else if (isfileImport == '7') {
importType.value = '0046';
} else if (isfileImport == '8') {
importType.value = '0047';
} else {
importType.value = '0033';
}
......@@ -641,6 +695,94 @@ const setUploadInfo = () => {
}
]
uploadInfo.value.uploadInfo.extraParams = { isCover: 'Y' }
} else if (tabsActiveName.value == 'importFile' && isfileImport == '7') {
uploadSteps.value = [
{
title: '1、导入前请先录入以下内容',
type: 'select',
selectInfo: {
label: '需求表名称',
placeholder: '请选择',
field: 'menuGuid',
default: '',
options: [],
props: {
label: "menuName",
value: "guid",
},
filterable: true,
clearable: true,
required: true,
style: {
width: '191px',
}
}
},
{
title: '2、请下载最新的模板,并按照模板格式准备需要导入的数据',
type: 'btn_down'
},
{
title: '3、选择准备好的文件导入',
type: 'btn_upload',
uploadInfo: {
action: '',
auto: false,
cover: true,
fileList: [],
accept: '.xlsx, .xls',
tips: '当前支持xls、xlsx文件,默认使用第一个sheet'
}
}
]
dictionaryGuid.value = uploadSetting.value?.dictionaryGuid || ''
uploadInfo.value.uploadInfo.extraParams = {
menuGuid: dictionaryGuid.value
}
} else if (tabsActiveName.value == 'importFile' && isfileImport == '8') {
uploadSteps.value = [
{
title: '1、导入前请先录入以下内容',
type: 'cascader',
cascaderInfo: {
label: '疾病名称',
placeholder: '',
field: 'parentGuid',
options: [],
default: '',
showAllLevels: false,
props: {
checkStrictly: true,
label: "diseaseName",
value: "guid",
children: 'childList',
emitPath: false
},
filterable: true,
clearable: true,
}
},
{
title: '2、请下载最新的模板,并按照模板格式准备需要导入的数据',
type: 'btn_down'
},
{
title: '3、选择准备好的文件导入',
type: 'btn_upload',
uploadInfo: {
action: '',
auto: false,
cover: true,
fileList: [],
accept: '.xlsx, .xls',
tips: '当前支持xls、xlsx文件,默认使用第一个sheet'
}
}
]
dictionaryGuid.value = uploadSetting.value?.dictionaryGuid || ''
uploadInfo.value.uploadInfo.extraParams = {
parentGuid: dictionaryGuid.value
}
} else {
uploadSteps.value = [
{
......@@ -674,7 +816,8 @@ onActivated(() => {
if (tabsActiveName.value == 'dictionary') {
getDictList();
}
setUploadInfo()
setUploadInfo();
(isfileImport == '7' || isfileImport == '8') && getTreeData();
})
</script>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!