|
|
@@ -0,0 +1,546 @@
|
|
|
+import { DataModel, transformArrayDataModel, transformDataModel, type KeyValue, type NewDataModel } from '@imengyu/js-request-transform';
|
|
|
+import { AppServerRequestModule } from '../RequestModules';
|
|
|
+import { transformSomeToArray } from '../Utils';
|
|
|
+
|
|
|
+/** 流水/日志通用字段 */
|
|
|
+abstract class GrowthLogBase extends DataModel<GrowthLogBase> {
|
|
|
+ id!: number;
|
|
|
+ villageId = null as number | null;
|
|
|
+ userId = null as number | null;
|
|
|
+ sourceTable = '';
|
|
|
+ sourceId = null as number | null;
|
|
|
+ remark = '';
|
|
|
+ createtime = '' as string | null;
|
|
|
+ updatetime = '' as string | null;
|
|
|
+ deletetime = '' as string | null;
|
|
|
+ villageName = '';
|
|
|
+ nickname = '';
|
|
|
+ username = '';
|
|
|
+ volunteerName = '';
|
|
|
+}
|
|
|
+
|
|
|
+export class GrowthTaskLogItem extends GrowthLogBase {
|
|
|
+ constructor() {
|
|
|
+ super(GrowthTaskLogItem, '任务日志');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ rewardWater: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ rewardLight: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ rewardFruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ taskKey = '';
|
|
|
+ taskName = '';
|
|
|
+ rewardWater = 0;
|
|
|
+ rewardLight = 0;
|
|
|
+ rewardFruit = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export class GrowthFruitLogItem extends GrowthLogBase {
|
|
|
+ constructor() {
|
|
|
+ super(GrowthFruitLogItem, '乡源果流水');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ fruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ beforeFruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ afterFruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ type = '' as 'pick' | 'task' | 'bless' | 'exchange' | string;
|
|
|
+ typeText = '';
|
|
|
+ fruit = 0;
|
|
|
+ beforeFruit = 0;
|
|
|
+ afterFruit = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export class GrowthLightLogItem extends GrowthLogBase {
|
|
|
+ constructor() {
|
|
|
+ super(GrowthLightLogItem, '乡源光流水');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ light: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ beforeLight: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ afterLight: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ type = '' as 'water' | 'fertilize' | 'task' | 'bless' | string;
|
|
|
+ typeText = '';
|
|
|
+ light = 0;
|
|
|
+ beforeLight = 0;
|
|
|
+ afterLight = 0;
|
|
|
+}
|
|
|
+
|
|
|
+export class BlessPackageItem extends DataModel<BlessPackageItem> {
|
|
|
+ constructor() {
|
|
|
+ super(BlessPackageItem, '赐福套餐');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ amount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ addLight: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ addFruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ multiple: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ days: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ status: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ id!: number;
|
|
|
+ name = '';
|
|
|
+ amount = 0;
|
|
|
+ image = '';
|
|
|
+ addLight = 0;
|
|
|
+ addFruit = 0;
|
|
|
+ multiple = 0;
|
|
|
+ days = 0;
|
|
|
+ status = 0;
|
|
|
+ statusText = '';
|
|
|
+ createtime = '' as string | null;
|
|
|
+ updatetime = '' as string | null;
|
|
|
+ deletetime = '' as string | null;
|
|
|
+}
|
|
|
+
|
|
|
+export class BlessOrderItem extends DataModel<BlessOrderItem> {
|
|
|
+ constructor() {
|
|
|
+ super(BlessOrderItem, '赐福订单');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ villageId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ userId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ blessId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ amount: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ addLight: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ addFruit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ multiple: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ status: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ this._convertKeyType = (key) => {
|
|
|
+ if (key.endsWith('Text')) return undefined;
|
|
|
+ if (key === 'startTime' || key === 'endTime' || key === 'payTime') {
|
|
|
+ return { clientSide: 'date', serverSide: 'number' };
|
|
|
+ }
|
|
|
+ return undefined;
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ id!: number;
|
|
|
+ villageId = null as number | null;
|
|
|
+ userId = null as number | null;
|
|
|
+ blessId = null as number | null;
|
|
|
+ amount = 0;
|
|
|
+ addLight = 0;
|
|
|
+ addFruit = 0;
|
|
|
+ multiple = 0;
|
|
|
+ startTime = null as Date | null;
|
|
|
+ endTime = null as Date | null;
|
|
|
+ status = 0;
|
|
|
+ remark = '' as string | null;
|
|
|
+ payTime = null as Date | null;
|
|
|
+ createtime = '' as string | null;
|
|
|
+ updatetime = '' as string | null;
|
|
|
+ deletetime = '' as string | null;
|
|
|
+ villageName = '';
|
|
|
+ nickname = '';
|
|
|
+ username = '';
|
|
|
+ volunteerName = '';
|
|
|
+ blessName = '';
|
|
|
+ startTimeText = '';
|
|
|
+ endTimeText = '';
|
|
|
+ statusText = '';
|
|
|
+ payTimeText = '';
|
|
|
+}
|
|
|
+
|
|
|
+export class UpgradePackageItem extends DataModel<UpgradePackageItem> {
|
|
|
+ constructor() {
|
|
|
+ super(UpgradePackageItem, '升级套餐');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ vipLevel: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ price: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ imageLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ storageLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ managerLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ isRecommend: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ sort: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ status: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ id!: number;
|
|
|
+ name = '';
|
|
|
+ vipLevel = 0;
|
|
|
+ price = 0;
|
|
|
+ imageLimit = 0;
|
|
|
+ storageLimit = 0;
|
|
|
+ managerLimit = 0;
|
|
|
+ isRecommend = 0;
|
|
|
+ isRecommendText = '';
|
|
|
+ desc = '';
|
|
|
+ content = '';
|
|
|
+ sort = 0;
|
|
|
+ status = 0;
|
|
|
+ statusText = '';
|
|
|
+ createtime = '' as string | null;
|
|
|
+ updatetime = '' as string | null;
|
|
|
+ deletetime = '' as string | null;
|
|
|
+}
|
|
|
+
|
|
|
+export class UpgradeOrderItem extends DataModel<UpgradeOrderItem> {
|
|
|
+ constructor() {
|
|
|
+ super(UpgradeOrderItem, '升级订单');
|
|
|
+ this.setNameMapperCase('Camel', 'Snake');
|
|
|
+ this._convertTable = {
|
|
|
+ id: { clientSide: 'number', serverSide: 'number', clientSideRequired: true },
|
|
|
+ villageId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ upgradeLevelId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ vipLevel: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ userId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ price: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ imageLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ storageLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ managerLimit: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ money: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ status: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ volunteerId: { clientSide: 'number', serverSide: 'number' },
|
|
|
+ };
|
|
|
+ this._convertKeyType = (key) => {
|
|
|
+ if (key.endsWith('Text')) return undefined;
|
|
|
+ if (key === 'payTime') {
|
|
|
+ return { clientSide: 'date', serverSide: 'number' };
|
|
|
+ }
|
|
|
+ return undefined;
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ id!: number;
|
|
|
+ orderNo = '';
|
|
|
+ villageId = null as number | null;
|
|
|
+ upgradeLevelId = null as number | null;
|
|
|
+ vipLevel = 0;
|
|
|
+ userId = null as number | null;
|
|
|
+ levelName = '';
|
|
|
+ price = 0;
|
|
|
+ imageLimit = 0;
|
|
|
+ storageLimit = 0;
|
|
|
+ managerLimit = 0;
|
|
|
+ money = 0;
|
|
|
+ status = 0;
|
|
|
+ payTime = null as Date | null;
|
|
|
+ villageName = '';
|
|
|
+ volunteerName = '';
|
|
|
+ volunteerId = null as number | null;
|
|
|
+ statusText = '';
|
|
|
+ payTimeText = '';
|
|
|
+ createtime = '' as string | null;
|
|
|
+ updatetime = '' as string | null;
|
|
|
+ deletetime = '' as string | null;
|
|
|
+}
|
|
|
+
|
|
|
+type GrowthLogSearch = {
|
|
|
+ page?: number;
|
|
|
+ pageSize?: number;
|
|
|
+ keywords?: string;
|
|
|
+ villageId?: number;
|
|
|
+ userId?: number;
|
|
|
+};
|
|
|
+
|
|
|
+type PagedGrowthResponse = {
|
|
|
+ total: number;
|
|
|
+ per_page?: number;
|
|
|
+ current_page?: number;
|
|
|
+ last_page?: number;
|
|
|
+ data: KeyValue[];
|
|
|
+};
|
|
|
+
|
|
|
+export type GrowthLogFeedType = 'task' | 'fruit' | 'light';
|
|
|
+
|
|
|
+export type GrowthLogFeedItem =
|
|
|
+ | { logType: 'task'; item: GrowthTaskLogItem }
|
|
|
+ | { logType: 'fruit'; item: GrowthFruitLogItem }
|
|
|
+ | { logType: 'light'; item: GrowthLightLogItem };
|
|
|
+
|
|
|
+export class TreeApi extends AppServerRequestModule<DataModel> {
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ }
|
|
|
+
|
|
|
+ private growthLogParams(search?: GrowthLogSearch) {
|
|
|
+ return {
|
|
|
+ page: search?.page,
|
|
|
+ pageSize: search?.pageSize,
|
|
|
+ keywords: search?.keywords,
|
|
|
+ village_id: search?.villageId,
|
|
|
+ user_id: search?.userId,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ private parsePagedList<T extends DataModel>(
|
|
|
+ model: NewDataModel,
|
|
|
+ data: PagedGrowthResponse,
|
|
|
+ label: string,
|
|
|
+ ) {
|
|
|
+ return {
|
|
|
+ total: data.total ?? 0,
|
|
|
+ list: transformArrayDataModel<T>(model, transformSomeToArray(data.data), label, true),
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 将 total 随机拆成 parts 份(每份 ≥ 0,之和为 total) */
|
|
|
+ private randomPartition(total: number, parts: number) {
|
|
|
+ const buckets = Array.from({ length: parts }, () => 0);
|
|
|
+ for (let i = 0; i < total; i++) {
|
|
|
+ buckets[Math.floor(Math.random() * parts)]++;
|
|
|
+ }
|
|
|
+ return buckets;
|
|
|
+ }
|
|
|
+
|
|
|
+ private shuffle<T>(items: T[]) {
|
|
|
+ const arr = [...items];
|
|
|
+ for (let i = arr.length - 1; i > 0; i--) {
|
|
|
+ const j = Math.floor(Math.random() * (i + 1));
|
|
|
+ [arr[i], arr[j]] = [arr[j], arr[i]];
|
|
|
+ }
|
|
|
+ return arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ private async fetchGrowthLogSlice<T extends DataModel>(
|
|
|
+ url: string,
|
|
|
+ label: string,
|
|
|
+ model: NewDataModel,
|
|
|
+ pageSize: number,
|
|
|
+ search?: GrowthLogSearch,
|
|
|
+ extra?: KeyValue,
|
|
|
+ ) {
|
|
|
+ if (pageSize <= 0) return [] as T[];
|
|
|
+ const res = await this.post<PagedGrowthResponse>(url, label, {
|
|
|
+ ...this.growthLogParams({ ...search, page: 1, pageSize }),
|
|
|
+ ...extra,
|
|
|
+ });
|
|
|
+ return this.parsePagedList<T>(model, res.requireData(), label).list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 聚合随机成长流水:将 count 随机分配到任务日志 / 乡源果 / 乡源光三个接口并行拉取,打乱后返回。
|
|
|
+ */
|
|
|
+ async getRandomGrowthLogFeed(
|
|
|
+ count: number,
|
|
|
+ search?: GrowthLogSearch & {
|
|
|
+ fruitType?: 'pick' | 'task' | 'bless' | 'exchange' | string;
|
|
|
+ lightType?: 'water' | 'fertilize' | 'task' | 'bless' | string;
|
|
|
+ },
|
|
|
+ ) {
|
|
|
+ if (count <= 0) {
|
|
|
+ return { list: [] as GrowthLogFeedItem[], total: 0 };
|
|
|
+ }
|
|
|
+
|
|
|
+ const [taskCount, fruitCount, lightCount] = this.randomPartition(count, 3);
|
|
|
+
|
|
|
+ const [taskList, fruitList, lightList] = await Promise.all([
|
|
|
+ this.fetchGrowthLogSlice<GrowthTaskLogItem>(
|
|
|
+ '/village/growth/taskLogList',
|
|
|
+ '任务日志',
|
|
|
+ GrowthTaskLogItem,
|
|
|
+ taskCount,
|
|
|
+ search,
|
|
|
+ ),
|
|
|
+ this.fetchGrowthLogSlice<GrowthFruitLogItem>(
|
|
|
+ '/village/growth/fruitLogList',
|
|
|
+ '乡源果流水',
|
|
|
+ GrowthFruitLogItem,
|
|
|
+ fruitCount,
|
|
|
+ search,
|
|
|
+ { type: search?.fruitType },
|
|
|
+ ),
|
|
|
+ this.fetchGrowthLogSlice<GrowthLightLogItem>(
|
|
|
+ '/village/growth/lightLogList',
|
|
|
+ '乡源光流水',
|
|
|
+ GrowthLightLogItem,
|
|
|
+ lightCount,
|
|
|
+ search,
|
|
|
+ { type: search?.lightType },
|
|
|
+ ),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const merged: GrowthLogFeedItem[] = [
|
|
|
+ ...taskList.map((item) => ({ logType: 'task' as const, item })),
|
|
|
+ ...fruitList.map((item) => ({ logType: 'fruit' as const, item })),
|
|
|
+ ...lightList.map((item) => ({ logType: 'light' as const, item })),
|
|
|
+ ];
|
|
|
+
|
|
|
+ const list = this.shuffle(merged).slice(0, count);
|
|
|
+ return { list, total: list.length };
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 任务日志列表 */
|
|
|
+ async getTaskLogList(search?: GrowthLogSearch) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/taskLogList',
|
|
|
+ '任务日志列表',
|
|
|
+ this.growthLogParams(search),
|
|
|
+ );
|
|
|
+ return this.parsePagedList<GrowthTaskLogItem>(
|
|
|
+ GrowthTaskLogItem,
|
|
|
+ res.requireData(),
|
|
|
+ '任务日志',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 乡源果流水 */
|
|
|
+ async getFruitLogList(
|
|
|
+ search?: GrowthLogSearch & {
|
|
|
+ type?: 'pick' | 'task' | 'bless' | 'exchange' | string;
|
|
|
+ },
|
|
|
+ ) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/fruitLogList',
|
|
|
+ '乡源果流水',
|
|
|
+ {
|
|
|
+ ...this.growthLogParams(search),
|
|
|
+ type: search?.type,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<GrowthFruitLogItem>(
|
|
|
+ GrowthFruitLogItem,
|
|
|
+ res.requireData(),
|
|
|
+ '乡源果流水',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 乡源光流水 */
|
|
|
+ async getLightLogList(
|
|
|
+ search?: GrowthLogSearch & {
|
|
|
+ type?: 'water' | 'fertilize' | 'task' | 'bless' | string;
|
|
|
+ },
|
|
|
+ ) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/lightLogList',
|
|
|
+ '乡源光流水',
|
|
|
+ {
|
|
|
+ ...this.growthLogParams(search),
|
|
|
+ type: search?.type,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<GrowthLightLogItem>(
|
|
|
+ GrowthLightLogItem,
|
|
|
+ res.requireData(),
|
|
|
+ '乡源光流水',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 赐福套餐列表 */
|
|
|
+ async getBlessList(options?: {
|
|
|
+ page?: number;
|
|
|
+ pageSize?: number;
|
|
|
+ keywords?: string;
|
|
|
+ }) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/blessList',
|
|
|
+ '赐福套餐列表',
|
|
|
+ {
|
|
|
+ page: options?.page,
|
|
|
+ pageSize: options?.pageSize,
|
|
|
+ keywords: options?.keywords,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<BlessPackageItem>(
|
|
|
+ BlessPackageItem,
|
|
|
+ res.requireData(),
|
|
|
+ '赐福套餐',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 赐福订单列表 */
|
|
|
+ async getBlessOrders(options?: {
|
|
|
+ page?: number;
|
|
|
+ pageSize?: number;
|
|
|
+ keywords?: string;
|
|
|
+ villageId?: number;
|
|
|
+ userId?: number;
|
|
|
+ blessId?: number;
|
|
|
+ /** -1=已取消, 0=待支付, 1=已支付 */
|
|
|
+ status?: -1 | 0 | 1 | number;
|
|
|
+ }) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/blessOrders',
|
|
|
+ '赐福订单列表',
|
|
|
+ {
|
|
|
+ page: options?.page,
|
|
|
+ pageSize: options?.pageSize,
|
|
|
+ keywords: options?.keywords,
|
|
|
+ village_id: options?.villageId,
|
|
|
+ user_id: options?.userId,
|
|
|
+ bless_id: options?.blessId,
|
|
|
+ status: options?.status,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<BlessOrderItem>(
|
|
|
+ BlessOrderItem,
|
|
|
+ res.requireData(),
|
|
|
+ '赐福订单',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 升级套餐列表 */
|
|
|
+ async getUpgradeList(options?: {
|
|
|
+ page?: number;
|
|
|
+ pageSize?: number;
|
|
|
+ keywords?: string;
|
|
|
+ }) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/upgradeList',
|
|
|
+ '升级套餐列表',
|
|
|
+ {
|
|
|
+ page: options?.page,
|
|
|
+ pageSize: options?.pageSize,
|
|
|
+ keywords: options?.keywords,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<UpgradePackageItem>(
|
|
|
+ UpgradePackageItem,
|
|
|
+ res.requireData(),
|
|
|
+ '升级套餐',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 升级套餐详情 */
|
|
|
+ async getUpgradeInfo(id: number) {
|
|
|
+ const res = await this.post<KeyValue>('/village/growth/upgradeInfo', '升级套餐详情', { id });
|
|
|
+ return transformDataModel<UpgradePackageItem>(UpgradePackageItem, res.requireData());
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 升级订单列表 */
|
|
|
+ async getUpgradeOrderList(options?: {
|
|
|
+ page?: number;
|
|
|
+ pageSize?: number;
|
|
|
+ keywords?: string;
|
|
|
+ villageId?: number;
|
|
|
+ userId?: number;
|
|
|
+ }) {
|
|
|
+ const res = await this.post<PagedGrowthResponse>(
|
|
|
+ '/village/growth/upgradeOrderList',
|
|
|
+ '升级订单列表',
|
|
|
+ {
|
|
|
+ page: options?.page,
|
|
|
+ pageSize: options?.pageSize,
|
|
|
+ keywords: options?.keywords,
|
|
|
+ village_id: options?.villageId,
|
|
|
+ user_id: options?.userId,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ return this.parsePagedList<UpgradeOrderItem>(
|
|
|
+ UpgradeOrderItem,
|
|
|
+ res.requireData(),
|
|
|
+ '升级订单',
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export default new TreeApi();
|