11
This commit is contained in:
1 parent
25b7f38df8
commit
f744e2b9b8
16 files changed
+3425
-126
No files matched your search
@@ -0,0 +1,91 @@
|
||||
import request from '@/config/axios'
|
||||
|
||||
export type PushSource = 'AUTO' | 'MANUAL'
|
||||
export type PushTargetType = 'USER' | 'ALL'
|
||||
export type PushTaskStatus =
|
||||
'WAITING' | 'RUNNING' | 'COMPLETED' | 'PARTIAL_FAILED' | 'FAILED' | 'SKIPPED'
|
||||
export type PushRecordStatus = 'WAITING' | 'SENDING' | 'SUBMITTED' | 'FAILED' | 'SKIPPED'
|
||||
|
||||
export interface PushTask {
|
||||
id: number
|
||||
source: PushSource
|
||||
targetType: PushTargetType
|
||||
title: string
|
||||
content: string
|
||||
messageId?: number
|
||||
senderId?: number
|
||||
receiverId?: number
|
||||
status: PushTaskStatus
|
||||
totalMembers: number
|
||||
totalDevices: number
|
||||
submittedCount: number
|
||||
failedCount: number
|
||||
skippedCount: number
|
||||
processedCount: number
|
||||
createTime: string | number
|
||||
finishTime?: string | number
|
||||
lastError?: string
|
||||
}
|
||||
|
||||
export interface PushRecord {
|
||||
id: number
|
||||
taskId: number
|
||||
memberId: number
|
||||
nickname?: string
|
||||
userCode?: string
|
||||
platform?: string
|
||||
registrationId?: string
|
||||
status: PushRecordStatus
|
||||
attemptCount: number
|
||||
cid?: string
|
||||
jpushMsgId?: string
|
||||
errorCode?: string
|
||||
errorMessage?: string
|
||||
createTime: string | number
|
||||
sendTime?: string | number
|
||||
}
|
||||
|
||||
export interface PushMember {
|
||||
id: number
|
||||
nickname?: string
|
||||
userCode?: string
|
||||
mobile?: string
|
||||
deviceCount: number
|
||||
}
|
||||
|
||||
export interface PushSendRequest {
|
||||
requestId: string
|
||||
targetType: PushTargetType
|
||||
memberIds: number[]
|
||||
title: string
|
||||
content: string
|
||||
}
|
||||
|
||||
export interface PushTaskPageRequest {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
source?: PushSource
|
||||
memberId?: number
|
||||
status?: PushTaskStatus
|
||||
createTime?: string[]
|
||||
}
|
||||
|
||||
export const sendPush = (data: PushSendRequest) =>
|
||||
request.post<{ taskId: number }>({ url: '/member/push/send', data })
|
||||
|
||||
export const getPushTaskPage = (params: PushTaskPageRequest) =>
|
||||
request.get<{ list: PushTask[]; total: number }>({ url: '/member/push/page', params })
|
||||
|
||||
export const getPushTask = (id: number) =>
|
||||
request.get<PushTask>({ url: '/member/push/get', params: { id } })
|
||||
|
||||
export const getPushRecordPage = (params: { taskId: number; pageNo: number; pageSize: number }) =>
|
||||
request.get<{ list: PushRecord[]; total: number }>({ url: '/member/push/record-page', params })
|
||||
|
||||
export const getPushMemberPage = (params: {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
nickname?: string
|
||||
userCode?: string
|
||||
mobile?: string
|
||||
}) => request.get<{ list: PushMember[]; total: number }>({ url: '/member/push/user-page', params })
|
||||
@@ -0,0 +1,148 @@
|
||||
import request from '@/config/axios'
|
||||
import type { AxiosProgressEvent } from 'axios'
|
||||
|
||||
/** 安装包适用的运行平台。 */
|
||||
export type AppPlatform = 'android' | 'ios' | 'harmony'
|
||||
/** 发布生命周期,下架版本可编辑后重新发布。 */
|
||||
export type VersionStatus = 'draft' | 'published' | 'offline'
|
||||
/** 全量发布或指定会员灰测。 */
|
||||
export type ReleaseScope = 'all' | 'members'
|
||||
|
||||
/** 后台从安装包解析的可信元数据,版本与校验值均由服务端生成。 */
|
||||
export interface VersionPackage {
|
||||
id: number
|
||||
appId: string
|
||||
/** 兼容旧数据的目标平台,可能为逗号分隔的多平台值。 */
|
||||
platform: string
|
||||
/** 发布目标平台集合,管理端优先使用此字段。 */
|
||||
platforms: AppPlatform[]
|
||||
packageType: 'apk' | 'wgt'
|
||||
fileName: string
|
||||
fileSize: number
|
||||
sha256: string
|
||||
md5: string
|
||||
downloadUrl: string
|
||||
versionCode: number
|
||||
versionName: string
|
||||
nativeVersionCode?: number
|
||||
resourceVersionCode: number
|
||||
packageName?: string
|
||||
}
|
||||
|
||||
/** 灰测名单中的会员简要资料,id 是内部会员编号。 */
|
||||
export interface GrayMember {
|
||||
id: number
|
||||
userCode?: string | null
|
||||
nickname?: string | null
|
||||
avatar?: string | null
|
||||
mobile?: string | null
|
||||
status?: number
|
||||
}
|
||||
|
||||
/** 版本列表和详情使用同一份发布字段,详情额外返回灰测会员。 */
|
||||
export interface AppVersion extends Omit<VersionPackage, 'id'> {
|
||||
id: number
|
||||
packageId: number
|
||||
updateContent: string
|
||||
forceUpdate: boolean
|
||||
releaseScope: ReleaseScope
|
||||
status: VersionStatus
|
||||
minNativeVersionCode?: number
|
||||
maxNativeVersionCode?: number
|
||||
memberCount: number
|
||||
memberIds?: number[]
|
||||
members?: GrayMember[]
|
||||
createTime?: string | number
|
||||
publishTime?: string | number
|
||||
}
|
||||
|
||||
/** 保存草稿和下架版本时允许修改的内容,包内版本信息保持只读。 */
|
||||
export interface VersionSaveRequest {
|
||||
id?: number
|
||||
packageId: number
|
||||
platforms: AppPlatform[]
|
||||
updateContent: string
|
||||
forceUpdate: boolean
|
||||
releaseScope: ReleaseScope
|
||||
minNativeVersionCode?: number
|
||||
maxNativeVersionCode?: number
|
||||
memberIds: number[]
|
||||
}
|
||||
|
||||
/** 发布列表使用服务端分页与组合筛选。 */
|
||||
export interface VersionPageRequest {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
keyword?: string
|
||||
platform?: AppPlatform
|
||||
packageType?: 'apk' | 'wgt'
|
||||
status?: VersionStatus
|
||||
releaseScope?: ReleaseScope
|
||||
}
|
||||
|
||||
/** 统一读取发布目标,兼容改造前的单平台和逗号分隔平台字段。 */
|
||||
export const getTargetPlatforms = (version: {
|
||||
platforms?: AppPlatform[]
|
||||
platform?: string
|
||||
}): AppPlatform[] => {
|
||||
const declared = version.platforms?.length
|
||||
? version.platforms
|
||||
: version.platform?.split(',') || []
|
||||
const supported: AppPlatform[] = ['android', 'ios', 'harmony']
|
||||
return supported.filter((platform) => declared.includes(platform))
|
||||
}
|
||||
|
||||
/** 查询版本列表,默认由后台按编号倒序排列。 */
|
||||
export const getVersionPage = (params: VersionPageRequest) =>
|
||||
request.get<{ list: AppVersion[]; total: number }>({ url: '/member/app-version/page', params })
|
||||
|
||||
/** 读取发布详情及该版本的灰测会员名单。 */
|
||||
export const getVersion = (id: number) =>
|
||||
request.get<AppVersion>({ url: '/member/app-version/get', params: { id } })
|
||||
|
||||
/** 新建草稿,发布动作由单独接口确认。 */
|
||||
export const createVersion = (data: VersionSaveRequest) =>
|
||||
request.post<number>({ url: '/member/app-version/create', data })
|
||||
|
||||
/** 保存草稿或下架版本。 */
|
||||
export const updateVersion = (data: VersionSaveRequest) =>
|
||||
request.put<boolean>({ url: '/member/app-version/update', data })
|
||||
|
||||
/** 删除允许删除的发布记录。 */
|
||||
export const deleteVersion = (id: number) =>
|
||||
request.delete<boolean>({ url: '/member/app-version/delete', params: { id } })
|
||||
|
||||
/** 将草稿或下架版本发布到保存的目标人群。 */
|
||||
export const publishVersion = (id: number) =>
|
||||
request.put<boolean>({ url: '/member/app-version/publish', params: { id } })
|
||||
|
||||
/** 下架已发布版本,停止向客户端提供该版本。 */
|
||||
export const offlineVersion = (id: number) =>
|
||||
request.put<boolean>({ url: '/member/app-version/offline', params: { id } })
|
||||
|
||||
/** 将当前灰测版本提升为全量发布。 */
|
||||
export const promoteVersion = (id: number) =>
|
||||
request.put<boolean>({ url: '/member/app-version/promote', params: { id } })
|
||||
|
||||
/** 在版本管理权限内检索可参与灰测的有效会员。 */
|
||||
export const getMemberPage = (params: { pageNo: number; pageSize: number; keyword?: string }) =>
|
||||
request.get<{ list: GrayMember[]; total: number }>({
|
||||
url: '/member/app-version/member-page',
|
||||
params
|
||||
})
|
||||
|
||||
/** 上传安装包并等待服务端校验,返回完整响应包装中的包元数据。 */
|
||||
export const uploadPackage = async (
|
||||
file: File,
|
||||
onUploadProgress: (event: AxiosProgressEvent) => void
|
||||
) => {
|
||||
const data = new FormData()
|
||||
data.append('file', file)
|
||||
const result = await request.upload<{ data: VersionPackage }>({
|
||||
url: '/member/app-version/upload-package',
|
||||
data,
|
||||
timeout: 600000,
|
||||
onUploadProgress
|
||||
})
|
||||
return result.data
|
||||
}
|
||||
@@ -23,6 +23,7 @@ export interface BrokerageRecordPageParams {
|
||||
pageNo: number
|
||||
pageSize: number
|
||||
userId?: number | string | null
|
||||
userNickname?: string
|
||||
sourceUserId?: number | string | null
|
||||
sourceUserLevel?: number
|
||||
bizType?: number
|
||||
|
||||
Reference in new issue
Block a user