LightVillageApi.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import { DataModel, transformArrayDataModel, transformDataModel, type KeyValue } from '@imengyu/js-request-transform';
  2. import { AppServerRequestModule } from '../RequestModules';
  3. import { transformSomeToArray } from '../Utils';
  4. export class VillageListItem extends DataModel<VillageListItem> {
  5. constructor() {
  6. super(VillageListItem, "活动列表");
  7. this.setNameMapperCase('Camel', 'Snake');
  8. this._convertTable = {
  9. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  10. isLight: { clientSide: 'boolean' },
  11. }
  12. this._convertKeyType = (key, direction) => {
  13. if (key.endsWith('At'))
  14. return {
  15. clientSide: 'date',
  16. serverSide: 'string',
  17. };
  18. return undefined;
  19. };
  20. this._afterSolveServer = () => {
  21. this.address =
  22. (this.province || '') +
  23. (this.city || '') +
  24. (this.district || '') +
  25. (this.township || '');
  26. if (this.images && this.images && this.images.length > 0 ) {
  27. this.image = this.images[0]
  28. }
  29. this.thumbnail = this.image;
  30. }
  31. }
  32. id !: number;
  33. province = '' as string|null;
  34. city = '' as string|null;
  35. district = '' as string|null;
  36. township = '' as string|null;
  37. address = '';
  38. isLight = false;
  39. isLightText = '';
  40. lightValue = Math.random();
  41. villageVolunteerId = null as number|null;
  42. villageId !:number;
  43. claimReason = '';
  44. status = '';
  45. statusText = '';
  46. createdAt = null as Date|null;
  47. updatedAt = null as Date|null;
  48. deleteAt = null as Date|null;
  49. image = '';
  50. thumbnail = '';
  51. images = [] as string[];
  52. name = '';
  53. title = '';
  54. volunteerName = '';
  55. }
  56. export class PostMessage extends DataModel<PostMessage> {
  57. constructor() {
  58. super(PostMessage, "微信贴图");
  59. this.setNameMapperCase('Camel', 'Snake');
  60. this._convertTable = {
  61. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  62. title: { clientSide: 'string', serverSide: 'string' },
  63. images: { clientSide: 'splitCommaArray', serverSide: 'commaArrayMerge' },
  64. sendTime: { clientSide: 'date', serverSide: 'string' },
  65. }
  66. this._afterSolveServer = () => {
  67. if (!this.images) {
  68. this.images = [];
  69. }
  70. if (this.image && this.images?.length == 0) {
  71. this.images = [ this.image ];
  72. }
  73. }
  74. }
  75. id !: number;
  76. title = '';
  77. content = '';
  78. images = [] as string[];
  79. image = '';
  80. nickName = '';
  81. avatar = '';
  82. likeCount = 0;
  83. shareCount = 0;
  84. sendTime = new Date();
  85. }
  86. export class LightVillageApi extends AppServerRequestModule<DataModel> {
  87. constructor() {
  88. super();
  89. }
  90. /**
  91. * 志愿者排行榜
  92. * POST /village/volunteer/getRanklist
  93. */
  94. async getVolunteerRankList(params?: {
  95. /** 地区(区域内所有村社) */
  96. region_id?: number;
  97. /** 数量:显示前几名(默认10) */
  98. num?: number;
  99. /** 村社ID */
  100. village_id?: number;
  101. }) {
  102. const res = await this.post<{
  103. id: number;
  104. name: string;
  105. mobile: string;
  106. points: number;
  107. level: number;
  108. type: string;
  109. type_text?: string;
  110. sex_text?: string;
  111. status_text?: string;
  112. image?: string;
  113. }[]>('/village/volunteer/getRanklist', '志愿者排行榜', params);
  114. return res.requireData();
  115. }
  116. /**
  117. * 村社排行榜
  118. * POST /village/village/getRanklist
  119. */
  120. async getVillageRankList(params?: {
  121. /** 地区(区域内所有村社) */
  122. region_id?: number;
  123. /** 数量:显示前几名(默认10) */
  124. num?: number;
  125. /** 点亮状态:0=未点亮,1=已点亮 */
  126. is_light?: number;
  127. }) {
  128. const res = await this.post<{
  129. id: number;
  130. name: string;
  131. points: number;
  132. region: number;
  133. status?: string;
  134. is_light: number | string;
  135. status_text?: string;
  136. region_text?: string;
  137. is_light_text?: string;
  138. image?: string;
  139. }[]>('/village/village/getRanklist', '村社排行榜', params);
  140. return res.requireData();
  141. }
  142. async getVillageList(level?: number, region?: number, status?: number, page?: number, pageSize?: number) {
  143. const res = await this.get<{
  144. data: any[],
  145. total: number,
  146. }>('/village/village/list', '乡源村落列表', {
  147. history_level: level,
  148. status,
  149. region: region,
  150. page: page,
  151. pageSize: pageSize,
  152. });
  153. return transformArrayDataModel<VillageListItem>(VillageListItem, transformSomeToArray(res.requireData().data), `村落`, true);
  154. }
  155. async getVillageDetails(id: number) {
  156. const res = await this.get<VillageListItem>('/village/village/getInfo', '村社详情', {
  157. id: id,
  158. }, VillageListItem);
  159. return res.requireData();
  160. }
  161. async getIpAddress() {
  162. const res = await this.get<{
  163. address: string,
  164. address_detail:{
  165. adcode: string,
  166. city: string,
  167. city_code: number,
  168. district: string,
  169. province: string,
  170. street: string,
  171. street_number: string,
  172. },
  173. point: {
  174. x: string,
  175. y: string,
  176. },
  177. }>('/village/volunteer/getIpArea', '获取IP地址');
  178. return res.requireData();
  179. }
  180. async getMessages(page: number, pageSize: number, search?:{
  181. keywords?: string;
  182. villageId?: number;
  183. userId?: number;
  184. }) {
  185. const res = await this.get<{
  186. data: KeyValue[],
  187. total: number,
  188. }>('/village/collect/wechatContentList', '获取微信贴图列表', {
  189. page,
  190. pageSize,
  191. keywords: search?.keywords,
  192. village_id: search?.villageId,
  193. user_id: search?.userId,
  194. });
  195. const data = res.requireData();
  196. return {
  197. list: transformArrayDataModel<PostMessage>(PostMessage, transformSomeToArray(data.data), '微信贴图列表', true),
  198. total: data.total,
  199. };
  200. }
  201. async getMessageDetails(id: number) {
  202. const res = await this.get<KeyValue>('/village/collect/wechatContentDetail', '获取微信贴图详情', {
  203. id: id,
  204. });
  205. return transformDataModel<PostMessage>(PostMessage, res.requireData());
  206. }
  207. async publishMessage(params: PostMessage) {
  208. return await this.post<KeyValue>('/village/collect/wechatContentSave', '发布微信贴图', params.toServerSide());
  209. }
  210. }
  211. export default new LightVillageApi();