diff --git a/packages/fast-crud/src/d/expose.ts b/packages/fast-crud/src/d/expose.ts index 2b574f84..700f07e8 100644 --- a/packages/fast-crud/src/d/expose.ts +++ b/packages/fast-crud/src/d/expose.ts @@ -1,4 +1,13 @@ -import { CompositionColumns, CrudBinding, FormProps, PageQuery, PageRes, RemoveProps } from "./crud"; +import { + CompositionColumns, + CrudBinding, + FormProps, + Page, + PageQuery, + PageRes, + RemoveProps, + UserPageQuery +} from "./crud"; import { Ref } from "vue"; import { EditableOnEnabledProps } from "../use"; @@ -76,6 +85,16 @@ export type CrudExpose = { */ doSearch: (props: DoSearchProps) => Promise; + /** + * 构建page查询参数 + * @param pageQuery + */ + buildPageQuery(pageQuery: PageQuery): UserPageQuery; + + /** + * 获取当前分页参数 + */ + getPage(): Page; /** * 执行搜索,返回页面数据 * @param pageQuery diff --git a/packages/fast-crud/src/lib/fs-export/index.ts b/packages/fast-crud/src/lib/fs-export/index.ts index 3487c5a1..0c09ea07 100644 --- a/packages/fast-crud/src/lib/fs-export/index.ts +++ b/packages/fast-crud/src/lib/fs-export/index.ts @@ -1,29 +1,25 @@ import _ from "lodash-es"; -import { ColumnCompositionProps, ColumnProps, CrudExpose, PageQuery } from "../../d"; +import { ColumnCompositionProps, ColumnProps, CrudExpose, PageQuery, UserPageQuery } from "../../d"; import { CsvParams, ExcelParams, ExportColumn, ExportUtil, ImportUtil } from "./lib/d"; import { unref } from "vue"; export async function loadFsExportUtil(): Promise { const module = await import.meta.glob("./lib/index.ts"); - console.log("module", module); let target: any = null; _.each(module, (item) => { target = item; }); const lib = await target(); - console.log("lib", lib); return lib.exportUtil; } export async function loadFsImportUtil(): Promise { const module = await import.meta.glob("./lib/index.ts"); - console.log("module", module); let target: any = null; _.each(module, (item) => { target = item; }); const lib = await target(); - console.log("lib", lib); return lib.importUtil; } @@ -58,7 +54,7 @@ export type ExportProps = { /** * 服务端导出,自己实现 */ - server?: () => Promise; + server?: (pageQuery: UserPageQuery) => Promise; /** * 仅导出显示的列 @@ -107,7 +103,9 @@ export type ExportProps = { ExcelParams; export async function exportTable(crudExpose: CrudExpose, opts: ExportProps = {}): Promise { if (opts.server) { - await opts.server(); + const page = crudExpose.getPage(); + const pageQuery = crudExpose.buildPageQuery({ page }); + await opts.server(pageQuery); return; } const crudBinding = crudExpose.crudBinding; diff --git a/packages/fast-crud/src/use/use-expose.ts b/packages/fast-crud/src/use/use-expose.ts index 36b43bf8..931f017f 100644 --- a/packages/fast-crud/src/use/use-expose.ts +++ b/packages/fast-crud/src/use/use-expose.ts @@ -17,6 +17,7 @@ import { ColumnCompositionProps, CrudBinding, DoRemoveContext, + Page, PageQuery, PageRes, RemoveProps, @@ -301,7 +302,7 @@ export function useExpose(props: UseExposeProps): UseExposeRet { return crudRef.value?.getSearchRef(); }, - async search(pageQuery: PageQuery, options: SearchOptions = {}) { + buildPageQuery(pageQuery: PageQuery): UserPageQuery { const page = pageQuery.page; let searchFormData = pageQuery.form; @@ -323,7 +324,11 @@ export function useExpose(props: UseExposeProps): UseExposeRet { if (crudBinding.value.request.transformQuery) { userPageQuery = crudBinding.value.request.transformQuery(query); } + return userPageQuery; + }, + async search(pageQuery: PageQuery, options: SearchOptions = {}) { + const userPageQuery = crudExpose.buildPageQuery(pageQuery); let userPageRes: UserPageRes; try { if (options.silence !== true) { @@ -355,24 +360,33 @@ export function useExpose(props: UseExposeProps): UseExposeRet { } return pageRes; }, + getPage() { + let page: Page = { + currentPage: 1, + pageSize: 10 + }; + if (crudBinding.value.pagination) { + page = { + currentPage: crudBinding.value.pagination[ui.pagination.currentPage], + pageSize: crudBinding.value.pagination.pageSize + }; + } + return page; + }, async doRefresh(props?) { if (crudBinding.value.request.pageRequest == null) { return; } logger.debug("do refresh:", props); - let page: any; if (crudBinding.value.pagination) { if (props?.goFirstPage) { crudBinding.value.pagination[ui.pagination.currentPage] = 1; } - - page = { - currentPage: crudBinding.value.pagination[ui.pagination.currentPage], - pageSize: crudBinding.value.pagination.pageSize - }; } + + const page = crudExpose.getPage(); const pageRes = await crudExpose.search({ page }, { silence: props?.silence }); - const { currentPage = page[ui.pagination.currentPage], pageSize = page.pageSize, total } = pageRes; + const { currentPage = page.currentPage, pageSize = page.pageSize, total } = pageRes; const { records } = pageRes; if ( records == null ||