<template> <!-- 列表 --> <ContentWrap> <el-button v-hasPermi="['infra:demo03-student:create']" plain type="primary" @click="openForm('create')" > <Icon class="mr-5px" icon="ep:plus" /> 新增 </el-button> <el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"> <el-table-column align="center" label="编号" prop="id" /> <el-table-column align="center" label="名字" prop="name" /> <el-table-column align="center" label="分数" prop="score" /> <el-table-column :formatter="dateFormatter" align="center" label="创建时间" prop="createTime" width="180px" /> <el-table-column align="center" label="操作"> <template #default="scope"> <el-button v-hasPermi="['infra:demo03-student:update']" link type="primary" @click="openForm('update', scope.row.id)" > 编辑 </el-button> <el-button v-hasPermi="['infra:demo03-student:delete']" link type="danger" @click="handleDelete(scope.row.id)" > 删除 </el-button> </template> </el-table-column> </el-table> <!-- 分页 --> <Pagination v-model:limit="queryParams.pageSize" v-model:page="queryParams.pageNo" :total="total" @pagination="getList" /> </ContentWrap> <!-- 表单弹窗:添加/修改 --> <Demo03CourseForm ref="formRef" @success="getList" /> </template> <script lang="ts" setup> import { dateFormatter } from '@/utils/formatTime' import * as Demo03StudentApi from '@/api/infra/demo/demo03/erp' import Demo03CourseForm from './Demo03CourseForm.vue' const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const props = defineProps<{ studentId?: number // 学生编号(主表的关联字段) }>() const loading = ref(false) // 列表的加载中 const list = ref([]) // 列表的数据 const total = ref(0) // 列表的总页数 const queryParams = reactive({ pageNo: 1, pageSize: 10, studentId: undefined as unknown }) /** 监听主表的关联字段的变化,加载对应的子表数据 */ watch( () => props.studentId, (val: number) => { if (!val) { return } queryParams.studentId = val handleQuery() }, { immediate: true, deep: true } ) /** 查询列表 */ const getList = async () => { loading.value = true try { const data = await Demo03StudentApi.getDemo03CoursePage(queryParams) list.value = data.list total.value = data.total } finally { loading.value = false } } /** 搜索按钮操作 */ const handleQuery = () => { queryParams.pageNo = 1 getList() } /** 添加/修改操作 */ const formRef = ref() const openForm = (type: string, id?: number) => { if (!props.studentId) { message.error('请选择一个学生') return } formRef.value.open(type, id, props.studentId) } /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { // 删除的二次确认 await message.delConfirm() // 发起删除 await Demo03StudentApi.deleteDemo03Course(id) message.success(t('common.delSuccess')) // 刷新列表 await getList() } catch {} } </script>