课程、文章审核

This commit is contained in:
2025-11-19 15:11:30 +08:00
parent 4ab8877b80
commit d568781ce9
24 changed files with 379 additions and 65 deletions

View File

@@ -116,6 +116,7 @@ export interface DataCollectionItem extends BaseDTO {
title?: string;
/** 内容HTML格式 */
content?: string;
isAudited?:boolean;
/** 来源URL */
sourceUrl?: string;
/** 发布时间 */

View File

@@ -85,7 +85,9 @@ export enum ResourceStatus {
/** 已发布 */
PUBLISHED = 1,
/** 下架 */
OFFLINE = 2
OFFLINE = 2,
/** 审核失败 */
FAILED = 3
}
/**
@@ -97,7 +99,9 @@ export enum CourseStatus {
/** 已上线 */
ONLINE = 1,
/** 已下架 */
DISABLED = 2
DISABLED = 2,
/** 审核失败 */
FAILED = 3
}
/**
@@ -131,7 +135,9 @@ export enum ArticleStatus {
/** 已发布 */
PUBLISHED = 1,
/** 下架 */
OFFLINE = 2
OFFLINE = 2,
/** 审核失败 */
FAILED = 3
}
/**

View File

@@ -24,6 +24,7 @@ export interface Resource extends BaseDTO {
tagID?: string;
/** 作者 */
author?: string;
isAudited?:boolean;
/** 来源 */
source?: string;
/** 来源URL */

View File

@@ -105,6 +105,7 @@ export interface CourseNode extends BaseDTO {
nodeType?: number;
/** 资源ID */
resourceID?: string;
isAudited?:boolean;
/** 视频URL */
videoUrl?: string;
/** 节点时长(分钟) */

View File

@@ -208,7 +208,8 @@ function getStatusType(status: number) {
const typeMap: Record<number, any> = {
[ArticleStatus.DRAFT]: 'info',
[ArticleStatus.PUBLISHED]: 'success',
[ArticleStatus.OFFLINE]: 'warning'
[ArticleStatus.OFFLINE]: 'warning',
[ArticleStatus.FAILED]: 'danger'
};
return typeMap[status] || 'info';
}
@@ -217,14 +218,15 @@ function getStatusText(status: number) {
const textMap: Record<number, string> = {
[ArticleStatus.DRAFT]: '草稿',
[ArticleStatus.PUBLISHED]: '已发布',
[ArticleStatus.OFFLINE]: '已下架'
[ArticleStatus.OFFLINE]: '已下架',
[ArticleStatus.FAILED]: '审核失败'
};
return textMap[status] || '未知';
}
function getActionButtonType(status: number) {
// 草稿或下架状态显示主要按钮(发布), 已发布状态显示警告按钮(下架)
if (status === ArticleStatus.DRAFT || status === ArticleStatus.OFFLINE) {
if (status === ArticleStatus.DRAFT || status === ArticleStatus.OFFLINE || status === ArticleStatus.FAILED) {
return 'primary';
} else if (status === ArticleStatus.PUBLISHED) {
return 'warning';
@@ -234,7 +236,7 @@ function getActionButtonType(status: number) {
function getActionButtonText(status: number) {
// 草稿或下架状态显示"发布", 已发布状态显示"下架"
if (status === ArticleStatus.DRAFT || status === ArticleStatus.OFFLINE) {
if (status === ArticleStatus.DRAFT || status === ArticleStatus.OFFLINE || status === ArticleStatus.FAILED) {
return '发布';
} else if (status === ArticleStatus.PUBLISHED) {
return '下架';

View File

@@ -221,14 +221,18 @@ function handleBack() {
async function handlePublish() {
try {
await formRef.value?.validate();
publishing.value = true;
// 如果是从数据采集转换过来的,使用转换接口
// 新建或“立即发布”时,明确标记为已发布
// 对新建文章status 没有值,这里设为 1
// 对草稿->发布:也会变成 1
articleForm.value.resource.status = 1;
// 确保走审核流程
articleForm.value.resource.isAudited = false;
if (props.collectionItemId) {
await handleConvertFromCollection();
} else {
// 普通创建资源
const result = await resourceApi.createResource(articleForm.value);
if (result.success) {
const resourceID = result.data?.resource?.resourceID || '';

View File

@@ -19,6 +19,7 @@
<option :value="0">未上线</option>
<option :value="1">已上线</option>
<option :value="2">已下架</option>
<option :value="3">审核失败</option>
</select>
</div>
<div class="form-item">
@@ -65,7 +66,8 @@
<template #default="{ row }">
<el-tag v-if="row.status === 0" type="info">未上线</el-tag>
<el-tag v-else-if="row.status === 1" type="success">已上线</el-tag>
<el-tag v-else-if="row.status === 2" type="danger">已下架</el-tag>
<el-tag v-else-if="row.status === 2" type="warning">已下架</el-tag>
<el-tag v-else-if="row.status === 3" type="danger">审核失败</el-tag>
</template>
</el-table-column>
<el-table-column prop="orderNum" label="排序" width="80" />
@@ -75,7 +77,7 @@
编辑
</el-button>
<el-button
v-if="row.status === 0 || row.status === 2"
v-if="row.status === 0 || row.status === 2 || row.status === 3"
type="success"
size="small"
link