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 455aab1c [Feat][UI] Complete the task list interface. (#27)
455aab1c is described below
commit 455aab1c2f2e29b0becee30d6f2318bee17ddefe
Author: tungl <[email protected]>
AuthorDate: Thu Feb 23 13:31:01 2023 +0800
[Feat][UI] Complete the task list interface. (#27)
* [Feat][UI] Complete the task list interface.
* [Feat][UI] Complete the task list interface.
---
seatunnel-ui/src/locales/en_US/tasks.ts | 7 +-
seatunnel-ui/src/views/tasks/list/index.tsx | 46 +++++++---
seatunnel-ui/src/views/tasks/list/use-table.ts | 101 ++++++++++-----------
.../src/views/user-manage/list/use-table.ts | 4 +-
4 files changed, 87 insertions(+), 71 deletions(-)
diff --git a/seatunnel-ui/src/locales/en_US/tasks.ts
b/seatunnel-ui/src/locales/en_US/tasks.ts
index 4031ae00..5114d2ab 100644
--- a/seatunnel-ui/src/locales/en_US/tasks.ts
+++ b/seatunnel-ui/src/locales/en_US/tasks.ts
@@ -18,17 +18,18 @@
export default {
tasks: 'Tasks',
search: 'Search',
- tasks_name: 'Tasks Name',
success: 'Success',
fail: 'Fail',
+ stop: 'Stop',
running: 'Running',
+ unknown: 'Unknown',
task_name: 'Task Name',
state: 'State',
run_frequency: 'Run Frequency',
once: 'Once',
crontab: 'Crontab',
- next_run: 'Next Run',
- last_run: 'Last Run',
+ start_time: 'Start Time',
+ end_time: 'End Time',
last_total_bytes: 'Last Total Bytes',
last_total_records: 'Last Total Records',
rerun: 'Rerun',
diff --git a/seatunnel-ui/src/views/tasks/list/index.tsx
b/seatunnel-ui/src/views/tasks/list/index.tsx
index b18977bc..efd67ad9 100644
--- a/seatunnel-ui/src/views/tasks/list/index.tsx
+++ b/seatunnel-ui/src/views/tasks/list/index.tsx
@@ -31,15 +31,38 @@ import { useTable } from './use-table'
const TasksList = defineComponent({
setup() {
const { t } = useI18n()
- const { state, createColumns } = useTable()
+ const { state, createColumns, getTableData } = useTable()
- const handleSearch = () => {}
+ const requestData = () => {
+ getTableData({
+ pageSize: state.pageSize,
+ pageNo: state.pageNo,
+ name: state.name
+ })
+ }
+
+ const handleSearch = () => {
+ state.pageNo = 1
+ requestData()
+ }
+
+ const handlePageSize = () => {
+ state.pageNo = 1
+ requestData()
+ }
onMounted(() => {
createColumns(state)
+ requestData()
})
- return { t, handleSearch, ...toRefs(state) }
+ return {
+ t,
+ handleSearch,
+ handlePageSize,
+ requestData,
+ ...toRefs(state)
+ }
},
render() {
return (
@@ -49,17 +72,10 @@ const TasksList = defineComponent({
'header-extra': () => (
<NSpace>
<NInput
- placeholder={this.t('tasks.tasks_name')}
- style={{ width: '200px' }}
- />
- <NSelect
- placeholder={this.t('tasks.state')}
+ clearable
+ v-model={[this.name, 'value']}
+ placeholder={this.t('tasks.task_name')}
style={{ width: '200px' }}
- options={[
- { label: this.t('tasks.success'), value: 'success' },
- { label: this.t('tasks.fail'), value: 'fail' },
- { label: this.t('tasks.running'), value: 'running' }
- ]}
/>
<NButton onClick={this.handleSearch}>
{this.t('tasks.search')}
@@ -77,12 +93,14 @@ const TasksList = defineComponent({
/>
<NSpace justify='center'>
<NPagination
- v-model:page={this.page}
+ v-model:page={this.pageNo}
v-model:page-size={this.pageSize}
page-count={this.totalPage}
show-size-picker
page-sizes={[10, 30, 50]}
show-quick-jumper
+ onUpdatePage={this.requestData}
+ onUpdatePageSize={this.handlePageSize}
/>
</NSpace>
</NSpace>
diff --git a/seatunnel-ui/src/views/tasks/list/use-table.ts
b/seatunnel-ui/src/views/tasks/list/use-table.ts
index 0ea56834..43aa8e8c 100644
--- a/seatunnel-ui/src/views/tasks/list/use-table.ts
+++ b/seatunnel-ui/src/views/tasks/list/use-table.ts
@@ -17,85 +17,58 @@
import { useI18n } from 'vue-i18n'
import { h, reactive, ref } from 'vue'
-import { NButton, NSpace, NTag, NIcon } from 'naive-ui'
-import { UploadOutlined, DownloadOutlined } from '@vicons/antd'
+import { NButton, NSpace, NTag } from 'naive-ui'
+import { taskInstanceList } from '@/service/task'
+import type { ResponseTable } from '@/service/types'
+import type { JobDetail } from '@/service/task/types'
export function useTable() {
const { t } = useI18n()
const state = reactive({
columns: [],
- tableData: [{ state: 'success' }, { state: 'fail' }, { state: 'running' }],
- page: ref(1),
+ tableData: [],
+ pageNo: ref(1),
pageSize: ref(10),
totalPage: ref(1),
- loading: ref(false)
+ loading: ref(false),
+ name: ref('')
})
const createColumns = (state: any) => {
state.columns = [
{
title: t('tasks.task_name'),
- key: 'task_name'
+ key: 'instanceName'
},
{
title: t('tasks.state'),
- key: 'state',
+ key: 'status',
render: (row: any) => {
- if (row.state === 'success') {
+ if (row.status === 'SUCCESS') {
return h(NTag, { type: 'success' }, t('tasks.success'))
- } else if (row.state === 'fail') {
+ } else if (row.status === 'FAILED') {
return h(NTag, { type: 'error' }, t('tasks.fail'))
- } else if (row.state === 'running') {
+ } else if (row.status === 'STOPPED') {
+ return h(NTag, { type: 'warning' }, t('tasks.stop'))
+ } else if (row.status === 'RUNNING') {
return h(NTag, { type: 'info' }, t('tasks.running'))
+ } else {
+ return h(NTag, { type: 'default' }, t('tasks.unknown'))
}
}
},
{
title: t('tasks.run_frequency'),
- key: 'run_frequency'
+ key: 'runFrequency'
},
{
- title: t('tasks.next_run'),
- key: 'next_run'
+ title: t('tasks.start_time'),
+ key: 'startTime'
},
{
- title: t('tasks.last_run'),
- key: 'last_run'
- },
- {
- title: t('tasks.last_total_bytes'),
- key: 'last_total_bytes',
- render: (row: any) =>
- h(NSpace, {}, [
- h(
- NTag,
- { type: 'success' },
- { icon: h(NIcon, {}, h(UploadOutlined)), default: 12 + ' (KB)' }
- ),
- h(
- NTag,
- { type: 'error' },
- { icon: h(NIcon, {}, h(DownloadOutlined)), default: 16 + ' (KB)'
}
- )
- ])
- },
- {
- title: t('tasks.last_total_records'),
- key: 'last_total_records',
- render: (row: any) =>
- h(NSpace, {}, [
- h(
- NTag,
- { type: 'success' },
- { icon: h(NIcon, {}, h(UploadOutlined)), default: 66 }
- ),
- h(
- NTag,
- { type: 'error' },
- { icon: h(NIcon, {}, h(DownloadOutlined)), default: 77 }
- )
- ])
+ title: t('tasks.end_time'),
+ key: 'endTime'
},
{
title: t('tasks.operation'),
@@ -103,8 +76,14 @@ export function useTable() {
render: (row: any) =>
h(NSpace, null, {
default: () => [
- h(NButton, { text: true }, t('tasks.rerun')),
- h(NButton, { text: true }, t('tasks.kill')),
+ h(NButton, {
+ text: true,
+ disabled: row.status === 'RUNNING'
+ }, t('tasks.rerun')),
+ h(NButton, {
+ text: true,
+ disabled: row.status !== 'RUNNING'
+ }, t('tasks.kill')),
h(NButton, { text: true }, t('tasks.view_log'))
]
})
@@ -112,5 +91,23 @@ export function useTable() {
]
}
- return { state, createColumns }
+ const getTableData = (params: any) => {
+ if (state.loading) return
+ state.loading = true
+ taskInstanceList({
+ pageNo: params.pageNo,
+ pageSize: params.pageSize,
+ name: params.name
+ }).then((res: ResponseTable<Array<JobDetail> | []>) => {
+ state.tableData = res.data.data as any
+ state.totalPage = res.data.totalPage
+ state.loading = false
+ })
+ }
+
+ return {
+ state,
+ createColumns,
+ getTableData
+ }
}
diff --git a/seatunnel-ui/src/views/user-manage/list/use-table.ts
b/seatunnel-ui/src/views/user-manage/list/use-table.ts
index aee18660..64fb41fe 100644
--- a/seatunnel-ui/src/views/user-manage/list/use-table.ts
+++ b/seatunnel-ui/src/views/user-manage/list/use-table.ts
@@ -26,7 +26,7 @@ export function useTable() {
const { t } = useI18n()
const state = reactive({
columns: [],
- tableData: [{ username: '' }],
+ tableData: [],
pageNo: ref(1),
pageSize: ref(10),
totalPage: ref(1),
@@ -120,7 +120,7 @@ export function useTable() {
state.loading = true
userList({ ...params }).then(
(res: ResponseTable<Array<UserDetail> | []>) => {
- state.tableData = res.data.data
+ state.tableData = res.data.data as any
state.totalPage = res.data.totalPage
state.loading = false
}