- 新增迁移中心 Tab - 自动迁移:填写 api.php 地址,可选 Bot 凭据,支持明确允许内网来源;可配置过时页面筛选规则(未更新天数、维护者统计窗口、维护者人数上限、过时标记) - XML 导入:上传 MediaWiki 导出文件建立暂存任务 - 迁移任务列表:状态标签、审核进度条、已审核/导入/排除统计、错误信息 - 任务详情:分页加载候选页面,逐条显示更新时间、维护者数量、可疑原因,可设置目标标题与是否覆盖,执行导入或排除 - 整批发布与回滚,失败或已回滚任务可删除记录 - 补充迁移相关 API 与类型定义 - 中英文各补 55 个文案
This commit is contained in:
1 parent
667c1a0900
commit
febbd84ae7
4 files changed
+986
-4
No files matched your search
@@ -2367,3 +2367,129 @@ export function skinSiteChatVoiceCapacityUpdate(
|
||||
{ method: 'PUT', body: data },
|
||||
)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Wiki migration
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export type SkinSiteWikiMigrationState =
|
||||
| 'IMPORTING'
|
||||
| 'REVIEW'
|
||||
| 'PUBLISHING'
|
||||
| 'PUBLISHED'
|
||||
| 'FAILED'
|
||||
| 'ROLLED_BACK'
|
||||
|
||||
export type SkinSiteWikiMigrationDecision = 'PENDING' | 'IMPORT' | 'EXCLUDE'
|
||||
|
||||
export interface SkinSiteWikiMigrationJobInfo {
|
||||
id: number
|
||||
source: string
|
||||
state: SkinSiteWikiMigrationState
|
||||
total: number
|
||||
reviewed: number
|
||||
imported: number
|
||||
excluded: number
|
||||
error?: string | null
|
||||
missingAttachmentCount?: number
|
||||
}
|
||||
|
||||
export interface SkinSiteWikiMigrationCandidate {
|
||||
id: number
|
||||
title: string
|
||||
lastUpdatedAt: number
|
||||
maintainerCount: number
|
||||
suspiciousReasons: string[]
|
||||
decision: SkinSiteWikiMigrationDecision
|
||||
conflict: boolean
|
||||
}
|
||||
|
||||
export interface SkinSiteWikiMigrationPage {
|
||||
items: SkinSiteWikiMigrationCandidate[]
|
||||
nextCursor?: number | null
|
||||
}
|
||||
|
||||
export interface SkinSiteWikiMigrationPublishResult {
|
||||
imported: number
|
||||
overwritten: number
|
||||
}
|
||||
|
||||
export interface SkinSiteWikiAutomaticMigrationInput {
|
||||
apiUrl: string
|
||||
username?: string | null
|
||||
password?: string | null
|
||||
allowPrivateAddress: boolean
|
||||
rules: {
|
||||
staleDays: number
|
||||
maintainerWindowDays: number
|
||||
maximumMaintainers: number
|
||||
staleMarkers: string[]
|
||||
}
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationJobs(): Promise<
|
||||
SkinSiteResponse<SkinSiteWikiMigrationJobInfo[]>
|
||||
> {
|
||||
return skinSiteRequest<SkinSiteWikiMigrationJobInfo[]>('wiki/admin/migration')
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationStartAutomatic(
|
||||
data: SkinSiteWikiAutomaticMigrationInput,
|
||||
): Promise<SkinSiteResponse<SkinSiteWikiMigrationJobInfo>> {
|
||||
return skinSiteRequest<SkinSiteWikiMigrationJobInfo>('wiki/admin/migration/automatic', {
|
||||
method: 'POST',
|
||||
body: data,
|
||||
})
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationStartXml(
|
||||
file: File,
|
||||
): Promise<SkinSiteResponse<SkinSiteWikiMigrationJobInfo>> {
|
||||
const form = new FormData()
|
||||
form.append('xml', file, file.name)
|
||||
return skinSiteRequest<SkinSiteWikiMigrationJobInfo>('wiki/admin/migration/xml', {
|
||||
method: 'POST',
|
||||
form,
|
||||
})
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationCandidates(
|
||||
jobId: number,
|
||||
after?: number,
|
||||
): Promise<SkinSiteResponse<SkinSiteWikiMigrationPage>> {
|
||||
const suffix = after ? '?after=' + after : ''
|
||||
return skinSiteRequest<SkinSiteWikiMigrationPage>(
|
||||
'wiki/admin/migration/' + jobId + '/candidates' + suffix,
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationDecide(
|
||||
candidateId: number,
|
||||
data: { decision: SkinSiteWikiMigrationDecision; targetTitle?: string | null; overwrite?: boolean },
|
||||
): Promise<SkinSiteResponse<void>> {
|
||||
return skinSiteRequest<void>('wiki/admin/migration/candidates/' + candidateId, {
|
||||
method: 'POST',
|
||||
body: data,
|
||||
})
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationPublish(
|
||||
jobId: number,
|
||||
): Promise<SkinSiteResponse<SkinSiteWikiMigrationPublishResult>> {
|
||||
return skinSiteRequest<SkinSiteWikiMigrationPublishResult>(
|
||||
'wiki/admin/migration/' + jobId + '/publish',
|
||||
{ method: 'POST' },
|
||||
)
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationRollback(
|
||||
jobId: number,
|
||||
): Promise<SkinSiteResponse<void>> {
|
||||
return skinSiteRequest<void>('wiki/admin/migration/' + jobId + '/rollback', {
|
||||
method: 'POST',
|
||||
})
|
||||
}
|
||||
|
||||
export function skinSiteWikiMigrationDelete(jobId: number): Promise<SkinSiteResponse<void>> {
|
||||
return skinSiteRequest<void>('wiki/admin/migration/' + jobId, { method: 'DELETE' })
|
||||
}
|
||||
Reference in new issue
Block a user