This commit is contained in:
gpu 2026-02-04 22:04:46 +08:00
parent 8b5a404042
commit b7efee66ad
5 changed files with 77 additions and 2 deletions

View File

@ -103,4 +103,24 @@ public class DanyeController : BusinessControllerBase
return Error(ex.Code, ex.Message); return Error(ex.Code, ex.Message);
} }
} }
/// <summary>
/// 清空单页内容
/// </summary>
/// <param name="id">单页ID</param>
/// <returns>操作结果</returns>
[HttpPut("{id}/clear-content")]
[BusinessPermission("danye:edit")]
public async Task<IActionResult> ClearContent(int id)
{
try
{
var result = await _danyeService.ClearContentAsync(id);
return result ? Ok("清空成功") : Error(BusinessErrorCodes.InternalError, "清空失败");
}
catch (BusinessException ex)
{
return Error(ex.Code, ex.Message);
}
}
} }

View File

@ -35,4 +35,11 @@ public interface IDanyeService
/// <param name="request">图片优化请求</param> /// <param name="request">图片优化请求</param>
/// <returns>是否成功</returns> /// <returns>是否成功</returns>
Task<bool> ToggleImageOptimizerAsync(int id, ImageOptimizerRequest request); Task<bool> ToggleImageOptimizerAsync(int id, ImageOptimizerRequest request);
/// <summary>
/// 清空单页内容
/// </summary>
/// <param name="id">单页ID</param>
/// <returns>是否成功</returns>
Task<bool> ClearContentAsync(int id);
} }

View File

@ -98,3 +98,15 @@ export function toggleImageOptimizer(id: number, data: ImageOptimizerRequest): P
data data
}) })
} }
/**
*
* @param id ID
* @returns
*/
export function clearDanyeContent(id: number): Promise<ApiResponse<string>> {
return request({
url: `${DANYE_BASE_URL}/${id}/clear-content`,
method: 'put'
})
}

View File

@ -27,11 +27,14 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100" align="center" fixed="right"> <el-table-column label="操作" width="160" align="center" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link size="small" @click="handleEdit(row)"> <el-button type="primary" link size="small" @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button type="warning" link size="small" @click="handleClear(row)">
清空
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -51,6 +54,7 @@ defineProps<Props>()
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'edit', row: DanyeResponse): void (e: 'edit', row: DanyeResponse): void
(e: 'toggle-optimizer', row: DanyeResponse, value: boolean): void (e: 'toggle-optimizer', row: DanyeResponse, value: boolean): void
(e: 'clear', row: DanyeResponse): void
}>() }>()
const handleEdit = (row: DanyeResponse) => { const handleEdit = (row: DanyeResponse) => {
@ -60,6 +64,10 @@ const handleEdit = (row: DanyeResponse) => {
const handleToggleOptimizer = (row: DanyeResponse, value: boolean) => { const handleToggleOptimizer = (row: DanyeResponse, value: boolean) => {
emit('toggle-optimizer', row, value) emit('toggle-optimizer', row, value)
} }
const handleClear = (row: DanyeResponse) => {
emit('clear', row)
}
</script> </script>
<style scoped> <style scoped>

View File

@ -13,6 +13,7 @@
:loading="loading" :loading="loading"
@edit="handleEdit" @edit="handleEdit"
@toggle-optimizer="handleToggleOptimizer" @toggle-optimizer="handleToggleOptimizer"
@clear="handleClear"
/> />
</el-card> </el-card>
@ -27,13 +28,14 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import DanyeTable from './components/DanyeTable.vue' import DanyeTable from './components/DanyeTable.vue'
import DanyeFormDialog from './components/DanyeFormDialog.vue' import DanyeFormDialog from './components/DanyeFormDialog.vue'
import { import {
getDanyeList, getDanyeList,
getDanyeById, getDanyeById,
toggleImageOptimizer, toggleImageOptimizer,
clearDanyeContent,
type DanyeResponse, type DanyeResponse,
type DanyeDetailResponse type DanyeDetailResponse
} from '@/api/business/danye' } from '@/api/business/danye'
@ -88,6 +90,32 @@ const handleToggleOptimizer = async (row: DanyeResponse, value: boolean) => {
} }
} }
//
const handleClear = async (row: DanyeResponse) => {
try {
await ElMessageBox.confirm(
`确定要清空「${row.title}」的内容吗?清空后可重新编辑。`,
'清空确认',
{
confirmButtonText: '确定清空',
cancelButtonText: '取消',
type: 'warning'
}
)
loading.value = true
await clearDanyeContent(row.id)
ElMessage.success('内容已清空')
fetchData()
} catch (error) {
if (error !== 'cancel') {
ElMessage.error('清空失败')
}
} finally {
loading.value = false
}
}
onMounted(() => { onMounted(() => {
fetchData() fetchData()
}) })