Demo03CourseList.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <!-- 列表 -->
  3. <ContentWrap>
  4. <el-button
  5. type="primary"
  6. plain
  7. @click="openForm('create')"
  8. v-hasPermi="['infra:demo03-student:create']"
  9. >
  10. <Icon icon="ep:plus" class="mr-5px" /> 新增
  11. </el-button>
  12. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  13. <el-table-column label="编号" align="center" prop="id" />
  14. <el-table-column label="名字" align="center" prop="name" />
  15. <el-table-column label="分数" align="center" prop="score" />
  16. <el-table-column
  17. label="创建时间"
  18. align="center"
  19. prop="createTime"
  20. :formatter="dateFormatter"
  21. width="180px"
  22. />
  23. <el-table-column label="操作" align="center">
  24. <template #default="scope">
  25. <el-button
  26. link
  27. type="primary"
  28. @click="openForm('update', scope.row.id)"
  29. v-hasPermi="['infra:demo03-student:update']"
  30. >
  31. 编辑
  32. </el-button>
  33. <el-button
  34. link
  35. type="danger"
  36. @click="handleDelete(scope.row.id)"
  37. v-hasPermi="['infra:demo03-student:delete']"
  38. >
  39. 删除
  40. </el-button>
  41. </template>
  42. </el-table-column>
  43. </el-table>
  44. <!-- 分页 -->
  45. <Pagination
  46. :total="total"
  47. v-model:page="queryParams.pageNo"
  48. v-model:limit="queryParams.pageSize"
  49. @pagination="getList"
  50. />
  51. </ContentWrap>
  52. <!-- 表单弹窗:添加/修改 -->
  53. <Demo03CourseForm ref="formRef" @success="getList" />
  54. </template>
  55. <script setup lang="ts">
  56. import { dateFormatter } from '@/utils/formatTime'
  57. import * as Demo03StudentApi from '@/api/infra/demo/demo03/erp'
  58. import Demo03CourseForm from './Demo03CourseForm.vue'
  59. const { t } = useI18n() // 国际化
  60. const message = useMessage() // 消息弹窗
  61. const props = defineProps<{
  62. studentId: undefined // 学生编号(主表的关联字段)
  63. }>()
  64. const loading = ref(false) // 列表的加载中
  65. const list = ref([]) // 列表的数据
  66. const total = ref(0) // 列表的总页数
  67. const queryParams = reactive({
  68. pageNo: 1,
  69. pageSize: 10,
  70. studentId: undefined
  71. })
  72. /** 监听主表的关联字段的变化,加载对应的子表数据 */
  73. watch(
  74. () => props.studentId,
  75. (val) => {
  76. queryParams.studentId = val
  77. handleQuery()
  78. },
  79. { immediate: false }
  80. )
  81. /** 查询列表 */
  82. const getList = async () => {
  83. loading.value = true
  84. try {
  85. const data = await Demo03StudentApi.getDemo03CoursePage(queryParams)
  86. list.value = data.list
  87. total.value = data.total
  88. } finally {
  89. loading.value = false
  90. }
  91. }
  92. /** 搜索按钮操作 */
  93. const handleQuery = () => {
  94. queryParams.pageNo = 1
  95. getList()
  96. }
  97. /** 添加/修改操作 */
  98. const formRef = ref()
  99. const openForm = (type: string, id?: number) => {
  100. if (!props.studentId) {
  101. message.error('请选择一个学生')
  102. return
  103. }
  104. formRef.value.open(type, id, props.studentId)
  105. }
  106. /** 删除按钮操作 */
  107. const handleDelete = async (id: number) => {
  108. try {
  109. // 删除的二次确认
  110. await message.delConfirm()
  111. // 发起删除
  112. await Demo03StudentApi.deleteDemo03Course(id)
  113. message.success(t('common.delSuccess'))
  114. // 刷新列表
  115. await getList()
  116. } catch {}
  117. }
  118. </script>