selectClass.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { defineComponent, reactive, ref } from 'vue';
  2. import styles from '../index.module.less';
  3. import { NButton, NForm, NFormItem, NSelect, NSpace } from 'naive-ui';
  4. import { BOOK_DATA } from '/src/views/natural-resources/model/add-teaching';
  5. import { classGroupPage } from '../../prepare-lessons/api';
  6. export default defineComponent({
  7. name: 'select-class',
  8. emits: ['close', 'confirm'],
  9. setup(props, { emit }) {
  10. const forms = reactive({
  11. id: null as any,
  12. uploading: false,
  13. classList: [] as any,
  14. currentGradeNum: null,
  15. classGroupId: null as any
  16. });
  17. const formsRef = ref();
  18. const getClassList = async () => {
  19. try {
  20. const { data } = await classGroupPage({
  21. currentGradeNum: forms.currentGradeNum,
  22. page: 1,
  23. rows: 99
  24. });
  25. const temp = data.rows || [];
  26. const classList = [] as any;
  27. temp.forEach((row: any) => {
  28. classList.push({
  29. label: row.currentClass + '班',
  30. value: row.id
  31. });
  32. });
  33. forms.classList = classList;
  34. } catch {
  35. //
  36. }
  37. };
  38. const onSubmit = async () => {
  39. formsRef.value?.validate(async (err: any) => {
  40. if (err) {
  41. return;
  42. }
  43. forms.uploading = true;
  44. try {
  45. let gradeName = '';
  46. BOOK_DATA.grades.forEach((item: any) => {
  47. if (forms.currentGradeNum === item.value) {
  48. gradeName = item.label;
  49. }
  50. });
  51. let className = '';
  52. forms.classList.forEach((item: any) => {
  53. if (item.value === forms.classGroupId) {
  54. className = item.label;
  55. }
  56. });
  57. emit('confirm', {
  58. currentGradeNum: forms.currentGradeNum, // 年级
  59. currentGradeLabel: gradeName,
  60. classGroupId: forms.classGroupId, // 班级
  61. className
  62. });
  63. emit('close');
  64. } catch {
  65. //
  66. }
  67. forms.uploading = false;
  68. });
  69. };
  70. return () => (
  71. <div class={styles.assignHomeworkContainer}>
  72. <NForm
  73. ref={formsRef}
  74. model={forms}
  75. labelAlign="right"
  76. labelWidth={'auto'}
  77. labelPlacement="left">
  78. <NFormItem
  79. label="年级"
  80. path="currentGradeNum"
  81. rule={[
  82. {
  83. required: true,
  84. message: '请选择年级',
  85. trigger: 'change',
  86. type: 'number'
  87. }
  88. ]}>
  89. <NSelect
  90. v-model:value={forms.currentGradeNum}
  91. placeholder="请选择年级"
  92. options={BOOK_DATA.grades}
  93. clearable
  94. onUpdate:value={() => {
  95. forms.classGroupId = null;
  96. getClassList();
  97. }}
  98. />
  99. </NFormItem>
  100. <NFormItem
  101. label="班级"
  102. path="classGroupId"
  103. rule={[
  104. { required: true, message: '请选择班级', trigger: 'change' }
  105. ]}>
  106. <NSelect
  107. v-model:value={forms.classGroupId}
  108. placeholder="请选择班级"
  109. clearable
  110. options={forms.classList}
  111. disabled={!forms.currentGradeNum}
  112. />
  113. </NFormItem>
  114. <NSpace class={styles.updateBtnGroup}>
  115. <NButton strong type="default" round onClick={() => emit('close')}>
  116. 取消
  117. </NButton>
  118. <NButton
  119. strong
  120. type="primary"
  121. round
  122. disabled={forms.uploading}
  123. loading={forms.uploading}
  124. onClick={onSubmit}>
  125. 确认
  126. </NButton>
  127. </NSpace>
  128. </NForm>
  129. </div>
  130. );
  131. }
  132. });