createClass.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import {
  2. NButton,
  3. NSpace,
  4. useMessage,
  5. NForm,
  6. NFormItem,
  7. NSelect
  8. } from 'naive-ui';
  9. import { defineComponent, onMounted, reactive, ref } from 'vue';
  10. import styles from '../index.module.less';
  11. import CSelect from '/src/components/CSelect';
  12. import { addClass } from '../api';
  13. export default defineComponent({
  14. props: {
  15. activeRow: {
  16. type: Object,
  17. default: () => ({ id: '' })
  18. },
  19. gradeNumList: {
  20. type: Array,
  21. default: () => []
  22. },
  23. classArray: {
  24. type: Array,
  25. default: () => []
  26. },
  27. subjectList:{
  28. type: Array,
  29. default: () => []
  30. }
  31. },
  32. name: 'resetStudent',
  33. emits: ['close', 'getList'],
  34. setup(props, { emit }) {
  35. const data = reactive({
  36. uploading: false
  37. });
  38. const message = useMessage();
  39. const foemsRef = ref();
  40. const createClassForm = reactive({
  41. currentGradeNum: null,
  42. currentClass: null,
  43. subjectId:null
  44. });
  45. const submitForms = () => {
  46. data.uploading = true
  47. foemsRef.value.validate(async (error: any) => {
  48. if (error) {
  49. return;
  50. }
  51. try {
  52. const res = await addClass({ ...createClassForm });
  53. message.success('新增成功');
  54. emit('close');
  55. emit('getList');
  56. data.uploading = false
  57. } catch (e) {
  58. data.uploading = false
  59. console.log(e);
  60. }
  61. });
  62. };
  63. return () => (
  64. <div class={[styles.addClass]}>
  65. <NForm label-placement="left" model={createClassForm} ref={foemsRef}>
  66. <NFormItem
  67. path="currentGradeNum"
  68. rule={[
  69. {
  70. required: true,
  71. message: '请选择年级'
  72. }
  73. ]}>
  74. <CSelect
  75. {...({
  76. style: { width: '400px' },
  77. options: props.gradeNumList,
  78. placeholder: '选择年级',
  79. clearable: true
  80. } as any)}
  81. v-model:value={createClassForm.currentGradeNum}></CSelect>
  82. </NFormItem>
  83. <NFormItem
  84. path="currentClass"
  85. rule={[
  86. {
  87. required: true,
  88. message: '请选择班级'
  89. }
  90. ]}>
  91. <CSelect
  92. {...({
  93. style: { width: '400px' },
  94. options: props.classArray,
  95. placeholder: '选择班级',
  96. clearable: true
  97. } as any)}
  98. v-model:value={createClassForm.currentClass}></CSelect>
  99. </NFormItem>
  100. <NFormItem
  101. path="subjectId"
  102. rule={[
  103. {
  104. required: true,
  105. message: '请选择声部'
  106. }
  107. ]}>
  108. <CSelect
  109. {...({
  110. style: { width: '400px' },
  111. options: props.subjectList,
  112. placeholder: '选择声部',
  113. clearable: true
  114. } as any)}
  115. v-model:value={createClassForm.subjectId}></CSelect>
  116. </NFormItem>
  117. </NForm>
  118. <NSpace class={styles.btnGroup} justify="center">
  119. <NButton round onClick={() => emit('close')}>
  120. 取消
  121. </NButton>
  122. <NButton
  123. round
  124. loading={data.uploading}
  125. onClick={() => submitForms()}
  126. type="primary">
  127. 保存
  128. </NButton>
  129. </NSpace>
  130. </div>
  131. );
  132. }
  133. });