updateSubject.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import {
  2. NButton,
  3. NSpace,
  4. useMessage,
  5. NForm,
  6. NFormItem,
  7. NCascader
  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 { getConfiguredSubjects, updateInstrument } from '../api';
  13. import { useCatchStore } from '/src/store/modules/catchData';
  14. export default defineComponent({
  15. props: {
  16. activeRow: {
  17. type: Object,
  18. default: () => ({ id: '' })
  19. },
  20. subjectList: {
  21. type: Array,
  22. default: () => []
  23. }
  24. },
  25. name: 'resetStudent',
  26. emits: ['close', 'getList', 'confirm'],
  27. setup(props, { emit }) {
  28. const catchStore = useCatchStore();
  29. const data = reactive({
  30. uploading: false
  31. });
  32. const message = useMessage();
  33. const subjectList = ref([] as any);
  34. const foemsRef = ref();
  35. const createClassForm = reactive({
  36. currentGradeNum: null,
  37. currentClass: null,
  38. gradeYear: null,
  39. instrumentId: null,
  40. id: null
  41. });
  42. const getConfigSubject = async () => {
  43. try {
  44. const { data } = await getConfiguredSubjects({
  45. gradeYear: createClassForm.gradeYear,
  46. currentGradeNum: createClassForm.currentGradeNum,
  47. currentClass: createClassForm.currentClass
  48. });
  49. const temp = data || [];
  50. subjectList.value = temp;
  51. } catch {
  52. //
  53. }
  54. };
  55. onMounted(async () => {
  56. // 获取教材分类列表
  57. // await catchStore.getSubjects();
  58. // subjectList.value = [
  59. // { id: null, name: '选择声部' },
  60. // ...catchStore.getSubjectList
  61. // console.log(props.activeRow, ' props.activeRow');
  62. // ];
  63. createClassForm.gradeYear = props.activeRow.gradeYear;
  64. createClassForm.currentGradeNum = props.activeRow.currentGradeNum;
  65. createClassForm.currentClass = props.activeRow.currentClass;
  66. createClassForm.instrumentId = props.activeRow.instrumentId;
  67. createClassForm.id = props.activeRow.id;
  68. getConfigSubject();
  69. });
  70. const submitForms = () => {
  71. foemsRef.value.validate(async (error: any) => {
  72. if (error) {
  73. return;
  74. }
  75. data.uploading = true;
  76. try {
  77. await updateInstrument({ ...createClassForm });
  78. message.success('修改成功');
  79. emit('close');
  80. emit('confirm', {
  81. lastUseCoursewareId: props.activeRow.lessonCoursewareId,
  82. unit: props.activeRow.lessonCoursewareKnowledgeDetailId,
  83. instrumentId: createClassForm.instrumentId,
  84. name: props.activeRow.name, // 班级名称
  85. classGroupId: props.activeRow.id // 班级编号
  86. });
  87. emit('getList');
  88. } catch (e) {
  89. console.log(e);
  90. }
  91. data.uploading = false;
  92. });
  93. };
  94. return () => (
  95. <div class={[styles.addClass]}>
  96. <NForm label-placement="left" model={createClassForm} ref={foemsRef}>
  97. <NFormItem
  98. path="instrumentId"
  99. rule={[
  100. {
  101. required: true,
  102. message: '请选择乐器'
  103. }
  104. ]}>
  105. <NCascader
  106. placeholder="请选择乐器"
  107. v-model:value={createClassForm.instrumentId}
  108. options={subjectList.value}
  109. checkStrategy="child"
  110. showPath={false}
  111. childrenField="instruments"
  112. expandTrigger="hover"
  113. labelField="name"
  114. valueField="id"
  115. clearable
  116. filterable
  117. style={{ width: '400px' }}
  118. />
  119. </NFormItem>
  120. </NForm>
  121. <NSpace class={styles.btnGroup} justify="center">
  122. <NButton round onClick={() => emit('close')}>
  123. 取消
  124. </NButton>
  125. <NButton
  126. round
  127. loading={data.uploading}
  128. onClick={() => submitForms()}
  129. type="primary">
  130. 确定
  131. </NButton>
  132. </NSpace>
  133. </div>
  134. );
  135. }
  136. });