Commit 0f477de8 by lijiabin

【需求 20331】 feat: 优化案例库相关内容

1:后台的案例库应用状态[已使用],禁止用户在前台编辑
2:[审核通过]的案例库,用户在前台编辑提交时二次提示
parent c8a47b69
/** /**
* 添加或更新案例库DTO * 添加或更新案例库DTO
*/ */
import { TagTypeEnum, TagLevelEnum, BooleanFlag, ReleaseStatusTypeEnum } from '@/constants' import {
TagTypeEnum,
TagLevelEnum,
BooleanFlag,
ReleaseStatusTypeEnum,
AuditStatusEnum,
} from '@/constants'
type TagItemDto = { type TagItemDto = {
tagId: number tagId: number
...@@ -31,4 +37,5 @@ export interface CaseDetailDto { ...@@ -31,4 +37,5 @@ export interface CaseDetailDto {
cultureKeywordSub: string[] cultureKeywordSub: string[]
sceneKeywordMain: string sceneKeywordMain: string
sceneKeywordSub: string[] sceneKeywordSub: string[]
isAudit: AuditStatusEnum
} }
...@@ -96,6 +96,7 @@ ...@@ -96,6 +96,7 @@
class="px-6 py-2 bg-blue-500 hover:bg-blue-600 rounded-lg text-white text-sm font-medium shadow-sm hover:shadow-md transition-all duration-200" class="px-6 py-2 bg-blue-500 hover:bg-blue-600 rounded-lg text-white text-sm font-medium shadow-sm hover:shadow-md transition-all duration-200"
type="primary" type="primary"
@click="handleSubmit(ReleaseStatusTypeEnum.PUBLISH)" @click="handleSubmit(ReleaseStatusTypeEnum.PUBLISH)"
:loading="loading"
> >
提交 提交
</el-button> </el-button>
...@@ -113,7 +114,13 @@ import type { AddOrUpdateCaseDto } from '@/api' ...@@ -113,7 +114,13 @@ import type { AddOrUpdateCaseDto } from '@/api'
import SelectTags from '@/components/common/SelectTags/index.vue' import SelectTags from '@/components/common/SelectTags/index.vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import type { TagItemDto } from '@/api' import type { TagItemDto } from '@/api'
import { TagTypeEnum, TagLevelEnum, BooleanFlag, ReleaseStatusTypeEnum } from '@/constants' import {
TagTypeEnum,
TagLevelEnum,
BooleanFlag,
ReleaseStatusTypeEnum,
AuditStatusEnum,
} from '@/constants'
import { selectDepOrUser } from '@/utils' import { selectDepOrUser } from '@/utils'
import { useUserStore } from '@/stores' import { useUserStore } from '@/stores'
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
...@@ -122,7 +129,7 @@ const router = useRouter() ...@@ -122,7 +129,7 @@ const router = useRouter()
const userStore = useUserStore() const userStore = useUserStore()
const { userInfo } = storeToRefs(userStore) const { userInfo } = storeToRefs(userStore)
const formRef = useTemplateRef<FormInstance>('formRef') const formRef = useTemplateRef<FormInstance>('formRef')
const loading = ref(false)
const rules = { const rules = {
title: [{ required: true, message: '请输入标题', trigger: 'blur' }], title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
content: [{ required: true, message: '请输入内容', trigger: 'blur' }], content: [{ required: true, message: '请输入内容', trigger: 'blur' }],
...@@ -164,14 +171,7 @@ const handleCancel = () => { ...@@ -164,14 +171,7 @@ const handleCancel = () => {
router.back() router.back()
} }
// 预览 // 保存
// const handlePreview = () => {
// console.log('预览', form)
// ElMessage.success('预览功能待实现')
// }
// 保存草稿
const transformData = (releaseStatus: ReleaseStatusTypeEnum): AddOrUpdateCaseDto => { const transformData = (releaseStatus: ReleaseStatusTypeEnum): AddOrUpdateCaseDto => {
const { const {
mainTagId, mainTagId,
...@@ -224,15 +224,30 @@ const transformData = (releaseStatus: ReleaseStatusTypeEnum): AddOrUpdateCaseDto ...@@ -224,15 +224,30 @@ const transformData = (releaseStatus: ReleaseStatusTypeEnum): AddOrUpdateCaseDto
return obj return obj
} }
const showSubmitGuide = ref(false)
// 提交 // 提交
const handleSubmit = async (releaseStatus: ReleaseStatusTypeEnum) => { const handleSubmit = async (releaseStatus: ReleaseStatusTypeEnum) => {
await formRef.value?.validate() await formRef.value?.validate()
console.log('form', { ...transformData(releaseStatus) })
const res = await addOrUpdateCase({ ...transformData(releaseStatus) }) if (showSubmitGuide.value) {
if (res) { await ElMessageBox.confirm('该案例库已审核通过,修改后需重新审核,确定提交吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
}
loading.value = true
try {
await addOrUpdateCase({ ...transformData(releaseStatus) })
ElMessage.success('提交成功') ElMessage.success('提交成功')
resetForm() resetForm()
router.back() router.back()
} catch (error) {
console.log('error', error)
} finally {
loading.value = false
} }
} }
...@@ -340,6 +355,13 @@ onActivated(async () => { ...@@ -340,6 +355,13 @@ onActivated(async () => {
} }
form.value = obj form.value = obj
console.log('form', form.value) console.log('form', form.value)
// 已经同意的案例库 二次修改需要提示
if (data.isAudit === AuditStatusEnum.AGREED) {
showSubmitGuide.value = true
} else {
showSubmitGuide.value = false
}
} else { } else {
showSubmissionGuide() showSubmissionGuide()
} }
......
...@@ -50,12 +50,25 @@ ...@@ -50,12 +50,25 @@
>待审核</el-tag >待审核</el-tag
> >
<el-tag <el-tag
v-else-if="item.isAudit === AuditStatusEnum.AGREED" v-else-if="
item.isAudit === AuditStatusEnum.AGREED &&
item.isUse === UsageStatusEnum.UNUSABLE
"
type="success" type="success"
size="small" size="small"
>已通过</el-tag >已通过</el-tag
> >
<el-tag v-else type="warning">已驳回</el-tag> <el-tag v-else-if="item.isAudit === AuditStatusEnum.REJECTED" type="warning"
>已驳回</el-tag
>
<el-tag
v-else-if="
item.isAudit === AuditStatusEnum.AGREED && item.isUse === UsageStatusEnum.USED
"
type="success"
size="small"
>已使用</el-tag
>
</span> </span>
<!-- <span class="mr-2">浏览 {{ item.viewCount }}</span> <!-- <span class="mr-2">浏览 {{ item.viewCount }}</span>
<span class="mr-2">点赞 {{ item.replyCount }}</span> <span class="mr-2">点赞 {{ item.replyCount }}</span>
...@@ -66,23 +79,9 @@ ...@@ -66,23 +79,9 @@
<!-- Meta Info --> <!-- Meta Info -->
<div class="flex items-center text-gray-400 text-sm ml-4"> <div class="flex items-center text-gray-400 text-sm ml-4">
<el-button type="primary" link @click="handleEdit(item)"> <el-button type="primary" link @click="handleView(item)">查看</el-button>
{{ <el-button type="primary" link @click="handleEdit(item)"> 编辑 </el-button>
searchParams.releaseStatus === ReleaseStatusTypeEnum.PUBLISH && <el-button v-if="showDelBtn(item)" type="danger" link @click="handleDelete(item)"
item.isAudit !== AuditStatusEnum.UNAUDITED
? '查看'
: '编辑'
}}
</el-button>
<el-button
v-if="
searchParams.releaseStatus === ReleaseStatusTypeEnum.DRAFT ||
(searchParams.releaseStatus === ReleaseStatusTypeEnum.PUBLISH &&
item.isAudit === AuditStatusEnum.UNAUDITED)
"
type="danger"
link
@click="handleDelete(item)"
>删除</el-button >删除</el-button
> >
</div> </div>
...@@ -114,7 +113,7 @@ ...@@ -114,7 +113,7 @@
import { getSelfCaseList, deleteCase, getCaseDetail } from '@/api' import { getSelfCaseList, deleteCase, getCaseDetail } from '@/api'
import { usePageSearch } from '@/hooks' import { usePageSearch } from '@/hooks'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { ReleaseStatusTypeEnum, AuditStatusEnum } from '@/constants' import { ReleaseStatusTypeEnum, AuditStatusEnum, UsageStatusEnum } from '@/constants'
import type { TabPaneName } from 'element-plus' import type { TabPaneName } from 'element-plus'
import type { SelfCaseItemDto } from '@/api/user/types' import type { SelfCaseItemDto } from '@/api/user/types'
const router = useRouter() const router = useRouter()
...@@ -139,11 +138,15 @@ const { list, loading, searchParams, total, goToPage, changePageSize, refresh } ...@@ -139,11 +138,15 @@ const { list, loading, searchParams, total, goToPage, changePageSize, refresh }
}, },
) )
const handleEdit = async (item: SelfCaseItemDto) => { const showDelBtn = (item: SelfCaseItemDto) => {
if ( return (
searchParams.value.releaseStatus === ReleaseStatusTypeEnum.PUBLISH && searchParams.value.releaseStatus === ReleaseStatusTypeEnum.DRAFT ||
item.isAudit !== AuditStatusEnum.UNAUDITED (searchParams.value.releaseStatus === ReleaseStatusTypeEnum.PUBLISH &&
) { item.isAudit === AuditStatusEnum.UNAUDITED)
)
}
const handleView = async (item: SelfCaseItemDto) => {
// 根据 id获取详情数据 // 根据 id获取详情数据
const { data } = await getCaseDetail(item.id) const { data } = await getCaseDetail(item.id)
console.log(data) console.log(data)
...@@ -156,12 +159,11 @@ const handleEdit = async (item: SelfCaseItemDto) => { ...@@ -156,12 +159,11 @@ const handleEdit = async (item: SelfCaseItemDto) => {
departments: data.depNameList.filter(Boolean), departments: data.depNameList.filter(Boolean),
syncPublish: data.isSync ? '是' : '否', syncPublish: data.isSync ? '是' : '否',
} }
console.log(formData)
ElMessageBox({ ElMessageBox({
title: '案例详情', title: '案例详情',
message: ( message: (
<div class="max-h-500px overflow-y-auto px-4"> <div class="w-400px max-h-500px overflow-y-auto px-4">
{/* 标题 */} {/* 标题 */}
<div class="mb-5"> <div class="mb-5">
<div class="text-13px text-gray-500 mb-2 flex items-center"> <div class="text-13px text-gray-500 mb-2 flex items-center">
...@@ -203,10 +205,7 @@ const handleEdit = async (item: SelfCaseItemDto) => { ...@@ -203,10 +205,7 @@ const handleEdit = async (item: SelfCaseItemDto) => {
{formData.scenes.length > 0 ? ( {formData.scenes.length > 0 ? (
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
{formData.scenes.map((scene, index) => ( {formData.scenes.map((scene, index) => (
<span <span key={index} class="px-3 py-1.5 bg-blue-50 text-blue-600 rounded-md text-13px">
key={index}
class="px-3 py-1.5 bg-blue-50 text-blue-600 rounded-md text-13px"
>
{scene} {scene}
</span> </span>
))} ))}
...@@ -222,10 +221,7 @@ const handleEdit = async (item: SelfCaseItemDto) => { ...@@ -222,10 +221,7 @@ const handleEdit = async (item: SelfCaseItemDto) => {
{formData.departments.length > 0 ? ( {formData.departments.length > 0 ? (
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
{formData.departments.map((dept, index) => ( {formData.departments.map((dept, index) => (
<span <span key={index} class="px-3 py-1.5 bg-gray-50 text-gray-700 rounded-md text-13px">
key={index}
class="px-3 py-1.5 bg-gray-50 text-gray-700 rounded-md text-13px"
>
{dept} {dept}
</span> </span>
))} ))}
...@@ -251,9 +247,13 @@ const handleEdit = async (item: SelfCaseItemDto) => { ...@@ -251,9 +247,13 @@ const handleEdit = async (item: SelfCaseItemDto) => {
showCancelButton: false, showCancelButton: false,
customClass: 'form-detail-dialog', customClass: 'form-detail-dialog',
}) })
} else { }
const handleEdit = async (item: SelfCaseItemDto) => {
if (item.isAudit === AuditStatusEnum.AGREED && item.isUse === UsageStatusEnum.USED)
return ElMessage.warning('案例已使用,无法编辑')
router.push(`/publishCase?id=${item.id}`) router.push(`/publishCase?id=${item.id}`)
}
} }
const handleDelete = async (item: SelfCaseItemDto) => { const handleDelete = async (item: SelfCaseItemDto) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment