This is an automated email from the ASF dual-hosted git repository. songjian pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel-web.git
The following commit(s) were added to refs/heads/main by this push: new ce06affb [Feat][UI] Complete data pipes function. (#38) ce06affb is described below commit ce06affb928e8e877694285c10020d5da9487a3d Author: songjianet <1778651...@qq.com> AuthorDate: Sat Mar 4 23:20:53 2023 +0800 [Feat][UI] Complete data pipes function. (#38) --- seatunnel-ui/src/App.tsx | 21 +++- seatunnel-ui/src/locales/en_US/data-pipes.ts | 14 --- seatunnel-ui/src/locales/en_US/setting.ts | 6 +- seatunnel-ui/src/router/data-pipes.ts | 4 +- seatunnel-ui/src/service/script/index.ts | 9 +- seatunnel-ui/src/service/script/types.ts | 13 +-- seatunnel-ui/src/store/setting/index.ts | 9 +- seatunnel-ui/src/store/setting/types.ts | 1 + .../create/components/configuration-modal.tsx | 98 ---------------- .../create/components/use-configuration-modal.ts | 85 -------------- seatunnel-ui/src/views/data-pipes/create/index.tsx | 82 ++++--------- .../detail/components/detail-overview.tsx | 130 --------------------- .../detail/components/use-detail-overview.ts | 51 -------- seatunnel-ui/src/views/data-pipes/detail/index.tsx | 57 ++++----- seatunnel-ui/src/views/data-pipes/edit/index.tsx | 48 ++++++-- .../src/views/data-pipes/list/use-table.ts | 7 +- seatunnel-ui/src/views/setting/index.tsx | 34 +++++- 17 files changed, 172 insertions(+), 497 deletions(-) diff --git a/seatunnel-ui/src/App.tsx b/seatunnel-ui/src/App.tsx index 4c3e60bc..5ed0f946 100644 --- a/seatunnel-ui/src/App.tsx +++ b/seatunnel-ui/src/App.tsx @@ -15,7 +15,7 @@ * limitations under the License. */ -import { defineComponent, computed } from 'vue' +import { defineComponent, computed, watch } from 'vue' import { NConfigProvider, NMessageProvider, @@ -27,6 +27,7 @@ import { } from 'naive-ui' import { useThemeStore } from '@/store/theme' import { useLocalesStore } from '@/store/locale' +import { useSettingStore } from '@/store/setting' import themeList from '@/themes' import type { GlobalThemeOverrides } from 'naive-ui' @@ -37,20 +38,28 @@ const App = defineComponent({ themeStore.darkTheme ? darkTheme : undefined ) const localesStore = useLocalesStore() + const themeOverrides: GlobalThemeOverrides = + themeList[currentTheme.value ? 'dark' : 'light'] + + watch( + () => useSettingStore().getFilletValue, + () => { + ;(themeOverrides.common as any).borderRadius = + useSettingStore().getFilletValue + 'px' + } + ) return { currentTheme, - localesStore + localesStore, + themeOverrides } }, render() { - const themeOverrides: GlobalThemeOverrides = - themeList[this.currentTheme ? 'dark' : 'light'] - return ( <NConfigProvider theme={this.currentTheme} - theme-overrides={themeOverrides} + theme-overrides={this.themeOverrides} date-locale={ String(this.localesStore.getLocales) === 'zh_CN' ? dateZhCN : dateEnUS } diff --git a/seatunnel-ui/src/locales/en_US/data-pipes.ts b/seatunnel-ui/src/locales/en_US/data-pipes.ts index bea9dcc2..af381770 100644 --- a/seatunnel-ui/src/locales/en_US/data-pipes.ts +++ b/seatunnel-ui/src/locales/en_US/data-pipes.ts @@ -38,24 +38,10 @@ export default { script: 'Script', kill: 'Kill', stop: 'Stop', - configuration: 'Configuration', - run_log: 'Run Log', add: 'Add', key: 'Key', value: 'Value', - engine_parameter: 'Engine Parameter', - self_defined_parameter: 'Self Defined Parameter', name_tips: 'Required fields,number, letter case, 100 characters', - overview: 'Overview', - input_metrics: 'Input Metrics', - historical_run_logs: 'Historical Run Logs', - bytes_per_second: 'Bytes Per Second', - total_bytes: 'Total Bytes', - record_per_second: 'Record Per Second', - total_records: 'Total Records', - output_metrics: 'Output Metrics', - end_time: 'End Time', - execute_time: 'Execute Time', data_pipes_delete_tips: 'Whether to delete the data Pipe,It cannot be restored after being deleted.', data_pipes_publish_tips: 'Whether to Publish the data pipe.', diff --git a/seatunnel-ui/src/locales/en_US/setting.ts b/seatunnel-ui/src/locales/en_US/setting.ts index 6c6cfc9a..0e6ade7f 100644 --- a/seatunnel-ui/src/locales/en_US/setting.ts +++ b/seatunnel-ui/src/locales/en_US/setting.ts @@ -24,5 +24,9 @@ export default { theme_setting: 'Theme Setting', theme: 'Theme', english: 'English', - light: 'Light' + light: 'Light', + model: 'Model', + hue: 'Hue', + purple: 'Purple', + fillet: 'Fillet' } diff --git a/seatunnel-ui/src/router/data-pipes.ts b/seatunnel-ui/src/router/data-pipes.ts index 365d7bc0..9a06ede6 100644 --- a/seatunnel-ui/src/router/data-pipes.ts +++ b/seatunnel-ui/src/router/data-pipes.ts @@ -39,7 +39,7 @@ export default { } }, { - path: '/data-pipes/:dataPipeCode', + path: '/data-pipes/:dataPipeId', name: 'data-pipes-detail', component: components['data-pipes-detail'], meta: { @@ -47,7 +47,7 @@ export default { } }, { - path: '/data-pipes/:dataPipeCode/edit', + path: '/data-pipes/:dataPipeId/edit', name: 'data-pipes-edit', component: components['data-pipes-edit'], meta: { diff --git a/seatunnel-ui/src/service/script/index.ts b/seatunnel-ui/src/service/script/index.ts index abf8f628..e5b39c29 100644 --- a/seatunnel-ui/src/service/script/index.ts +++ b/seatunnel-ui/src/service/script/index.ts @@ -34,6 +34,13 @@ export function scriptAdd(data: ScriptAdd): any { }) } +export function scriptDetail(scriptId: number): any { + return axios({ + url: `/script/${scriptId}`, + method: 'get' + }) +} + export function scriptDelete(scriptId: number): any { return axios({ url: `/script/${scriptId}`, @@ -48,7 +55,7 @@ export function scriptContent(scriptId: number): any { }) } -export function scriptContentUpdate(scriptId: number, content: string): any { +export function scriptUpdate(scriptId: number, content: string): any { return axios({ url: `/script/${scriptId}/content`, method: 'put', diff --git a/seatunnel-ui/src/service/script/types.ts b/seatunnel-ui/src/service/script/types.ts index 7fb80bd7..8c72a321 100644 --- a/seatunnel-ui/src/service/script/types.ts +++ b/seatunnel-ui/src/service/script/types.ts @@ -24,22 +24,17 @@ interface ScriptList { interface ScriptAdd { name: string - type: string + type: number + content: string } -interface ScriptDetail { +interface ScriptDetail extends ScriptAdd { id: number - name: string status: string - type: number creatorId: number menderId: number createTime: string updateTime: string } -export { - ScriptList, - ScriptAdd, - ScriptDetail -} +export { ScriptList, ScriptAdd, ScriptDetail } diff --git a/seatunnel-ui/src/store/setting/index.ts b/seatunnel-ui/src/store/setting/index.ts index 03cbe909..0e9f40bd 100644 --- a/seatunnel-ui/src/store/setting/index.ts +++ b/seatunnel-ui/src/store/setting/index.ts @@ -22,7 +22,8 @@ export const useSettingStore = defineStore({ id: 'setting', state: (): SettingStore => ({ sequenceColumn: false, - dataUniqueValue: false + dataUniqueValue: false, + fillet: 15 }), persist: true, getters: { @@ -31,6 +32,9 @@ export const useSettingStore = defineStore({ }, getDataUniqueValue(): boolean { return this.dataUniqueValue + }, + getFilletValue(): number { + return this.fillet } }, actions: { @@ -39,6 +43,9 @@ export const useSettingStore = defineStore({ }, setDataUniqueValue(status: boolean): void { this.dataUniqueValue = status + }, + setFilletValue(status: number): void { + this.fillet = status } } }) diff --git a/seatunnel-ui/src/store/setting/types.ts b/seatunnel-ui/src/store/setting/types.ts index d45fe2cf..bc34f910 100644 --- a/seatunnel-ui/src/store/setting/types.ts +++ b/seatunnel-ui/src/store/setting/types.ts @@ -18,6 +18,7 @@ interface SettingStore { sequenceColumn: boolean dataUniqueValue: boolean + fillet: number } export { SettingStore } diff --git a/seatunnel-ui/src/views/data-pipes/create/components/configuration-modal.tsx b/seatunnel-ui/src/views/data-pipes/create/components/configuration-modal.tsx deleted file mode 100644 index 0f558368..00000000 --- a/seatunnel-ui/src/views/data-pipes/create/components/configuration-modal.tsx +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { defineComponent, onMounted, toRefs } from 'vue' -import { useI18n } from 'vue-i18n' -import { NButton, NDataTable, NForm, NFormItem, NInput, NSpace } from 'naive-ui' -import { useConfigurationModal } from './use-configuration-modal' -import Modal from '@/components/modal' -import type { PropType } from 'vue' - -const props = { - showModal: { - type: Boolean as PropType<boolean>, - default: false - }, - type: { - type: String as PropType<'engine-parameter' | 'self-defined-parameter'> - } -} - -const ConfigurationModal = defineComponent({ - props, - emits: ['cancelModal', 'confirmModal'], - setup(props, ctx) { - const { t } = useI18n() - const { state, createColumns, handleValidate } = useConfigurationModal() - - const handleCancel = () => { - ctx.emit('cancelModal', props.showModal) - } - - const handleConfirm = () => {} - - const handleClickAdd = () => { - handleValidate() - } - - onMounted(() => { - createColumns(state) - }) - - return { t, ...toRefs(state), handleCancel, handleConfirm, handleClickAdd } - }, - render($props: any) { - return ( - <Modal - title={ - this.t( - 'data_pipes.' + - ($props.type === 'engine-parameter' - ? 'engine_parameter' - : 'self_defined_parameter') - ) + - ' ' + - this.t('data_pipes.configuration') - } - show={this.showModal} - onCancel={this.handleCancel} - onConfirm={this.handleConfirm} - > - <NSpace vertical> - <NForm model={this.model} rules={this.rules} ref='parameterForm'> - <NFormItem label={this.t('data_pipes.key')} path='key'> - <NInput v-model={[this.model.key, 'value']} clearable /> - </NFormItem> - <NFormItem label={this.t('data_pipes.value')} path='value'> - <NInput v-model={[this.model.value, 'value']} clearable /> - </NFormItem> - <NButton class='w-full' onClick={this.handleClickAdd}> - {this.t('data_pipes.add')} - </NButton> - </NForm> - <NDataTable - loading={this.loading} - columns={this.columns} - data={this.tableData} - /> - </NSpace> - </Modal> - ) - } -}) - -export default ConfigurationModal diff --git a/seatunnel-ui/src/views/data-pipes/create/components/use-configuration-modal.ts b/seatunnel-ui/src/views/data-pipes/create/components/use-configuration-modal.ts deleted file mode 100644 index 5b28e29d..00000000 --- a/seatunnel-ui/src/views/data-pipes/create/components/use-configuration-modal.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { h, reactive, ref, SetupContext } from 'vue' -import { useI18n } from 'vue-i18n' -import { NButton, NSpace } from 'naive-ui' - -export function useConfigurationModal() { - const { t } = useI18n() - const state = reactive({ - parameterForm: ref(), - model: { - key: ref(''), - value: ref('') - }, - rules: { - key: { - required: true, - trigger: ['input', 'blur'], - message: t('data_pipes.model_validate_tips') - }, - value: { - required: true, - trigger: ['input', 'blur'], - message: t('data_pipes.model_validate_tips') - } - }, - loading: ref(false), - columns: [], - tableData: [{ key: 'key1', value: 'value1' }] - }) - - const createColumns = (state: any) => { - state.columns = [ - { - title: t('data_pipes.key'), - key: 'key' - }, - { - title: t('data_pipes.value'), - key: 'value' - }, - { - title: t('data_pipes.operation'), - key: 'operation', - render: (row: any) => - h( - NButton, - { text: true, onClick: () => handleDelete(row) }, - t('user_manage.delete') - ) - } - ] - } - - const handleValidate = () => { - state.parameterForm.validate((errors: any) => { - if (!errors) { - state.tableData.push({ key: state.model.key, value: state.model.value }) - state.model.key = '' - state.model.value = '' - } else { - return - } - }) - } - - const handleDelete = (row: any) => {} - - return { state, createColumns, handleValidate } -} diff --git a/seatunnel-ui/src/views/data-pipes/create/index.tsx b/seatunnel-ui/src/views/data-pipes/create/index.tsx index de3a9061..2699f08a 100644 --- a/seatunnel-ui/src/views/data-pipes/create/index.tsx +++ b/seatunnel-ui/src/views/data-pipes/create/index.tsx @@ -15,7 +15,7 @@ * limitations under the License. */ -import { defineComponent, ref } from 'vue' +import { defineComponent, reactive, toRefs } from 'vue' import { useI18n } from 'vue-i18n' import { useRouter } from 'vue-router' import { @@ -26,52 +26,38 @@ import { NIcon, NInput, NSpace, - NTooltip, - NDropdown + NTooltip } from 'naive-ui' import { BulbOutlined } from '@vicons/antd' +import { scriptAdd } from '@/service/script' import MonacoEditor from '@/components/monaco-editor' -import Log from '@/views/data-pipes/components/log' -import ConfigurationModal from './components/configuration-modal' import type { Router } from 'vue-router' -import type { Ref } from 'vue' const DataPipesCreate = defineComponent({ setup() { const { t } = useI18n() const router: Router = useRouter() - const showConfigurationModal: Ref<boolean> = ref(false) - const configurationType: Ref< - 'engine-parameter' | 'self-defined-parameter' - > = ref('engine-parameter') + const variables = reactive({ + name: '', + type: 0, + content: '' + }) const handleClickDataPipes = () => { router.push({ path: '/data-pipes/list' }) } - const handleSelectConfiguration = ( - key: 'engine-parameter' | 'self-defined-parameter' - ) => { - configurationType.value = key - showConfigurationModal.value = true - } - - const handleCancelConfigurationModal = () => { - showConfigurationModal.value = false - } - - const handleConfirmConfigurationModal = () => { - showConfigurationModal.value = false + const handleAdd = () => { + scriptAdd(variables).then(() => { + handleClickDataPipes() + }) } return { t, - showConfigurationModal, - configurationType, + ...toRefs(variables), handleClickDataPipes, - handleSelectConfiguration, - handleCancelConfigurationModal, - handleConfirmConfigurationModal + handleAdd } }, render() { @@ -93,8 +79,10 @@ const DataPipesCreate = defineComponent({ ), 'header-extra': () => ( <NSpace> - <NButton secondary>{this.t('data_pipes.cancel')}</NButton> - <NButton secondary type='primary'> + <NButton secondary onClick={this.handleClickDataPipes}> + {this.t('data_pipes.cancel')} + </NButton> + <NButton secondary type='primary' onClick={this.handleAdd}> {this.t('data_pipes.save')} </NButton> </NSpace> @@ -110,6 +98,7 @@ const DataPipesCreate = defineComponent({ maxlength='100' showCount style={{ width: '600px' }} + v-model={[this.name, 'value']} /> <NTooltip placement='right' trigger='hover'> {{ @@ -125,39 +114,8 @@ const DataPipesCreate = defineComponent({ </NSpace> </NCard> <NCard> - <NSpace vertical> - <NSpace justify='end'> - <NDropdown - trigger='click' - options={[ - { - label: this.t('data_pipes.engine_parameter'), - key: 'engine-parameter' - }, - { - label: this.t('data_pipes.self_defined_parameter'), - key: 'self-defined-parameter' - } - ]} - onSelect={this.handleSelectConfiguration} - > - <NButton secondary> - {this.t('data_pipes.configuration')} - </NButton> - </NDropdown> - </NSpace> - <MonacoEditor /> - </NSpace> - </NCard> - <NCard> - <Log /> + <MonacoEditor v-model={[this.content, 'value']} /> </NCard> - <ConfigurationModal - type={this.configurationType} - showModal={this.showConfigurationModal} - onCancelModal={this.handleCancelConfigurationModal} - onConfirmModal={this.handleConfirmConfigurationModal} - /> </NSpace> ) } diff --git a/seatunnel-ui/src/views/data-pipes/detail/components/detail-overview.tsx b/seatunnel-ui/src/views/data-pipes/detail/components/detail-overview.tsx deleted file mode 100644 index 0151f77d..00000000 --- a/seatunnel-ui/src/views/data-pipes/detail/components/detail-overview.tsx +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { defineComponent, onMounted, toRefs } from 'vue' -import { NGi, NGrid, NSpace, NTabs, NTabPane, NDataTable } from 'naive-ui' -import { useI18n } from 'vue-i18n' -import { useDetailOverview } from './use-detail-overview' -import Log from '@/views/data-pipes/components/log' - -const DetailOverview = defineComponent({ - setup() { - const { t } = useI18n() - const { state, createColumns } = useDetailOverview() - - onMounted(() => { - createColumns(state) - }) - - return { t, ...toRefs(state) } - }, - render() { - return ( - <NSpace vertical> - <NGrid x-gap='12' cols='2'> - <NGi>{this.t('data_pipes.input_metrics')}</NGi> - <NGi>{this.t('data_pipes.output_metrics')}</NGi> - </NGrid> - <NGrid x-gap='12' cols='4'> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.bytes_per_second')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.record_per_second')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.bytes_per_second')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.record_per_second')} - </span> - </NGi> - </NGrid> - <NGrid x-gap='12' cols='4'> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.total_bytes')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.total_records')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.total_bytes')} - </span> - </NGi> - <NGi - class={['flex', 'justify-between', 'py-4', 'px-3', 'bg-gray-50']} - > - <span>1212</span> - <span class='text-gray-400'> - {this.t('data_pipes.total_records')} - </span> - </NGi> - </NGrid> - <NTabs type='line' justify-content='space-evenly' class='mt-7'> - <NTabPane name='run-log' tab={this.t('data_pipes.run_log')}> - <Log /> - </NTabPane> - <NTabPane - name='historical-run-logs' - tab={this.t('data_pipes.historical_run_logs')} - > - <NDataTable - loading={this.loading} - columns={this.columns} - data={this.tableData} - /> - </NTabPane> - </NTabs> - </NSpace> - ) - } -}) - -export default DetailOverview diff --git a/seatunnel-ui/src/views/data-pipes/detail/components/use-detail-overview.ts b/seatunnel-ui/src/views/data-pipes/detail/components/use-detail-overview.ts deleted file mode 100644 index c9eba531..00000000 --- a/seatunnel-ui/src/views/data-pipes/detail/components/use-detail-overview.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { reactive, ref } from 'vue' -import { useI18n } from 'vue-i18n' - -export function useDetailOverview() { - const { t } = useI18n() - const state = reactive({ - loading: ref(false), - columns: [], - tableData: [{ name: '' }] - }) - - const createColumns = (state: any) => { - state.columns = [ - { - title: t('data_pipes.name'), - key: 'name' - }, - { - title: t('data_pipes.execute_time'), - key: 'executeTime' - }, - { - title: t('data_pipes.end_time'), - key: 'endTime' - }, - { - title: t('data_pipes.state'), - key: 'state' - } - ] - } - - return { state, createColumns } -} diff --git a/seatunnel-ui/src/views/data-pipes/detail/index.tsx b/seatunnel-ui/src/views/data-pipes/detail/index.tsx index cf01bb73..aa34cfdf 100644 --- a/seatunnel-ui/src/views/data-pipes/detail/index.tsx +++ b/seatunnel-ui/src/views/data-pipes/detail/index.tsx @@ -15,31 +15,42 @@ * limitations under the License. */ -import { defineComponent } from 'vue' -import { - NSpace, - NCard, - NBreadcrumb, - NBreadcrumbItem, - NTabs, - NTabPane -} from 'naive-ui' +import { defineComponent, onMounted, reactive, toRefs } from 'vue' +import { NSpace, NCard, NBreadcrumb, NBreadcrumbItem } from 'naive-ui' import { useI18n } from 'vue-i18n' -import { useRouter } from 'vue-router' +import { useRoute, useRouter } from 'vue-router' +import { scriptDetail } from '@/service/script' import MonacoEditor from '@/components/monaco-editor' -import DetailOverview from './components/detail-overview' -import type { Router } from 'vue-router' +import type { Router, RouteLocationNormalizedLoaded } from 'vue-router' +import type { ResponseBasic } from '@/service/types' +import type { ScriptDetail } from '@/service/script/types' const DataPipesDetail = defineComponent({ setup() { const { t } = useI18n() const router: Router = useRouter() + const route: RouteLocationNormalizedLoaded = useRoute() + const variables = reactive({ + name: '', + type: 0, + content: '' + }) const handleClickDataPipes = () => { router.push({ path: '/data-pipes/list' }) } - return { t, handleClickDataPipes } + onMounted(() => { + scriptDetail(Number(route.params.dataPipeId)).then( + (res: ResponseBasic<ScriptDetail>) => { + variables.name = res.data.name + variables.type = res.data.type + variables.content = res.data.content + } + ) + }) + + return { t, ...toRefs(variables), handleClickDataPipes } }, render() { return ( @@ -52,24 +63,18 @@ const DataPipesDetail = defineComponent({ <NBreadcrumbItem onClick={this.handleClickDataPipes}> {this.t('data_pipes.data_pipes')} </NBreadcrumbItem> - <NBreadcrumbItem>user-order-tables-10</NBreadcrumbItem> + <NBreadcrumbItem>{this.name}</NBreadcrumbItem> </NBreadcrumb> </NSpace> ) }} </NCard> - <NTabs type='segment' class='mt-9'> - <NTabPane name='overview' tab={this.t('data_pipes.overview')}> - <NCard> - <DetailOverview /> - </NCard> - </NTabPane> - <NTabPane name='script' tab={this.t('data_pipes.script')}> - <NCard> - <MonacoEditor /> - </NCard> - </NTabPane> - </NTabs> + <NCard> + <MonacoEditor + v-model={[this.content, 'value']} + options={{ readOnly: true }} + /> + </NCard> </NSpace> ) } diff --git a/seatunnel-ui/src/views/data-pipes/edit/index.tsx b/seatunnel-ui/src/views/data-pipes/edit/index.tsx index d5f9111f..7a5564f7 100644 --- a/seatunnel-ui/src/views/data-pipes/edit/index.tsx +++ b/seatunnel-ui/src/views/data-pipes/edit/index.tsx @@ -15,7 +15,7 @@ * limitations under the License. */ -import { defineComponent } from 'vue' +import { defineComponent, onMounted, reactive, toRefs } from 'vue' import { NBreadcrumb, NBreadcrumbItem, @@ -27,21 +27,48 @@ import { NTooltip } from 'naive-ui' import { useI18n } from 'vue-i18n' -import { useRouter } from 'vue-router' +import { useRouter, useRoute } from 'vue-router' import { BulbOutlined } from '@vicons/antd' +import { scriptDetail, scriptUpdate } from '@/service/script' import MonacoEditor from '@/components/monaco-editor' -import type { Router } from 'vue-router' +import type { Router, RouteLocationNormalizedLoaded } from 'vue-router' +import type { ResponseBasic } from '@/service/types' +import type { ScriptDetail } from '@/service/script/types' const DataPipesEdit = defineComponent({ setup() { const { t } = useI18n() const router: Router = useRouter() + const route: RouteLocationNormalizedLoaded = useRoute() + const variables = reactive({ + name: '', + type: 0, + content: '' + }) const handleClickDataPipes = () => { router.push({ path: '/data-pipes/list' }) } - return { t, handleClickDataPipes } + const handleAdd = () => { + scriptUpdate(Number(route.params.dataPipeId), variables.content).then( + () => { + handleClickDataPipes() + } + ) + } + + onMounted(() => { + scriptDetail(Number(route.params.dataPipeId)).then( + (res: ResponseBasic<ScriptDetail>) => { + variables.name = res.data.name + variables.type = res.data.type + variables.content = res.data.content + } + ) + }) + + return { t, ...toRefs(variables), handleClickDataPipes, handleAdd } }, render() { return ( @@ -54,14 +81,16 @@ const DataPipesEdit = defineComponent({ <NBreadcrumbItem onClick={this.handleClickDataPipes}> {this.t('data_pipes.data_pipes')} </NBreadcrumbItem> - <NBreadcrumbItem>{this.t('data_pipes.edit')}</NBreadcrumbItem> + <NBreadcrumbItem>{this.name}</NBreadcrumbItem> </NBreadcrumb> </NSpace> ), 'header-extra': () => ( <NSpace> - <NButton secondary>{this.t('data_pipes.cancel')}</NButton> - <NButton secondary type='primary'> + <NButton secondary onClick={this.handleClickDataPipes}> + {this.t('data_pipes.cancel')} + </NButton> + <NButton secondary type='primary' onClick={this.handleAdd}> {this.t('data_pipes.save')} </NButton> </NSpace> @@ -73,10 +102,11 @@ const DataPipesEdit = defineComponent({ <span>{this.t('data_pipes.name')}</span> <NSpace align='center'> <NInput - clearable + disabled maxlength='100' showCount style={{ width: '600px' }} + v-model={[this.name, 'value']} /> <NTooltip placement='right' trigger='hover'> {{ @@ -92,7 +122,7 @@ const DataPipesEdit = defineComponent({ </NSpace> </NCard> <NCard> - <MonacoEditor /> + <MonacoEditor v-model={[this.content, 'value']} /> </NCard> </NSpace> ) diff --git a/seatunnel-ui/src/views/data-pipes/list/use-table.ts b/seatunnel-ui/src/views/data-pipes/list/use-table.ts index ae52e1ae..32a3299f 100644 --- a/seatunnel-ui/src/views/data-pipes/list/use-table.ts +++ b/seatunnel-ui/src/views/data-pipes/list/use-table.ts @@ -101,7 +101,12 @@ export function useTable() { NButton, { text: true, - disabled: row.status === 'published' + disabled: row.status === 'published', + onClick: () => { + router.push({ + path: `/data-pipes/${row.id}/edit` + }) + } }, t('data_pipes.edit') ), diff --git a/seatunnel-ui/src/views/setting/index.tsx b/seatunnel-ui/src/views/setting/index.tsx index e7daa044..dc116c3e 100644 --- a/seatunnel-ui/src/views/setting/index.tsx +++ b/seatunnel-ui/src/views/setting/index.tsx @@ -79,7 +79,7 @@ const Setting = defineComponent({ <NList> <NListItem> <NSpace justify='space-between' align='center'> - <span>{this.t('setting.theme')}</span> + <span>{this.t('setting.model')}</span> <div class='w-56'> <NSelect value={'light'} @@ -90,6 +90,38 @@ const Setting = defineComponent({ </div> </NSpace> </NListItem> + <NListItem> + <NSpace justify='space-between' align='center'> + <span>{this.t('setting.hue')}</span> + <div class='w-56'> + <NSelect + value={'purple'} + options={[ + { value: 'purple', label: this.t('setting.purple') } + ]} + /> + </div> + </NSpace> + </NListItem> + <NListItem> + <NSpace justify='space-between' align='center'> + <span>{this.t('setting.fillet')}</span> + <div class='w-56'> + <NSelect + value={useSettingStore().getFilletValue} + onUpdateValue={(s) => { + useSettingStore().setFilletValue(s) + }} + options={[ + { value: 5, label: '5px' }, + { value: 10, label: '10px' }, + { value: 15, label: '15px' }, + { value: 20, label: '20px' } + ]} + /> + </div> + </NSpace> + </NListItem> </NList> </NCard> </NSpace>