lsc 1 年之前
父节点
当前提交
8843dd90ab

+ 14 - 1
src/assets/css/button.css

@@ -279,6 +279,8 @@
 .pub_test_btn_choose::before,
 .pub_test_btn_page::before,
 .pub_test_btn_group::before,
+.pub_test_btn_course::before,
+.pub_test_btn_eva::before,
 .pub_test_btn_file::before {
   content: "";
   width: 18px;
@@ -306,6 +308,12 @@
 .pub_test_btn_group::before {
   background-image: url(../icon/test/type_group_icon.png);
 }
+.pub_test_btn_course::before {
+  background-image: url(../icon/test/type_course_icon.png);
+}
+.pub_test_btn_eva::before {
+  background-image: url(../icon/test/type_eva_icon.png);
+}
 
 .test_icon{
   display: inline-block;
@@ -330,7 +338,12 @@
 .test_icon_file{
   background-image: url('../icon/test/type_file_icon.png');
 }
-
+.test_course_file{
+  background-image: url('../icon/test/type_course_icon.png');
+}
+.test_eva_file{
+  background-image: url('../icon/test/type_eva_icon.png');
+}
 
 
 .dataBoard_check_box {

二进制
src/assets/icon/test/type_course_icon.png


二进制
src/assets/icon/test/type_eva_icon.png


+ 45 - 2
src/components/pages/test/add/components/checkOrder.vue

@@ -93,6 +93,18 @@
                                         :cJson="cJson" @setJson="setJson">
                                     </fileDialog>
                                 </div>
+                                <div v-if="item3.type == 6">
+                                    <courseX :cJson="item3.json"></courseX>
+                                    <courseDialog v-if="item3.type == 6 && checkC === `x${index1}-${index2}-${index3}`"
+                                        :cJson="cJson" @setJson="setJson">
+                                    </courseDialog>
+                                </div>
+                                <div v-if="item3.type == 7">
+                                    <evaX :cJson="item3.json"></evaX>
+                                    <evaDialog v-if="item3.type == 7 && checkC === `x${index1}-${index2}-${index3}`"
+                                        :cJson="cJson" @setJson="setJson">
+                                    </evaDialog>
+                                </div>
                             </div>
                         </div>
                     </div>
@@ -113,6 +125,16 @@
                             <fileDialog v-if="item2.type == 5 && checkC === `x${index1}-${index2}`" :cJson="cJson"
                                 @setJson="setJson"></fileDialog>
                         </div>
+                        <div v-else-if="item2.type == 6">
+                            <courseX :cJson="item2.json"></courseX>
+                            <courseDialog v-if="item2.type == 6 && checkC === `x${index1}-${index2}`" :cJson="cJson"
+                                @setJson="setJson"></courseDialog>
+                        </div>
+                        <div v-else-if="item2.type == 7">
+                            <evaX :cJson="item2.json"></evaX>
+                            <evaDialog v-if="item2.type == 7 && checkC === `x${index1}-${index2}`" :cJson="cJson"
+                                @setJson="setJson"></evaDialog>
+                        </div>
                     </div>
                 </div>
             </div>
@@ -132,6 +154,16 @@
                     <fileDialog v-if="item1.type == 5 && checkC === `x${index1}`" :cJson="cJson" @setJson="setJson">
                     </fileDialog>
                 </div>
+                <div v-else-if="item1.type == 6">
+                    <courseX :cJson="item1.json"></courseX>
+                    <courseDialog v-if="item1.type == 6 && checkC === `x${index1}`" :cJson="cJson" @setJson="setJson">
+                    </courseDialog>
+                </div>
+                <div v-else-if="item1.type == 7">
+                    <evaX :cJson="item1.json"></evaX>
+                    <evaDialog v-if="item1.type == 7 && checkC === `x${index1}`" :cJson="cJson" @setJson="setJson">
+                    </evaDialog>
+                </div>
             </div>
         </div>
         <el-dialog title="修改名称" :visible.sync="groupDaliog" :append-to-body="true" width="500px"
@@ -163,7 +195,10 @@ import gapDialog from './GapFilling/index.vue'
 import gapX from './GapFilling/gap.vue'
 import fileDialog from './file/index.vue'
 import fileX from './file/file.vue'
-
+import courseDialog from './course/index.vue'
+import courseX from './course/course.vue'
+import evaDialog from './evaBox/index.vue'
+import evaX from './evaBox/eva.vue'
 export default {
     mixins: [minxinVue],
     components: {
@@ -173,6 +208,10 @@ export default {
         gapX,
         fileDialog,
         fileX,
+        courseDialog,
+        courseX,
+        evaDialog,
+        evaX,
     },
     props: {
         checkJson: {
@@ -193,7 +232,7 @@ export default {
         return {
             manualJson: [],
             isdrag: "",
-            canEdit: [1, 3, 5],
+            canEdit: [1, 3, 5, 6, 7],
             ctype: "",
             dragType: "",
             oldIndex: "",
@@ -222,6 +261,10 @@ export default {
                         className += " test_icon_gap"
                     } else if (item.type == 5) {
                         className += " test_icon_file"
+                    } else if (item.type == 6) {
+                        className += " test_course_file"
+                    } else if (item.type == 7) {
+                        className += " test_eva_file"
                     }
                     return index + 1 + "、" + (item.json && this.etype != 'edit' ? `<span class='${className}'></span>` : `<span class='${className}'></span>` + this.options2[item.type]) + (item.json && this.etype != 'edit' ? `${item.json.title}` : "");
                 } else if (item.ttype == 2) {

+ 99 - 0
src/components/pages/test/add/components/course/course.vue

@@ -0,0 +1,99 @@
+<template>
+    <div class="c_box">
+        <div class="mask"></div>
+        <!-- <div v-if="!cJson">暂未设置题目</div> -->
+        <div class="choice_box">
+            <div class="title" style="display: flex;">
+                <span>{{cJson.title }}</span>
+            </div>
+            <div class="detail" v-if="cJson.detail">{{ cJson.detail }}</div>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    props: {
+        cJson: {
+            type: Object,
+        },
+    },
+    data() {
+        return {
+            option: {
+                1: { name: '附件' },
+                // 2: { name: '多选题' }
+            }
+        }
+    },
+}
+</script>
+
+<style scoped>
+.c_box {
+    width: calc(100% - 20px);
+    position: relative;
+    margin: 0 auto;
+    padding-left: 26px;
+    box-sizing: border-box;
+}
+
+.mask {
+    position: absolute;
+    height: 100%;
+    width: 100%;
+    z-index: 2;
+}
+
+.choice_box {
+    white-space: pre-line;
+}
+
+.choice_box>.title {
+    font-weight: bold;
+    width: 100%;
+    word-break: break-all;
+}
+
+.choice_box>.detail {
+    width: 100%;
+    word-break: break-all;
+    color: rgb(136, 139, 146);
+    margin: 10px 0 0;
+}
+
+.choice_box>.choices {
+    margin-top: 10px;
+}
+
+.binfo_input {
+    width: 100%;
+    margin: 0;
+    padding: 10px;
+    display: block;
+    min-width: 0;
+    outline: none;
+    box-sizing: border-box;
+    background: none;
+    border: none;
+    border-radius: 5px;
+    background: #fff;
+    font-size: 16px;
+    resize: none;
+    font-family: 'Microsoft YaHei';
+    min-height: 120px;
+    /* border: 1px solid #3682fc00; */
+    border: 1.5px solid #e0e0e0;
+}
+
+.binfo_input>div {
+    border: 1.5px dashed #dfdfdf;
+    height: 120px;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: rgb(249, 250, 251);
+    color: rgb(124, 124, 124);
+    border-radius: 5px;
+}</style>

+ 82 - 0
src/components/pages/test/add/components/course/courseDilog.vue

@@ -0,0 +1,82 @@
+<template>
+    <el-dialog title="课程选择" :visible.sync="dialogVisibleCourse" :append-to-body="true" width="95%"
+        :before-close="handleClose" class="dialog_diy">
+        <div style="height: 100%;overflow: auto;">
+            <courseIndexVue :courseArray="courseArray"></courseIndexVue>
+        </div>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="close()">关 闭</el-button>
+            <el-button @click="close()">确 定</el-button>
+        </span>
+    </el-dialog>
+</template>
+
+<script>
+import courseIndexVue from './courseIndex.vue';
+export default {
+    components: {
+        courseIndexVue,
+    },
+    props: {
+        dialogVisibleCourse: {
+            type: Boolean,
+            default: false
+        },
+        courseArray:{
+            type: Array,
+            default: () => []
+        }
+    },
+    data() {
+        return {};
+    },
+    methods: {
+        handleClose(done) {
+            this.close();
+            done();
+        },
+        close() {
+            this.$emit("update:dialogVisibleCourse", false);
+        }
+    }
+};
+</script>
+
+<style scoped>
+.dialog_diy>>>.el-dialog {
+    height: 100%;
+    margin: 0 auto !important;
+}
+
+.dialog_diy>>>.el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__body {
+    height: calc(100% - 124px);
+    box-sizing: border-box;
+    padding: 0px;
+}
+
+.dialog_diy>>>.el-dialog__title {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__body,
+.dialog_diy>>>.el-dialog__footer {
+    background: #fafafa;
+}
+</style>

+ 1957 - 0
src/components/pages/test/add/components/course/courseIndex.vue

@@ -0,0 +1,1957 @@
+<template>
+    <div class="pb_content" style="height: auto; width: 94%; margin: 10px auto;background: unset;">
+      <div style="width:100%;padding:0 21px;background:#fff;border-radius: 5px;box-sizing: border-box;">
+        <div class="pb_head top">
+          <div style="
+      display: flex;
+      align-items: center;
+  ">
+            <span class="sub_head">课程管理</span>
+            <span class="subClick" @click="
+              goTo(
+                '/works?userid=' +
+                userid +
+                '&oid=' +
+                oid +
+                '&org=' +
+                org +
+                '&role=' +
+                role
+              )
+              ">评价管理</span>
+          </div>
+          <div class="student_button">
+            <!-- <el-button type="primary" class="bgColor" @click="openCourse">协同编辑</el-button> -->
+            <!-- <el-button type="primary" class="bgColor" @click="goToCourse3()">创建极简式课程</el-button>
+            <el-button type="primary" class="bgColor" @click="goToCourse2()">创建任务式课程</el-button>
+            <el-button type="primary" class="bgColor" @click="goToCourse()">创建阶段式课程</el-button> -->
+            <button class="r_pub_button_course" @mouseenter="btnDisplay = true" @mouseleave="btnDisplay = false">
+              <span>创建课程</span>
+              <div v-show="btnDisplay" class="buttonBox">
+                <div type="primary" @click="goToCourse3()">极简式课程</div>
+                <!-- <div type="primary" @click="goToCourse2()">任务式课程</div> -->
+                <div type="primary" @click="goToCourse()">阶段式课程</div>
+              </div>
+            </button>
+          </div>
+        </div>
+        <div class="reBox">
+          <div class="reTop">
+            <!-- <div>分类筛选</div> -->
+            <div class="reTopCh">
+              <el-select v-model="groupA" @change="search" v-if="role == '1'">
+                <el-option value="4" label="全部"></el-option>
+                <el-option value="2" label="我的课程"></el-option>
+                <el-option value="3" label="协同课程"></el-option>
+                <el-option value="1" label="他人课程"></el-option>
+              </el-select>
+              <el-select v-model="groupA" @change="search" v-else>
+                <el-option value="0" label="全部"></el-option>
+                <el-option value="2" label="我的课程"></el-option>
+                <el-option value="3" label="协同课程"></el-option>
+              </el-select>
+              <div class="searchI">
+                <!-- @click="getCourse" -->
+                <div class="search">
+                  <img src="../../../../../../assets/icon/search.png" alt="" />
+                </div>
+                <input class="sInput" type="text" placeholder="请输入关键字" v-model="courseName" @input="getCourse()" />
+              </div>
+              <el-button type="primary" class="bgColor" style="margin-left: 10px;" @click="reset">重置</el-button>
+            </div>
+          </div>
+          <div class="pType_box all_choose" v-if="oid == '69893dca-1d47-11ed-8c78-005056b86db5'">
+            <span><span>类型</span></span>
+            <el-radio-group v-model="pTypeCheckName" style="display: flex; align-items: center">
+              <div class="all_choose" style="width: 100px" v-for="(item, index) in CourseType2" :key="index">
+                <el-radio :label="item.name" @click.native.prevent="CourseType2Click(item.name)">{{ item.name }}</el-radio>
+              </div>
+            </el-radio-group>
+          </div>
+          <div class="choose">
+            <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index"
+              :style="{ margin: !CourseTypeJson[item.id].length && 0 }">
+              <span v-if="CourseTypeJson[item.id].length &&
+                (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
+                  ? pTypeCheck.indexOf(item.id) != -1
+                  : true)
+                "><span>{{ item.name }}</span></span>
+              <div class="typeCss" v-if="CourseTypeJson[item.id].length &&
+                (oid == '69893dca-1d47-11ed-8c78-005056b86db5'
+                  ? pTypeCheck.indexOf(item.id) != -1
+                  : true)
+                ">
+                <div class="cName" @click="getCourse2(item.name, '', item.id, 1)"
+                  :class="typeE.indexOf(item.id) != -1 ? 'isCType' : ''">
+                  全部
+                </div>
+                <div v-for="(item1, index1) in CourseTypeJson[item.id]" :key="index + '-' + index1" :label="item1.id"
+                  @click="getCourse2(item.name, item.id, item1.id, 2)">
+                  <div class="cName" :class="typea == item1.id || typeb == item1.id || typed == item1.id
+                    ? 'isCType'
+                    : ''
+                    ">
+                    {{ item1.name }}
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div class="all_choose" v-if="role == '1'">
+              <span><span>所有者</span></span>
+              <div class="typeCss">
+                <div class="cName" :class="groupA == '4' ? 'isCType' : ''" @click="groupA = '4'; search();">
+                  全部
+                </div>
+                <div class="cName" :class="groupA == '2' ? 'isCType' : ''" @click="groupA = '2'; search();">
+                  我的课程
+                </div>
+                <div class="cName" :class="groupA == '3' ? 'isCType' : ''" @click="groupA = '3'; search();">
+                  协同课程
+                </div>
+                <div class="cName" :class="groupA == '1' ? 'isCType' : ''" @click="groupA = '1'; search();">
+                  他人课程
+                </div>
+              </div>
+            </div>
+            <div class="all_choose" v-else>
+              <span><span>所有者</span></span>
+              <div class="typeCss">
+                <div class="cName" :class="groupA == '0' ? 'isCType' : ''" @click="groupA = '0'; search();">
+                  全部
+                </div>
+                <div class="cName" :class="groupA == '2' ? 'isCType' : ''" @click="groupA = '2'; search();">
+                  我的课程
+                </div>
+                <div class="cName" :class="groupA == '3' ? 'isCType' : ''" @click="groupA = '3'; search();">
+                  协同课程
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="line"></div>
+      <div class="pb_content_body" style="height: 100%;width: 100%;background: #e6eaf0;margin: 0 auto;">
+        <div class="student_head" v-if="false">
+          <div class="choose">
+            <div class="student_search">
+              <span>课程筛选</span>
+              <el-select v-model="groupA" @change="search">
+                <el-option value="0" label="我的课程"></el-option>
+                <el-option value="1" label="他人课程"></el-option>
+              </el-select>
+            </div>
+            <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
+              <span v-if="CourseTypeJson[item.id].length">{{ item.name }}</span>
+              <el-select v-if="CourseTypeJson[item.id].length" v-model="courseTypeId[item.id]" placeholder="请选择"
+                @change="getTypeName">
+                <el-option label="全部" value="1">全部</el-option>
+                <el-option v-for="item1 in CourseTypeJson[item.id]" :key="item1.id" :label="item1.name" :value="item1.id">
+                </el-option>
+              </el-select>
+            </div>
+            <div @click="clear" class="clear">重置</div>
+          </div>
+  
+          <div class="student_right">
+            <div class="head_left">
+              <el-input v-model="courseName" class="student_input" placeholder="请输入课程名称"></el-input>
+              <el-button class="course_button" @click="searchCourse">查询</el-button>
+            </div>
+          </div>
+        </div>
+        <div class="student_table">
+          <div class="course_box">
+            <div class="out_box" v-for="(item, index) in course" :key="index">
+              <!-- <div class="myCourse" v-if="item.isCourseType == 1 && groupA == 0">
+                我的课程
+              </div>
+              <div class="myCourse" v-else-if="groupA == 1">
+                他人课程
+              </div>
+              <div class="xtCourse" v-else>协同课程</div> -->
+              <div class="myCourse" v-if="item.userid == userid">我的课程</div>
+              <div class="myCourse" style="background: #4187f0" v-else-if="!item.course_teacher ||
+                (item.course_teacher &&
+                  item.course_teacher.indexOf(userid) == -1)
+                ">
+                他人课程
+              </div>
+              <div class="xtCourse" v-else>协同课程</div>
+              <div class="tup">
+                <img :src="item.cover != null && item.cover != ''
+                  ? JSON.parse(item.cover).length > 0
+                    ? JSON.parse(item.cover)[0].url
+                    : mr
+                  : mr
+                  " alt />
+              </div>
+              <!-- <div class="bottom_box">
+                <div>{{ item.title }}</div>
+                <div class="kc_t" v-if="groupA == '1'">
+                  创建老师:{{ item.uname }}
+                </div>
+                <div class="kc_time">{{ item.time }}</div>
+              </div> -->
+              <div class="bottom_box">
+                <div>
+                  <el-tooltip :content="item.title" popper-class="text_tooltip" placement="top" effect="dark">
+                    <span>{{ item.title }}</span>
+                  </el-tooltip>
+                </div>
+                <!-- v-if="item.isCourseType == 2 || groupA == 1" -->
+                <div class="kc_t">
+                  <span>{{ item.uname }}</span>
+                  <span>{{ item.state == 1 ? '阶段模式' : item.state == 2 ? '任务模式' : '极简模式' }}</span>
+                </div>
+                <div class="kc_time">
+                  <span style="color: #717C8D">创建日期:</span>{{ item.time }}
+                </div>
+                <div class="kc_time">
+                  <span style="color: #717C8D">修改日期:</span>{{ item.utime }}
+                </div>
+              </div>
+              <div class="three_bottom">
+                <!-- v-if="role == '1'" -->
+                <div @click="get(item)">预览</div>
+                <!-- <div @click="jump(item.courseId)" v-else>评课</div> -->
+                <div v-if="((item.userid == userid) ||
+                  (item.course_teacher &&
+                    item.course_teacher.indexOf(userid) !== -1) || role == '1') &&
+                  item.state == 1
+                  " @click="goToCourse(item.courseId)">
+                  修改
+                </div>
+                <div v-if="((item.userid == userid) ||
+                  (item.course_teacher &&
+                    item.course_teacher.indexOf(userid) !== -1) || role == '1') &&
+                  item.state == 2
+                  " @click="goToCourse(item.courseId)">
+                  修改
+                </div>
+                <div v-if="((item.userid == userid) ||
+                  (item.course_teacher &&
+                    item.course_teacher.indexOf(userid) !== -1) || role == '1') &&
+                  item.state == 3
+                  " @click="goToCourse3(item.courseId)">
+                  修改
+                </div>
+                <!-- <div v-if="groupA == '0'" @click="
+                  goTo(
+                    '/works?cid=' +
+                    item.courseId +
+                    '&userid=' +
+                    userid +
+                    '&oid=' +
+                    oid +
+                    '&org=' +
+                    org +
+                    '&role=' +
+                    role
+                  )
+                  ">
+                  评价
+                </div> -->
+                <div @click="copyCourse(item.courseId)">
+                  复制
+                </div>
+                <div v-if="item.isCourseType == 1 || role == '1'" @click="deleteCourse(item.courseId)">
+                  删除
+                </div>
+                <!-- <div class="more">
+                  <span style="font-size: 18px; font-weight: 700">...</span>
+                  <div>
+                    <span @click="copyCourse(item.courseId)">复制</span>
+                    <span @click="jump(item.courseId)" v-if="role == '1'">评课</span>
+                    <span @click="get(item.courseId)" v-else>预览</span>
+                    <span @click="getNT(item.courseId)">无终端</span>
+                  </div>
+                </div> -->
+              </div>
+            </div>
+            <div class="course_empty" v-if="course.length == 0">暂无数据</div>
+          </div>
+        </div>
+      </div>
+      <div class="student_page">
+        <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
+          v-if="page && course.length" style="padding-bottom: 20px" @current-change="handleCurrentChange"></el-pagination>
+      </div>
+      <el-dialog :visible.sync="dialogVisible1" size="tiny">
+        <img width="100%" :src="dialogImageUrl" alt />
+      </el-dialog>
+      <el-dialog title="查看提问" :visible.sync="dialogVisible" :append-to-body="true" width="750px" :before-close="handleClose"
+        class="dialog_diy">
+        <div>
+          <div class="a_addBox">
+            <CourseProblem :problemCourse="problemCourse"></CourseProblem>
+          </div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogVisible = false">关 闭</el-button>
+        </span>
+      </el-dialog>
+      <el-dialog title="查看协同课程" :visible.sync="dialogVisibleCourse" :append-to-body="true" width="850px"
+        :before-close="handleClose" class="dialog_diy">
+        <div class="ct_box">
+          <div class="out_box" v-for="(item, index) in courseTeam" :key="index" style="margin-left: 15px">
+            <div class="tup">
+              <img :src="item.cover != null && item.cover != ''
+                ? JSON.parse(item.cover).length > 0
+                  ? JSON.parse(item.cover)[0].url
+                  : mr
+                : mr
+                " alt />
+            </div>
+            <div class="bottom_box">
+              <div>{{ item.title }}</div>
+              <div class="kc_t">创建老师:{{ item.uname }}</div>
+              <div class="kc_time">{{ item.time }}</div>
+            </div>
+            <div class="three_bottom">
+              <div @click="jump(item.courseId)">查看内容</div>
+              <div @click="
+                goTo(
+                  '/course/addCourse?cid=' +
+                  item.courseId +
+                  '&userid=' +
+                  userid +
+                  '&oid=' +
+                  oid +
+                  '&org=' +
+                  org
+                )
+                ">
+                编辑
+              </div>
+            </div>
+          </div>
+          <div class="course_empty" v-if="courseTeam.length == 0">暂无数据</div>
+        </div>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogVisibleCourse = false">关 闭</el-button>
+        </span>
+      </el-dialog>
+    </div>
+  </template>
+  
+  <script>
+  import "../../../../../../common/aws-sdk-2.235.1.min";
+  import EditorBar from "../../../../../../components/tools/wangEnduit";
+  import CourseProblem from "../../../../components/courseProblem";
+  export default {
+    components: { EditorBar, CourseProblem },
+    data() {
+      return {
+        itemCount: 1,
+        courseTitle: "",
+        courseText: "",
+        courseTime: "",
+        isLoading: false,
+        fileList: [],
+        fileList1: [],
+        homeworkList: [{ name: "" }],
+        formLabelWidth: "100px",
+        dialogVisible: false,
+        dialogVisible1: false,
+        dialogVisibleCourse: false,
+        dialogImageUrl: "",
+        group: "",
+        userid: this.$route.query.userid,
+        oid: this.$route.query.oid,
+        org: this.$route.query.org,
+        role: this.$route.query.role,
+        Juri: "",
+        groupList: [],
+        JuriList: [],
+        page: 1,
+        total: 0,
+        pageSize: 20,
+        tableData: [],
+        now: "",
+        courseDetail: {},
+        addCourse: {},
+        groupA: "0",
+        classX: "",
+        course: [],
+        courseName: "",
+        mr: require("../../../../../../assets/icon/kc1.png"),
+        CourseType: [],
+        CourseType2: [],
+        CourseTypeJson: {},
+        courseTypeId: {},
+        courseTypeSon: [],
+        isChoose: 0,
+        problemCourse: null, //查看提问的课程
+        courseTeam: [],
+        typeE: [],
+        typea: "",
+        typeb: "",
+        typed: "",
+        pTypeCheck: [],
+        pTypeCheckName: [],
+        btnDisplay: false
+      };
+    },
+    methods: {
+      change(val) {
+        console.log(val);
+      },
+      time() {
+        if (!this.now) {
+          this.now = new Date().getTime();
+          return true;
+        } else {
+          let time = new Date().getTime();
+          if (time - this.now > 3000) {
+            this.now = time;
+            return true;
+          } else {
+            return false;
+          }
+        }
+      },
+      addHomeworkBox() {
+        this.homeworkList.push({ name: "" });
+        this.itemCount++;
+      },
+      reduceHomeworkBox() {
+        var a = this.homeworkList;
+        a.splice(a.length - 1);
+        this.itemCount--;
+      },
+      goTo(path) {
+        this.$router.push(path);
+      },
+      CourseType2Change(val) {
+        this.pTypeCheck = [];
+        for (var i = 0; i < this.CourseType2.length; i++) {
+          let typeA = this.CourseType2[i];
+          if (val.indexOf(typeA.name) != -1) {
+            this.pTypeCheck.push(...typeA.id);
+          }
+        }
+        this.typea = "";
+        this.typeb = "";
+        this.typed = "";
+        this.getCourse();
+      },
+      CourseType2Click(val) {
+        this.pTypeCheck = [];
+        this.typeE = [];
+        if (val === this.pTypeCheckName) {
+          this.pTypeCheckName = "";
+        } else {
+          this.pTypeCheckName = val;
+          for (var i = 0; i < this.CourseType2.length; i++) {
+            let typeA = this.CourseType2[i];
+            if (val.indexOf(typeA.name) != -1) {
+              this.pTypeCheck.push(...typeA.id);
+              this.typeE = [...typeA.id];
+            }
+          }
+        }
+  
+        this.typea = "";
+        this.typeb = "";
+        this.typed = "";
+        this.getCourse();
+      },
+      goToCourse(courseId) {
+        if (courseId) {
+          this.$router.push(
+            "/course/addCourse?cid=" +
+            courseId +
+            "&userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        } else {
+          this.$router.push(
+            "/course/addCourse?userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        }
+        // this.$router.push(path);
+      },
+      reset() {
+        this.typeE = []
+        this.typea = ''
+        this.typeb = ''
+        this.typed = ''
+        this.courseName = ''
+        if (this.role == "1") {
+          this.groupA = "4";
+        } else {
+          this.groupA = "0";
+        }
+        this.getCourse();
+      },
+      goToCourse2(courseId) {
+        if (courseId) {
+          this.$router.push(
+            "/course/addCourseT?cid=" +
+            courseId +
+            "&userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        } else {
+          this.$router.push(
+            "/course/addCourseT?userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        }
+      },
+      goToCourse3(courseId) {
+        if (courseId) {
+          this.$router.push(
+            "/course/addCourseE?cid=" +
+            courseId +
+            "&userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        } else {
+          this.$router.push(
+            "/course/addCourseE?userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org +
+            "&role=" +
+            this.role
+          );
+        }
+      },
+      tableRowClassName({ row, rowIndex }) {
+        if ((rowIndex + 1) % 2 === 0) {
+          return "even_row";
+        } else {
+          return "";
+        }
+      },
+      jump(cid) {
+        // window.open(
+        //   "//pbl.cocorobo.cn/pbl-student-table/dist/#/courseDetail?courseId=" +
+        //     cid +
+        //     "&userid=" +
+        //     this.userid
+        // );
+        top.postMessage({ cid: cid, screenType: "2" }, "*");
+      },
+      get(item) {
+        top.postMessage({ cid: item.courseId, screenType: "3" }, "*");
+      },
+      getNT(cid) {
+        top.postMessage({ cid: cid, screenType: "3NT" }, "*");
+      },
+      handle_remove(file, fileList) {
+        var _tmp = this.fileList;
+        for (var i = 0, len = _tmp.length; i < len; i++) {
+          if (_tmp[i].uid == file.uid) {
+            _tmp.splice(i, 1);
+            break;
+          }
+          this.fileList = _tmp;
+        }
+      },
+      handle_remove1(file, fileList) {
+        var _tmp = this.fileList1;
+        for (var i = 0, len = _tmp.length; i < len; i++) {
+          if (_tmp[i].uid == file.uid) {
+            _tmp.splice(i, 1);
+            break;
+          }
+          this.fileList1 = _tmp;
+        }
+      },
+      handleCurrentChange(val) {
+        // console.log(`当前页: ${val}`);
+        this.page = val;
+        this.getCourse();
+      },
+      init() { },
+      handleClose(done) {
+        done();
+      },
+      handleRemove(file, fileList) {
+        console.log(file, fileList);
+      },
+      handlePictureCardPreview(file) {
+        this.dialogImageUrl = file.url;
+        this.dialogVisible1 = true;
+      },
+      onExceed() {
+        this.$message.error("课程海报仅支持上传一张,请删除后再进行上传");
+      },
+      //uuid生成
+      guid() {
+        return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
+          /[xy]/g,
+          function (c) {
+            var r = (Math.random() * 16) | 0,
+              v = c == "x" ? r : (r & 0x3) | 0x8;
+            return v.toString(16);
+          }
+        );
+      },
+      time() {
+        if (!this.now) {
+          this.now = new Date().getTime();
+          return true;
+        } else {
+          let time = new Date().getTime();
+          if (time - this.now > 3000) {
+            this.now = time;
+            return true;
+          } else {
+            return false;
+          }
+        }
+      },
+      searchCourse() {
+        this.page = 1;
+        this.getCourse();
+      },
+      clear() {
+        for (var i = 0; i < this.CourseType[0].length; i++) {
+          this.courseTypeId[this.CourseType[0][i].id] = "";
+        }
+        this.getCourse();
+      },
+      getCourse2(typeName, ftypeId, typeid, type) {
+        this.page = 1;
+        if (typeid == "34628934-d02f-11ec-8c78-005056b86db5" || ftypeId == '34628934-d02f-11ec-8c78-005056b86db5' || typeid == "34628934-d02f-11ec-8c78-005056b86ac5" || ftypeId == "34628934-d02f-11ec-8c78-005056b86ac5") {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typea != "") {
+                this.typea = "";
+              }
+            }
+          } else {
+            if (this.typea == typeid) {
+              this.typea = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typea = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        } else if (typeName == "专栏") {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typeb != "") {
+                this.typeb = "";
+              }
+            }
+          } else {
+            if (this.typeb == typeid) {
+              this.typeb = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typeb = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        } else if (typeName == "栏目") {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typeb != "") {
+                this.typeb = "";
+              }
+            }
+          } else {
+            if (this.typeb == typeid) {
+              this.typeb = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typeb = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        } else if (typeid == "34629bcc-d02f-11ec-8c78-005056b86db5" || ftypeId == '34629bcc-d02f-11ec-8c78-005056b86db5') {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typeb != "") {
+                this.typeb = "";
+              }
+            }
+          } else {
+            if (this.typeb == typeid) {
+              this.typeb = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typeb = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        } else if (typeName == "学院") {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typeb != "") {
+                this.typeb = "";
+              }
+            }
+          } else {
+            if (this.typeb == typeid) {
+              this.typeb = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typeb = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        } else if (typeid == "34629907-d02f-11ec-8c78-005056b86db5" || ftypeId == '34629907-d02f-11ec-8c78-005056b86db5' || typeid == "34629907-d02f-11ec-8c78-005056b86ac5" || ftypeId == "34629907-d02f-11ec-8c78-005056b86ac5") {
+          if (type == 1) {
+            if (this.typeE.indexOf(typeid) != -1) {
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                return;
+              } else {
+                this.typeE.splice(this.typeE.indexOf(typeid), 1);
+              }
+            } else {
+              this.typeE.push(typeid);
+              if (this.typed != "") {
+                this.typed = "";
+              }
+            }
+          } else {
+            if (this.typed == typeid) {
+              this.typed = "";
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                this.typeE.push(ftypeId);
+              }
+            } else {
+              this.typed = typeid;
+              if (this.typeE.indexOf(ftypeId) != -1) {
+                this.typeE.splice(this.typeE.indexOf(ftypeId), 1);
+              }
+            }
+          }
+        }
+        // this.loading = true;
+        this.getCourse();
+      },
+      getCourse() {
+        if (!this.loading) {
+          this.loading = this.openLoading(
+            document.querySelector(".student_table")
+          );
+        }
+        // var typeE = [];
+        // var typea, typeb, typec, typed;
+        // if (this.isChoose == 1) {
+        //   for (var i = 0; i < this.CourseType[0].length; i++) {
+        //     if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
+        //       typeE.push(this.CourseType[0][i].id);
+        //     } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
+        //       if (this.CourseType[0][i].name == "年级") {
+        //         typea = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "专栏") {
+        //         typeb = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "栏目") {
+        //         typeb = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "学院") {
+        //         typeb = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "主题") {
+        //         typeb = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "新技能") {
+        //         typec = this.courseTypeId[this.CourseType[0][i].id];
+        //       } else if (this.CourseType[0][i].name == "学科") {
+        //         typed = this.courseTypeId[this.CourseType[0][i].id];
+        //       }
+        //       this.courseTypeSon.push(
+        //         this.courseTypeId[this.CourseType[0][i].id]
+        //       );
+        //     }
+        //   }
+        // }
+        console.log("typea", this.typea);
+        this.isLoading = true;
+        let params = {
+          type: this.groupA,
+          uid: this.userid,
+          oid: this.oid,
+          org: this.org,
+          typea: this.typea != undefined ? this.typea : "",
+          typeb: this.typeb != undefined ? this.typeb : "",
+          typec: "",
+          typed: this.typed != undefined ? this.typed : "",
+          typeE: this.typeE.join(","),
+          cu: "",
+          cn: this.courseName,
+          page: this.page,
+          pageSize: this.pageSize,
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectCourseNew2", params)
+          .then((res) => {
+            this.loading.close();
+            this.loading = "";
+            this.isLoading = false;
+            this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
+            this.course = res.data[0];
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      getTypeName() {
+        this.$forceUpdate();
+        this.page = 1;
+        this.isChoose = 1;
+        this.getCourse();
+      },
+      // searchCourse() {
+      //   this.isLoading = true;
+      //   let params = {
+      //     cu: "",
+      //     cn: this.courseName,
+      //     page: this.page,
+      //   };
+      //   this.ajax
+      //     .get(this.$store.state.api + "searchCourse", params)
+      //     .then((res) => {
+      //       this.isLoading = false;
+      //       this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
+      //       this.course = res.data[0];
+      //     })
+      //     .catch((err) => {
+      //       this.isLoading = false;
+      //       console.error(err);
+      //     });
+      // },
+      deleteCourse(cid) {
+        // if (this.time()) {
+        this.$confirm("确定删除此课程吗?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(() => {
+            const loading = this.openLoading(
+              document.querySelector(".student_table")
+            );
+            this.isLoading = true;
+            let params = {
+              cid: cid,
+            };
+            this.ajax
+              .get(this.$store.state.api + "deleteCourse", params)
+              .then((res) => {
+                loading.close();
+                this.isLoading = false;
+                this.$message.success("删除成功");
+                this.getCourse();
+              })
+              .catch((err) => {
+                console.error(err);
+              });
+          })
+          .catch(() => {
+            loading.close();
+            this.isLoading = false;
+            return;
+          });
+        // }
+      },
+      selectAllType() {
+        let params = {
+          org: this.org && this.org != "" ? this.org : "",
+          oid: this.oid && this.oid != "" ? this.oid : "",
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectAllType", params)
+          .then((res) => {
+            if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+              res.data[0] = [...res.data[0], ...res.data[4]]
+            }
+            this.CourseType = res.data;
+            this.CourseType2 = [
+              { name: "智见课程", id: [] },
+              { name: "智行课程", id: [] },
+              { name: "智创课程", id: [] },
+            ];
+  
+            for (var cti = 0; cti < res.data[0].length; cti++) {
+              if (
+                res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" ||
+                res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5"
+              ) {
+                this.CourseType2[0].id.push(res.data[0][cti].id);
+              } else if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5" ||
+                res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
+                this.CourseType2[1].id.push(res.data[0][cti].id);
+              } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
+                this.CourseType2[2].id.push(res.data[0][cti].id);
+              }
+              if (res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34628934-d02f-11ec-8c78-005056b86ac5") {
+                res.data[0][cti].name = "年级";
+              } else if (res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86db5" || res.data[0][cti].id == "34629907-d02f-11ec-8c78-005056b86ac5") {
+                res.data[0][cti].name = "学科";
+              } else if (res.data[0][cti].id == "34629bcc-d02f-11ec-8c78-005056b86db5") {
+                res.data[0][cti].name = "主题";
+              }
+            }
+            for (var i = 0; i < res.data[0].length; i++) {
+              if (!this.cid) {
+                this.courseTypeId[res.data[0][i].id] = [];
+              }
+              if (!this.CourseTypeJson[res.data[0][i].id]) {
+                this.CourseTypeJson[res.data[0][i].id] = [];
+              }
+              if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+                if (res.data[0][i].name == "栏目") {
+                  this.CourseType[0][i].name = "主题";
+                }
+              }
+              if (res.data[2].length == 0 && res.data[3].length == 0) {
+                for (var j = 0; j < res.data[1].length; j++) {
+                  if (res.data[0][i].id == res.data[1][j].pid) {
+                    this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); // 去除公共分类
+                  }
+                }
+              } else {
+                if (res.data[2].length > 0) {
+                  for (var j = 0; j < res.data[2].length; j++) {
+                    if (res.data[0][i].id == res.data[2][j].pid) {
+                      this.CourseTypeJson[res.data[0][i].id].push(res.data[2][j]); // 去除公共分类
+                    }
+                  }
+                }
+                if (res.data[3].length > 0) {
+                  for (var j = 0; j < res.data[3].length; j++) {
+                    if (res.data[0][i].id == res.data[3][j].pid) {
+                      this.CourseTypeJson[res.data[0][i].id].push(res.data[3][j]); // 去除公共分类
+                    }
+                  }
+                }
+              }
+            }
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      selectType() {
+        this.ajax
+          .get(this.$store.state.api + "selectType")
+          .then((res) => {
+            this.CourseType = res.data;
+            for (var i = 0; i < res.data[0].length; i++) {
+              if (!this.cid) {
+                this.courseTypeId[res.data[0][i].id] = "";
+              }
+              // if (this.oid == "69893dca-1d47-11ed-8c78-005056b86db5") {
+              //   if (res.data[0][i].name == "栏目") {
+              //     this.CourseType[0][i].name = "主题";
+              //   }
+              // }
+              for (var j = 0; j < res.data[1].length; j++) {
+                if (res.data[0][i].id == res.data[1][j].pid) {
+                  if (!this.CourseTypeJson[res.data[0][i].id]) {
+                    this.CourseTypeJson[res.data[0][i].id] = [];
+                  }
+                  this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]); //去除公共分类
+                }
+              }
+            }
+            this.selectTypeByOid();
+            this.selectTypeByOrg();
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      selectTypeByOid() {
+        let params = {
+          oid: this.oid,
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectTypeByOid", params)
+          .then((res) => {
+            for (var i = 0; i < res.data[0].length; i++) {
+              for (var j = 0; j < res.data[1].length; j++) {
+                if (res.data[0][i].id == res.data[1][j].pid) {
+                  if (!this.CourseTypeJson[res.data[0][i].id]) {
+                    this.CourseTypeJson[res.data[0][i].id] = [];
+                  }
+                  this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
+                }
+              }
+            }
+            this.$forceUpdate();
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      selectTypeByOrg() {
+        let params = {
+          oid: this.org,
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectTypeByOrg", params)
+          .then((res) => {
+            for (var i = 0; i < res.data[0].length; i++) {
+              for (var j = 0; j < res.data[1].length; j++) {
+                if (res.data[0][i].id == res.data[1][j].pid) {
+                  if (!this.CourseTypeJson[res.data[0][i].id]) {
+                    this.CourseTypeJson[res.data[0][i].id] = [];
+                  }
+                  this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
+                }
+              }
+            }
+            this.$forceUpdate();
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      openCourse() {
+        this.dialogVisibleCourse = true;
+        this.getTeamCourse();
+      },
+      getTeamCourse() {
+        let params = {
+          uid: this.userid,
+          oid: this.oid,
+        };
+        this.ajax
+          .get(this.$store.state.api + "selectCourseTeam", params)
+          .then((res) => {
+            this.courseTeam = res.data[0];
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+      search() {
+        this.page = 1;
+        this.getCourse();
+      },
+      checkProblem(res) {
+        this.problemCourse = res;
+        this.dialogVisible = true;
+      },
+      copyCourse(cid) {
+        let params = [
+          {
+            cid: cid,
+            uid: this.userid,
+          },
+        ];
+        this.ajax
+          .post(this.$store.state.api + "copyCourse", params)
+          .then((res) => {
+            this.page = 1;
+            if (this.role == "1") {
+              this.groupA = "4";
+            } else {
+              this.groupA = "0";
+            }
+            this.$message.success("复制成功")
+            this.clear();
+          })
+          .catch((err) => {
+            console.error(err);
+          });
+      },
+    },
+    created() {
+      if (this.role == "1") {
+        this.groupA = "4";
+      }
+      this.page = 1;
+      // this.selectType();
+      this.selectAllType();
+      this.getCourse();
+      let _this = this
+      window.goToCourse3 = function(){
+        _this.goToCourse3()
+      }
+  
+      window.goToCourse = function(){
+        _this.goToCourse()
+      }
+    },
+  };
+  </script>
+  
+  <style scoped>
+  @media screen and (max-width: 1380px) {
+    .out_box {
+      width: calc(100% / 4 - (15px * 3) / 4) !important;
+    }
+  
+    .out_box:nth-child(5n) {
+      margin-right: 15px !important;
+    }
+  
+    .out_box:nth-child(4n) {
+      margin-right: 0 !important;
+    }
+  }
+  
+  @media screen and (max-width: 1080px) {
+    .out_box {
+      width: calc(100% / 3 - (15px * 2) / 3) !important;
+    }
+  
+    .out_box:nth-child(5n) {
+      margin-right: 15px !important;
+    }
+  
+    .out_box:nth-child(4n) {
+      margin-right: 15px !important;
+    }
+  
+    .out_box:nth-child(3n) {
+      margin-right: 0 !important;
+    }
+  }
+  
+  .dialog_diy>>>.el-dialog__header {
+    background: #3d67bc !important;
+    padding: 15px 20px;
+  }
+  
+  .dialog_diy>>>.el-dialog__title {
+    color: #fff;
+  }
+  
+  .dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+  }
+  
+  .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+  }
+  
+  .dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+  }
+  
+  .student_head>>>.el-button--primary {
+    background-color: #2268bc;
+  }
+  
+  .xls_button {
+    font-size: 14px;
+    cursor: pointer;
+    text-decoration: underline;
+    color: rgb(34, 104, 188);
+  }
+  
+  .student_head {
+    display: flex;
+    justify-content: space-between;
+    align-items: baseline;
+    flex-direction: row;
+    flex-wrap: wrap;
+  }
+  
+  .top {
+    display: flex;
+    justify-content: space-between;
+    width: 100% !important;
+    box-sizing: border-box;
+    margin: 0px auto;
+    padding: 10px 5px;
+    height: 54px;
+  }
+  
+  .bgColor {
+    background: #0061FF;
+  }
+  
+  .student_search {
+    display: flex;
+    align-items: center;
+    width: calc(100% / 3);
+  }
+  
+  .student_search span {
+    margin: 0 10px 0 0;
+    min-width: 65px;
+  }
+  
+  .student_button {
+    display: flex;
+    /* overflow: hidden; */
+    height: 40px;
+  }
+  
+  .upload-demo {
+    display: flex;
+    flex-direction: column;
+    align-items: end;
+    /* position: relative; */
+    width: 100px;
+    overflow: hidden;
+  }
+  
+  .student_table {
+    /* padding: 20px 0; */
+    height: 100%;
+    /* overflow: auto; */
+    min-height: 360px;
+  }
+  
+  .student_empty {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
+  
+  .el-table>>>.even_row {
+    background-color: #f1f1f1;
+  }
+  
+  .time {
+    font-size: 13px;
+    color: #999;
+  }
+  
+  .course_button {
+    padding: 10px 20px;
+  }
+  
+  .course_button_box {
+    display: flex;
+    margin-top: 5px;
+    justify-content: space-between;
+  }
+  
+  .course_rate {
+    margin-top: 5px;
+  }
+  
+  .course_view {
+    display: flex;
+    align-items: center;
+    margin: 5px 0 0 0;
+  }
+  
+  .course_view i {
+    background-image: url("../../../../../../assets/liulan.png");
+    width: 25px;
+    height: 25px;
+    background-size: 100% 100%;
+    /* margin-top: 1px; */
+    line-height: 25px;
+    vertical-align: text-top;
+    background-repeat: no-repeat;
+  }
+  
+  .image {
+    width: 100%;
+    height: 150px;
+    display: block;
+  }
+  
+  .course_box {
+    display: flex;
+    flex-wrap: wrap;
+  }
+  
+  .student_page {
+    width: 100%;
+    margin: 0 auto;
+    background: #e6eaf0;
+  }
+  
+  .course_create_box {
+    font-size: 18px;
+  }
+  
+  .course_name {
+    margin-top: 10px;
+  }
+  
+  .course_name span {
+    margin-bottom: 10px;
+    display: block;
+  }
+  
+  .homework_box {
+    display: flex;
+    align-items: center;
+    flex-wrap: wrap;
+  }
+  
+  .course_homework {
+    width: 130px;
+    display: flex;
+    justify-content: center;
+    flex-direction: column;
+    align-items: center;
+    margin: 0 10px 10px 0;
+  }
+  
+  .course_type {
+    margin-top: 10px;
+    display: flex;
+  }
+  
+  .course_type1 span {
+    margin-bottom: 10px;
+    display: block;
+  }
+  
+  .course_type2 {
+    margin-left: 20px;
+  }
+  
+  .course_type2 span {
+    margin-bottom: 10px;
+    display: block;
+  }
+  
+  .course_empty {
+    color: rgb(110, 110, 110);
+    width: 100%;
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  
+  .el_cards>>>.el-card__body {
+    height: 100%;
+  }
+  
+  .courseBtnBox {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    height: calc(100% - 170px);
+    padding: 10px;
+  }
+  
+  .wordUpload {
+    display: flex;
+  }
+  
+  .wordUpload>.buttonUp {
+    margin-right: 5px;
+  }
+  
+  .out_box {
+    display: flex;
+    flex-direction: column;
+    flex-wrap: nowrap;
+    width: calc(100% / 5 - (15px * 4) / 5);
+    /* width: 280px; */
+    background: #fff;
+    margin-right: 15px;
+    /* border: 1px solid #ccc; */
+    height: fit-content;
+    box-sizing: border-box;
+    border-radius: 0px 0px 5px 5px;
+    /* overflow: hidden; */
+    margin-bottom: 15px;
+    position: relative;
+    border-radius: 8px;
+    box-sizing: border-box;
+    overflow: hidden;
+    border: 1px solid #3682fc00;
+  }
+  
+  .out_box:hover {
+    border: 1px solid #3681FC;
+  }
+  
+  .out_box:nth-child(5n) {
+    margin-right: 0;
+  }
+  
+  .bottom_box {
+    display: flex;
+    padding: 10px;
+    flex-direction: column;
+    box-sizing: border-box;
+    height: 121px;
+    flex-wrap: nowrap;
+    justify-content: space-evenly;
+  }
+  
+  .bottom_box>div:nth-child(1) {
+    width: 100%;
+    /* overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    font-weight: bold; */
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+  
+  .bottom_box>div:nth-child(1)>span:nth-child(1) {
+    max-width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    font-weight: bold;
+  }
+  
+  .bottom_box>div:nth-child(1)>span:nth-child(2) {
+    min-width: fit-content;
+    font-size: 14px;
+    color: #8c8c8c;
+  }
+  
+  .tup {
+    width: 100%;
+    height: 180px;
+    margin: 0 auto;
+    overflow: hidden;
+    display: flex;
+    align-items: center;
+    padding: 10px;
+    box-sizing: border-box;
+  }
+  
+  .tup>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
+  
+  .kc_time {
+    margin-top: 8px;
+    font-size: 14px;
+    color: #717C8D;
+  }
+  
+  .kc_time+.kc_time {
+    margin-top: 0;
+  }
+  
+  .kc_t {
+    margin-top: 5px;
+    width: 100%;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+  .kc_t>span:nth-child(1) {
+    max-width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  
+  .kc_t>span:nth-child(2) {
+    min-width: fit-content;
+    font-size: 14px;
+    color: #8c8c8c;
+  }
+  
+  .three_bottom {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-around;
+    height: 45px;
+    align-items: center;
+    background: #fff;
+    font-size: 14px;
+    border-top: 1px solid #ddd;
+    box-sizing: border-box;
+  }
+  
+  .three_bottom>div {
+    cursor: pointer;
+    width: 100%;
+    text-align: center;
+  }
+  
+  .three_bottom>div+div {
+    border-left: 1px solid #ddd;
+  }
+  
+  .three_bottom>div:hover {
+    color: #3681FC;
+    font-weight: bold;
+  }
+  
+  .three_bottom .deleteB {
+    color: #E96E6E;
+  }
+  
+  .three_bottom .deleteB:hover {
+    color: #E96E6E;
+    font-weight: bold;
+  }
+  
+  .head_left {
+    display: flex;
+  }
+  
+  .student_input>>>.el-input__inner {
+    height: 40px;
+    width: 190px;
+    font-size: 13px;
+    padding: 0 10px;
+  }
+  
+  .course_button {
+    color: #fff;
+    background: #2268bc;
+    width: 75px;
+    height: 40px;
+    padding: 0 !important;
+    font-size: 12px;
+    line-height: 40px;
+  }
+  
+  /* .all_choose {
+    margin: 15px 0 10px;
+    height: 20%;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    max-width: calc(100% / 3);
+  }
+  
+  .all_choose > span {
+    width: 50px;
+    display: block;
+  }
+  
+  .choose {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    align-content: space-between;
+    height: 100%;
+    justify-content: flex-start;
+    width: 60%;
+    min-width: 868px;
+    align-items: center;
+  } */
+  
+  /* .choose > div:nth-child(2) {
+    margin-left: 1%;
+    width: 32.33333%;
+  }
+  
+  .choose > div:nth-child(4) {
+    margin-right: 1%;
+    width: 32.33333%;
+  }
+  
+  .choose > div:nth-child(5) {
+    margin: 5px 0 0 1%;
+  }
+  
+  .choose > div:nth-child(4) > span {
+    width: 74px !important;
+    min-width: 74px;
+  }
+  
+  .choose > div:nth-child(4) >>> .el-select {
+    width: 217.5px;
+    min-width: 215.06px;
+  } */
+  
+  .clear {
+    width: 70px;
+    height: 35px;
+    background: #0061FF;
+    color: #fff;
+    text-align: center;
+    border-radius: 5px;
+    line-height: 35px;
+    cursor: pointer;
+    margin-left: 20px;
+  }
+  
+  .ct_box {
+    height: 500px;
+    overflow: auto;
+    display: flex;
+    flex-wrap: wrap;
+  }
+  
+  .myCourse {
+    position: absolute;
+    background: #3c3c3c;
+    width: 70px;
+    height: 30px;
+    border-radius: 5px;
+    color: #fff;
+    font-size: 14px;
+    text-align: center;
+    line-height: 30px;
+    top: 5px;
+    left: 5px;
+  }
+  
+  .xtCourse {
+    position: absolute;
+    background: #0061FF;
+    width: 70px;
+    height: 30px;
+    border-radius: 5px;
+    color: #fff;
+    font-size: 14px;
+    text-align: center;
+    line-height: 30px;
+    top: 5px;
+    left: 5px;
+  }
+  
+  .sub_head {
+    position: relative;
+  }
+  
+  .sub_head::after {
+    content: "";
+    width: 100%;
+    background: #5a9cea;
+    height: 2px;
+    position: absolute;
+    left: 0;
+    bottom: -10px;
+  }
+  
+  .subClick {
+    /* font-size: 16px; */
+    font-size: 26px;
+    cursor: pointer;
+    margin-left: 17.5px;
+    /* color: #ab582f; */
+    /* color: #409eff; */
+    color: #999;
+  }
+  
+  .subClick:hover {
+    color: #000;
+  }
+  
+  .more {
+    position: relative;
+  }
+  
+  .more:hover div {
+    display: block;
+    color: #000;
+  }
+  
+  .more div {
+    position: absolute;
+    bottom: 0px;
+    transform: translate(-50%, 100%);
+    background: #f5f4f4;
+    padding: 10px 20px;
+    z-index: 99;
+    width: 50px;
+    border-radius: 5px;
+    box-shadow: 0 0 3px 3px #80808020;
+    display: none;
+  }
+  
+  .more div>span+span {
+    margin-top: 10px;
+  }
+  
+  .more div>span {
+    display: block;
+    width: 100%;
+    text-align: center;
+  }
+  
+  .more div>span:hover {
+    color: #79a2ff;
+  }
+  
+  .line {
+    width: 100%;
+    height: 15px;
+    background: #e6eaf0;
+  }
+  
+  .reBox {
+    width: 100%;
+    /* padding-left: 20px; */
+    margin: 0 auto;
+    box-sizing: border-box;
+    overflow: hidden;
+    padding: 10px 15px 0;
+  }
+  
+  .reTop {
+    padding: 0 0 5px;
+    /* padding: 20px 0 0 0; */
+    /* border-bottom: 1px solid #eee; */
+    display: flex;
+    flex-direction: row;
+    flex-wrap: nowrap;
+    align-items: center;
+    justify-content: space-between;
+  }
+  
+  .reTop>div:nth-child(1) {
+    font-weight: bold;
+    /* width: 40px; */
+    /* border-bottom: 1px solid #205cc6; */
+    /* padding-bottom: 20px; */
+    color: #205cc6;
+    /* font-size: 20px; */
+  }
+  
+  .reTop .reTopCh {
+    display: flex;
+  }
+  
+  .reTop .searchI {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    border: 1px solid #ccced3;
+    width: 250px;
+    border-radius: 8px;
+    padding: 5px 0;
+    /* margin-bottom: 10px; */
+    background: #fafafa;
+    margin: 0 0 0 10px;
+  }
+  
+  .search {
+    width: 20px;
+    padding: 0 5px;
+    display: flex;
+    align-items: center;
+  }
+  
+  .search>img {
+    width: 100%;
+    height: 100%;
+  }
+  
+  .sInput {
+    border: none;
+    width: 85%;
+    background: #fafafa;
+  }
+  
+  .sInput:focus-visible {
+    outline: none;
+  }
+  
+  .typeCss {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    justify-content: flex-start;
+    align-items: center;
+  }
+  
+  .choose {
+    display: flex;
+    flex-direction: column;
+    flex-wrap: nowrap;
+    height: 100%;
+    justify-content: space-evenly;
+    align-items: flex-start;
+    padding: 10px 0;
+  }
+  
+  .all_choose {
+    display: flex;
+    flex-direction: row;
+    align-items: baseline;
+    margin: 2px 0;
+    width: 100%;
+  }
+  
+  .all_choose>span {
+    display: flex;
+    margin-right: 5px;
+  }
+  
+  .all_choose>span>span {
+    min-width: 65px;
+    max-width: 65px;
+    display: block;
+    text-align-last: justify;
+  }
+  
+  .all_choose>span::after {
+    content: ':';
+  }
+  
+  .all_choose>span:nth-child(1) {
+    font-weight: bold;
+  }
+  
+  .all_choose>>>.el-checkbox-group {
+    display: flex;
+    flex-direction: row;
+    width: 820px;
+    flex-wrap: wrap;
+    align-content: center;
+    justify-content: flex-start;
+    align-items: center;
+    margin-top: 3px;
+  }
+  
+  .all_choose>.el-checkbox-group>>>.el-checkbox {
+    margin-bottom: 10px;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+  }
+  
+  .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label {
+    min-width: 80px;
+    overflow: hidden;
+    width: 80px;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  
+  .all_choose>.el-checkbox-group>.el-checkbox>>>.el-checkbox__label:hover {
+    width: auto;
+  }
+  
+  .cName {
+    cursor: pointer;
+    margin: 0 10px 5px 0;
+    color: #b9b6b9;
+    min-width: 80px;
+    width: 80px;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
+  
+  .isCType {
+    color: #6282c2;
+  }
+  
+  .pType_box {
+    margin-top: 0;
+  }
+  
+  .pType_box>>>.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner {
+    -webkit-box-shadow: none !important;
+    box-shadow: none !important;
+  }
+  
+  .buttonBox {
+    position: absolute;
+    bottom: -0;
+    transform: translateY(100%);
+    background: #fff;
+    border-radius: 5px;
+    box-shadow: 0 0 3px 1px #e3e3e3;
+    width: 100%;
+  }
+  
+  .buttonBox>div {
+    height: 40px;
+    line-height: 40px;
+    width: 100%;
+    text-align: center;
+    color: #000;
+    box-sizing: border-box;
+  }
+  
+  .buttonBox>div+div {
+    border-top: 1px solid #e0e0e0;
+  }
+  
+  .buttonBox>div:hover {
+    background: #f6f8ff;
+  }</style>
+  

+ 199 - 0
src/components/pages/test/add/components/course/index.vue

@@ -0,0 +1,199 @@
+<template>
+    <div class="choice_box jiao" @click.stop="">
+        <!-- <div class="title">设置附件</div> -->
+        <div class="box">
+            <div class="set_title">
+                <span>表单问题:</span>
+                <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="checkJson.title"
+                    placeholder=""></textarea>
+            </div>
+            <div class="set_title">
+                <span>问题描述:</span>
+                <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="checkJson.detail"
+                    placeholder="请输入描述"></textarea>
+            </div>
+            <div class="set_title">
+                <div @click="openCourse">设置课程选择范围</div>
+            </div>
+        </div>
+        <courseDilogVue :dialogVisibleCourse.sync="dialogVisibleCourse"></courseDilogVue>
+    </div>
+</template>
+
+<script>
+import courseDilogVue from './courseDilog.vue'
+// import EditorBar from "../../../../../tools/wangEnduit";
+export default {
+    components: {
+        // EditorBar,
+        courseDilogVue
+    },
+    props: {
+        cJson: {
+            type: Object,
+        },
+    },
+    data() {
+        return {
+            ctype: 1,
+            options: [
+                { type: 1, name: '附件' },
+                // { type: 2, name: '多选题' }
+            ],
+            checkJson: {},
+            dialogVisibleCourse:false
+        }
+    },
+    directives: {
+        autoHeight: {
+            update(el, binding) {
+                const { value } = binding
+                if (value && typeof value === 'number') {
+                    el.style.height = `${value}px`
+                } else {
+                    el.style.height = 'auto'
+                }
+            },
+            componentUpdated(el) {
+                el.style.height = `${el.scrollHeight + 5}px`
+            },
+        },
+    },
+    watch: {
+        checkJson: {
+            handler(newVal) {
+                this.$emit("setJson", newVal)
+            },
+            deep: true
+        }
+    },
+    methods: {
+        depthCopy(s) {
+            return JSON.parse(JSON.stringify(s));
+        },
+        numberPan() {
+            if (/[^\d]/.test(this.checkJson.score) || this.checkJson.score < 0) {
+                this.$message.error('请输入大于0的数字')
+                this.checkJson.score = ''
+            }
+        },
+        changeAnswer() {
+            this.checkJson.answer = []
+        },
+        change(val) {
+            this.checkJson.title = val
+            this.$forceUpdate();
+            console.log(val);
+        },
+        openCourse(){
+            this.dialogVisibleCourse = true
+        }
+    },
+    mounted() {
+        console.log(1);
+        // console.log(this.cJson);
+        if (!this.cJson) {
+            this.checkJson = {
+                title: "标题",
+                detail: "",
+                courses:[]
+            };
+        } else {
+            this.checkJson = this.depthCopy(this.cJson);
+        }
+
+    },
+}
+</script>
+
+<style scoped>
+.choice_box {
+    margin-top: 10px;
+    width: 100%;
+    background: #f5f6f7;
+    padding: 10px 10px 10px 36px;
+    box-sizing: border-box;
+    position: relative;
+}
+
+.choice_box>.box {}
+
+.set_type {
+    margin-top: 10px;
+    display: flex;
+    align-items: center;
+}
+
+.set_title {
+    margin-top: 10px;
+    display: flex;
+    align-items: flex-start;
+    /* flex-direction: column; */
+}
+
+.set_type>span,
+.set_title>span {
+    min-width: fit-content;
+    font-size: 15px;
+    min-width: 90px;
+    text-align: right;
+}
+
+.set_options {
+    margin-top: 10px;
+}
+
+.set_options>.title {
+    font-size: 15px;
+}
+
+.xuan_body {
+    margin-top: 10px;
+    font-size: 14px;
+}
+
+.binfo_input {
+    width: 100%;
+    margin: 0;
+    padding: 12px 14px;
+    display: block;
+    min-width: 0;
+    outline: none;
+    box-sizing: border-box;
+    background: none;
+    border: none;
+    border-radius: 4px;
+    background: #fff;
+    font-size: 16px;
+    resize: none;
+    font-family: 'Microsoft YaHei';
+    min-height: 48px;
+    /* border: 1px solid #3682fc00; */
+    border: 1px solid #CAD1DC;
+}
+
+.binfo_textarea {
+    border: 1px solid #CAD1DC;
+    font-size: 16px;
+    resize: none;
+    /* background: #f6f6f6; */
+    font-family: 'Microsoft YaHei';
+}
+
+.binfo_input:focus-visible {
+    border: 1px solid #3681FC !important;
+}
+
+/* .jiao::before{
+    content: '';
+    position: absolute;
+    width: 0px;
+    height: 0px;
+    top: -20px;
+    left: 15px;
+    border-left: 12px solid transparent;
+    border-right: 12px solid transparent;
+    border-bottom: 10px solid #f6f6f6;
+    border-top: 10px solid transparent;
+} */
+</style>

+ 98 - 0
src/components/pages/test/add/components/evaBox/eva.vue

@@ -0,0 +1,98 @@
+<template>
+    <div class="c_box">
+        <div class="mask"></div>
+        <div class="choice_box">
+            <div class="title" style="display: flex;">
+                <span>{{cJson.title }}</span>
+            </div>
+            <div class="detail" v-if="cJson.detail">{{ cJson.detail }}</div>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    props: {
+        cJson: {
+            type: Object,
+        },
+    },
+    data() {
+        return {
+            option: {
+                1: { name: '附件' },
+                // 2: { name: '多选题' }
+            }
+        }
+    },
+}
+</script>
+
+<style scoped>
+.c_box {
+    width: calc(100% - 20px);
+    position: relative;
+    margin: 0 auto;
+    padding-left: 26px;
+    box-sizing: border-box;
+}
+
+.mask {
+    position: absolute;
+    height: 100%;
+    width: 100%;
+    z-index: 2;
+}
+
+.choice_box {
+    white-space: pre-line;
+}
+
+.choice_box>.title {
+    font-weight: bold;
+    width: 100%;
+    word-break: break-all;
+}
+
+.choice_box>.detail {
+    width: 100%;
+    word-break: break-all;
+    color: rgb(136, 139, 146);
+    margin: 10px 0 0;
+}
+
+.choice_box>.choices {
+    margin-top: 10px;
+}
+
+.binfo_input {
+    width: 100%;
+    margin: 0;
+    padding: 10px;
+    display: block;
+    min-width: 0;
+    outline: none;
+    box-sizing: border-box;
+    background: none;
+    border: none;
+    border-radius: 5px;
+    background: #fff;
+    font-size: 16px;
+    resize: none;
+    font-family: 'Microsoft YaHei';
+    min-height: 120px;
+    /* border: 1px solid #3682fc00; */
+    border: 1.5px solid #e0e0e0;
+}
+
+.binfo_input>div {
+    border: 1.5px dashed #dfdfdf;
+    height: 120px;
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: rgb(249, 250, 251);
+    color: rgb(124, 124, 124);
+    border-radius: 5px;
+}</style>

+ 191 - 0
src/components/pages/test/add/components/evaBox/index.vue

@@ -0,0 +1,191 @@
+<template>
+    <div class="choice_box jiao" @click.stop="">
+        <!-- <div class="title">设置附件</div> -->
+        <div class="box">
+            <div class="set_title">
+                <span>表单问题:</span>
+                <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="checkJson.title"
+                    placeholder=""></textarea>
+            </div>
+            <div class="set_title">
+                <span>问题描述:</span>
+                <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="checkJson.detail"
+                    placeholder="请输入描述"></textarea>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+// import EditorBar from "../../../../../tools/wangEnduit";
+export default {
+    components: {
+        // EditorBar,
+    },
+    props: {
+        cJson: {
+            type: Object,
+        },
+    },
+    data() {
+        return {
+            ctype: 1,
+            options: [
+                { type: 1, name: '附件' },
+                // { type: 2, name: '多选题' }
+            ],
+            checkJson: {}
+        }
+    },
+    directives: {
+        autoHeight: {
+            update(el, binding) {
+                const { value } = binding
+                if (value && typeof value === 'number') {
+                    el.style.height = `${value}px`
+                } else {
+                    el.style.height = 'auto'
+                }
+            },
+            componentUpdated(el) {
+                el.style.height = `${el.scrollHeight + 5}px`
+            },
+        },
+    },
+    watch: {
+        checkJson: {
+            handler(newVal) {
+                this.$emit("setJson", newVal)
+            },
+            deep: true
+        }
+    },
+    methods: {
+        depthCopy(s) {
+            return JSON.parse(JSON.stringify(s));
+        },
+        numberPan() {
+            if (/[^\d]/.test(this.checkJson.score) || this.checkJson.score < 0) {
+                this.$message.error('请输入大于0的数字')
+                this.checkJson.score = ''
+            }
+        },
+        changeAnswer() {
+            this.checkJson.answer = []
+        },
+        change(val) {
+            this.checkJson.title = val
+            this.$forceUpdate();
+            console.log(val);
+        },
+
+    },
+    mounted() {
+        console.log(1);
+        // console.log(this.cJson);
+        if (!this.cJson) {
+            this.checkJson = {
+                title: "标题",
+                detail: "",
+                small: 0,
+                big: 10,
+            };
+        } else {
+            this.checkJson = this.depthCopy(this.cJson);
+        }
+
+    },
+}
+</script>
+
+<style scoped>
+.choice_box {
+    margin-top: 10px;
+    width: 100%;
+    background: #f5f6f7;
+    padding: 10px 10px 10px 36px;
+    box-sizing: border-box;
+    position: relative;
+}
+
+.choice_box>.box {}
+
+.set_type {
+    margin-top: 10px;
+    display: flex;
+    align-items: center;
+}
+
+.set_title {
+    margin-top: 10px;
+    display: flex;
+    align-items: flex-start;
+    /* flex-direction: column; */
+}
+
+.set_type>span,
+.set_title>span {
+    min-width: fit-content;
+    font-size: 15px;
+    min-width: 90px;
+    text-align: right;
+}
+
+.set_options {
+    margin-top: 10px;
+}
+
+.set_options>.title {
+    font-size: 15px;
+}
+
+.xuan_body {
+    margin-top: 10px;
+    font-size: 14px;
+}
+
+.binfo_input {
+    width: 100%;
+    margin: 0;
+    padding: 12px 14px;
+    display: block;
+    min-width: 0;
+    outline: none;
+    box-sizing: border-box;
+    background: none;
+    border: none;
+    border-radius: 4px;
+    background: #fff;
+    font-size: 16px;
+    resize: none;
+    font-family: 'Microsoft YaHei';
+    min-height: 48px;
+    /* border: 1px solid #3682fc00; */
+    border: 1px solid #CAD1DC;
+}
+
+.binfo_textarea {
+    border: 1px solid #CAD1DC;
+    font-size: 16px;
+    resize: none;
+    /* background: #f6f6f6; */
+    font-family: 'Microsoft YaHei';
+}
+
+.binfo_input:focus-visible {
+    border: 1px solid #3681FC !important;
+}
+
+/* .jiao::before{
+    content: '';
+    position: absolute;
+    width: 0px;
+    height: 0px;
+    top: -20px;
+    left: 15px;
+    border-left: 12px solid transparent;
+    border-right: 12px solid transparent;
+    border-bottom: 10px solid #f6f6f6;
+    border-top: 10px solid transparent;
+} */
+</style>

+ 1 - 3
src/components/pages/test/add/components/file/file.vue

@@ -15,9 +15,7 @@
                 <span style="color: #efa030;min-width:fit-content" v-if="cJson.score">({{ cJson.score ? '分值:' + cJson.score + '分' : '' }})</span>
                 <!-- </div><div v-html="cJson.title"></div> -->
             </div>
-            <div class="detail" v-if="cJson.detail">
-                {{ cJson.detail }}
-            </div>
+            <div class="detail" v-if="cJson.detail">{{ cJson.detail }}</div>
             <div class="choices">
                 <div class="binfo_input">
                     <div><span>填写者上传区</span></div>

+ 1 - 1
src/components/pages/test/add/components/file/index.vue

@@ -22,7 +22,7 @@
             <div class="set_title">
                 <span>问题描述:</span>
                 <textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols v-model="checkJson.detail"
-                    placeholder="请输入答案"></textarea>
+                    placeholder="请输入描述"></textarea>
             </div>
             <!-- <div class="set_options">
                 <div class="title">附件答案:</div>

+ 28 - 0
src/components/pages/test/add/edit/edit/index.vue

@@ -21,6 +21,8 @@
                   pub_test_btn_text: item.value == 3,
                   pub_test_btn_choose: item.value == 1,
                   pub_test_btn_file: item.value == 5,
+                  pub_test_btn_course: item.value == 6,
+                  pub_test_btn_eva: item.value == 7,
                 }"
               >
                 {{ item.label }}
@@ -186,6 +188,19 @@ export default {
             type: 1,
             detail: "",
           };
+        } else if (topicType == 6) {
+          json.json = {
+            title: "标题",
+            detail: "",
+            courses:[]
+          };
+        } else if (topicType == 7) {
+          json.json = {
+            title: "标题",
+            detail: "",
+            small: 0,
+            big: 10,
+          };
         }
         if (_json.array) {
           if (type == 3 && _check.length == 2) {
@@ -254,6 +269,19 @@ export default {
               type: 1,
               detail: "",
             };
+          } else if (topicType == 6) {
+            json1.json = {
+              title: "标题",
+              detail: "",
+              courses:[]
+            };
+          } else if (topicType == 7) {
+            json1.json = {
+              title: "标题",
+              detail: "",
+              small: 0,
+              big: 10,
+            };
           }
           this.manualJson.push(json1);
           this.$forceUpdate()

+ 11 - 1
src/components/pages/test/add/minxins/minxin.js

@@ -22,13 +22,23 @@ const minxin = {
           value: 5,
           label: "附件"
         },
+        {
+          value: 6,
+          label: "课程"
+        },
+        {
+          value: 7,
+          label: "评分"
+        },
       ],
       options2: {
         1: "选择题",
         // 2: "问答题",
         3: "问答题",
         4: "添加文档",
-        5: "附件"
+        5: "附件",
+        6: "课程",
+        7: "评分",
       },
       buttonOptions: [
         { name: "分组", type: 1 },

+ 26 - 0
src/components/pages/test/add/setInfo/manualCreated.vue

@@ -171,6 +171,19 @@ export default {
             type: 1,
             detail: "",
           };
+        } else if (this.topicType == 6) {
+          json.json = {
+            title: "标题",
+            detail: "",
+            courses:[]
+          };
+        } else if (this.topicType == 7) {
+          json.json = {
+            title: "标题",
+            detail: "",
+            small: 0,
+            big: 10,
+          };
         }
         if (_json.array) {
           if (type == 3 && _check.length == 2) {
@@ -255,6 +268,19 @@ export default {
                 type: 1,
                 detail: "",
               };
+            } else if (this.topicType == 6) {
+              json1.json = {
+                title: "标题",
+                detail: "",
+                courses:[]
+              };
+            } else if (this.topicType == 7) {
+              json1.json = {
+                title: "标题",
+                detail: "",
+                small: 0,
+                big: 10,
+              };
             }
             this.checkJson.push(json1);
           }