mo 1 年之前
父节点
当前提交
db52b284ee

+ 18 - 1
src/views/classList/api.ts

@@ -160,7 +160,6 @@ export const getTrainingClassDetail = (params: any) => {
   });
 };
 
-
 /**
  * 学生练习记录
  */
@@ -169,3 +168,21 @@ export const getTrainingStatList = (params: any) => {
     data: params
   });
 };
+
+/**
+ * 获取班级列表
+ */
+export const getSubject = (params: any) => {
+  return request.post(`/edu-app/subject/page`, {
+    data: params
+  });
+};
+
+/**
+ * 修改班级
+ */
+export const resetClass = (params: any) => {
+  return request.post('/edu-app/classGroup/update', {
+    data: params
+  });
+};

+ 67 - 12
src/views/classList/index.tsx

@@ -15,7 +15,7 @@ import {
 import SearchInput from '@/components/searchInput';
 import CSelect from '@/components/CSelect';
 import Pagination from '@/components/pagination';
-import { classGroupList, deleteClass } from './api';
+import { classGroupList, deleteClass,getSubject } from './api';
 
 import CreateClass from './modals/createClass';
 import RestStudentBox from './modals/restStudentBox';
@@ -30,6 +30,7 @@ import TheTooltip from '/src/components/TheTooltip';
 import PreviewWindow from '../preview-window';
 import { state as globalState } from '/src/state';
 import {courseSchedulePage} from '../home/api'
+import ResetSubject from './modals/resetSubject'
 export default defineComponent({
   name: 'class-classList',
   setup(props, { emit }) {
@@ -37,7 +38,8 @@ export default defineComponent({
       searchForm: {
         keyword: null as any,
         currentClass: null,
-        currentGradeNum: null
+        currentGradeNum: null,
+        subjectId:null
       },
       orchestraType: null,
       courseTypeCode: null,
@@ -57,7 +59,9 @@ export default defineComponent({
       removeRow: {} as any,
       previewModal: false,
       previewParams: {} as any,
-      lastCourse:null as any
+      lastCourse:null as any,
+      subjectList:[] as any,
+      showResetClass:false
     });
     const formRef = ref();
     const dialog = useDialog();
@@ -74,7 +78,8 @@ export default defineComponent({
       state.searchForm = {
         keyword: null as any,
         currentClass: null,
-        currentGradeNum: null
+        currentGradeNum: null,
+        subjectId:null
       };
       getList();
     };
@@ -112,23 +117,37 @@ export default defineComponent({
       }
       console.log('getList');
     };
-
+    const getSubjectList = async()=>{
+      const res = await getSubject({page:1,rows:9999})
+      state.subjectList = res.data.rows.map((item:any)=>{
+        return {
+          value:item.id,
+          label:item.name
+        }
+      })
+      state.subjectList.unshift( { value: null, label: '选择声部' },)
+    }
     const columns = () => {
       return [
         {
           title: '班级名称',
           key: 'name',
-          width: '25%'
+          width: '20%'
+        },
+        {
+          title: '班级声部',
+          key: 'subjectName',
+          width: '20%'
         },
         {
           title: '学生人数',
           key: 'preStudentNum',
-          width: '25%'
+          width: '20%'
         },
         {
           title: '上次学习',
           key: 'lastStudy',
-          width: '25%',
+          width: '20%',
           render(row: any) {
             return row.lastStudy ? (
               <TheTooltip
@@ -176,7 +195,12 @@ export default defineComponent({
                       详情
                     </NButton>
                   )}
-
+                     <NButton
+                      type="primary"
+                      text
+                      onClick={() => resetClassSubject(row)}>
+                      修改声部
+                    </NButton>
                   {index == 0 ? (
                     <NButton
                       type="primary"
@@ -256,8 +280,14 @@ export default defineComponent({
       state.activeRow = row;
       state.goCourseVisiable = true;
     };
+
+    const resetClassSubject = (row:any)=>{
+      state.activeRow = row;
+      state.showResetClass = true
+    }
     onMounted(() => {
       getList();
+      getSubjectList()
     });
     return () => (
       <div class={styles.listWrap}>
@@ -293,7 +323,16 @@ export default defineComponent({
                 } as any)}
                 v-model:value={state.searchForm.currentClass}></CSelect>
             </NFormItem>
-
+            <NFormItem>
+              <CSelect
+                {...({
+                  options: state.subjectList,
+                  placeholder: '选择声部',
+                  clearable: true,
+                  inline: true
+                } as any)}
+                v-model:value={state.searchForm.subjectId}></CSelect>
+            </NFormItem>
             <NFormItem>
               <NSpace justify="end">
                 <NButton type="primary" class="searchBtn" onClick={search}>
@@ -359,12 +398,28 @@ export default defineComponent({
           preset="card"
           class={['modalTitle background']}
           title={'创建班级'}>
-          <CreateClass
+            {state.showaddClass?    <CreateClass
             gradeNumList={state.gradeNumList}
             classArray={classArray}
+            subjectList = {state.subjectList}
             onGetList={() => getList()}
             onClose={() => (state.showaddClass = false)}
-          />
+          />:null}
+
+        </NModal>
+        <NModal
+          v-model:show={state.showResetClass}
+          style={{ width: '500px' }}
+          preset="card"
+          class={['modalTitle background']}
+          title={'修改声部'}>
+            {state.showResetClass?    <ResetSubject
+            activeRow={state.activeRow}
+            subjectList = {state.subjectList}
+            onGetList={() => getList()}
+            onClose={() => (state.showResetClass = false)}
+          />:null}
+
         </NModal>
 
         <NModal

+ 23 - 3
src/views/classList/modals/createClass.tsx

@@ -23,6 +23,10 @@ export default defineComponent({
     classArray: {
       type: Array,
       default: () => []
+    },
+    subjectList:{
+      type: Array,
+      default: () => []
     }
   },
   name: 'resetStudent',
@@ -35,13 +39,12 @@ export default defineComponent({
     const foemsRef = ref();
     const createClassForm = reactive({
       currentGradeNum: null,
-      currentClass: null
+      currentClass: null,
+      subjectId:null
     });
     const submitForms = () => {
       data.uploading = true
       foemsRef.value.validate(async (error: any) => {
-        console.log(createClassForm);
-        console.log(error);
         if (error) {
           return;
         }
@@ -94,6 +97,23 @@ export default defineComponent({
               } as any)}
               v-model:value={createClassForm.currentClass}></CSelect>
           </NFormItem>
+          <NFormItem
+            path="subjectId"
+            rule={[
+              {
+                required: true,
+                message: '请选择声部'
+              }
+            ]}>
+            <CSelect
+              {...({
+                style: { width: '400px' },
+                options: props.subjectList,
+                placeholder: '选择声部',
+                clearable: true
+              } as any)}
+              v-model:value={createClassForm.subjectId}></CSelect>
+          </NFormItem>
         </NForm>
         <NSpace class={styles.btnGroup} justify="center">
           <NButton round onClick={() => emit('close')}>

+ 106 - 0
src/views/classList/modals/resetSubject.tsx

@@ -0,0 +1,106 @@
+import {
+  NButton,
+  NSpace,
+  useMessage,
+  NForm,
+  NFormItem,
+  NSelect
+} from 'naive-ui';
+import { defineComponent, onMounted, reactive, ref } from 'vue';
+import styles from '../index.module.less';
+import CSelect from '/src/components/CSelect';
+import { resetClass } from '../api';
+export default defineComponent({
+  props: {
+    activeRow: {
+      type: Object,
+      default: () => ({ id: '' })
+    },
+    gradeNumList: {
+      type: Array,
+      default: () => []
+    },
+    classArray: {
+      type: Array,
+      default: () => []
+    },
+    subjectList:{
+      type: Array,
+      default: () => []
+    },
+  },
+  name: 'resetStudent',
+  emits: ['close', 'getList'],
+  setup(props, { emit }) {
+    const data = reactive({
+      uploading: false
+    });
+    const message = useMessage();
+    const foemsRef = ref();
+    const createClassForm = reactive({
+      currentGradeNum: null,
+      currentClass: null,
+      subjectId:null,
+      id:null
+    });
+    onMounted(()=>{
+      createClassForm.currentGradeNum = props.activeRow.currentGradeNum
+      createClassForm.currentClass = props.activeRow.currentClass
+      createClassForm.subjectId = props.activeRow.subjectId
+      createClassForm.id = props.activeRow.id
+    })
+    const submitForms = () => {
+      data.uploading = true
+      foemsRef.value.validate(async (error: any) => {
+        if (error) {
+          return;
+        }
+        try {
+          const res = await resetClass({ ...createClassForm });
+          message.success('修改成功');
+          emit('close');
+          emit('getList');
+          data.uploading = false
+        } catch (e) {
+          data.uploading = false
+          console.log(e);
+        }
+      });
+    };
+    return () => (
+      <div class={[styles.addClass]}>
+        <NForm label-placement="left" model={createClassForm} ref={foemsRef}>
+          <NFormItem
+            path="subjectId"
+            rule={[
+              {
+                required: true,
+                message: '请选择声部'
+              }
+            ]}>
+            <CSelect
+              {...({
+                style: { width: '400px' },
+                options: props.subjectList,
+                placeholder: '选择声部',
+                clearable: true
+              } as any)}
+              v-model:value={createClassForm.subjectId}></CSelect>
+          </NFormItem>
+        </NForm>
+        <NSpace class={styles.btnGroup} justify="center">
+          <NButton round onClick={() => emit('close')}>
+            取消
+          </NButton>
+          <NButton
+            round
+            loading={data.uploading}
+            onClick={() => submitForms()}
+            type="primary">
+            保存
+          </NButton>
+        </NSpace>
+      </div>
+    );
+  }
+});

+ 2 - 2
vite.config.ts

@@ -23,8 +23,8 @@ function resolve(dir: string) {
 }
 // https://vitejs.dev/config/
 // https://github.com/vitejs/vite/issues/1930 .env
-// const proxyUrl = 'https://dev.kt.colexiu.com/';
-const proxyUrl = 'https://test.lexiaoya.cn';
+const proxyUrl = 'https://dev.kt.colexiu.com/';
+// const proxyUrl = 'https://test.lexiaoya.cn';
 export default defineConfig({
   base: './',
   plugins: [