resetSubject.tsx 3.5 KB

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