f0eed0ca3f
Deploy / Build Production Runtime Images (push) Has been skipped
Deploy / Deploy Production (push) Has been skipped
Deploy / Production Browser E2E (push) Has been skipped
Deploy / Deploy Staging (push) Failing after 192h26m58s
CI/CD Pipeline / Frontend Lint (push) Failing after 192h27m37s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 192h27m46s
162 lines
4.4 KiB
TypeScript
162 lines
4.4 KiB
TypeScript
/**
|
|
* 账号管理 Mock API
|
|
*
|
|
* 模拟多平台账号绑定/解绑操作
|
|
* 支持平台:抖音、快手、小红书、微信视频号
|
|
*/
|
|
|
|
/* ── 类型定义 ───────────────────────────────────────────── */
|
|
|
|
/** 平台 ID */
|
|
export type PlatformId = "douyin" | "kuaishou" | "xiaohongshu" | "wechat";
|
|
|
|
/** 账号状态 */
|
|
export type AccountStatus = "active" | "expired" | "limited";
|
|
|
|
/** 已绑定的账号 */
|
|
export interface Account {
|
|
id: string;
|
|
platform_id: PlatformId;
|
|
name: string;
|
|
avatar?: string;
|
|
status: AccountStatus;
|
|
bound_at: string;
|
|
}
|
|
|
|
/** 平台信息 */
|
|
export interface Platform {
|
|
id: PlatformId;
|
|
name: string;
|
|
subName: string;
|
|
icon: string;
|
|
gradient: string;
|
|
}
|
|
|
|
/** 绑定账号请求 */
|
|
export interface BindAccountRequest {
|
|
platform_id: PlatformId;
|
|
name: string;
|
|
}
|
|
|
|
/* ── 平台配置 ───────────────────────────────────────────── */
|
|
|
|
export const PLATFORMS: Platform[] = [
|
|
{
|
|
id: "douyin",
|
|
name: "抖音",
|
|
subName: "短视频发布平台",
|
|
icon: "📱",
|
|
gradient: "linear-gradient(135deg, #fe2c55, #25f4ee)",
|
|
},
|
|
{
|
|
id: "kuaishou",
|
|
name: "快手",
|
|
subName: "短视频发布平台",
|
|
icon: "🎬",
|
|
gradient: "linear-gradient(135deg, #ff4906, #ffba00)",
|
|
},
|
|
{
|
|
id: "xiaohongshu",
|
|
name: "小红书",
|
|
subName: "种草笔记发布平台",
|
|
icon: "📕",
|
|
gradient: "linear-gradient(135deg, #ff2442, #ff6b6b)",
|
|
},
|
|
{
|
|
id: "wechat",
|
|
name: "微信视频号",
|
|
subName: "视频号发布平台",
|
|
icon: "💬",
|
|
gradient: "linear-gradient(135deg, #07c160, #4cd964)",
|
|
},
|
|
];
|
|
|
|
/* ── Mock 数据 ───────────────────────────────────────────── */
|
|
|
|
let MOCK_ACCOUNTS: Account[] = [
|
|
{
|
|
id: "acc-001",
|
|
platform_id: "douyin",
|
|
name: "小虾官方号",
|
|
avatar: "🦐",
|
|
status: "active",
|
|
bound_at: "2025-12-01T10:00:00Z",
|
|
},
|
|
{
|
|
id: "acc-002",
|
|
platform_id: "douyin",
|
|
name: "小虾日常",
|
|
avatar: "🐟",
|
|
status: "active",
|
|
bound_at: "2025-12-15T14:30:00Z",
|
|
},
|
|
{
|
|
id: "acc-003",
|
|
platform_id: "kuaishou",
|
|
name: "小虾剪辑",
|
|
avatar: "🎬",
|
|
status: "active",
|
|
bound_at: "2026-01-05T09:00:00Z",
|
|
},
|
|
{
|
|
id: "acc-004",
|
|
platform_id: "xiaohongshu",
|
|
name: "小虾种草",
|
|
avatar: "📕",
|
|
status: "limited",
|
|
bound_at: "2026-02-20T16:00:00Z",
|
|
},
|
|
];
|
|
|
|
/* ── 模拟延迟 ───────────────────────────────────────────── */
|
|
|
|
const delay = (ms: number) => new Promise((r) => setTimeout(r, ms));
|
|
|
|
/* ── API 函数 ───────────────────────────────────────────── */
|
|
|
|
/** 获取指定平台的账号列表 */
|
|
export async function getAccountsByPlatform(
|
|
platformId: PlatformId,
|
|
): Promise<Account[]> {
|
|
await delay(300);
|
|
return MOCK_ACCOUNTS.filter((a) => a.platform_id === platformId);
|
|
}
|
|
|
|
/** 获取所有平台的账号总数 */
|
|
export async function getAllAccounts(): Promise<Account[]> {
|
|
await delay(200);
|
|
return [...MOCK_ACCOUNTS];
|
|
}
|
|
|
|
/** 绑定新账号 */
|
|
export async function bindAccount(data: BindAccountRequest): Promise<Account> {
|
|
await delay(500);
|
|
const newAccount: Account = {
|
|
id: `acc-${Date.now()}`,
|
|
platform_id: data.platform_id,
|
|
name: data.name,
|
|
avatar: undefined,
|
|
status: "active",
|
|
bound_at: new Date().toISOString(),
|
|
};
|
|
MOCK_ACCOUNTS = [...MOCK_ACCOUNTS, newAccount];
|
|
return newAccount;
|
|
}
|
|
|
|
/** 解绑账号 */
|
|
export async function unbindAccount(accountId: string): Promise<void> {
|
|
await delay(400);
|
|
MOCK_ACCOUNTS = MOCK_ACCOUNTS.filter((a) => a.id !== accountId);
|
|
}
|
|
|
|
/* ── 状态配置 ───────────────────────────────────────────── */
|
|
|
|
export const ACCOUNT_STATUS_CONFIG: Record<
|
|
AccountStatus,
|
|
{ label: string; className: string }
|
|
> = {
|
|
active: { label: "正常", className: "acc-status--active" },
|
|
expired: { label: "已过期", className: "acc-status--expired" },
|
|
limited: { label: "受限", className: "acc-status--limited" },
|
|
};
|