diff --git a/src/api/system/dataSource.ts b/src/api/system/dataSource.ts index 1698d020..99fe20b3 100644 --- a/src/api/system/dataSource.ts +++ b/src/api/system/dataSource.ts @@ -22,3 +22,7 @@ export const rdbTree_api = (id: string) => server.get(`/datasource/rdb/${id}/tab export const rdbTables_api = (id: string,key:string) => server.get(`/datasource/rdb/${id}/table/${key}`); // 保存表格 export const saveTable_api = (id: string,data:object) => server.patch(`/datasource/rdb/${id}/table`,data); +/** + * 删除已保存的行 + */ +export const delSaveRow_api = (datasourceId: string, table: string, data: any) => server.post(`/datasource/rdb/${datasourceId}/table/${table}/drop-column`,data); diff --git a/src/views/system/DataSource/Management/index.vue b/src/views/system/DataSource/Management/index.vue index 6ee1d09f..13178048 100644 --- a/src/views/system/DataSource/Management/index.vue +++ b/src/views/system/DataSource/Management/index.vue @@ -164,9 +164,11 @@ import { rdbTree_api, rdbTables_api, saveTable_api, + delSaveRow_api, } from '@/api/system/dataSource'; import { FormInstance, message } from 'ant-design-vue'; import { DataNode } from 'ant-design-vue/lib/tree'; +import { cloneDeep } from 'lodash'; import type { dbColumnType, dictItemType, sourceItemType } from '../typing'; const id = useRoute().query.id as string; @@ -292,7 +294,9 @@ const table = reactive({ getTabelData: (key: string) => { rdbTables_api(id, key).then((resp: any) => { - table.data = resp.result.columns; + table.data = resp.result.columns.map( + (item: object, index: number) => ({ ...item, index }), + ); }); }, addRow: () => { @@ -307,9 +311,11 @@ const table = reactive({ table.data.push(initData); }, clickSave: () => { + const columns = cloneDeep(table.data); + columns.forEach((item) => delete item.index); const params = { name: leftData.selectedKeys[0], - columns: table.data, + columns, }; saveTable_api(id, params).then((resp) => { if (resp.status === 200) { @@ -318,7 +324,15 @@ const table = reactive({ } }); }, - clickDel: (row: any) => {}, + clickDel: (row: any) => { + if (row.scale !== undefined) { + delSaveRow_api(id, leftData.selectedKeys[0], [row.name]).then( + (resp: any) => { + if (resp.status === 200) table.data.splice(row.index, 1); + }, + ); + } else table.data.splice(row.index, 1); + }, }); const addFormRef = ref(); diff --git a/src/views/system/DataSource/components/EditDialog.vue b/src/views/system/DataSource/components/EditDialog.vue index d3e4f5f3..2f52f488 100644 --- a/src/views/system/DataSource/components/EditDialog.vue +++ b/src/views/system/DataSource/components/EditDialog.vue @@ -45,7 +45,14 @@ => { + if (!value) return Promise.reject('请输入URL'); + const arr = value.split(':'); + if (arr?.[0] === 'jdbc' || arr?.[0] === 'r2dbc') { + return Promise.resolve(); + } else { + return Promise.reject('请输入正确的URL'); + } + }, getTypeOption: () => { getDataTypeDict_api().then((resp: any) => { const result = resp.result as dictItemType[]; diff --git a/src/views/system/DataSource/typing.d.ts b/src/views/system/DataSource/typing.d.ts index 528249b8..6f58193f 100644 --- a/src/views/system/DataSource/typing.d.ts +++ b/src/views/system/DataSource/typing.d.ts @@ -33,5 +33,6 @@ export type dbColumnType = { notnull: boolean, comment: string, name: string, - scale?:number + scale?:number, + index?:number } \ No newline at end of file