import { request } from "@/api/request"; export type ReviewStatsResourceType = "all" | "document" | "faq"; /** 审核统计接口返回的 data 字段 */ export interface ReviewStatsPayload { need_my_review_document?: number; need_my_review_faq?: number; need_my_review_total?: number; need_my_review_unreviewed_document?: number; need_my_review_unreviewed_faq?: number; need_my_review_unreviewed_total?: number; } /** 文档资源类型 */ export interface DocumentResource { id: number; created_at: string; updated_at: string; doc_no: string; title: string; description: string; content: string; type: string; status: string; category_id: number; sub_category: string; author_id: number; author_name: string; reviewer_id: number; reviewer_name: string; reviewed_at: string | null; published_at: string | null; publisher_id: number; view_count: number; like_count: number; comment_count: number; download_count: number; version: string; version_notes: string; tags: string; attachments: string | null; related_docs: string | null; metadata: string | null; keywords: string; remarks: string; } /** FAQ资源类型 */ export interface FaqResource { id: number; created_at: string; updated_at: string; faq_no: string; question: string; answer: string; status: string; priority: string; category_id: number; sub_category: string; problem_type: string; solution: string; process_steps: string; prerequisites: string; author_id: number; author_name: string; reviewer_id: number; reviewer_name: string; reviewed_at: string | null; published_at: string | null; view_count: number; use_count: number; helpful_count: number; useless_count: number; tags: string; related_faqs: string | null; related_docs: string | null; related_links: string | null; attachments: string | null; keywords: string; applicable_scope: string; remarks: string; } /** 审核列表项(resource_type 为 all 时) */ export interface ReviewListItem { type: "document" | "faq"; resource: DocumentResource | FaqResource; } /** 分页响应类型 */ export interface PaginatedResponse { total: number; page: number; page_size: number; data: T[]; } /** API响应包装类型 */ export interface ApiResponse { code: number; message: string; data: T; } /** 获取审核列表参数 */ export interface FetchReviewListParams { page?: number; page_size?: number; resource_type?: ReviewStatsResourceType; } /** 审核通过参数 */ export interface ApproveParams { resource_type: "document" | "faq"; id: number; } /** 审核拒绝参数 */ export interface RejectParams { resource_type: "document" | "faq"; id: number; reason?: string; } /** 按当前登录用户统计需要本人审核的数量(不含本人为作者的稿件) */ export const fetchReviewStats = (params?: { resource_type?: ReviewStatsResourceType }) => request.get("/Kb/v1/review/stats", params ? { params } : undefined); /** 获取待审核列表 */ export const fetchReviewList = (params?: FetchReviewListParams) => request.get>>("/Kb/v1/review/list", { params }); /** 审核通过 */ export const approveReview = (data: ApproveParams) => request.post>("/Kb/v1/review/approve", data); /** 审核拒绝 */ export const rejectReview = (data: RejectParams) => request.post>("/Kb/v1/review/reject", data); /** 获取文档详情 */ export const fetchDocumentDetail = (id: number) => request.get>(`/Kb/v1/document/${id}`); /** 获取FAQ详情 */ export const fetchFaqDetail = (id: number) => request.get>(`/Kb/v1/faq/${id}`); /** 资源类型选项 */ export const resourceTypeOptions = [ { label: '全部', value: 'all' }, { label: '文档', value: 'document' }, { label: 'FAQ', value: 'faq' }, ]; /** 获取资源类型文本 */ export const getResourceTypeText = (type: string): string => { const typeMap: Record = { document: '文档', faq: 'FAQ', }; return typeMap[type] || type; }; /** 获取资源类型颜色 */ export const getResourceTypeColor = (type: string): string => { const colorMap: Record = { document: 'arcoblue', faq: 'green', }; return colorMap[type] || 'gray'; };