import type { PageParam, PageResult } from '@vben/request';
|
|
import { requestClient } from '#/api/request';
|
|
export namespace WxCpActivityApi {
|
/** 活动状态:0草稿 1已发布 2已结束 3已取消 */
|
export const ACTIVITY_STATUS = {
|
DRAFT: 0,
|
PUBLISHED: 1,
|
FINISHED: 2,
|
CANCELED: 3,
|
} as const;
|
|
/** 推送范围:0全员 1指定部门 2指定成员 */
|
export const PUSH_SCOPE = {
|
ALL: 0,
|
PARTY: 1,
|
USER: 2,
|
} as const;
|
|
/** 活动 */
|
export interface Activity {
|
id?: number;
|
title?: string;
|
content?: string;
|
coverUrl?: string;
|
location?: string;
|
startTime?: string;
|
endTime?: string;
|
signupStartTime?: string;
|
signupEndTime?: string;
|
/** 报名上限,0 表示不限 */
|
signupLimit?: number;
|
signupCount?: number;
|
status?: number;
|
statusName?: string;
|
pushScope?: number;
|
pushScopeName?: string;
|
pushTarget?: string;
|
pushStatus?: number;
|
pushTime?: string;
|
remark?: string;
|
createTime?: string;
|
}
|
|
/** 活动分页查询参数 */
|
export interface ActivityPageParams extends PageParam {
|
title?: string;
|
status?: number;
|
pushStatus?: number;
|
startTime?: [string, string];
|
}
|
|
/** 报名记录 */
|
export interface Signup {
|
id?: number;
|
activityId?: number;
|
activityTitle?: string;
|
wxUserId?: string;
|
name?: string;
|
mobile?: string;
|
deptName?: string;
|
content?: string;
|
/** 状态:0已报名 1已取消 2已签到 */
|
status?: number;
|
statusName?: string;
|
signupTime?: string;
|
checkInTime?: string;
|
remark?: string;
|
createTime?: string;
|
}
|
|
/** 报名记录分页查询参数 */
|
export interface SignupPageParams extends PageParam {
|
activityId?: number;
|
name?: string;
|
mobile?: string;
|
status?: number;
|
}
|
|
/** 名称-数量统计项 */
|
export interface NameCount {
|
name: string;
|
count: number;
|
}
|
|
/** 报名统计 */
|
export interface ActivityStats {
|
activityId: number;
|
activityTitle?: string;
|
signupLimit?: number;
|
totalSignup: number;
|
signedUpCount: number;
|
checkedInCount: number;
|
canceledCount: number;
|
/** 不限名额时为 null */
|
remaining?: null | number;
|
signupPercent?: null | number;
|
checkInPercent: number;
|
deptStats: NameCount[];
|
dateStats: NameCount[];
|
sourceStats: NameCount[];
|
}
|
|
/** 推送请求 */
|
export interface PushParams {
|
id: number;
|
pushScope?: number;
|
pushTarget?: string;
|
}
|
|
/** 推送结果 */
|
export interface PushResult {
|
success: boolean;
|
errCode?: null | number;
|
message?: string;
|
toUser?: string;
|
toParty?: string;
|
}
|
|
/** 报名附件 */
|
export interface SignupAttachment {
|
id: number;
|
name?: string;
|
originalFilename?: string;
|
contentType?: string;
|
byteSize?: number;
|
url?: string;
|
previewURL?: string;
|
downloadURL?: string;
|
}
|
}
|
|
/** 获得活动分页 */
|
export function getActivityPage(params: WxCpActivityApi.ActivityPageParams) {
|
return requestClient.get<PageResult<WxCpActivityApi.Activity>>(
|
'/wxcp/activity/page',
|
{ params },
|
);
|
}
|
|
/** 获得活动详情 */
|
export function getActivity(id: number) {
|
return requestClient.get<WxCpActivityApi.Activity>(
|
'/wxcp/activity/get',
|
{ params: { id } },
|
);
|
}
|
|
/** 创建活动(存为草稿) */
|
export function createActivity(data: WxCpActivityApi.Activity) {
|
return requestClient.post<number>('/wxcp/activity/create', data);
|
}
|
|
/** 修改活动 */
|
export function updateActivity(data: WxCpActivityApi.Activity) {
|
return requestClient.put<boolean>('/wxcp/activity/update', data);
|
}
|
|
/** 删除活动 */
|
export function deleteActivity(id: number) {
|
return requestClient.delete<boolean>('/wxcp/activity/delete', {
|
params: { id },
|
});
|
}
|
|
/** 发布活动 */
|
export function publishActivity(id: number) {
|
return requestClient.put<boolean>('/wxcp/activity/publish', null, {
|
params: { id },
|
});
|
}
|
|
/** 结束活动 */
|
export function finishActivity(id: number) {
|
return requestClient.put<boolean>('/wxcp/activity/finish', null, {
|
params: { id },
|
});
|
}
|
|
/** 取消活动 */
|
export function cancelActivity(id: number) {
|
return requestClient.put<boolean>('/wxcp/activity/cancel', null, {
|
params: { id },
|
});
|
}
|
|
/** 推送活动给企业微信成员 */
|
export function pushActivity(data: WxCpActivityApi.PushParams) {
|
return requestClient.post<WxCpActivityApi.PushResult>(
|
'/wxcp/activity/push',
|
data,
|
);
|
}
|
|
/** 获得活动报名页地址 */
|
export function getActivitySignupUrl(id: number) {
|
return requestClient.get<string>('/wxcp/activity/signup-url', {
|
params: { id },
|
});
|
}
|
|
/**
|
* 获得活动报名二维码(PNG Blob)
|
*
|
* 该接口返回图片二进制,而 <img src> 无法携带请求头,
|
* 所以这里用 raw 模式取回 Blob,再由调用方转成 objectURL 显示/下载。
|
*/
|
export function getActivityQrCodeBlob(id: number, size?: number) {
|
return requestClient.request('/wxcp/activity/qrcode', {
|
method: 'GET',
|
params: { id, size },
|
responseType: 'blob',
|
responseReturn: 'raw',
|
});
|
}
|
|
/** 获得活动报名统计 */
|
export function getActivityStats(id: number) {
|
return requestClient.get<WxCpActivityApi.ActivityStats>(
|
'/wxcp/activity/stats',
|
{ params: { id } },
|
);
|
}
|
|
/** 获得报名记录分页 */
|
export function getSignupPage(params: WxCpActivityApi.SignupPageParams) {
|
return requestClient.get<PageResult<WxCpActivityApi.Signup>>(
|
'/wxcp/activity/signup/page',
|
{ params },
|
);
|
}
|
|
/** 取消报名 */
|
export function cancelSignup(id: number) {
|
return requestClient.put<boolean>('/wxcp/activity/signup/cancel', null, {
|
params: { id },
|
});
|
}
|
|
/** 报名签到 */
|
export function checkInSignup(id: number) {
|
return requestClient.put<boolean>('/wxcp/activity/signup/check-in', null, {
|
params: { id },
|
});
|
}
|
|
/** 获得某条报名记录上传的图片/附件 */
|
export function getSignupAttachments(signupId: number) {
|
return requestClient.get<WxCpActivityApi.SignupAttachment[]>(
|
'/wxcp/activity/signup/attachments',
|
{ params: { signupId } },
|
);
|
}
|