java-bookstore/ui/src/pages/fronttopic/index.vue
2025-02-13 23:33:45 +08:00

208 lines
5.4 KiB
Vue

<template>
<div>
<!--查交易记录的按钮-->
<el-button type="primary" round @click="openAddDialog" size="small">添加</el-button>
<el-row>
<el-col :span="24">
<el-form :inline="true" :model="state.query" class="demo-form-inline">
<el-form-item label="文创名称:">
<el-input v-model="state.query.title" placeholder="请输入文创名称" clearable @input="init" />
</el-form-item>
</el-form>
</el-col>
</el-row>
<!--表格-->
<el-row>
<el-col :span="24">
<el-table :data="state.getList">
<!-- 列表结开始-->
<el-table-column prop="id" label="编号" align="center" />
<el-table-column prop="title" label="文创名称" align="center" />
<el-table-column prop="view" label="阅读量" align="center" />
<!--列表结束-->
<el-table-column label="操作" align="center" >
<template #default="scope">
<el-button @click="info(scope.row.content)" size="small">详情</el-button>
<el-button @click="edit(scope.row)" size="small">编辑</el-button>
<el-button @click="del(scope.row.id)" type="danger" size="small">删除</el-button>
</template>
</el-table-column>
<template v-slot:empty>
<el-empty description="数据去外太空了~" />
</template>
</el-table>
<!-- 分页控件 -->
<el-pagination
v-if="state.query.total > 0"
:current-page="state.query.page"
:page-size="state.query.limit"
:total="state.query.total"
background layout="prev, pager, next"
@current-change="handlePageChange"
/>
</el-col>
</el-row>
<!-- 新增/编辑对话框 -->
<el-dialog v-model="state.dialogVisible" title="新增" width="50%">
<el-form
:model="state.formData"
ref="formRef"
label-width="100px"
>
<!-- 表单开始===============================================================================================================================-->
<el-form-item label="文创名称" prop="title" :rules="[{ required: true, message: '请输入文创名称', trigger: 'blur' }]">
<el-input v-model="state.formData.title"/>
</el-form-item>
<el-form-item label="内容" prop="content" :rules="[{ required: true, message: '请编写内容', trigger: 'blur' }]">
<e-editor :content="state.formData.content" @update:content="handleImageUrl" />
</el-form-item>
<!--表单结束===============================================================================================================================-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="state.dialogVisible = false">取消</el-button>
<el-button type="primary" @click="saveTransaction(formRef)">保存</el-button>
</div>
</el-dialog>
<el-dialog
v-model="dialogVisible"
title="详情"
width="500"
>
<div v-html="state.info"></div>
</el-dialog>
</div>
</template>
<script setup lang="ts">
// 交易记录数据
import type { FormInstance } from 'element-plus'
const formRef = ref<FormInstance>()
const dialogVisible = ref(false)
const state = reactive({
info:"",
route:"sys/topic",
dialogVisible:false,
getList: [],//获取数据
query:{
total: 0, // 总记录数
page: 1, // 当前页码
limit: 9999, // 每页显示的记录数
title:"",
type:1,
},
formData:{}
})
const info = (info:string) => {
console.log(info)
state.info = info
dialogVisible.value = true
}
// 获取交易记录
const init = () => {
frontRequest.get(`/api/topic/page1`, {
params: state.query
}).then((res:any) => {
state.getList = res.data.list
state.query.total = res.data.total
})
}
// 新增交易记录
const openAddDialog = () => {
state.formData = {}
state.dialogVisible = true
}
// 编辑交易记录
const edit = (row: any) => {
state.formData = row
state.dialogVisible = true
}
// 接收子组件传递的路径
function handleImageUrl(content: string) {
state.formData.content = content
}
// 保存记录
const saveTransaction = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.validate((valid) => {
if (valid) {
state.formData.type = 1
if (state.formData.id) {
// 更新交易记录
adminRequest.put(`${state.route}`, state.formData)
console.log(state.formData)
} else {
// 新增交易记录
adminRequest.post(`${state.route}`, state.formData)
}
init()
state.dialogVisible = false
ElMessage.success("提交成功~")
}
})
}
// 删除交易记录
const del = async (id: number) => {
try {
await adminRequest.delete(`${state.route}/${id}`)
init()
ElMessage.success("删除成功~")
} catch (error) {
ElMessage.error("删除失败~")
}
}
// 页码改变时的处理函数
const handlePageChange = (page: number) => {
state.query.page = page
init()
}
// 页面加载时获取交易记录
onMounted(() => {
init()
})
</script>
<style scoped>
.dialog-footer {
text-align: right;
}
:deep(.el-upload) {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
:deep(.el-upload:hover) {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
text-align: center;
}
.avatar{
width: 178px;
height: 178px;
object-fit: cover;
}
</style>
<route lang="json">
{
"meta": {
"layout": "frontUserInfo"
}
}
</route>