feat(kol): admin-web API client + router entries for KOL
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
"@milkdown/kit": "^7.20.0",
|
"@milkdown/kit": "^7.20.0",
|
||||||
"@milkdown/theme-nord": "^7.20.0",
|
"@milkdown/theme-nord": "^7.20.0",
|
||||||
"@milkdown/vue": "^7.20.0",
|
"@milkdown/vue": "^7.20.0",
|
||||||
|
"nanoid": "^5.1.7",
|
||||||
"@tanstack/vue-query": "^5.96.0",
|
"@tanstack/vue-query": "^5.96.0",
|
||||||
"@vueuse/core": "^14.2.1",
|
"@vueuse/core": "^14.2.1",
|
||||||
"ant-design-vue": "^4.2.6",
|
"ant-design-vue": "^4.2.6",
|
||||||
|
|||||||
@@ -28,6 +28,14 @@ import type {
|
|||||||
KnowledgeItemDetail,
|
KnowledgeItemDetail,
|
||||||
KnowledgeTextItemRequest,
|
KnowledgeTextItemRequest,
|
||||||
KnowledgeURLItemRequest,
|
KnowledgeURLItemRequest,
|
||||||
|
KolAssistRequest,
|
||||||
|
KolAssistSubmitResponse,
|
||||||
|
KolAssistTask,
|
||||||
|
KolPackageSummary,
|
||||||
|
KolProfile,
|
||||||
|
KolPromptDetail,
|
||||||
|
KolPromptRevision,
|
||||||
|
KolSaveDraftRequest,
|
||||||
Keyword,
|
Keyword,
|
||||||
KeywordRequest,
|
KeywordRequest,
|
||||||
LoginRequest,
|
LoginRequest,
|
||||||
@@ -82,6 +90,10 @@ import type {
|
|||||||
ImageUpdateRequest,
|
ImageUpdateRequest,
|
||||||
UpdateQuestionRequest,
|
UpdateQuestionRequest,
|
||||||
UpdateArticleRequest,
|
UpdateArticleRequest,
|
||||||
|
CreateKolPackageRequest,
|
||||||
|
CreateKolPromptRequest,
|
||||||
|
UpdateKolPackageRequest,
|
||||||
|
UpdateKolPromptRequest,
|
||||||
UserInfo,
|
UserInfo,
|
||||||
WorkspaceOverview,
|
WorkspaceOverview,
|
||||||
} from "@geo/shared-types";
|
} 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 = {
|
export const articlesApi = {
|
||||||
list(params: ArticleListParams) {
|
list(params: ArticleListParams) {
|
||||||
return apiClient.get<ArticleListResponse>("/api/tenant/articles", { params });
|
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
@@ -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;
|
||||||
|
}
|
||||||
@@ -146,6 +146,53 @@ const router = createRouter({
|
|||||||
navKey: "/images",
|
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) {
|
if (to.name === "login" && authStore.isAuthenticated) {
|
||||||
return { name: "workspace" };
|
return { name: "workspace" };
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
@@ -7,6 +7,7 @@ declare module "vue-router" {
|
|||||||
titleKey?: string;
|
titleKey?: string;
|
||||||
descriptionKey?: string;
|
descriptionKey?: string;
|
||||||
requiresAuth?: boolean;
|
requiresAuth?: boolean;
|
||||||
|
requiresKol?: boolean;
|
||||||
navKey?: string | null;
|
navKey?: string | null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1292,6 +1292,11 @@ export interface KolAssistRequest {
|
|||||||
description?: string;
|
description?: string;
|
||||||
current_content?: string;
|
current_content?: string;
|
||||||
prompt_id?: number;
|
prompt_id?: number;
|
||||||
|
schema?: KolSchemaJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KolAssistSubmitResponse {
|
||||||
|
task_id: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface KolAssistTask {
|
export interface KolAssistTask {
|
||||||
@@ -1350,3 +1355,10 @@ export interface KolSaveDraftRequest {
|
|||||||
schema: KolSchemaJson;
|
schema: KolSchemaJson;
|
||||||
card_config: Record<string, unknown>;
|
card_config: Record<string, unknown>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface KolPromptRevision {
|
||||||
|
id: number;
|
||||||
|
prompt_id: number;
|
||||||
|
revision_no: number;
|
||||||
|
created_at: string;
|
||||||
|
}
|
||||||
|
|||||||
Generated
+3
@@ -34,6 +34,9 @@ importers:
|
|||||||
'@milkdown/vue':
|
'@milkdown/vue':
|
||||||
specifier: ^7.20.0
|
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))
|
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':
|
'@tanstack/vue-query':
|
||||||
specifier: ^5.96.0
|
specifier: ^5.96.0
|
||||||
version: 5.96.0(vue@3.5.31(typescript@5.9.3))
|
version: 5.96.0(vue@3.5.31(typescript@5.9.3))
|
||||||
|
|||||||
Reference in New Issue
Block a user