feat(kol): admin-web API client + router entries for KOL

This commit is contained in:
2026-04-17 13:51:39 +08:00
parent a6ded27c1d
commit 9cf9fac109
8 changed files with 197 additions and 0 deletions
+1
View File
@@ -18,6 +18,7 @@
"@milkdown/kit": "^7.20.0",
"@milkdown/theme-nord": "^7.20.0",
"@milkdown/vue": "^7.20.0",
"nanoid": "^5.1.7",
"@tanstack/vue-query": "^5.96.0",
"@vueuse/core": "^14.2.1",
"ant-design-vue": "^4.2.6",
+90
View File
@@ -28,6 +28,14 @@ import type {
KnowledgeItemDetail,
KnowledgeTextItemRequest,
KnowledgeURLItemRequest,
KolAssistRequest,
KolAssistSubmitResponse,
KolAssistTask,
KolPackageSummary,
KolProfile,
KolPromptDetail,
KolPromptRevision,
KolSaveDraftRequest,
Keyword,
KeywordRequest,
LoginRequest,
@@ -82,6 +90,10 @@ import type {
ImageUpdateRequest,
UpdateQuestionRequest,
UpdateArticleRequest,
CreateKolPackageRequest,
CreateKolPromptRequest,
UpdateKolPackageRequest,
UpdateKolPromptRequest,
UserInfo,
WorkspaceOverview,
} from "@geo/shared-types";
@@ -243,6 +255,84 @@ export const templatesApi = {
},
};
export const kolManageApi = {
profile() {
return apiClient.get<KolProfile>("/api/tenant/kol/manage/profile");
},
listPackages() {
return apiClient.get<KolPackageSummary[]>("/api/tenant/kol/manage/packages");
},
createPackage(body: CreateKolPackageRequest) {
return apiClient.post<KolPackageSummary, CreateKolPackageRequest>(
"/api/tenant/kol/manage/packages",
body,
);
},
updatePackage(id: number, body: UpdateKolPackageRequest) {
return apiClient.put<KolPackageSummary, UpdateKolPackageRequest>(
`/api/tenant/kol/manage/packages/${id}`,
body,
);
},
publishPackage(id: number) {
return apiClient.put<KolPackageSummary, Record<string, never>>(
`/api/tenant/kol/manage/packages/${id}/publish`,
{},
);
},
archivePackage(id: number) {
return apiClient.put<KolPackageSummary, Record<string, never>>(
`/api/tenant/kol/manage/packages/${id}/archive`,
{},
);
},
deletePackage(id: number) {
return apiClient.remove<null>(`/api/tenant/kol/manage/packages/${id}`);
},
listPrompts(packageId: number) {
return apiClient.get<KolPromptDetail[]>(`/api/tenant/kol/manage/packages/${packageId}/prompts`);
},
createPrompt(packageId: number, body: CreateKolPromptRequest) {
return apiClient.post<KolPromptDetail, CreateKolPromptRequest>(
`/api/tenant/kol/manage/packages/${packageId}/prompts`,
body,
);
},
getPrompt(id: number) {
return apiClient.get<KolPromptDetail>(`/api/tenant/kol/manage/prompts/${id}`);
},
updatePromptMetadata(id: number, body: UpdateKolPromptRequest) {
return apiClient.put<KolPromptDetail, UpdateKolPromptRequest>(
`/api/tenant/kol/manage/prompts/${id}`,
body,
);
},
deletePrompt(id: number) {
return apiClient.remove<null>(`/api/tenant/kol/manage/prompts/${id}`);
},
saveDraft(promptId: number, body: KolSaveDraftRequest) {
return apiClient.post<KolPromptRevision, KolSaveDraftRequest>(
`/api/tenant/kol/manage/prompts/${promptId}/draft`,
body,
);
},
publishPrompt(promptId: number) {
return apiClient.post<{ ok: boolean }, Record<string, never>>(
`/api/tenant/kol/manage/prompts/${promptId}/publish`,
{},
);
},
submitAssist(body: KolAssistRequest) {
return apiClient.post<KolAssistSubmitResponse, KolAssistRequest>(
"/api/tenant/kol/manage/assist",
body,
);
},
getAssist(id: string) {
return apiClient.get<KolAssistTask>(`/api/tenant/kol/manage/assist/${id}`);
},
};
export const articlesApi = {
list(params: ArticleListParams) {
return apiClient.get<ArticleListResponse>("/api/tenant/articles", { params });
@@ -0,0 +1,5 @@
import { nanoid } from "nanoid";
export function newVariableId(): string {
return `var_${nanoid(8)}`;
}
+34
View File
@@ -0,0 +1,34 @@
declare module "@/views/KolManageView.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<Record<string, never>, Record<string, never>, any>;
export default component;
}
declare module "@/views/KolDashboardView.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<Record<string, never>, Record<string, never>, any>;
export default component;
}
declare module "@/views/KolMarketplaceView.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<Record<string, never>, Record<string, never>, any>;
export default component;
}
declare module "@/views/KolPackageDetailView.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<Record<string, never>, Record<string, never>, any>;
export default component;
}
declare module "@/views/KolGenerateView.vue" {
import type { DefineComponent } from "vue";
const component: DefineComponent<Record<string, never>, Record<string, never>, any>;
export default component;
}
+51
View File
@@ -146,6 +146,53 @@ const router = createRouter({
navKey: "/images",
},
},
{
path: "kol/manage",
name: "kol-manage",
component: () => import("@/views/KolManageView.vue"),
meta: {
titleKey: "kol.manage.title",
navKey: "/kol/manage",
requiresKol: true,
},
},
{
path: "kol/dashboard",
name: "kol-dashboard",
component: () => import("@/views/KolDashboardView.vue"),
meta: {
titleKey: "kol.dashboard.title",
navKey: "/kol/dashboard",
requiresKol: true,
},
},
{
path: "kol/marketplace",
name: "kol-marketplace",
component: () => import("@/views/KolMarketplaceView.vue"),
meta: {
titleKey: "kol.marketplace.title",
navKey: "/kol/marketplace",
},
},
{
path: "kol/packages/:id",
name: "kol-package-detail",
component: () => import("@/views/KolPackageDetailView.vue"),
meta: {
titleKey: "kol.marketplace.title",
navKey: "/kol/marketplace",
},
},
{
path: "kol/generate/:subscriptionPromptId",
name: "kol-generate",
component: () => import("@/views/KolGenerateView.vue"),
meta: {
titleKey: "kol.generate.title",
navKey: "/kol/marketplace",
},
},
],
},
],
@@ -166,6 +213,10 @@ router.beforeEach(async (to) => {
};
}
if (to.meta.requiresKol && !authStore.isActiveKol) {
return { name: "workspace" };
}
if (to.name === "login" && authStore.isAuthenticated) {
return { name: "workspace" };
}
+1
View File
@@ -7,6 +7,7 @@ declare module "vue-router" {
titleKey?: string;
descriptionKey?: string;
requiresAuth?: boolean;
requiresKol?: boolean;
navKey?: string | null;
}
}
+12
View File
@@ -1292,6 +1292,11 @@ export interface KolAssistRequest {
description?: string;
current_content?: string;
prompt_id?: number;
schema?: KolSchemaJson;
}
export interface KolAssistSubmitResponse {
task_id: string;
}
export interface KolAssistTask {
@@ -1350,3 +1355,10 @@ export interface KolSaveDraftRequest {
schema: KolSchemaJson;
card_config: Record<string, unknown>;
}
export interface KolPromptRevision {
id: number;
prompt_id: number;
revision_no: number;
created_at: string;
}
+3
View File
@@ -34,6 +34,9 @@ importers:
'@milkdown/vue':
specifier: ^7.20.0
version: 7.20.0(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.40.0)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(typescript@5.9.3)(vue@3.5.31(typescript@5.9.3))
nanoid:
specifier: ^5.1.7
version: 5.1.7
'@tanstack/vue-query':
specifier: ^5.96.0
version: 5.96.0(vue@3.5.31(typescript@5.9.3))