平安校园
 
 
 
 
 
 

119 lines
3.2 KiB

  1. <!--
  2. * @Description: 表单
  3. * @Author: syy
  4. * @Date: 2023-12-15 15:45:59
  5. -->
  6. <template>
  7. <div>
  8. <form-container v-model="visibleClass" :title="`${sysUserProps.opt}`" form-size="400px" @close="onClose">
  9. <el-form
  10. ref="sysUserFormRef"
  11. :rules="rules"
  12. :disabled="sysUserProps.disabled"
  13. :model="sysUserProps.record"
  14. :hide-required-asterisk="sysUserProps.disabled"
  15. label-width="auto"
  16. label-suffix=" :"
  17. >
  18. <div>
  19. <el-row :gutter="16">
  20. <el-col :span="22">
  21. <s-form-item label="班主任" prop="userId">
  22. <s-select v-model="sysUserProps.record.userId" :options="teacherData" label="name" value="userId"></s-select>
  23. </s-form-item>
  24. </el-col>
  25. </el-row>
  26. </div>
  27. </el-form>
  28. <template #footer>
  29. <el-button @click="onClose"> 取消 </el-button>
  30. <el-button v-show="!sysUserProps.disabled" type="primary" @click="handleSubmit"> 确定 </el-button>
  31. </template>
  32. </form-container>
  33. </div>
  34. </template>
  35. <script setup lang="ts" name="SysUserPerformClass">
  36. import { ref } from "vue";
  37. import { SysUserPersonnel, userManageTeacherApi } from "@/api";
  38. import { required } from "@/utils/formRules";
  39. import { FormInstance } from "element-plus";
  40. const teacherData = ref<any>([]);
  41. const visibleClass = ref(false); //是否显示表单
  42. // 表单参数
  43. enum FormOptEnum {
  44. /** 新增 */
  45. AddTeacher = "绑定班主任",
  46. /** 编辑 */
  47. UpdateTeacher = "修改班主任"
  48. }
  49. const sysUserProps = reactive<FormProps.Base<SysUserPersonnel.ClassPage>>({
  50. opt: FormOptEnum.AddTeacher,
  51. record: {},
  52. disabled: false
  53. });
  54. // 表单验证规则
  55. const rules = reactive({
  56. userId: [required("请选择班主任名称")]
  57. });
  58. /**
  59. * 打开表单
  60. * @param props 表单参数
  61. */
  62. function onOpen(props: FormProps.Base<SysUserPersonnel.ClassPage>) {
  63. visibleClass.value = true; //显示表单
  64. getRequestData(() => {
  65. Object.assign(sysUserProps, props); //合并参数
  66. sysUserProps.record = props.record;
  67. });
  68. }
  69. const getRequestData = async (callback: Function | null = null) => {
  70. const { data } = await userManageTeacherApi.page();
  71. teacherData.value = data;
  72. if (callback) callback();
  73. };
  74. // 提交数据(新增/编辑)
  75. const sysUserFormRef = ref<FormInstance>();
  76. /** 提交表单 */
  77. async function handleSubmit() {
  78. sysUserFormRef.value?.validate(async valid => {
  79. if (!valid) return; //表单验证失败
  80. console.log(sysUserProps);
  81. //提交表单
  82. if (sysUserProps.opt === FormOptEnum.UpdateTeacher) {
  83. await userManageTeacherApi
  84. .update(sysUserProps.record)
  85. .then(() => {
  86. sysUserProps.successful!(); //调用父组件的successful方法
  87. })
  88. .finally(() => {
  89. onClose();
  90. });
  91. } else {
  92. await userManageTeacherApi
  93. .add(sysUserProps.record)
  94. .then(() => {
  95. sysUserProps.successful!(); //调用父组件的successful方法
  96. })
  97. .finally(() => {
  98. onClose();
  99. });
  100. }
  101. });
  102. }
  103. /** 关闭表单*/
  104. function onClose() {
  105. visibleClass.value = false;
  106. }
  107. // 暴露给父组件的方法
  108. defineExpose({
  109. onOpen
  110. });
  111. </script>
  112. <style lang="scss" scoped></style>