crud.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import type { AddReq, CreateCrudOptionsRet, DelReq, EditReq, UserPageQuery, UserPageRes } from '@fast-crud/fast-crud';
  2. import { dict } from '@fast-crud/fast-crud';
  3. import dayjs from 'dayjs';
  4. import * as api from './api';
  5. export default function createCrudOptions(): CreateCrudOptionsRet {
  6. const pageRequest = async (query: UserPageQuery): Promise<UserPageRes> => {
  7. return api.GetList(query);
  8. };
  9. const editRequest = async (ctx: EditReq) => {
  10. const { form, row } = ctx;
  11. form.id = row.id;
  12. return api.UpdateObj(form);
  13. };
  14. const delRequest = async (ctx: DelReq) => {
  15. const { row } = ctx;
  16. return api.DelObj(row.id);
  17. };
  18. const addRequest = async (req: AddReq) => {
  19. const { form } = req;
  20. return api.AddObj(form);
  21. };
  22. return {
  23. crudOptions: {
  24. container: {
  25. is: 'fs-layout-card'
  26. },
  27. request: {
  28. pageRequest,
  29. addRequest,
  30. editRequest,
  31. delRequest
  32. },
  33. columns: {
  34. id: {
  35. title: 'ID',
  36. key: 'id',
  37. type: 'number',
  38. column: {
  39. width: 50
  40. },
  41. form: {
  42. show: false
  43. }
  44. },
  45. datetime: {
  46. title: '时间',
  47. type: 'datetime',
  48. // naive 默认仅支持数字类型时间戳作为日期输入与输出
  49. // 字符串类型的时间需要转换格式
  50. valueBuilder(context) {
  51. const { value, row, key } = context;
  52. if (value) {
  53. // naive 默认仅支持时间戳作为日期输入与输出
  54. row[key] = dayjs(value).valueOf();
  55. }
  56. },
  57. valueResolve(context) {
  58. const { value, form, key } = context;
  59. if (value) {
  60. form[key] = dayjs(value).format('YYYY-MM-DD HH:mm:ss');
  61. }
  62. }
  63. },
  64. select: {
  65. search: { show: true },
  66. type: 'dict-select',
  67. dict: dict({
  68. url: '/mock/crud/demo/dict'
  69. })
  70. },
  71. text: {
  72. title: '文本',
  73. type: 'text',
  74. search: { show: true }
  75. },
  76. copyable: {
  77. title: '可复制',
  78. type: ['text', 'copyable'],
  79. search: { show: true }
  80. },
  81. avatar: {
  82. title: '头像裁剪',
  83. type: 'cropper-uploader'
  84. },
  85. upload: {
  86. title: '文件上传',
  87. type: 'file-uploader'
  88. },
  89. richtext: {
  90. title: '富文本',
  91. type: 'editor-wang5',
  92. column: {
  93. // cell中不显示
  94. show: false
  95. },
  96. form: {
  97. col: {
  98. // 横跨两列
  99. span: 24
  100. },
  101. component: {
  102. style: {
  103. height: '300px'
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110. };
  111. }