Files
front/src/api/kb/review.ts

170 lines
4.3 KiB
TypeScript
Raw Normal View History

2026-05-02 09:59:06 +08:00
import { request } from '@/api/request'
2026-03-21 10:47:59 +08:00
2026-05-02 09:59:06 +08:00
export type ReviewStatsResourceType = 'all' | 'document' | 'faq'
2026-03-21 10:47:59 +08:00
/** 审核统计接口返回的 data 字段 */
export interface ReviewStatsPayload {
2026-05-02 09:59:06 +08:00
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
2026-03-21 10:47:59 +08:00
}
2026-03-21 22:37:48 +08:00
/** 文档资源类型 */
export interface DocumentResource {
2026-05-02 09:59:06 +08:00
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
2026-03-21 22:37:48 +08:00
}
/** FAQ资源类型 */
export interface FaqResource {
2026-05-02 09:59:06 +08:00
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
2026-03-21 22:37:48 +08:00
}
/** 审核列表项resource_type 为 all 时) */
export interface ReviewListItem {
2026-05-02 09:59:06 +08:00
type: 'document' | 'faq'
resource: DocumentResource | FaqResource
2026-03-21 22:37:48 +08:00
}
/** 分页响应类型 */
export interface PaginatedResponse<T> {
2026-05-02 09:59:06 +08:00
total: number
page: number
page_size: number
data: T[]
2026-03-21 22:37:48 +08:00
}
/** API响应包装类型 */
export interface ApiResponse<T = any> {
2026-05-02 09:59:06 +08:00
code: number
message: string
data: T
2026-03-21 22:37:48 +08:00
}
/** 获取审核列表参数 */
export interface FetchReviewListParams {
2026-05-02 09:59:06 +08:00
page?: number
page_size?: number
resource_type?: ReviewStatsResourceType
2026-03-21 22:37:48 +08:00
}
/** 审核通过参数 */
export interface ApproveParams {
2026-05-02 09:59:06 +08:00
resource_type: 'document' | 'faq'
id: number
2026-03-21 22:37:48 +08:00
}
/** 审核拒绝参数 */
export interface RejectParams {
2026-05-02 09:59:06 +08:00
resource_type: 'document' | 'faq'
id: number
reason?: string
2026-03-21 22:37:48 +08:00
}
2026-03-21 10:47:59 +08:00
/** 按当前登录用户统计需要本人审核的数量(不含本人为作者的稿件) */
export const fetchReviewStats = (params?: { resource_type?: ReviewStatsResourceType }) =>
2026-05-02 09:59:06 +08:00
request.get('/Kb/v1/review/stats', params ? { params } : undefined)
2026-03-21 22:37:48 +08:00
/** 获取待审核列表 */
export const fetchReviewList = (params?: FetchReviewListParams) =>
2026-05-02 09:59:06 +08:00
request.get<ApiResponse<PaginatedResponse<ReviewListItem | DocumentResource | FaqResource>>>('/Kb/v1/review/list', { params })
2026-03-21 22:37:48 +08:00
/** 审核通过 */
2026-05-02 09:59:06 +08:00
export const approveReview = (data: ApproveParams) => request.post<ApiResponse<string>>('/Kb/v1/review/approve', data)
2026-03-21 22:37:48 +08:00
/** 审核拒绝 */
2026-05-02 09:59:06 +08:00
export const rejectReview = (data: RejectParams) => request.post<ApiResponse<string>>('/Kb/v1/review/reject', data)
2026-03-21 22:37:48 +08:00
/** 获取文档详情 */
2026-05-02 09:59:06 +08:00
export const fetchDocumentDetail = (id: number) => request.get<ApiResponse<DocumentResource>>(`/Kb/v1/document/${id}`)
2026-03-21 22:37:48 +08:00
/** 获取FAQ详情 */
2026-05-02 09:59:06 +08:00
export const fetchFaqDetail = (id: number) => request.get<ApiResponse<FaqResource>>(`/Kb/v1/faq/${id}`)
2026-03-21 22:37:48 +08:00
/** 资源类型选项 */
export const resourceTypeOptions = [
{ label: '全部', value: 'all' },
{ label: '文档', value: 'document' },
{ label: 'FAQ', value: 'faq' },
2026-05-02 09:59:06 +08:00
]
2026-03-21 22:37:48 +08:00
/** 获取资源类型文本 */
export const getResourceTypeText = (type: string): string => {
const typeMap: Record<string, string> = {
document: '文档',
faq: 'FAQ',
2026-05-02 09:59:06 +08:00
}
return typeMap[type] || type
}
2026-03-21 22:37:48 +08:00
/** 获取资源类型颜色 */
export const getResourceTypeColor = (type: string): string => {
const colorMap: Record<string, string> = {
document: 'arcoblue',
faq: 'green',
2026-05-02 09:59:06 +08:00
}
return colorMap[type] || 'gray'
}