20240524打卡
今天主要练习了vue中组件的使用,采用多个状态值去优化冗余代码
<script setup>
import { ref, onMounted } from 'vue'
import { findAll, addStudent, updateStudent, deleteStudent} from "@/apis/student.js";
const students = ref([])
const student = ref({
  number: '',
  name: '',
  age: '',
  sex: '',
  birthday: ''
})
const dialogFormVisible = ref(false)
const dialogFormType = ref('add')
const handleAdd = () => {
  dialogFormVisible.value = true
  dialogFormType.value = 'add'
  student.value = {
    number: '',
    name: '',
    age: '',
    sex: '',
    birthday: ''
  }
}
const handleEdit = (row) => {
  dialogFormVisible.value = true
  dialogFormType.value = 'edit'
  student.value = row
}
const handleDelete = (row) => {
  deleteStudent(row.id).then(res => {
    findAll().then(res => {
      students.value = res.data
    })
  })
}
const handleConfirm = () => {
  if (student.value.id) {
    updateStudent(student.value).then(res => {
      findAll().then(res => {
        students.value = res.data
      })
    })
  } else {
    addStudent(student.value).then(res => {
      findAll().then(res => {
        students.value = res.data
      })
    })
  }
  dialogFormVisible.value = false
}
onMounted(async () => {
  findAll().then(res => {
    students.value = res.data
  })
})
</script>
<template>
  <el-button
      type="primary"
      size="default"
      @click="handleAdd">
    新增学生
  </el-button>
  <!-- 学生列表显示 -->
  <div class="student-view">
    <el-table :data="students" style="width: 100%">
      <el-table-column prop="id" label="ID" width="190"></el-table-column>
      <el-table-column prop="number" label="学号" width="190"></el-table-column>
      <el-table-column prop="name" label="姓名" width="190"></el-table-column>
      <el-table-column prop="age" label="年龄" width="190"></el-table-column>
      <el-table-column prop="sex" label="性别" width="190"></el-table-column>
      <el-table-column prop="birthday" label="生日" width="190"></el-table-column>
      <!-- 修改与删除 -->
      <el-table-column label="操作" width="197">
        <template #default="{ row }">
          <el-button
            type="primary"
            size="default"
            @click="handleEdit(row)">
            编辑
          </el-button>
          <el-button
            type="danger"
            size="default"
            @click="handleDelete(row)">
            删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 新增学生框 -->
    <el-dialog
      v-model="dialogFormVisible">
      <h1 v-if="dialogFormType === 'add'">新增学生</h1>
      <h1 v-if="dialogFormType === 'edit'">编辑学生</h1>
      <el-form :model="student" label-width="80px">
        <el-form-item label="学号" v-if="dialogFormType === 'add'">
          <el-input v-model="student.number"></el-input>
        </el-form-item>
        <el-form-item label="姓名">
          <el-input v-model="student.name"></el-input>
        </el-form-item>
        <el-form-item label="年龄">
          <el-input v-model="student.age"></el-input>
        </el-form-item>
        <el-form-item label="性别">
          <el-input v-model="student.sex"></el-input>
        </el-form-item>
        <el-form-item label="生日">
          <el-date-picker v-model="student.birthday" type="date" placeholder="请选择出生日期" value-format="YYYY-MM-DD"></el-date-picker>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button
          @click="dialogFormVisible = false">
          取消
        </el-button>
        <el-button
          type="primary"
          @click="handleConfirm">
          确定
        </el-button>
      </span>
    </el-dialog>
  </div>
</template>
<style scoped>
</style>
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号