VillageApi.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. import { CONVERTER_ADD_DEFAULT, DataModel, transformArrayDataModel } from '@imengyu/js-request-transform';
  2. import { AppServerRequestModule } from '../RequestModules';
  3. import { findAProp, transformSomeToArray } from '../Utils';
  4. import { LoginResult } from '../auth/UserApi';
  5. import AppCofig from '@/common/config/AppCofig';
  6. export class VillageListItem extends DataModel<VillageListItem> {
  7. constructor() {
  8. super(VillageListItem, "活动列表");
  9. this.setNameMapperCase('Camel', 'Snake');
  10. this._convertTable = {
  11. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  12. }
  13. this._nameMapperServer = {
  14. name: 'villageName',
  15. };
  16. this._convertKeyType = (key, direction) => {
  17. if (key.endsWith('At'))
  18. return {
  19. clientSide: 'date',
  20. serverSide: 'string',
  21. };
  22. return undefined;
  23. };
  24. this._afterSolveServer = () => {
  25. this.address =
  26. (this.province || '') +
  27. (this.city || '') +
  28. (this.district || '') +
  29. (this.township || '');
  30. if (this.images && this.images && this.images.length > 0 ) {
  31. this.image = this.images[0]
  32. }
  33. this.thumbnail = this.image;
  34. this.title = this.villageName
  35. }
  36. }
  37. id !: number;
  38. province = '' as string|null;
  39. city = '' as string|null;
  40. district = '' as string|null;
  41. township = '' as string|null;
  42. address = '';
  43. villageVolunteerId = null as number|null;
  44. villageId !:number;
  45. claimReason = '';
  46. status = '';
  47. statusText = '';
  48. createdAt = null as Date|null;
  49. updatedAt = null as Date|null;
  50. deleteAt = null as Date|null;
  51. image = '';
  52. thumbnail = '';
  53. images = [] as string[];
  54. villageName = '';
  55. title = '';
  56. volunteerName = '';
  57. }
  58. export class VolunteerRanklistItem extends DataModel<VolunteerRanklistItem> {
  59. constructor() {
  60. super(VolunteerRanklistItem, "活动列表");
  61. this.setNameMapperCase('Camel', 'Snake');
  62. this._convertTable = {
  63. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  64. points: [{ clientSide: 'number', serverSide: 'number' }, { clientSide: CONVERTER_ADD_DEFAULT, clientSideParam: { defaultValue: 0 } }],
  65. level: [{ clientSide: 'number', serverSide: 'number' }, { clientSide: CONVERTER_ADD_DEFAULT, clientSideParam: { defaultValue: 0 } }],
  66. }
  67. }
  68. id !: number;
  69. name = '';
  70. mobile = '';
  71. points = 0;
  72. level = 0;
  73. typeText = '';
  74. sexText = '';
  75. statusText = '';
  76. image = '';
  77. }
  78. export class VolunteerInfo extends DataModel<VolunteerInfo> {
  79. constructor() {
  80. super(VolunteerInfo, "活动列表");
  81. this.setNameMapperCase('Camel', 'Snake');
  82. this._convertTable = {
  83. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  84. points: [{ clientSide: 'number', serverSide: 'number' }, { clientSide: CONVERTER_ADD_DEFAULT, clientSideParam: { defaultValue: 0 } }],
  85. level: [{ clientSide: 'number', serverSide: 'number' }, { clientSide: CONVERTER_ADD_DEFAULT, clientSideParam: { defaultValue: 0 } }],
  86. collectModule: [
  87. { clientSide: 'splitCommaArray',serverSide: 'commaArrayMerge' },
  88. { clientSide: 'array', clientSideChildDataModel: 'number', serverSide: 'original' },
  89. ],
  90. birthday: { clientSide: 'date', serverSide: 'undefined' },
  91. catalogIds: [
  92. { clientSide: 'splitCommaArray', serverSide: 'commaArrayMerge' },
  93. { clientSide: 'array', clientSideChildDataModel: 'number', serverSide: 'original' },
  94. ],
  95. }
  96. }
  97. static STATUS_APPROVED = 1;
  98. static STATUS_PENDING = 0;
  99. static STATUS_REJECTED = -1;
  100. id !: number;
  101. mainBodyId !: number;
  102. type = '';
  103. name = '';
  104. sex = 0;
  105. mobile = '';
  106. regionId = null as number|null;
  107. address = '';
  108. image = '';
  109. birthday = new Date();
  110. points = 0;
  111. level = 0;
  112. status = '';
  113. createdAt = '';
  114. updatedAt = '';
  115. typeText = '';
  116. sexText = '';
  117. statusText = '';
  118. catalogIds = [] as number[];
  119. collectModule = [] as number[];
  120. collectModuleText = '';
  121. }
  122. export class VillageMenuListItem extends DataModel<VillageMenuListItem> {
  123. constructor() {
  124. super(VillageMenuListItem, "村落菜单列表");
  125. this.setNameMapperCase('Camel', 'Snake');
  126. this._convertTable = {
  127. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  128. }
  129. this._nameMapperServer = {
  130. };
  131. this._convertKeyType = (key, direction) => {
  132. if (key.endsWith('At'))
  133. return {
  134. clientSide: 'date',
  135. serverSide: 'string',
  136. };
  137. return undefined;
  138. };
  139. }
  140. name = '';
  141. logo = '';
  142. }
  143. export class VillageCatalogListItem extends DataModel<VillageCatalogListItem> {
  144. constructor() {
  145. super(VillageCatalogListItem, "村落目录列表");
  146. this.setNameMapperCase('Camel', 'Snake');
  147. this._convertTable = {
  148. id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
  149. }
  150. this._nameMapperServer = {
  151. };
  152. this._afterSolveServer = () => {
  153. this.haschild = (this.childlist as any[]).length > 0;
  154. if (this.otherParams) {
  155. this.typeId = findAProp(this.otherParams, [
  156. { type: 'endWith', name: 'type' },
  157. { type: 'match', name: 'nature' },
  158. { type: 'match', name: 'cultural' },
  159. { type: 'selectAtLestOne' },
  160. ]);
  161. }
  162. }
  163. this._convertKeyType = (key, direction) => {
  164. if (key.endsWith('At'))
  165. return {
  166. clientSide: 'date',
  167. serverSide: 'string',
  168. };
  169. return undefined;
  170. };
  171. }
  172. id !: number;
  173. name = '';
  174. title = '';
  175. icon = '';
  176. desc = '';
  177. pid = 0;
  178. collectModuleId = 0;
  179. collectModuleName = '';
  180. villageName = '';
  181. spacer = '';
  182. haschild = false;
  183. typeId = -1;
  184. total = -1;
  185. }
  186. export class VillageApi extends AppServerRequestModule<DataModel> {
  187. constructor() {
  188. super();
  189. }
  190. async getClaimedVallageList(volunteerId?: string) {
  191. const res = await this.get('/village/village/getVillageList', '获取已认领村落', {
  192. village_volunteer_id: volunteerId,
  193. });
  194. return transformArrayDataModel<VillageListItem>(VillageListItem, transformSomeToArray(res.data2), `村落`, true);
  195. }
  196. async getCanClaimVallageList() {
  197. const res = await this.get('/village/village/getClaimList', '可认领村落列表', {
  198. main_body_id: 2,
  199. });
  200. return transformArrayDataModel<VillageListItem>(VillageListItem, transformSomeToArray(res.data2), `村落`, true);
  201. }
  202. async claimVallage(data: any) {
  203. return this.post('/village/village/addVillageClaim', '认领村落', data);
  204. }
  205. async getVallageList(level?: number, status?: number) {
  206. const res = await this.get('/village/village/getList', '村落列表', {
  207. history_level: level,
  208. status,
  209. });
  210. return transformArrayDataModel<VillageListItem>(VillageListItem, transformSomeToArray(res.data2), `村落`, true);
  211. }
  212. async getVolunteerInfo() {
  213. const res = await this.post('/village/volunteer/getInfo', '获取志愿者信息', {}, undefined, VolunteerInfo);
  214. return res.data as VolunteerInfo;
  215. }
  216. async getVolunteerRanklist(category?: number) {
  217. const res = await this.post('/village/volunteer/getRanklist', '志愿者排行榜', {
  218. category,
  219. });
  220. return transformArrayDataModel<VolunteerRanklistItem>(VolunteerRanklistItem, res.data2, ``, true);
  221. }
  222. async addVolunteer(data: VolunteerInfo) {
  223. return this.post('/village/volunteer/add', '添加志愿者', data.toServerSide());
  224. }
  225. async updateVolunteer(data: VolunteerInfo) {
  226. console.log('updateVolunteer', data.toServerSide());
  227. return this.post('/village/volunteer/save', '更新志愿者', data.toServerSide());
  228. }
  229. async deleteVolunteer(id: number, villageId: number) {
  230. return this.post('/village/volunteer/del', '删除志愿者', {
  231. id,
  232. village_id: villageId,
  233. });
  234. }
  235. async shareAddVolunteer(data: VolunteerInfo) {
  236. const res = await this.post('/village/volunteer/shareAdd', '分享添加志愿者', data.toServerSide(), undefined, LoginResult);
  237. return res.data as LoginResult;
  238. }
  239. async bindVolunteer(data: {
  240. account: string,
  241. password: string
  242. }) {
  243. const res = await this.post('/village/volunteer/bindVolunteer', '绑定志愿者', data, undefined, LoginResult);
  244. return res.data as LoginResult;
  245. }
  246. async bindWechat(data: { code: string }) {
  247. return this.post('/village/volunteer/bindWechat', '绑定微信', {
  248. code: data.code,
  249. appid: AppCofig.appId
  250. });
  251. }
  252. async getVolunteerInfoByIdAdmin(id: number) {
  253. const res = await this.post('/village/volunteer/info', '管理员获取志愿者信息', {
  254. id,
  255. }, undefined, VolunteerInfo);
  256. return res.data as VolunteerInfo;
  257. }
  258. async getVolunteerInfoById(id: number) {
  259. const res = await this.post('/village/volunteer/getInfo', '获取志愿者信息', {
  260. id,
  261. }, undefined, VolunteerInfo);
  262. return res.data as VolunteerInfo;
  263. }
  264. async getVillageVolunteerList(villageId?: number, status?: number) {
  265. const res = await this.post('/village/volunteer/getList', '获取志愿者列表', {
  266. village_id: villageId,
  267. status,
  268. });
  269. return transformArrayDataModel<VolunteerInfo>(VolunteerInfo, res.data2 || [], ``, true);
  270. }
  271. async reviewVillageVolunteer(villageId: number, volunteerId: number, status: number) {
  272. return this.post('/village/village/claimReview', '审核志愿者', {
  273. village_id: villageId,
  274. village_volunteer_id: volunteerId,
  275. status,
  276. });
  277. }
  278. async getCollectModuleList() {
  279. const res = await this.get('/village/volunteer/getCollectModuleList', '获取采集版块列表', {});
  280. const result = [] as {
  281. value: string,
  282. label: string,
  283. }[];
  284. for (const key in res.data2) {
  285. result.push({
  286. value: key,
  287. label: res.data2[key],
  288. });
  289. }
  290. return result;
  291. }
  292. async getCollectModuleMap() {
  293. const res = await this.post('/village/volunteer/getCollectModuleList', '采集板块列表', {});
  294. const map = new Map<string, number>();
  295. if (!res.data2 || typeof res.data2 !== 'object')
  296. return map;
  297. for (const key in res.data2) {
  298. if (typeof res.data2[key] !== 'string')
  299. throw new Error(`采集板块列表键值对值不是字符串: ${key} -> ${res.data2[key]}`);
  300. if (isNaN(Number(key)))
  301. throw new Error(`采集板块列表键值对键不是数字: ${key}`);
  302. map.set(res.data2[key], Number(key));
  303. }
  304. return map;
  305. }
  306. async getCatalogList(villageId?: number, volunteerId?: number, pid?: number) {
  307. const res = await this.get('/village/village/getCatalogList', '村落目录列表', {
  308. village_id: villageId,
  309. village_volunteer_id: volunteerId,
  310. pid: pid === 0 ? undefined : pid,
  311. });
  312. return transformArrayDataModel<VillageCatalogListItem>(VillageCatalogListItem, res.data2, `村落目录列表`, true);
  313. }
  314. async getVillageMenuList(id: number) {
  315. const res = await this.get('/village/menu/getList', '村落菜单列表', {
  316. village_id: id,
  317. });
  318. return transformArrayDataModel<VillageMenuListItem>(VillageMenuListItem, res.data2, `村落菜单`, true);
  319. }
  320. }
  321. export default new VillageApi();