3a5b041c by lihua

提交数据源支持连接华为云obs类型

1 parent 9fbe3018
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
18 @uploadFileChange="uploadFileChange" @checkboxChange="handleDataSelectFormCheckboxChange" /> 18 @uploadFileChange="uploadFileChange" @checkboxChange="handleDataSelectFormCheckboxChange" />
19 </ContentWrap> 19 </ContentWrap>
20 <!-- 抽样预览的表单填写配置,及表格展示 --> 20 <!-- 抽样预览的表单填写配置,及表格展示 -->
21 <ContentWrap v-show="formRef?.formInline?.dataSource != 3" id="id-previewData" title="数据抽样预览" description="" 21 <ContentWrap v-show="formRef?.formInline?.dataSource != 3 && !(formRef?.formInline?.dataSourceGuid && currDatasourceSelect?.databaseType === 'obs')" id="id-previewData" title="数据抽样预览" description=""
22 style="margin-top: 16px;"> 22 style="margin-top: 16px;">
23 <!-- 选择抽样预览的表单设置 --> 23 <!-- 选择抽样预览的表单设置 -->
24 <Form ref="dataSimpleFormRef" :itemList="dataSimpleFormItems" :rules="dataSimpleFormRules" 24 <Form ref="dataSimpleFormRef" :itemList="dataSimpleFormItems" :rules="dataSimpleFormRules"
...@@ -615,6 +615,13 @@ const dataSelectFormSelectChangeHandlers = { ...@@ -615,6 +615,13 @@ const dataSelectFormSelectChangeHandlers = {
615 return; 615 return;
616 } 616 }
617 let dsInfo = currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == val); 617 let dsInfo = currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == val);
618 if (dsInfo.databaseType == 'obs') {
619 sampleTableFields.value = [];
620 parseFileDataSum.value = [];
621 sampleTableData.value = [];
622 setDataSelectFormItems(Object.assign({}, formInfo, { file: !formInfo['file'] ? [] : formInfo['file'], tableName: '', qualifiedIdentifier: [] }))
623 return;
624 }
618 //清除数据表得值,重新获取下拉列表 625 //清除数据表得值,重新获取下拉列表
619 const res: any = await getDsTableByDs({ 626 const res: any = await getDsTableByDs({
620 pageSize: -1, 627 pageSize: -1,
...@@ -666,6 +673,10 @@ const dataSelectFormSelectChangeHandlers = { ...@@ -666,6 +673,10 @@ const dataSelectFormSelectChangeHandlers = {
666 }); 673 });
667 }, 674 },
668 handleType: (val, row, formInfo) => { 675 handleType: (val, row, formInfo) => {
676 // 第一种匿名处理类型是不可以选择obs类型的。
677 if (val == '01' && formInfo.dataSourceGuid && currDatasourceSelect.value.databaseType == 'obs') {
678 formInfo.dataSourceGuid = '';
679 }
669 setDataSelectFormItems(formInfo); 680 setDataSelectFormItems(formInfo);
670 } 681 }
671 } 682 }
...@@ -704,10 +715,14 @@ const setDataSelectFormItems = (info, isDetail = false) => { ...@@ -704,10 +715,14 @@ const setDataSelectFormItems = (info, isDetail = false) => {
704 item.default = ''; 715 item.default = '';
705 } 716 }
706 } else if (item.field == 'qualifiedIdentifier') { 717 } else if (item.field == 'qualifiedIdentifier') {
707 item.visible = info['handleType'] == '02' && info['dataSource'] != 3; 718 item.visible = info['handleType'] == '02' && info['dataSource'] != 3 && !(info['dataSourceGuid'] && currDatasourceSelect.value?.databaseType === 'obs');
708 if (info['dataSource'] == 3) { 719 if (info['dataSource'] == 3) {
709 item.options = qualifiedIdentifierFloderList.value; 720 item.options = qualifiedIdentifierFloderList.value;
710 } 721 }
722 } else if (item.field == 'tableName') {
723 item.visible = !(info['dataSourceGuid'] && currDatasourceSelect.value?.databaseType === 'obs');//数据源类型为obs的没有数据表选择
724 } else if (item.field == 'dataSourceGuid') {
725 item.options = info.handleType == '02' ? dataSourceList.value : dataSourceList.value.filter(d => d.databaseType !== 'obs')
711 } 726 }
712 }); 727 });
713 stepsInfo.value = info.handleType == '02' ? reportStepsInfo.value : originStepsInfo.value; 728 stepsInfo.value = info.handleType == '02' ? reportStepsInfo.value : originStepsInfo.value;
...@@ -1351,6 +1366,11 @@ const changeStepHandlers = { ...@@ -1351,6 +1366,11 @@ const changeStepHandlers = {
1351 let val = 2; 1366 let val = 2;
1352 formRef.value?.ruleFormRef?.validate((valid) => { 1367 formRef.value?.ruleFormRef?.validate((valid) => {
1353 if (valid) { 1368 if (valid) {
1369 let formInline = formRef.value?.formInline;
1370 // if (formInline?.handleType == '01' && formInline?.dataSourceGuid && currDatasourceSelect.value?.databaseType === 'obs') {
1371
1372 // return;
1373 // }
1354 if (formRef.value?.formInline?.dataSource == 2 && !sampleTableFields.value?.length) { 1374 if (formRef.value?.formInline?.dataSource == 2 && !sampleTableFields.value?.length) {
1355 proxy.$ElMessage.error('上传文件的字段不能为空'); 1375 proxy.$ElMessage.error('上传文件的字段不能为空');
1356 return; 1376 return;
...@@ -1482,17 +1502,21 @@ const changeStepHandlers = { ...@@ -1482,17 +1502,21 @@ const changeStepHandlers = {
1482 formRef.value?.ruleFormRef?.validate((valid, errorItem) => { 1502 formRef.value?.ruleFormRef?.validate((valid, errorItem) => {
1483 if (valid) { 1503 if (valid) {
1484 let dataSource = formRef.value?.formInline?.dataSource; 1504 let dataSource = formRef.value?.formInline?.dataSource;
1485 if (dataSource == 2 && !sampleTableFields.value?.length) { 1505 if (dataSource == 2 && currDatasourceSelect.value.databaseType !== 'obs' && !sampleTableFields.value?.length) {
1486 proxy.$ElMessage.error('上传文件的字段不能为空'); 1506 proxy.$ElMessage.error('上传文件的字段不能为空');
1487 return; 1507 return;
1488 } 1508 }
1489 if (dataSource != 3) { 1509 if (dataSource != 3) {
1490 dataSimpleFormRef.value?.ruleFormRef?.validate((valid) => { 1510 if (currDatasourceSelect.value.databaseType === 'obs' && saveParams.dataSourceGuid) {
1491 if (valid) { 1511 exec(saveParams);
1492 // Object.assign(saveParams, { riskThreshold: '0.05' }); 1512 } else {
1493 exec(saveParams); 1513 dataSimpleFormRef.value?.ruleFormRef?.validate((valid) => {
1494 } 1514 if (valid) {
1495 }); 1515 // Object.assign(saveParams, { riskThreshold: '0.05' });
1516 exec(saveParams);
1517 }
1518 });
1519 }
1496 } else { 1520 } else {
1497 if (!selectCurrPath.value) { 1521 if (!selectCurrPath.value) {
1498 proxy.$ElMessage.error('请先上传文件'); 1522 proxy.$ElMessage.error('请先上传文件');
...@@ -1619,61 +1643,63 @@ onBeforeMount(() => { ...@@ -1619,61 +1643,63 @@ onBeforeMount(() => {
1619 fileRes?.msg && ElMessage.error(fileRes?.msg); 1643 fileRes?.msg && ElMessage.error(fileRes?.msg);
1620 } 1644 }
1621 // 会出现从文件切换到数据库时没有数据库列表的问题。 1645 // 会出现从文件切换到数据库时没有数据库列表的问题。
1622 const res: any = await getDatabase({ connectStatus: 1 }); 1646 const res: any = await getDatabase({ connectStatus: 1, isAllStorageType: 'Y' });
1623 if (res?.code == proxy.$passCode) { 1647 if (res?.code == proxy.$passCode) {
1624 dataSourceList.value = res.data || []; 1648 dataSourceList.value = res.data || [];
1625 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); 1649 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid');
1626 item && (item.options = dataSourceList.value); 1650 item && (item.options = detailInfo.value.handleType == '01' ? dataSourceList.value.filter(d => d.databaseType !== 'obs') : dataSourceList.value);
1627 } else { 1651 } else {
1628 proxy.$ElMessage.error(res.msg); 1652 proxy.$ElMessage.error(res.msg);
1629 } 1653 }
1630 } else if (dataSource == 1) { 1654 } else if (dataSource == 1) {
1631 const res: any = await getDatabase({ connectStatus: 1 }); 1655 const res: any = await getDatabase({ connectStatus: 1, isAllStorageType: 'Y' });
1632 if (res?.code == proxy.$passCode) { 1656 if (res?.code == proxy.$passCode) {
1633 dataSourceList.value = res.data || []; 1657 dataSourceList.value = res.data || [];
1634 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); 1658 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid');
1635 item && (item.options = dataSourceList.value); 1659 item && (item.options = detailInfo.value.handleType == '01' ? dataSourceList.value.filter(d => d.databaseType !== 'obs') : dataSourceList.value);
1636 } else { 1660 } else {
1637 proxy.$ElMessage.error(res.msg); 1661 proxy.$ElMessage.error(res.msg);
1638 } 1662 }
1639 currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == detailInfo.value.dataSourceGuid); 1663 currDatasourceSelect.value = dataSourceList.value.find(d => d.guid == detailInfo.value.dataSourceGuid);
1640 const tableRes: any = await getDsTableByDs({ 1664 if (currDatasourceSelect.value.databaseType != 'obs') {
1641 pageSize: -1, 1665 const tableRes: any = await getDsTableByDs({
1642 pageIndex: 1, 1666 pageSize: -1,
1643 dataSourceGuid: detailInfo.value.dataSourceGuid, 1667 pageIndex: 1,
1644 database: currDatasourceSelect.value.databaseNameEn, 1668 dataSourceGuid: detailInfo.value.dataSourceGuid,
1645 databaseType: currDatasourceSelect.value.databaseType, 1669 database: currDatasourceSelect.value.databaseNameEn,
1646 tableName: '', 1670 databaseType: currDatasourceSelect.value.databaseType,
1647 hadFlag: false 1671 tableName: '',
1648 }); 1672 hadFlag: false
1649 if (tableRes?.code == proxy.$passCode) { 1673 });
1650 dsTableList.value = tableRes.data?.records || []; 1674 if (tableRes?.code == proxy.$passCode) {
1651 let item = dataSelectInfoItems.value.find(item => item.field == 'tableName'); 1675 dsTableList.value = tableRes.data?.records || [];
1652 item && (item.options = dsTableList.value); 1676 let item = dataSelectInfoItems.value.find(item => item.field == 'tableName');
1653 } else { 1677 item && (item.options = dsTableList.value);
1654 proxy.$ElMessage.error(tableRes.msg);
1655 }
1656 getDsTableFieldColumn({
1657 pageSize: 50,
1658 pageIndex: 1,
1659 dataSourceGuid: currDatasourceSelect.value.guid,
1660 database: currDatasourceSelect.value.databaseNameEn,
1661 databaseType: currDatasourceSelect.value.databaseType,
1662 tableName: detailInfo.value.tableName,
1663 }).then((res: any) => {
1664 if (res.code == proxy.$passCode) {
1665 sampleTableFields.value = res.data?.map(d => {
1666 d.fieldDataType = d.dataType;
1667 d.enName = d.columnName;
1668 d.chName = d.columnZhName;
1669 return d;
1670 }) || [];
1671 /** 判断有抽样数据,需要查询接口 */
1672 getSampleDataByDsTable();
1673 } else { 1678 } else {
1674 ElMessage.error(res.msg); 1679 proxy.$ElMessage.error(tableRes.msg);
1675 } 1680 }
1676 }); 1681 getDsTableFieldColumn({
1682 pageSize: 50,
1683 pageIndex: 1,
1684 dataSourceGuid: currDatasourceSelect.value.guid,
1685 database: currDatasourceSelect.value.databaseNameEn,
1686 databaseType: currDatasourceSelect.value.databaseType,
1687 tableName: detailInfo.value.tableName,
1688 }).then((res: any) => {
1689 if (res.code == proxy.$passCode) {
1690 sampleTableFields.value = res.data?.map(d => {
1691 d.fieldDataType = d.dataType;
1692 d.enName = d.columnName;
1693 d.chName = d.columnZhName;
1694 return d;
1695 }) || [];
1696 /** 判断有抽样数据,需要查询接口 */
1697 getSampleDataByDsTable();
1698 } else {
1699 ElMessage.error(res.msg);
1700 }
1701 });
1702 }
1677 } else if (dataSource == 3) { 1703 } else if (dataSource == 3) {
1678 processFolderRefresh(); 1704 processFolderRefresh();
1679 } 1705 }
...@@ -1687,7 +1713,8 @@ onBeforeMount(() => { ...@@ -1687,7 +1713,8 @@ onBeforeMount(() => {
1687 } 1713 }
1688 }); 1714 });
1689 } else { 1715 } else {
1690 getDatabase({ connectStatus: 1 }).then((res: any) => { 1716 // TODO,传参是否查询全部,包括obs类型的数据源
1717 getDatabase({ connectStatus: 1, isAllStorageType: 'Y' }).then((res: any) => {
1691 if (res.code == proxy.$passCode) { 1718 if (res.code == proxy.$passCode) {
1692 dataSourceList.value = res.data || []; 1719 dataSourceList.value = res.data || [];
1693 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid'); 1720 let item = dataSelectInfoItems.value.find(item => item.field == 'dataSourceGuid');
......
...@@ -20,6 +20,14 @@ import { ...@@ -20,6 +20,14 @@ import {
20 20
21 const { proxy } = getCurrentInstance() as any; 21 const { proxy } = getCurrentInstance() as any;
22 22
23 /** 数据库类型下拉列表 */
24 const databaseTypesList = ref([
25 { label: "mysql", value: "mysql" },
26 { label: "doris", value: "doris" },
27 { label: "oracle", value: "oracle" },
28 { label: "华为云obs", value: "obs" },
29 ]);
30
23 const searchItemList = ref([ 31 const searchItemList = ref([
24 { 32 {
25 type: "select", 33 type: "select",
...@@ -39,11 +47,7 @@ const searchItemList = ref([ ...@@ -39,11 +47,7 @@ const searchItemList = ref([
39 field: "databaseType", 47 field: "databaseType",
40 default: "", 48 default: "",
41 placeholder: "库类型", 49 placeholder: "库类型",
42 options: [ 50 options: databaseTypesList.value,
43 { label: "mysql", value: "mysql" },
44 { label: "doris", value: "doris" },
45 { label: "oracle", value: "oracle" },
46 ],
47 clearable: true, 51 clearable: true,
48 }, 52 },
49 { 53 {
...@@ -103,7 +107,9 @@ const tableInfo = ref({ ...@@ -103,7 +107,9 @@ const tableInfo = ref({
103 { label: "序号", type: "index", width: 56, align: "center" }, 107 { label: "序号", type: "index", width: 56, align: "center" },
104 { label: "数据源名称", field: "databaseNameZh", width: 120 }, 108 { label: "数据源名称", field: "databaseNameZh", width: 120 },
105 { label: "系统分层", field: "systemLayer", width: 96 }, 109 { label: "系统分层", field: "systemLayer", width: 96 },
106 { label: "库类型", field: "databaseType", width: 96 }, 110 { label: "库类型", field: "databaseType", width: 96, getName: (scope) => {
111 return scope.row.databaseType && databaseTypesList.value.find(item => item.value === scope.row.databaseType)?.label || '--';
112 } },
107 { label: "数据库名", field: "databaseNameEn", width: 200 }, 113 { label: "数据库名", field: "databaseNameEn", width: 200 },
108 { 114 {
109 label: "连通状态", 115 label: "连通状态",
...@@ -206,11 +212,7 @@ const contents: any = ref({ ...@@ -206,11 +212,7 @@ const contents: any = ref({
206 placeholder: "请选择", 212 placeholder: "请选择",
207 field: "databaseType", 213 field: "databaseType",
208 default: "", 214 default: "",
209 options: [ 215 options: databaseTypesList.value,
210 { label: "mysql", value: "mysql" },
211 { label: "doris", value: "doris" },
212 { label: "oracle", value: "oracle" },
213 ],
214 clearable: true, 216 clearable: true,
215 required: true, 217 required: true,
216 }, 218 },
...@@ -329,6 +331,18 @@ const contents: any = ref({ ...@@ -329,6 +331,18 @@ const contents: any = ref({
329 required: true, 331 required: true,
330 }, 332 },
331 { 333 {
334 type: 'radio-group',
335 label: '是否https协议',
336 field: 'isHttps',
337 default: '',
338 required: true,
339 visible: false,
340 options: [
341 { label: '是', value: 'Y' },
342 { label: '否', value: 'N' },
343 ],
344 },
345 {
332 label: "连接属性", 346 label: "连接属性",
333 type: "textarea-tips", 347 type: "textarea-tips",
334 placeholder: "请输入", 348 placeholder: "请输入",
...@@ -993,9 +1007,27 @@ const setFormItems = (name, info: any = null) => { ...@@ -993,9 +1007,27 @@ const setFormItems = (name, info: any = null) => {
993 child.default = info[child.field] ?? ""; 1007 child.default = info[child.field] ?? "";
994 } 1008 }
995 }); 1009 });
1010 } else if (item.field == 'isHttps') {
1011 item.visible = info.databaseType == "obs";
1012 item.default = info[item.field] || "N";
996 } else if (item.field == 'bizSystem') { 1013 } else if (item.field == 'bizSystem') {
997 item.visible = info.systemLayer == '业务系统'; 1014 item.visible = info.systemLayer == '业务系统';
998 item.default = info[item.field] || ""; 1015 item.default = info[item.field] || "";
1016 } else {
1017 item.default = info[item.field] || "";
1018 }
1019 if (item.field == 'host') {
1020 item.label = info.databaseType == "obs" ? "地址" : "服务器";
1021 contentFormInfo.rules.host[0].message = info.databaseType == "obs" ? "请填写地址" : "请填写服务器IP地址";
1022 } else if (item.field == 'logonUser') {
1023 item.label = info.databaseType == "obs" ? "凭证ID" : "用户名";
1024 contentFormInfo.rules.logonUser[0].message = info.databaseType == "obs" ? "请填写凭证ID" : "请填写用户名";
1025 } else if (item.field == 'password') {
1026 item.label = info.databaseType == "obs" ? "凭证Key" : "密码";
1027 contentFormInfo.rules.password[0].message = info.databaseType == "obs" ? "请填写凭证Key" : "请填写密码";
1028 } else if (item.field == 'databaseNameEn') {
1029 item.label = info.databaseType == "obs" ? "桶名称" : "数据库名";
1030 contentFormInfo.rules.databaseNameEn[0].message = info.databaseType == "obs" ? "请填写桶名称" : "请填写数据库名";
999 } 1031 }
1000 else { 1032 else {
1001 item.default = info[item.field] || ""; 1033 item.default = info[item.field] || "";
...@@ -1224,7 +1256,8 @@ const dialogBtnClick = (btn, info) => { ...@@ -1224,7 +1256,8 @@ const dialogBtnClick = (btn, info) => {
1224 password: info.password, 1256 password: info.password,
1225 feLoadUrl: info.feLoadUrl, 1257 feLoadUrl: info.feLoadUrl,
1226 beLoadUrl: info.beLoadUrl, 1258 beLoadUrl: info.beLoadUrl,
1227 dorisJdbcUrl: info.dorisJdbcUrl 1259 dorisJdbcUrl: info.dorisJdbcUrl,
1260 isHttps: info.isHttps,
1228 }; 1261 };
1229 addDataSource(params) 1262 addDataSource(params)
1230 .then((res: any) => { 1263 .then((res: any) => {
...@@ -1258,7 +1291,8 @@ const dialogBtnClick = (btn, info) => { ...@@ -1258,7 +1291,8 @@ const dialogBtnClick = (btn, info) => {
1258 : info.password, 1291 : info.password,
1259 feLoadUrl: info.feLoadUrl, 1292 feLoadUrl: info.feLoadUrl,
1260 beLoadUrl: info.beLoadUrl, 1293 beLoadUrl: info.beLoadUrl,
1261 dorisJdbcUrl: info.dorisJdbcUrl 1294 dorisJdbcUrl: info.dorisJdbcUrl,
1295 isHttps: info.isHttps,
1262 }; 1296 };
1263 params.guid = currTableData.value.guid; 1297 params.guid = currTableData.value.guid;
1264 updateDataSource(params) 1298 updateDataSource(params)
...@@ -1291,6 +1325,7 @@ const dialogBtnClick = (btn, info) => { ...@@ -1291,6 +1325,7 @@ const dialogBtnClick = (btn, info) => {
1291 logonUser: info.logonUser, 1325 logonUser: info.logonUser,
1292 password: info.password, 1326 password: info.password,
1293 linkage: info.linkage, 1327 linkage: info.linkage,
1328 isHttps: info.isHttps,
1294 }; 1329 };
1295 checkDataSourceConnectTest(params).then((res: any) => { 1330 checkDataSourceConnectTest(params).then((res: any) => {
1296 if (res.code == proxy.$passCode) { 1331 if (res.code == proxy.$passCode) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!