Files
cunkebao_v3/SuperAdmin/lib/platform-api.ts
Manus AI 5182529a58 sync(本地→GitHub): 2026-05-30 21:41 全量单向同步
## GitHub 同步说明

| 项 | 内容 |
|:---|:---|
| 仓库 | https://github.com/fnvtk/cunkebao_v3 |
| 分支 | develop |
| 方向 | 本地 → GitHub(单向 push) |
| 是否拉取远程 | 否(未 fetch / pull / merge) |
| 是否改本地文件 | 否(仅 git add/commit,未编辑任何源文件正文) |
| 基准 commit | 0643e78a |
| 变更规模 | 709 files, +26436 / -3407 lines |

## 目录变更统计

| 目录 | 文件数 | 说明 |
|:---|---:|:---|
| 开发文档/ | 404 | 四端进行中/已完成需求、接口文档、官网需求、部署脚本 |
| Server/ | 95 | 后端 API、迁移脚本、触客宝/超管/存客宝服务 |
| Cunkebao/ | 85 | 移动端 H5、设备绑定、客服、转号审批等 |
| Touchkebao/ | 68 | PC 工作台、AI 获客、算力中心、Glass UI |
| SuperAdmin/ | 33 | 超管项目中心、算力计费、内容库 |
| 官网/ | 19 | 新增存客宝官网静态页(index/pricing/solutions 等) |
| .cursor/ | 3 | Cursor 规则与 Skill |
| .obsidian/ | 2 | Obsidian 工作区配置 |

## 重点新增/更新(本地为准)

- 官网/: 完整静态站点(index、pricing、manual、solutions、api)
- 开发文档/1、需求/修改/*_进行中_20260530.md(存客宝/触客宝/AI数智员工)
- 开发文档/1、需求/官网需求.md
- 开发文档/5、接口/开发进度_接口文档.md 等接口文档迭代
- Touchkebao Glass UI 与 P0 收尾、通道获客算力
- SuperAdmin 算力计费规则、项目工作台

## 刻意未上传(本地保留)

- node_modules/
- .DS_Store、.smart-env/
- .开发文档_nested_git_backup/(旧嵌套 git 备份)
- **/__pycache__/

## 验收

GitHub 浏览: https://github.com/fnvtk/cunkebao_v3/tree/develop

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-30 21:41:40 +08:00

88 lines
2.4 KiB
TypeScript

import { apiRequest, ApiResponse } from "./api-utils";
export interface LibTag {
key: string;
label: string;
variant?: string;
}
export interface ContentLibraryGroup {
companyId: number;
projectId: number;
projectName: string;
libTotal: number;
libEnabled: number;
libraries: {
id: number;
name: string;
status: number;
itemCount: number;
callCount?: number;
lastCallTime?: string;
createTime: string;
libTags?: LibTag[];
assignedCount?: number;
}[];
}
export interface ContentLibMaterial {
id: number;
title: string;
type: string;
thumb: string;
updateTime: string;
}
export interface ContentLibAssignment {
id: number;
libraryId: number;
companyId: number;
projectId: number;
projectName: string;
enabled: number;
}
export interface ContentLibrarySummary {
projects: number;
libraries: number;
zeroCall?: number;
emptyLib?: number;
highFreq?: number;
}
export async function getPlatformContentLibraryGrouped(
keyword = "",
classification = "",
): Promise<ApiResponse<{ groups: ContentLibraryGroup[]; summary: ContentLibrarySummary }>> {
const params = new URLSearchParams();
if (keyword) params.set("keyword", keyword);
if (classification && classification !== "all") params.set("classification", classification);
const q = params.toString();
return apiRequest(`/content-library/grouped${q ? `?${q}` : ""}`);
}
// §6.4 内容库多项目分配 / 素材预览
export async function getLibraryMaterials(
libraryId: number, page = 1, limit = 20,
): Promise<ApiResponse<{ libraryId: number; libraryName: string; total: number; page: number; limit: number; items: ContentLibMaterial[] }>> {
return apiRequest(`/content-library/${libraryId}/materials?page=${page}&limit=${limit}`);
}
export async function getLibraryAssignments(
libraryId: number,
): Promise<ApiResponse<{ libraryId: number; assignments: ContentLibAssignment[] }>> {
return apiRequest(`/content-library/${libraryId}/assignments`);
}
export async function assignLibraries(
libraryIds: number[], targets: { companyId: number; enabled: number }[],
): Promise<ApiResponse<{ affected: number }>> {
return apiRequest(`/content-library/assign`, "POST", { libraryIds, targets });
}
export async function toggleLibraryAssign(
assignId: number, enabled: number,
): Promise<ApiResponse<{ id: number; enabled: number }>> {
return apiRequest(`/content-library/assign/${assignId}`, "PUT", { enabled });
}