material.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { asyncTimeout, jsonToForm } from "@/utils";
  2. import { PagingRequest, PagingResult } from ".";
  3. import {
  4. ADD_MATERIAL,
  5. DEL_MATERIAL,
  6. MATERIAL_GROUP_LIST,
  7. MATERIAL_PAG,
  8. UPLOAD_HEADS,
  9. } from "./constant";
  10. import axios from "./instance";
  11. type ServiceMaterialGroup = {
  12. dictKey: string;
  13. dictName: string;
  14. id: number;
  15. };
  16. type ServiceMaterial = {
  17. createTime: string;
  18. dictId: number;
  19. status: number,
  20. dictName: string;
  21. fileFormat: string;
  22. fileName: string;
  23. fileSize: string;
  24. fileType: string;
  25. fileUrl: string;
  26. id: number;
  27. name: string;
  28. newFileName: string;
  29. typeKey: string;
  30. updateTime: string;
  31. uploadId: number;
  32. };
  33. export type MaterialGroup = {
  34. id: number;
  35. name: string;
  36. };
  37. export type Material = {
  38. id: number;
  39. name: string;
  40. format: string;
  41. url: string;
  42. size: number;
  43. groupId: number;
  44. status: number;
  45. group: string;
  46. uploadId?: number;
  47. isSystem?: number
  48. modelId?: number;
  49. };
  50. export type MaterialPageProps = PagingRequest<
  51. Partial<Material> & { groupIds: number[], formats: string[] }
  52. >;
  53. export const fetchMaterialPage = async (params: MaterialPageProps) => {
  54. //
  55. const material = await axios.post<PagingResult<ServiceMaterial[]>>(MATERIAL_PAG, {
  56. pageNum: params.pageNum,
  57. pageSize: params.pageSize,
  58. name: params.name,
  59. dictIds: params.groupIds,
  60. fileFormats: params.formats
  61. });
  62. const nm = {
  63. ...material,
  64. list: material.list.map((item): Material => ({
  65. id: item.id,
  66. name: item.name,
  67. format: item.fileFormat,
  68. url: item.fileUrl,
  69. size: Number(item.fileSize),
  70. groupId: item.dictId,
  71. status: item.status,
  72. group: item.dictName,
  73. uploadId: item.uploadId
  74. }))
  75. }
  76. // const testUrls = [
  77. // 'dog.glb', 'man--running.glb', 'man--walk.glb', 'Soldier.glb', 'Xbot.glb', 'Man.glb'
  78. // ]
  79. // nm.list.unshift(
  80. // ...testUrls.map((item, ndx) => ({
  81. // id: ndx,
  82. // name: item,
  83. // format: 'glb',
  84. // url: `/animation/${item}`,
  85. // size: 1,
  86. // groupId: 1,
  87. // status: 1,
  88. // group: '动画模型',
  89. // uploadId: 1
  90. // }))
  91. // )
  92. return nm;
  93. };
  94. export const fetchMaterialGroups = async () => {
  95. return (await axios.get<ServiceMaterialGroup[]>(MATERIAL_GROUP_LIST)).map(
  96. (item) => ({
  97. name: item.dictName,
  98. key: item.dictKey,
  99. id: item.id,
  100. })
  101. ) as MaterialGroup[];
  102. };
  103. export const addMaterial = (file: File) => {
  104. return axios<string>({
  105. method: "POST",
  106. url: ADD_MATERIAL,
  107. data: jsonToForm({ file }),
  108. headers: { ...UPLOAD_HEADS },
  109. });
  110. };
  111. export const delMaterial = (id: Material["id"]) => {
  112. return axios.post(DEL_MATERIAL, { id });
  113. };