AssetsList.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { List } from "@queenjs/ui";
  2. import { Empty, Pagination, Spin } from "ant-design-vue";
  3. import { defineUI } from "queenjs";
  4. import { any, number, string } from "vue-types";
  5. export default defineUI({
  6. props: {
  7. columns: number().def(5),
  8. gap: string().def("15px"),
  9. item: any().isRequired,
  10. control: any().isRequired,
  11. },
  12. setup(props) {
  13. return () => {
  14. const { control, columns, gap } = props;
  15. const loading = control.state.loading;
  16. return (
  17. <div>
  18. {loading && (
  19. <div class="h-200px flex items-center justify-center">
  20. <Spin spinning tip="加载中"></Spin>
  21. </div>
  22. )}
  23. {!loading && (
  24. <>
  25. <List gap={gap} columns={columns} data={control.state.list}>
  26. {{
  27. item: (record: any) => props.item?.(record),
  28. empty: () => <Empty class="py-50px" description="暂无数据" />,
  29. }}
  30. </List>
  31. <div class="text-center my-50px">
  32. <Pagination
  33. size="default"
  34. hideOnSinglePage
  35. showSizeChanger={false}
  36. pageSize={control.state.size}
  37. total={control.state.total}
  38. current={control.state.page}
  39. onChange={(p) => control.loadPage(p)}
  40. />
  41. </div>
  42. </>
  43. )}
  44. </div>
  45. );
  46. };
  47. },
  48. });