types.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**
  2. * 通用类型定义
  3. *
  4. * 功能介绍:
  5. * 为 API 提供了一些通用结构定义。
  6. *
  7. * Author: imengyu
  8. * Date: 2025/12/27
  9. *
  10. * Copyright (c) 2021 imengyu.top. Licensed under the MIT License.
  11. * See License.txt in the project root for license information.
  12. */
  13. import { DataModel, type KeyValue } from '@imengyu/js-request-transform';
  14. /**
  15. * 通用分页返回结构定义
  16. */
  17. export class CommonArrayResult<T extends DataModel> extends DataModel {
  18. /**
  19. * 数据
  20. */
  21. items: T[] = [];
  22. /**
  23. * 系统中一共有多少条数据
  24. */
  25. total = 0;
  26. constructor() {
  27. super(CommonArrayResult);
  28. }
  29. fromData(data: KeyValue[] | undefined | null, total: number|undefined, dataModel: new () => T): this {
  30. this.items = data?.map((item) => new dataModel().fromServerSide(item) as T) || [];
  31. this.total = total || this.items.length;
  32. return this;
  33. }
  34. }
  35. /**
  36. * 通用下拉框返回结构定义
  37. */
  38. export class CommonListResult extends DataModel {
  39. /**
  40. * 数据
  41. */
  42. items: {
  43. text: string;
  44. value: number;
  45. raw: KeyValue;
  46. }[] = [];
  47. constructor() {
  48. super(CommonListResult);
  49. }
  50. fromData(data: KeyValue[] | undefined | null): this {
  51. this.items = data?.map((item) => ({
  52. text: item.label as string,
  53. value: item.value as number,
  54. raw: item,
  55. })) || [];
  56. return this;
  57. }
  58. }
  59. /**
  60. * 通用分页返回结构定义
  61. */
  62. export class CommonPageResult<T extends DataModel> extends DataModel {
  63. /**
  64. * 当前页数据
  65. */
  66. items: T[] = [];
  67. /**
  68. * 当前页码
  69. */
  70. pageIndex = 0;
  71. /**
  72. * 当前页的大小
  73. */
  74. pageSize = 0;
  75. /**
  76. * 系统中一共有多少条数据
  77. */
  78. allCount = 0;
  79. /**
  80. * 系统中一共有多少页
  81. */
  82. allPage = 0;
  83. /**
  84. * 指示当前页是不是空的
  85. */
  86. empty = true;
  87. constructor() {
  88. super(CommonPageResult);
  89. }
  90. fromData(
  91. data: {
  92. allCount?: number,
  93. allPage?: number,
  94. items?: KeyValue[] | undefined | null,
  95. },
  96. page: number,
  97. size: number,
  98. dataModel: new () => T
  99. ): this {
  100. const listFromServer = data.items as unknown as Array<unknown>;
  101. const list = new Array<T>();
  102. if(listFromServer instanceof Array) {
  103. let index = 1;
  104. listFromServer.forEach((i) => {
  105. const ii = new dataModel().fromServerSide(i as KeyValue);
  106. ii.index = index++;
  107. list.push(ii as T);
  108. });
  109. }
  110. this.items = list;
  111. this.pageIndex = page;
  112. this.pageSize = size;
  113. this.allCount = data.allCount as number;
  114. this.allPage = data.allPage as number;
  115. this.empty = list.length == 0;
  116. return this;
  117. }
  118. }
  119. /**
  120. * 加载状态
  121. */
  122. export type LoadStatus = 'notload'|'success'|'failed'|'loading' ;