|  | @@ -65,7 +65,28 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <div v-show="send_type === sendModes[0].type" class="select-course">
 | 
	
		
			
				|  |  |        <div class="title">选择课程</div>
 | 
	
		
			
				|  |  | -      <div></div>
 | 
	
		
			
				|  |  | +      <template v-for="{ id, name } in courseList">
 | 
	
		
			
				|  |  | +        <div :key="id" class="course">
 | 
	
		
			
				|  |  | +          <i
 | 
	
		
			
				|  |  | +            :class="curCourseId === id ? 'el-icon-caret-bottom' : 'el-icon-caret-right'"
 | 
	
		
			
				|  |  | +            @click="selectedCourse(id)"
 | 
	
		
			
				|  |  | +          ></i>
 | 
	
		
			
				|  |  | +          <div class="course-name" @click="selectedCourse(id)">
 | 
	
		
			
				|  |  | +            {{ name }}
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <span class="link" @click="selectAllStudent(id)">全选</span>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div v-if="curCourseId === id" :key="`student-${id}`" class="student-list">
 | 
	
		
			
				|  |  | +          <div v-for="li in studentList" :key="li.student_id" class="student-list-item">
 | 
	
		
			
				|  |  | +            <el-checkbox v-model="li.checked" :label="li.student_id">
 | 
	
		
			
				|  |  | +              <div class="student-info">
 | 
	
		
			
				|  |  | +                <el-avatar :size="24" :src="li.student_image_url" />
 | 
	
		
			
				|  |  | +                <span>{{ li.student_name }}</span>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </el-checkbox>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </template>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <div v-show="send_type === sendModes[1].type" class="generate-condition">
 | 
	
	
		
			
				|  | @@ -84,7 +105,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      <div slot="footer" class="footer">
 | 
	
		
			
				|  |  |        <template v-if="send_type === sendModes[0].type">
 | 
	
		
			
				|  |  | -        <el-button type="primary" @click="send">发送</el-button>
 | 
	
		
			
				|  |  | +        <el-button type="primary" @click="generateLink">发送</el-button>
 | 
	
		
			
				|  |  |        </template>
 | 
	
		
			
				|  |  |        <template v-if="send_type === sendModes[1].type">
 | 
	
		
			
				|  |  |          <el-button type="primary" @click="generateLink">生成链接和二维码</el-button>
 | 
	
	
		
			
				|  | @@ -94,7 +115,7 @@
 | 
	
		
			
				|  |  |  </template>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <script>
 | 
	
		
			
				|  |  | -import { CreateShareRecord } from '@/api/exercise';
 | 
	
		
			
				|  |  | +import { CreateShareRecord, GetMyCourseList_Teacher, GetCourseStudentList } from '@/api/exercise';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default {
 | 
	
		
			
				|  |  |    name: 'ShareDialog',
 | 
	
	
		
			
				|  | @@ -147,15 +168,24 @@ export default {
 | 
	
		
			
				|  |  |        effective_days: 50,
 | 
	
		
			
				|  |  |        answer_time_limit_minute: 30,
 | 
	
		
			
				|  |  |        memo: '',
 | 
	
		
			
				|  |  | +      courseList: [],
 | 
	
		
			
				|  |  | +      curCourseId: '',
 | 
	
		
			
				|  |  | +      studentList: [],
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  | +  created() {
 | 
	
		
			
				|  |  | +    GetMyCourseList_Teacher({ finish_status: 51, release_status: 1 }).then(({ course_list }) => {
 | 
	
		
			
				|  |  | +      this.courseList = course_list;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  |    methods: {
 | 
	
		
			
				|  |  |      getNowDate() {
 | 
	
		
			
				|  |  |        const date = new Date();
 | 
	
		
			
				|  |  |        return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    // 生成链接
 | 
	
		
			
				|  |  |      generateLink() {
 | 
	
		
			
				|  |  | -      CreateShareRecord({
 | 
	
		
			
				|  |  | +      let option = {
 | 
	
		
			
				|  |  |          exercise_id: this.exerciseId,
 | 
	
		
			
				|  |  |          begin_date: this.begin_date,
 | 
	
		
			
				|  |  |          effective_days: this.effective_days,
 | 
	
	
		
			
				|  | @@ -166,11 +196,52 @@ export default {
 | 
	
		
			
				|  |  |          correct_answer_show_mode: this.correct_answer_show_mode,
 | 
	
		
			
				|  |  |          max_person_count: this.max_person_count || -1,
 | 
	
		
			
				|  |  |          memo: this.memo,
 | 
	
		
			
				|  |  | -      }).then(({ status, ...data }) => {
 | 
	
		
			
				|  |  | -        this.$emit('generateLink', { ...data });
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      if (this.send_type === this.sendModes[0].type) {
 | 
	
		
			
				|  |  | +        if (this.curCourseId === '') return this.$message.error('请选择课程');
 | 
	
		
			
				|  |  | +        option.course_id = this.curCourseId;
 | 
	
		
			
				|  |  | +        let student_id_list = this.studentList.filter((item) => item.checked).map((item) => item.student_id);
 | 
	
		
			
				|  |  | +        if (student_id_list.length === 0) return this.$message.error('请选择学生');
 | 
	
		
			
				|  |  | +        option.student_id_list = student_id_list;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      CreateShareRecord(option).then(({ status, ...data }) => {
 | 
	
		
			
				|  |  | +        if (this.send_type === this.sendModes[0].type) {
 | 
	
		
			
				|  |  | +          this.$emit('update:dialogVisible', false);
 | 
	
		
			
				|  |  | +          this.$message.success('发送成功');
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (this.send_type === this.sendModes[1].type) {
 | 
	
		
			
				|  |  | +          this.$emit('generateLink', { ...data });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    send() {},
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 选择课程
 | 
	
		
			
				|  |  | +     * @param {String} id 课程id
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    selectedCourse(id) {
 | 
	
		
			
				|  |  | +      this.curCourseId = this.curCourseId === id ? '' : id;
 | 
	
		
			
				|  |  | +      this.studentList = [];
 | 
	
		
			
				|  |  | +      if (!this.curCourseId) return;
 | 
	
		
			
				|  |  | +      GetCourseStudentList({ course_id: this.curCourseId, audit_status_list: [1], pay_status: -1 }).then(
 | 
	
		
			
				|  |  | +        ({ student_list }) => {
 | 
	
		
			
				|  |  | +          this.studentList = student_list.map((item) => ({
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            checked: false,
 | 
	
		
			
				|  |  | +          }));
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 全选学生
 | 
	
		
			
				|  |  | +     * @param {String} id 课程id
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    selectAllStudent(id) {
 | 
	
		
			
				|  |  | +      if (!this.curCourseId || id !== this.curCourseId) return;
 | 
	
		
			
				|  |  | +      this.studentList = this.studentList.map((item) => ({
 | 
	
		
			
				|  |  | +        ...item,
 | 
	
		
			
				|  |  | +        checked: true,
 | 
	
		
			
				|  |  | +      }));
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      dialogClose() {
 | 
	
		
			
				|  |  |        this.$emit('update:dialogVisible');
 | 
	
		
			
				|  |  |      },
 | 
	
	
		
			
				|  | @@ -183,6 +254,8 @@ export default {
 | 
	
		
			
				|  |  |        this.effective_days = 50;
 | 
	
		
			
				|  |  |        this.answer_time_limit_minute = 30;
 | 
	
		
			
				|  |  |        this.memo = '';
 | 
	
		
			
				|  |  | +      this.curCourseId = '';
 | 
	
		
			
				|  |  | +      this.studentList = [];
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |  };
 | 
	
	
		
			
				|  | @@ -237,7 +310,51 @@ export default {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      .select-course {
 | 
	
		
			
				|  |  | -      margin-top: 16px;
 | 
	
		
			
				|  |  | +      display: flex;
 | 
	
		
			
				|  |  | +      flex-direction: column;
 | 
	
		
			
				|  |  | +      row-gap: 8px;
 | 
	
		
			
				|  |  | +      max-height: 300px;
 | 
	
		
			
				|  |  | +      margin-top: 8px;
 | 
	
		
			
				|  |  | +      overflow-y: auto;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .course {
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        column-gap: 12px;
 | 
	
		
			
				|  |  | +        align-items: center;
 | 
	
		
			
				|  |  | +        justify-content: space-between;
 | 
	
		
			
				|  |  | +        margin-left: 4px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        i {
 | 
	
		
			
				|  |  | +          font-size: 16px;
 | 
	
		
			
				|  |  | +          cursor: pointer;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        &-name {
 | 
	
		
			
				|  |  | +          flex: 1;
 | 
	
		
			
				|  |  | +          cursor: pointer;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .student-list {
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        flex-direction: column;
 | 
	
		
			
				|  |  | +        row-gap: 8px;
 | 
	
		
			
				|  |  | +        margin-left: 8px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        &-item {
 | 
	
		
			
				|  |  | +          .el-checkbox {
 | 
	
		
			
				|  |  | +            display: flex;
 | 
	
		
			
				|  |  | +            column-gap: 8px;
 | 
	
		
			
				|  |  | +            align-items: center;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            .student-info {
 | 
	
		
			
				|  |  | +              display: flex;
 | 
	
		
			
				|  |  | +              column-gap: 8px;
 | 
	
		
			
				|  |  | +              align-items: center;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      .generate-condition {
 |