|  | @@ -0,0 +1,397 @@
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  NButton,
 | 
	
		
			
				|  |  | +  NSpace,
 | 
	
		
			
				|  |  | +  useMessage,
 | 
	
		
			
				|  |  | +  NCheckboxGroup,
 | 
	
		
			
				|  |  | +  NCheckbox,
 | 
	
		
			
				|  |  | +  NRow,
 | 
	
		
			
				|  |  | +  NImage,
 | 
	
		
			
				|  |  | +  NInput,
 | 
	
		
			
				|  |  | +  NScrollbar,
 | 
	
		
			
				|  |  | +  NDropdown
 | 
	
		
			
				|  |  | +} from 'naive-ui';
 | 
	
		
			
				|  |  | +import { computed, defineComponent, onMounted, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | +import styles from '../index.module.less';
 | 
	
		
			
				|  |  | +import SearchInput from '@/components/searchInput';
 | 
	
		
			
				|  |  | +import smallArrow from '../images/smallArrow.png';
 | 
	
		
			
				|  |  | +import transArrrow from '../images/transArrrow.png';
 | 
	
		
			
				|  |  | +import transArrowActive from '../images/transArrowActive.png';
 | 
	
		
			
				|  |  | +import { getCLassStudent, classGroupList, adjustStudent } from '../api';
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  props: {
 | 
	
		
			
				|  |  | +    activeRow: {
 | 
	
		
			
				|  |  | +      type: Object,
 | 
	
		
			
				|  |  | +      default: () => ({ id: '' })
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  name: 'RestStudentBox',
 | 
	
		
			
				|  |  | +  emits: ['close', 'getList'],
 | 
	
		
			
				|  |  | +  setup(props, { emit }) {
 | 
	
		
			
				|  |  | +    const message = useMessage();
 | 
	
		
			
				|  |  | +    const data = reactive({
 | 
	
		
			
				|  |  | +      uploading: false
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const options = ref([] as any);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const chioseOptions = ref([] as any);
 | 
	
		
			
				|  |  | +    const formRef = ref();
 | 
	
		
			
				|  |  | +    const handleSubmit = async () => {
 | 
	
		
			
				|  |  | +      data.uploading = true;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const classList = ref([] as any);
 | 
	
		
			
				|  |  | +    console.log(props.activeRow, 'activeRow');
 | 
	
		
			
				|  |  | +    const targetClass = reactive({
 | 
	
		
			
				|  |  | +      name: '',
 | 
	
		
			
				|  |  | +      id: ''
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const currentchioseStudent = ref([] as any);
 | 
	
		
			
				|  |  | +    const currentStudentList = ref([] as any);
 | 
	
		
			
				|  |  | +    const currentSearch = ref(null as any);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const targetchioseStudent = ref([] as any);
 | 
	
		
			
				|  |  | +    const targetStudentList = ref([] as any);
 | 
	
		
			
				|  |  | +    const targetSearch = ref(null as any);
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    const submitList = ref([] as any);
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 这里干3件事  1.获取当前班的学生
 | 
	
		
			
				|  |  | +     * 2.查询所有的班级列表  并且排查当前班级
 | 
	
		
			
				|  |  | +     * 3.默认选择第一个班级 并且查出此班的学生
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    const chioseStudnet = (val: any) => {
 | 
	
		
			
				|  |  | +      console.log(val);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const getAllClassList = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const res = await classGroupList({ page: 1, rows: 9999 });
 | 
	
		
			
				|  |  | +        classList.value = res.data.rows.map((item: any) => {
 | 
	
		
			
				|  |  | +          return {
 | 
	
		
			
				|  |  | +            label: item.name,
 | 
	
		
			
				|  |  | +            key: item.id,
 | 
	
		
			
				|  |  | +            disabled: item.id == props.activeRow.id
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (classList.value[0].disabled) {
 | 
	
		
			
				|  |  | +          targetClass.name = classList.value[1].label;
 | 
	
		
			
				|  |  | +          targetClass.id = classList.value[1].key;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          targetClass.name = classList.value[0].label;
 | 
	
		
			
				|  |  | +          targetClass.id = classList.value[0].key;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const tarRes = await getCLassStudentList(targetClass.id);
 | 
	
		
			
				|  |  | +        targetStudentList.value = tarRes.data.rows.map((item: any) => {
 | 
	
		
			
				|  |  | +          return {
 | 
	
		
			
				|  |  | +            label: item.nickname + '(' + item.id + ')',
 | 
	
		
			
				|  |  | +            value: item.id
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        console.log(e);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const getCLassStudentList = async (id: string | number) => {
 | 
	
		
			
				|  |  | +      return await getCLassStudent({
 | 
	
		
			
				|  |  | +        page: 1,
 | 
	
		
			
				|  |  | +        rows: 999,
 | 
	
		
			
				|  |  | +        classGroupId: id
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const chioseClass = async (val: any) => {
 | 
	
		
			
				|  |  | +      classList.value.forEach((item: any) => {
 | 
	
		
			
				|  |  | +        if (item.key == val) {
 | 
	
		
			
				|  |  | +          targetClass.name = item.label;
 | 
	
		
			
				|  |  | +          targetClass.id = item.key;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      const res = await getCLassStudentList(val);
 | 
	
		
			
				|  |  | +      targetStudentList.value = res.data.rows.map((item: any) => {
 | 
	
		
			
				|  |  | +        return {
 | 
	
		
			
				|  |  | +          label: item.nickname + '(' + item.id + ')',
 | 
	
		
			
				|  |  | +          value: item.id
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      console.log(submitList.value, 'submitList.value');
 | 
	
		
			
				|  |  | +      // 判断一下 targetStudentList.value 和 submitList 对比
 | 
	
		
			
				|  |  | +      targetStudentList.value = targetStudentList.value.filter(
 | 
	
		
			
				|  |  | +        (item: any) =>
 | 
	
		
			
				|  |  | +          !submitList.value.some((ele: any) => ele.value === item.value)
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      // 如果 如果submitList 学生的toClassId 和targetClassId相同 则添加
 | 
	
		
			
				|  |  | +      submitList.value.forEach((ele: any) => {
 | 
	
		
			
				|  |  | +        if (ele.toClassId == targetClass.id) {
 | 
	
		
			
				|  |  | +          console.log(ele.toClassId, ele);
 | 
	
		
			
				|  |  | +          targetStudentList.value.push({
 | 
	
		
			
				|  |  | +            label: ele.label,
 | 
	
		
			
				|  |  | +            value: ele.value
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      // 有2下 如果submitList 学生 和 targetStudentList 学生id相同 则删除
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const currentFitterList = computed(() => {
 | 
	
		
			
				|  |  | +      const oraginArr = currentStudentList.value || [];
 | 
	
		
			
				|  |  | +      const list = oraginArr.filter((item: any) => {
 | 
	
		
			
				|  |  | +        return item.label.indexOf(currentSearch.value || '') != -1;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      return list;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const targetFitterList = computed(() => {
 | 
	
		
			
				|  |  | +      const oraginArr = targetStudentList.value || [];
 | 
	
		
			
				|  |  | +      const list = oraginArr.filter((item: any) => {
 | 
	
		
			
				|  |  | +        return item.label.indexOf(targetSearch.value || '') != -1;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      return list;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const chioseAllCurrentStudent = () => {
 | 
	
		
			
				|  |  | +      if (
 | 
	
		
			
				|  |  | +        currentFitterList.value.length === currentchioseStudent.value.length
 | 
	
		
			
				|  |  | +      ) {
 | 
	
		
			
				|  |  | +        // 说明要取消全选
 | 
	
		
			
				|  |  | +        currentchioseStudent.value = [];
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        currentchioseStudent.value = currentFitterList.value.map(
 | 
	
		
			
				|  |  | +          (item: any) => {
 | 
	
		
			
				|  |  | +            return item.value;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        // 全选
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const chioseAllTargetStudent = () => {
 | 
	
		
			
				|  |  | +      if (targetFitterList.value.length === targetchioseStudent.value.length) {
 | 
	
		
			
				|  |  | +        // 说明要取消全选
 | 
	
		
			
				|  |  | +        targetchioseStudent.value = [];
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        targetchioseStudent.value = targetFitterList.value.map((item: any) => {
 | 
	
		
			
				|  |  | +          return item.value;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        // 全选
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const toTargetList = () => {
 | 
	
		
			
				|  |  | +      const subStudetn = currentStudentList.value.filter((item: any) => {
 | 
	
		
			
				|  |  | +        return currentchioseStudent.value.indexOf(item.value) != -1;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      if (subStudetn.length > 0) {
 | 
	
		
			
				|  |  | +        const arr = subStudetn.map((item: any) => {
 | 
	
		
			
				|  |  | +          return {
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            studentId: item.value,
 | 
	
		
			
				|  |  | +            toClassId: targetClass.id
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        submitList.value = submitList.value.filter(
 | 
	
		
			
				|  |  | +          (item: any) => !arr.some((ele: any) => ele.value === item.value)
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        submitList.value = submitList.value.concat(arr);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      // 接下来 删除 currentStudentList里的这三个学生
 | 
	
		
			
				|  |  | +      currentStudentList.value = currentStudentList.value.filter(
 | 
	
		
			
				|  |  | +        (item: any) => !subStudetn.some((ele: any) => ele.value === item.value)
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      subStudetn.forEach((item: any) => {
 | 
	
		
			
				|  |  | +        targetStudentList.value.push(item);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      currentchioseStudent.value = [];
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const toCurrentList = () => {
 | 
	
		
			
				|  |  | +      const subStudetn = targetStudentList.value.filter((item: any) => {
 | 
	
		
			
				|  |  | +        return targetchioseStudent.value.indexOf(item.value) != -1;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      if (subStudetn.length > 0) {
 | 
	
		
			
				|  |  | +        const arr = subStudetn.map((item: any) => {
 | 
	
		
			
				|  |  | +          return {
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            studentId: item.value,
 | 
	
		
			
				|  |  | +            toClassId: props.activeRow.id
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        submitList.value = submitList.value.filter(
 | 
	
		
			
				|  |  | +          (item: any) => !arr.some((ele: any) => ele.value === item.value)
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +        submitList.value = submitList.value.concat(arr);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      targetStudentList.value = targetStudentList.value.filter(
 | 
	
		
			
				|  |  | +        (item: any) => !subStudetn.some((ele: any) => ele.value === item.value)
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      subStudetn.forEach((item: any) => {
 | 
	
		
			
				|  |  | +        currentStudentList.value.push(item);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      targetchioseStudent.value = [];
 | 
	
		
			
				|  |  | +      // 过去 所以
 | 
	
		
			
				|  |  | +      console.log(submitList.value, ' submitList.value===>');
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const submitStudent = async () => {
 | 
	
		
			
				|  |  | +      if (submitList.value < 1) {
 | 
	
		
			
				|  |  | +        emit('close');
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const res = await adjustStudent(submitList.value);
 | 
	
		
			
				|  |  | +        emit('close');
 | 
	
		
			
				|  |  | +        emit('getList');
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        console.log(e);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    onMounted(async () => {
 | 
	
		
			
				|  |  | +      getAllClassList();
 | 
	
		
			
				|  |  | +      const res = await getCLassStudentList(props.activeRow.id as string);
 | 
	
		
			
				|  |  | +      currentStudentList.value = res.data.rows.map((item: any) => {
 | 
	
		
			
				|  |  | +        return {
 | 
	
		
			
				|  |  | +          label: item.nickname + '(' + item.id + ')',
 | 
	
		
			
				|  |  | +          value: item.id
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    return () => (
 | 
	
		
			
				|  |  | +      <div class={[styles.container, styles.resetStudentWrap]}>
 | 
	
		
			
				|  |  | +        <div class={styles.studentTransfer}>
 | 
	
		
			
				|  |  | +          <div class={styles.studentTransferList}>
 | 
	
		
			
				|  |  | +            <div class={styles.studentLeft}>
 | 
	
		
			
				|  |  | +              <div class={styles.listTop}>
 | 
	
		
			
				|  |  | +                <p>{props.activeRow.name}</p>
 | 
	
		
			
				|  |  | +                <span>(当前班级)</span>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class={styles.listCore}>
 | 
	
		
			
				|  |  | +                <NRow class={styles.chioseCheckAllBox}>
 | 
	
		
			
				|  |  | +                  <NCheckbox
 | 
	
		
			
				|  |  | +                    onUpdateChecked={val => {
 | 
	
		
			
				|  |  | +                      chioseAllCurrentStudent();
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                    checked={
 | 
	
		
			
				|  |  | +                      currentFitterList.value.length ===
 | 
	
		
			
				|  |  | +                      currentchioseStudent.value.length
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    indeterminate={
 | 
	
		
			
				|  |  | +                      currentchioseStudent.value.length > 0 &&
 | 
	
		
			
				|  |  | +                      currentFitterList.value.length !==
 | 
	
		
			
				|  |  | +                        currentchioseStudent.value.length
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    label="全选"></NCheckbox>
 | 
	
		
			
				|  |  | +                </NRow>
 | 
	
		
			
				|  |  | +                <NRow>
 | 
	
		
			
				|  |  | +                  <SearchInput
 | 
	
		
			
				|  |  | +                    {...{ placeholder: '请输入学生姓名' }}
 | 
	
		
			
				|  |  | +                    class={styles.searchInput}
 | 
	
		
			
				|  |  | +                    searchWord={currentSearch.value}
 | 
	
		
			
				|  |  | +                    onChangeValue={(val: string) =>
 | 
	
		
			
				|  |  | +                      (currentSearch.value = val)
 | 
	
		
			
				|  |  | +                    }></SearchInput>
 | 
	
		
			
				|  |  | +                </NRow>
 | 
	
		
			
				|  |  | +                <NScrollbar style="max-height: 204px;min-height: 204px;margin-top:14px;">
 | 
	
		
			
				|  |  | +                  <NCheckboxGroup v-model:value={currentchioseStudent.value}>
 | 
	
		
			
				|  |  | +                    {currentFitterList.value.map((item: any) => (
 | 
	
		
			
				|  |  | +                      <NRow class={styles.chioseCheckBox}>
 | 
	
		
			
				|  |  | +                        <NCheckbox
 | 
	
		
			
				|  |  | +                          value={item.value}
 | 
	
		
			
				|  |  | +                          label={item.label}></NCheckbox>
 | 
	
		
			
				|  |  | +                      </NRow>
 | 
	
		
			
				|  |  | +                    ))}
 | 
	
		
			
				|  |  | +                  </NCheckboxGroup>
 | 
	
		
			
				|  |  | +                </NScrollbar>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class={[styles.bottomLeft, styles.bottom]}>
 | 
	
		
			
				|  |  | +                <div class={styles.bottomWrap}>
 | 
	
		
			
				|  |  | +                  共{currentStudentList.value.length}名学生
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div class={styles.chioseBox}>
 | 
	
		
			
				|  |  | +              <div
 | 
	
		
			
				|  |  | +                class={[styles.chioseBtn, styles.chioseBtnRight]}
 | 
	
		
			
				|  |  | +                onClick={() => toTargetList()}></div>
 | 
	
		
			
				|  |  | +              <div
 | 
	
		
			
				|  |  | +                class={styles.chioseBtn}
 | 
	
		
			
				|  |  | +                onClick={() => toCurrentList()}></div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div class={styles.studentRight}>
 | 
	
		
			
				|  |  | +              <div class={styles.listTop}>
 | 
	
		
			
				|  |  | +                <NDropdown
 | 
	
		
			
				|  |  | +                  key="111"
 | 
	
		
			
				|  |  | +                  v-model:value={targetClass.id}
 | 
	
		
			
				|  |  | +                  options={classList.value}
 | 
	
		
			
				|  |  | +                  onSelect={(value: any) => {
 | 
	
		
			
				|  |  | +                    chioseClass(value);
 | 
	
		
			
				|  |  | +                  }}
 | 
	
		
			
				|  |  | +                  scrollable>
 | 
	
		
			
				|  |  | +                  <div>
 | 
	
		
			
				|  |  | +                    {targetClass.name}
 | 
	
		
			
				|  |  | +                    <NImage
 | 
	
		
			
				|  |  | +                      class={styles.smallArrow}
 | 
	
		
			
				|  |  | +                      src={smallArrow}
 | 
	
		
			
				|  |  | +                      previewDisabled></NImage>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </NDropdown>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class={styles.listCore}>
 | 
	
		
			
				|  |  | +                <NRow class={styles.chioseCheckAllBox}>
 | 
	
		
			
				|  |  | +                  <NCheckbox
 | 
	
		
			
				|  |  | +                    onUpdateChecked={val => {
 | 
	
		
			
				|  |  | +                      chioseAllTargetStudent();
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                    checked={
 | 
	
		
			
				|  |  | +                      targetFitterList.value.length ===
 | 
	
		
			
				|  |  | +                      targetchioseStudent.value.length
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    indeterminate={
 | 
	
		
			
				|  |  | +                      targetchioseStudent.value.length > 0 &&
 | 
	
		
			
				|  |  | +                      targetFitterList.value.length !==
 | 
	
		
			
				|  |  | +                        targetchioseStudent.value.length
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    label="全选"></NCheckbox>
 | 
	
		
			
				|  |  | +                </NRow>
 | 
	
		
			
				|  |  | +                <NRow>
 | 
	
		
			
				|  |  | +                  <SearchInput
 | 
	
		
			
				|  |  | +                    {...{ placeholder: '请输入学生姓名' }}
 | 
	
		
			
				|  |  | +                    class={styles.searchInput}
 | 
	
		
			
				|  |  | +                    searchWord={targetSearch.value}
 | 
	
		
			
				|  |  | +                    onChangeValue={(val: string) =>
 | 
	
		
			
				|  |  | +                      (targetSearch.value = val)
 | 
	
		
			
				|  |  | +                    }></SearchInput>
 | 
	
		
			
				|  |  | +                </NRow>
 | 
	
		
			
				|  |  | +                <NScrollbar style="max-height: 204px;min-height: 204px;margin-top:14px;">
 | 
	
		
			
				|  |  | +                  <NCheckboxGroup v-model:value={targetchioseStudent.value}>
 | 
	
		
			
				|  |  | +                    {targetFitterList.value.map((item: any) => (
 | 
	
		
			
				|  |  | +                      <NRow class={styles.chioseCheckBox}>
 | 
	
		
			
				|  |  | +                        <NCheckbox
 | 
	
		
			
				|  |  | +                          value={item.value}
 | 
	
		
			
				|  |  | +                          label={item.label}></NCheckbox>
 | 
	
		
			
				|  |  | +                      </NRow>
 | 
	
		
			
				|  |  | +                    ))}
 | 
	
		
			
				|  |  | +                  </NCheckboxGroup>
 | 
	
		
			
				|  |  | +                </NScrollbar>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class={[styles.bottomRight, styles.bottom]}>
 | 
	
		
			
				|  |  | +                <div class={styles.bottomWrap}>
 | 
	
		
			
				|  |  | +                  共{targetStudentList.value.length}名学生
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <NSpace class={styles.btnGroup} justify="center">
 | 
	
		
			
				|  |  | +          <NButton round onClick={() => emit('close')}>
 | 
	
		
			
				|  |  | +            取消
 | 
	
		
			
				|  |  | +          </NButton>
 | 
	
		
			
				|  |  | +          <NButton
 | 
	
		
			
				|  |  | +            round
 | 
	
		
			
				|  |  | +            loading={data.uploading}
 | 
	
		
			
				|  |  | +            type="primary"
 | 
	
		
			
				|  |  | +            onClick={() => {
 | 
	
		
			
				|  |  | +              submitStudent();
 | 
	
		
			
				|  |  | +            }}>
 | 
	
		
			
				|  |  | +            保存
 | 
	
		
			
				|  |  | +          </NButton>
 | 
	
		
			
				|  |  | +        </NSpace>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +});
 |