5324ab40 by lihua

匿名化评测对象存储支持选择索引数据源,表和字段

1 parent c633fc81
......@@ -572,7 +572,55 @@ const dataSelectInfoItems = ref([{
col: 'wid60',
visible: false,
field: 'file',
},]);
}, {
label: '索引数据源',
tip: '',
type: 'select',
required: false,
default: '',
block: false,
visible: false,
filterable: true,
props: {
label: 'databaseNameZh',
value: 'guid'
},
clearable: true,
field: 'indexDataSourceGuid',
options: [],
}, {
label: '索引数据表',
tip: '',
type: 'select',
required: false,
default: '',
block: false,
visible: false,
filterable: true,
field: 'indexTableName',
props: {
label: 'tableComment',
value: 'tableName'
},
clearable: true,
options: [],
}, {
label: '索引字段',
tip: '',
type: 'select',
required: false,
default: '',
block: false,
visible: false,
field: 'indexFieldName',
options: [],
filterable: true,
clearable: true,
props: {
label: 'chName',
value: 'enName'
},
}]);
const dataSelectInfoFormRules = ref({
taskName: [required('请输入数据集名称')],
......@@ -581,6 +629,8 @@ const dataSelectInfoFormRules = ref({
dataSourceGuid: [required('请选择数据源')],
handleType: [required('请选择处理类型')],
tableName: [required('请选择数据表')],
// indexTableName: [required('请选择索引数据表')],
// indexFieldName: [required('请选择索引字段')],
qualifiedIdentifier: [{ type: 'array', required: true, trigger: 'change', message: "请选择准标识符" }],
file: [{
validator: (rule: any, value: any, callback: any) => {
......@@ -622,6 +672,8 @@ const handleDataSelectFormSelectChange = async (val, row, formInfo) => {
parseFileDataSum.value = [];
sampleTableData.value = [];
setDataSelectFormItems(Object.assign({}, formInfo, { file: !formInfo['file'] ? [] : formInfo['file'], tableName: '', qualifiedIdentifier: [] }))
let item = dataSelectInfoItems.value.find(d => d.field == 'tableName');
item && (item.options = []);
return;
}
//清除数据表得值,重新获取下拉列表
......@@ -673,15 +725,98 @@ const handleDataSelectFormSelectChange = async (val, row, formInfo) => {
}
});
} else if (row.field == 'handleType') {
// 第一种匿名处理类型是不可以选择obs类型的。
// 第一种匿名处理类型是不可以选择obs类型的。
if (val == '01' && formInfo.dataSourceGuid && objectTypesList.value.includes(currDatasourceSelect.value?.databaseType)) {
formInfo.dataSourceGuid = '';
formInfo.tableName = '';
formInfo.indexDataSourceGuid = '';
formInfo.indexTableName = '';
formInfo.indexFieldName = '';
currDatasourceSelect.value = {};
let item = dataSelectInfoItems.value.find(d => d.field == 'tableName');
item && (item.options = []);
}
setDataSelectFormItems(formInfo);
} else if (row.field == 'indexDataSourceGuid') {
// 清空索引数据表和索引字段
setDataSelectFormItems(Object.assign({}, formInfo, { indexTableName: '', indexFieldName: '' }));
let indexTableItem = dataSelectInfoItems.value.find(d => d.field == 'indexTableName');
let indexFieldItem = dataSelectInfoItems.value.find(d => d.field == 'indexFieldName');
if (indexTableItem) {
indexTableItem.options = [];
}
if (indexFieldItem) {
indexFieldItem.options = [];
}
if (!val) {
// 未选择索引数据源,三个字段都不必填
indexTableItem && (indexTableItem.required = false);
indexFieldItem && (indexFieldItem.required = false);
return;
}
// 选择了索引数据源,索引数据表和索引字段必填
if (indexTableItem) {
indexTableItem.required = true;
}
if (indexFieldItem) {
indexFieldItem.required = true;
}
// 获取索引数据源的表列表
let dsInfo = dataSourceList.value.find(d => d.guid == val);
if (!dsInfo) return;
const res: any = await getDsTableByDs({
pageSize: -1,
pageIndex: 1,
dataSourceGuid: val,
database: dsInfo.databaseNameEn,
databaseType: dsInfo.databaseType,
tableName: '',
hadFlag: false
});
if (res.code == proxy.$passCode) {
if (indexTableItem) {
indexTableItem.options = res.data?.records || [];
}
} else {
proxy.$ElMessage.error(res.msg);
}
} else if (row.field == 'indexTableName') {
// 清空索引字段
setDataSelectFormItems(Object.assign({}, formInfo, { indexFieldName: '' }));
let indexFieldItem = dataSelectInfoItems.value.find(d => d.field == 'indexFieldName');
if (indexFieldItem) {
indexFieldItem.options = [];
}
if (!val) return;
// 获取索引数据表的字段列表
let indexDsGuid = formInfo.indexDataSourceGuid;
let dsInfo = dataSourceList.value.find(d => d.guid == indexDsGuid);
if (!dsInfo) return;
const res: any = await getDsTableFieldColumn({
pageSize: 50,
pageIndex: 1,
dataSourceGuid: indexDsGuid,
database: dsInfo.databaseNameEn,
databaseType: dsInfo.databaseType,
tableName: val,
});
if (res?.code == proxy.$passCode) {
if (indexFieldItem) {
// 使用与qualifiedIdentifier相同的格式:enName和chName
indexFieldItem.options = res.data?.map(d => ({
enName: d.columnName,
chName: d.columnZhName || d.columnName
})) || [];
}
} else {
res?.msg && proxy.$ElMessage.error(res.msg);
}
}
}
const setDataSelectFormItems = (info, isDetail = false) => {
// 获取不包含对象存储的数据源列表
let dsExcludeObs = dataSourceList.value.filter(d => !d.storageType || d.storageType == '1');
dataSelectInfoItems.value.forEach(item => {
item.default = info[item.field];
if (item.field == 'coverageArea') {
......@@ -718,7 +853,19 @@ const setDataSelectFormItems = (info, isDetail = false) => {
} else if (item.field == 'tableName') {
item.visible = info['dataSource'] == 1 && !(info['dataSourceGuid'] && objectTypesList.value.includes(currDatasourceSelect.value?.databaseType));//数据源类型为obs的没有数据表选择
} else if (item.field == 'dataSourceGuid') {
item.options = info.handleType == '02' ? dataSourceList.value : dataSourceList.value.filter(d => !objectTypesList.value.includes(d.databaseType))
item.options = info.handleType == '02' ? dataSourceList.value : dsExcludeObs;
} else if (item.field == 'indexDataSourceGuid') {
item.options = dsExcludeObs;
item.visible = currDatasourceSelect.value?.storageType == '2';
} else if (['indexTableName', 'indexFieldName'].includes(item.field)) {
item.visible = currDatasourceSelect.value?.storageType == '2';
item.required = !!info.indexDataSourceGuid;
if (item.required) {
dataSelectInfoFormRules.value[item.field] = [required(`请选择${item.label}`)];
} else {
dataSelectInfoFormRules.value[item.field] = [];
}
item.options = info.indexDataSourceGuid ? item.options : [];
}
});
stepsInfo.value = info.handleType == '02' ? reportStepsInfo.value : originStepsInfo.value;
......@@ -1741,6 +1888,44 @@ onBeforeMount(() => {
}
});
} else {
let currIndexDatasourceSelect = detailInfo.value.indexDataSourceGuid && dataSourceList.value.find(d => d.guid == detailInfo.value.indexDataSourceGuid);
if (currIndexDatasourceSelect) {
const tableRes: any = await getDsTableByDs({
pageSize: -1,
pageIndex: 1,
dataSourceGuid: detailInfo.value.indexDataSourceGuid,
database: currIndexDatasourceSelect.databaseNameEn,
databaseType: currIndexDatasourceSelect.databaseType,
tableName: '',
hadFlag: false
});
if (tableRes?.code == proxy.$passCode) {
let item = dataSelectInfoItems.value.find(item => item.field == 'indexTableName');
item && (item.options = tableRes.data?.records || []);
} else {
proxy.$ElMessage.error(tableRes.msg);
}
getDsTableFieldColumn({
pageSize: 50,
pageIndex: 1,
dataSourceGuid: currIndexDatasourceSelect.guid,
database: currIndexDatasourceSelect.databaseNameEn,
databaseType: currIndexDatasourceSelect.databaseType,
tableName: detailInfo.value.indexTableName,
}).then((res: any) => {
if (res?.code == proxy.$passCode) {
let indexFieldsList = res.data?.map(d => {
d.enName = d.columnName;
d.chName = d.columnZhName;
return d;
}) || [];
let item = dataSelectInfoItems.value.find(item => item.field == 'indexFieldName');
item && (item.options = indexFieldsList);
} else {
ElMessage.error(res.msg);
}
});
}
setDataSelectFormItems(Object.assign(detailInfo.value, { file: detailInfo.value.filePath ? [detailInfo.value.filePath] : [] }), true);
}
} else if (dataSource == 3) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!