diff --git a/back/services/cron.ts b/back/services/cron.ts index c6ea3e3f..f581faf4 100644 --- a/back/services/cron.ts +++ b/back/services/cron.ts @@ -217,6 +217,22 @@ export default class CronService { } } + private formatFilterQuery(query: any, filterQuery: any) { + if (filterQuery) { + if (!query[Op.and]) { + query[Op.and] = []; + } + const filterKeys: any = Object.keys(filterQuery); + for (const key of filterKeys) { + let q: any = {}; + if (filterKeys[key]) { + q[key] = filterKeys[key]; + } + query[Op.and].push(q); + } + } + } + private formatViewSort(order: string[][], viewQuery: any) { if (viewQuery.sorts && viewQuery.sorts.length > 0) { for (const { property, type } of viewQuery.sorts) { @@ -229,16 +245,16 @@ export default class CronService { searchValue: string; page: string; size: string; - sortField: string; - sortType: string; + sorter: string; + filters: string; queryString: string; }): Promise<{ data: Crontab[]; total: number }> { const searchText = params?.searchValue; const page = Number(params?.page || '0'); const size = Number(params?.size || '0'); - const sortField = params?.sortField || ''; - const sortType = params?.sortType || ''; const viewQuery = JSON.parse(params?.queryString || '{}'); + const filterQuery = JSON.parse(params?.filters || '{}'); + const sorterQuery = JSON.parse(params?.sorter || '{}'); let query: any = {}; let order = [ @@ -250,10 +266,14 @@ export default class CronService { this.formatViewQuery(query, viewQuery); this.formatSearchText(query, searchText); + this.formatFilterQuery(query, filterQuery); this.formatViewSort(order, viewQuery); - if (sortType && sortField) { - order.unshift([sortField, sortType]); + if (sorterQuery) { + const { field, type } = sorterQuery; + if (field && type) { + order.unshift([field, type]); + } } let condition: any = { where: query, diff --git a/src/pages/crontab/index.tsx b/src/pages/crontab/index.tsx index 38083ae5..bc259209 100644 --- a/src/pages/crontab/index.tsx +++ b/src/pages/crontab/index.tsx @@ -181,6 +181,8 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { { title: '最后运行时间', align: 'center' as const, + dataIndex: 'last_execution_time', + key: 'last_execution_time', width: 150, sorter: { compare: (a: any, b: any) => { @@ -210,6 +212,8 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { title: '最后运行时长', align: 'center' as const, width: 120, + dataIndex: 'last_running_time', + key: 'last_running_time', sorter: { compare: (a: any, b: any) => { return a.last_running_time - b.last_running_time; @@ -366,6 +370,7 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { page: number; size: number; sorter: any; + filters: any; }>({} as any); const [viewConf, setViewConf] = useState(); const [tableScrollHeight, setTableScrollHeight] = useState(); @@ -388,9 +393,13 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { cmd[1] = cmd[1].replace('/ql/data/scripts/', ''); } - let [p, s] = cmd[1].split('/'); - if (!s) { - s = p; + let p: string, s: string; + let index = cmd[1].lastIndexOf('/'); + if (index >= 0) { + s = cmd[1].slice(index + 1); + p = cmd[1].slice(0, index); + } else { + s = cmd[1]; p = ''; } history.push(`/script?p=${p}&s=${s}`); @@ -401,11 +410,10 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { const getCrons = () => { setLoading(true); - const { page, size, sorter } = pageConf; - let url = `${config.apiPrefix}crons?searchValue=${searchText}&page=${page}&size=${size}`; + const { page, size, sorter, filters } = pageConf; + let url = `${config.apiPrefix}crons?searchValue=${searchText}&page=${page}&size=${size}&filters=${JSON.stringify(filters)}`; if (sorter && sorter.field) { - url += `&sortField=${sorter.field}&sortType=${sorter.order === 'ascend' ? 'ASC' : 'DESC' - }`; + url += `&sorter=${JSON.stringify({ field: sorter.field, type: sorter.order === 'ascend' ? 'ASC' : 'DESC' })}`; } if (viewConf) { url += `&queryString=${JSON.stringify({ @@ -820,7 +828,7 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { sorter: SorterResult | SorterResult[], ) => { const { current, pageSize } = pagination; - setPageConf({ page: current as number, size: pageSize as number, sorter }); + setPageConf({ page: current as number, size: pageSize as number, sorter, filters }); localStorage.setItem('pageSize', String(pageSize)); }; @@ -857,6 +865,7 @@ const Crontab = ({ headerStyle, isPhone, theme }: any) => { page: 1, size: parseInt(localStorage.getItem('pageSize') || '20'), sorter: {}, + filters: {} }); setTimeout(() => { setTableScrollHeight(getTableScroll());