LightVillageApi.ts 7.1 KB

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