From dcc9b80101b40342ec4aafdc08e6007730bde890 Mon Sep 17 00:00:00 2001 From: lixuan Date: Fri, 4 Jul 2025 01:11:36 -0700 Subject: [PATCH 1/4] feat: Modify the data source --- .../plugins/datasource/src/DataSourceForm.vue | 38 ++++++++++++++----- .../plugins/datasource/src/DataSourceList.vue | 2 + .../src/DataSourceSettingRecordList.vue | 7 +++- .../datasource/src/DataSourceSettings.vue | 6 +++ 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/packages/plugins/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue index 235aaf586e..04bb771565 100644 --- a/packages/plugins/datasource/src/DataSourceForm.vue +++ b/packages/plugins/datasource/src/DataSourceForm.vue @@ -43,8 +43,10 @@ import { camelize, capitalize } from '@vue/shared' import { ButtonGroup, PluginSetting, SvgButton } from '@opentiny/tiny-engine-common' import DataSourceType from './DataSourceType.vue' import DataSourceName, { getDataSourceName } from './DataSourceName.vue' +import { getServiceForm } from './DataSourceRemoteForm.vue' import DataSourceSettings from './DataSourceSettings.vue' import { close as closeRemoteResult, open as openRemoteResult } from './DataSourceSettingRemoteResult.vue' +import { getRecordGrid } from './DataSourceSettingRecordList.vue' import { requestUpdateDataSource, requestAddDataSource, @@ -203,12 +205,20 @@ export default { }) } - const save = () => { - getDataSourceName().validate((valid) => { - if (valid) { - close() - closeRemoteResult() + const activeTabChange = (name) => { + emit('activeTab', name) + } + const save = async () => { + try { + // await validate() 如果验证不通过会抛出异常,而不是返回 false + await getServiceForm().validate() + } catch (error) { + activeTabChange('remote') + throw new Error(`请先完成表单验证: ${error?.message || ''}`) + } + getDataSourceName().validate(async (valid) => { + if (valid) { const columns = state.dataSource.data.columns.map(({ name, title, type, format, field }) => { return { name, @@ -219,6 +229,14 @@ export default { } }) + try { + // await validate() 如果验证不通过会抛出异常,而不是返回 false + await getRecordGrid().fullValidate() + } catch (error) { + activeTabChange('record') + throw new Error(`请先完成表格验证: ${error?.message || ''}`) + } + settingRef.value.saveRecord().then((record) => { const editRequestData = { name: state.dataSource.name, @@ -254,6 +272,7 @@ export default { emit('save') dataSourceState.dataSourceColumn = {} dataSourceState.dataSourceColumnCopies = {} + dataSourceState.remoteConfig = {} }) } else { requestAddDataSource({ @@ -270,12 +289,17 @@ export default { emit('save') dataSourceState.dataSourceColumn = {} dataSourceState.dataSourceColumnCopies = {} + dataSourceState.remoteConfig = {} }) .catch((error) => { message({ message: `数据源保存失败:${error?.message || ''}`, status: 'error' }) }) } }) + close() + closeRemoteResult() + } else { + activeTabChange('field') } }) } @@ -298,10 +322,6 @@ export default { emit('renderRemoteData', remoteData) } - const activeTabChange = (name) => { - emit('activeTab', name) - } - watch( () => state.dataSource.data?.type, (value) => { diff --git a/packages/plugins/datasource/src/DataSourceList.vue b/packages/plugins/datasource/src/DataSourceList.vue index 31f9347629..9501722061 100644 --- a/packages/plugins/datasource/src/DataSourceList.vue +++ b/packages/plugins/datasource/src/DataSourceList.vue @@ -33,6 +33,7 @@ import { onMounted, reactive, ref } from 'vue' import { useResource, getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register' import { fetchDataSourceList, fetchDataSourceDetail } from './js/http' import { SvgButton } from '@opentiny/tiny-engine-common' +import { getServiceForm } from './DataSourceRemoteForm.vue' const dataSourceList = ref([]) const activeIndex = ref(-1) @@ -74,6 +75,7 @@ export default { data: { ...item.data, type: 'remote' } } emit('edit', editData) + getServiceForm()?.clearValidate() }) } diff --git a/packages/plugins/datasource/src/DataSourceSettingRecordList.vue b/packages/plugins/datasource/src/DataSourceSettingRecordList.vue index f7557e5aae..6b57af7bc8 100644 --- a/packages/plugins/datasource/src/DataSourceSettingRecordList.vue +++ b/packages/plugins/datasource/src/DataSourceSettingRecordList.vue @@ -73,6 +73,12 @@ import { fetchDataSourceDetail } from './js/http' import { downloadFn, handleImportedData, overrideOrMergeData, getDataAfterPage } from './js/datasource' import DataSourceRecordUpload from './DataSourceRecordUpload.vue' +const grid = ref(null) + +export const getRecordGrid = () => { + return grid.value +} + export default { components: { TinyGrid: Grid, @@ -90,7 +96,6 @@ export default { }, emits: ['edit'], setup(props, { emit }) { - const grid = ref(null) const { confirm } = useModal() const { PLUGIN_NAME, getPluginByLayout } = useLayout() const align = computed(() => getPluginByLayout(PLUGIN_NAME.Collections)) diff --git a/packages/plugins/datasource/src/DataSourceSettings.vue b/packages/plugins/datasource/src/DataSourceSettings.vue index f9ef25723e..e84f444815 100644 --- a/packages/plugins/datasource/src/DataSourceSettings.vue +++ b/packages/plugins/datasource/src/DataSourceSettings.vue @@ -20,6 +20,7 @@ :data="state.currentData" ref="recordRef" @refresh="refresh()" + @edit="changeTab()" > @@ -93,6 +94,10 @@ export default { closeGlobalDataHandler() } + const changeTab = () => { + state.activeTabName = 'field' + } + const tabClick = (e) => { state.activeTabName = e.name emit('activeTab', e.name) @@ -144,6 +149,7 @@ export default { tabClick, renderRemoteData, refresh, + changeTab, saveRecord } } From 6f30c7f854bd5f13d1b2bd9aa9de3028f2311b1c Mon Sep 17 00:00:00 2001 From: lixuan Date: Fri, 4 Jul 2025 01:51:50 -0700 Subject: [PATCH 2/4] feat: Modify the data source --- packages/plugins/datasource/src/DataSourceForm.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/plugins/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue index 04bb771565..2d23ef4da6 100644 --- a/packages/plugins/datasource/src/DataSourceForm.vue +++ b/packages/plugins/datasource/src/DataSourceForm.vue @@ -298,8 +298,6 @@ export default { }) close() closeRemoteResult() - } else { - activeTabChange('field') } }) } From 6181fadd4844215daa2a595846e648b0db3019f9 Mon Sep 17 00:00:00 2001 From: lixuan Date: Wed, 9 Jul 2025 23:10:34 -0700 Subject: [PATCH 3/4] feat: Modify throw error --- packages/plugins/datasource/src/DataSourceForm.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugins/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue index 2d23ef4da6..55d2a75299 100644 --- a/packages/plugins/datasource/src/DataSourceForm.vue +++ b/packages/plugins/datasource/src/DataSourceForm.vue @@ -215,7 +215,7 @@ export default { await getServiceForm().validate() } catch (error) { activeTabChange('remote') - throw new Error(`请先完成表单验证: ${error?.message || ''}`) + throw error } getDataSourceName().validate(async (valid) => { if (valid) { @@ -234,7 +234,7 @@ export default { await getRecordGrid().fullValidate() } catch (error) { activeTabChange('record') - throw new Error(`请先完成表格验证: ${error?.message || ''}`) + throw error } settingRef.value.saveRecord().then((record) => { From dcaa6a077bf8a49f7c4255e364327f952d48893b Mon Sep 17 00:00:00 2001 From: lixuan Date: Wed, 9 Jul 2025 23:14:24 -0700 Subject: [PATCH 4/4] feat: Modify throw error --- packages/plugins/datasource/src/DataSourceForm.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugins/datasource/src/DataSourceForm.vue b/packages/plugins/datasource/src/DataSourceForm.vue index 55d2a75299..3037c22b3c 100644 --- a/packages/plugins/datasource/src/DataSourceForm.vue +++ b/packages/plugins/datasource/src/DataSourceForm.vue @@ -215,7 +215,7 @@ export default { await getServiceForm().validate() } catch (error) { activeTabChange('remote') - throw error + return } getDataSourceName().validate(async (valid) => { if (valid) { @@ -234,7 +234,7 @@ export default { await getRecordGrid().fullValidate() } catch (error) { activeTabChange('record') - throw error + return } settingRef.value.saveRecord().then((record) => {