lsc 2 سال پیش
والد
کامیت
664fe6bfa0

BIN
src/assets/icon/answerBgNew.png


BIN
src/assets/icon/question.png


+ 20 - 2
src/components/pages/components/ganChart.vue

@@ -251,13 +251,29 @@ export default {
         this.tasks = []
         for (var i = 0; i < unitJson.length; i++) {
           let task = unitJson[i].chapterInfo[0].taskJson
+          this.tasks.push({
+              id: i ,
+              label2: '第' + (i + 1) + '阶段',
+              label: this.datedifference('', ''),
+              start: this.getTody(''),
+              end: this.getTody(''),
+              percent: 85,
+              type: "task",
+              style: {
+                base: {
+                  fill: "#4a83d0",
+                  stroke: "#4a83d0",
+                },
+              },
+            })
           for (var j = 0; j < task.length; j++) {
             this.tasks.push({
               id: i + '-' + j,
-              label2: '第' + (i + 1) + '阶段-' + '任务' + (j + 1) + '-' + task[j].task,
+              label2: '任务' + (j + 1) + '-' + task[j].task,
               label: this.datedifference(task[j].time ? task[j].time[0] : '', task[j].time ? task[j].time[1] : ''),
               start: this.getTody(task[j].time ? task[j].time[0] : ''),
               end: this.getTody(task[j].time ? task[j].time[1] : ''),
+              parentId:i,
               percent: 85,
               type: "task",
               style: {
@@ -361,6 +377,8 @@ export default {
 };
 </script>
 <style scoped>
-
+.ganCss >>> .gantt-elastic__task-list-header{
+  min-height: 40px;
+}
 </style>
 

+ 1 - 0
src/components/pages/components/workData.vue

@@ -158,6 +158,7 @@
             ></div>
           </div>
           <div style="width: 100%">
+            <div style="width:94%;margin: 0 auto;font-size: 26px;">作业查看</div>
             <WorksDetail2 :cid="cid" :uid="uid" :ooid="ooid"></WorksDetail2>
             <!-- <el-table
               ref="table"

+ 213 - 133
src/components/pages/course.vue

@@ -2,14 +2,20 @@
   <div class="pb_content" style="height: auto">
     <div class="pb_head top">
       <div>
-        <span>项目管理</span>
-        <span class="subClick" @click="
-          goTo('/works?userid=' + userid + '&oid=' + oid + '&org=' + org)
-        ">评价管理</span>
+        <span class="sub_head">项目管理</span>
+        <span
+          class="subClick"
+          @click="
+            goTo('/works?userid=' + userid + '&oid=' + oid + '&org=' + org)
+          "
+          >评价管理</span
+        >
       </div>
       <div class="student_button">
         <!-- <el-button type="primary" class="bgColor" @click="openCourse">协同编辑</el-button> -->
-        <el-button type="primary" class="bgColor" @click="goToCourse()">添加项目</el-button>
+        <el-button type="primary" class="bgColor" @click="goToCourse()"
+          >添加项目</el-button
+        >
       </div>
     </div>
     <div class="pb_content_body" style="height: 100%">
@@ -22,11 +28,24 @@
               <el-option value="1" label="他人项目"></el-option>
             </el-select>
           </div>
-          <div class="all_choose" v-for="(item, index) in CourseType[0]" :key="index">
+          <div
+            class="all_choose"
+            v-for="(item, index) in CourseType[0]"
+            :key="index"
+          >
             <span>{{ item.name }}</span>
-            <el-select v-model="courseTypeId[item.id]" placeholder="请选择" @change="getTypeName">
+            <el-select
+              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
+                v-for="item1 in CourseTypeJson[item.id]"
+                :key="item1.id"
+                :label="item1.name"
+                :value="item1.id"
+              >
               </el-option>
             </el-select>
           </div>
@@ -35,8 +54,14 @@
 
         <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>
+            <el-input
+              v-model="courseName"
+              class="student_input"
+              placeholder="请输入项目名称"
+            ></el-input>
+            <el-button class="course_button" @click="searchCourse"
+              >查询</el-button
+            >
           </div>
         </div>
       </div>
@@ -51,13 +76,16 @@
             </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
+              <img
+                :src="
+                  item.cover != null && item.cover != ''
+                    ? JSON.parse(item.cover).length > 0
+                      ? JSON.parse(item.cover)[0].url
+                      : mr
                     : mr
-                  : mr
-              " alt />
+                "
+                alt
+              />
             </div>
             <!-- <div class="bottom_box">
               <div>{{ item.title }}</div>
@@ -83,21 +111,27 @@
               <div v-if="groupA == '0'" @click="goToCourse(item.courseId)">
                 修改
               </div>
-              <div v-if="groupA == '0'" @click="
-                goTo(
-                  '/works?cid=' +
-                  item.courseId +
-                  '&userid=' +
-                  userid +
-                  '&oid=' +
-                  oid +
-                  '&org=' +
-                  org
-                )
-              ">
+              <div
+                v-if="groupA == '0'"
+                @click="
+                  goTo(
+                    '/works?cid=' +
+                      item.courseId +
+                      '&userid=' +
+                      userid +
+                      '&oid=' +
+                      oid +
+                      '&org=' +
+                      org
+                  )
+                "
+              >
                 报告
               </div>
-              <div v-if="(item.isCourseType == 1)" @click="deleteCourse(item.courseId)">
+              <div
+                v-if="item.isCourseType == 1"
+                @click="deleteCourse(item.courseId)"
+              >
                 删除
               </div>
               <div class="more">
@@ -114,14 +148,27 @@
       </div>
     </div>
     <div class="student_page">
-      <el-pagination background layout="prev, pager, next" :page-size="10" :total="total" v-if="page && course.length"
-        style="padding-bottom: 20px" @current-change="handleCurrentChange"></el-pagination>
+      <el-pagination
+        background
+        layout="prev, pager, next"
+        :page-size="10"
+        :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">
+    <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>
@@ -131,18 +178,32 @@
         <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">
+    <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="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
+            <img
+              :src="
+                item.cover != null && item.cover != ''
+                  ? JSON.parse(item.cover).length > 0
+                    ? JSON.parse(item.cover)[0].url
+                    : mr
                   : mr
-                : mr
-            " alt />
+              "
+              alt
+            />
           </div>
           <div class="bottom_box">
             <div>{{ item.title }}</div>
@@ -151,18 +212,20 @@
           </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
+              @click="
+                goTo(
+                  '/course/addCourse?cid=' +
+                    item.courseId +
+                    '&userid=' +
+                    userid +
+                    '&oid=' +
+                    oid +
+                    '&org=' +
+                    org
+                )
+              "
+            >
               编辑
             </div>
           </div>
@@ -221,7 +284,7 @@ export default {
       courseTypeSon: [],
       isChoose: 0,
       problemCourse: null, //查看提问的项目
-      courseTeam: [],
+      courseTeam: []
     };
   },
   methods: {
@@ -258,22 +321,22 @@ export default {
       if (courseId) {
         this.$router.push(
           "/course/addCourse?cid=" +
-          courseId +
-          "&userid=" +
-          this.userid +
-          "&oid=" +
-          this.oid +
-          "&org=" +
-          this.org
+            courseId +
+            "&userid=" +
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org
         );
       } else {
         this.$router.push(
           "/course/addCourse?userid=" +
-          this.userid +
-          "&oid=" +
-          this.oid +
-          "&org=" +
-          this.org
+            this.userid +
+            "&oid=" +
+            this.oid +
+            "&org=" +
+            this.org
         );
       }
       // this.$router.push(path);
@@ -294,7 +357,7 @@ export default {
       // );
       window.parent.postMessage({ cid: cid, screenType: "2" }, "*");
     },
-    get(cid){
+    get(cid) {
       window.parent.postMessage({ cid: cid, screenType: "3" }, "*");
     },
     handle_remove(file, fileList) {
@@ -322,7 +385,7 @@ export default {
       this.page = val;
       this.getCourse();
     },
-    init() { },
+    init() {},
     handleClose(done) {
       done();
     },
@@ -338,14 +401,13 @@ export default {
     },
     //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);
-        }
-      );
+      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) {
@@ -415,18 +477,18 @@ export default {
         typeE: typeE.join(","),
         cu: "",
         cn: this.courseName,
-        page: this.page,
+        page: this.page
       };
       this.ajax
         .get(this.$store.state.api + "selectCourseNew2", params)
-        .then((res) => {
+        .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) => {
+        .catch(err => {
           console.error(err);
         });
     },
@@ -460,7 +522,7 @@ export default {
       this.$confirm("确定删除此项目吗?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning",
+        type: "warning"
       })
         .then(() => {
           const loading = this.openLoading(
@@ -468,17 +530,17 @@ export default {
           );
           this.isLoading = true;
           let params = {
-            cid: cid,
+            cid: cid
           };
           this.ajax
             .get(this.$store.state.api + "deleteCourse", params)
-            .then((res) => {
+            .then(res => {
               loading.close();
               this.isLoading = false;
               this.$message.success("删除成功");
               this.getCourse();
             })
-            .catch((err) => {
+            .catch(err => {
               console.error(err);
             });
         })
@@ -492,7 +554,7 @@ export default {
     selectType() {
       this.ajax
         .get(this.$store.state.api + "selectType")
-        .then((res) => {
+        .then(res => {
           this.CourseType = res.data;
           for (var i = 0; i < res.data[0].length; i++) {
             if (!this.cid) {
@@ -515,17 +577,17 @@ export default {
           this.selectTypeByOid();
           this.selectTypeByOrg();
         })
-        .catch((err) => {
+        .catch(err => {
           console.error(err);
         });
     },
     selectTypeByOid() {
       let params = {
-        oid: this.oid,
+        oid: this.oid
       };
       this.ajax
         .get(this.$store.state.api + "selectTypeByOid", params)
-        .then((res) => {
+        .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) {
@@ -538,17 +600,17 @@ export default {
           }
           this.$forceUpdate();
         })
-        .catch((err) => {
+        .catch(err => {
           console.error(err);
         });
     },
     selectTypeByOrg() {
       let params = {
-        oid: this.org,
+        oid: this.org
       };
       this.ajax
         .get(this.$store.state.api + "selectTypeByOrg", params)
-        .then((res) => {
+        .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) {
@@ -561,7 +623,7 @@ export default {
           }
           this.$forceUpdate();
         })
-        .catch((err) => {
+        .catch(err => {
           console.error(err);
         });
     },
@@ -572,14 +634,14 @@ export default {
     getTeamCourse() {
       let params = {
         uid: this.userid,
-        oid: this.oid,
+        oid: this.oid
       };
       this.ajax
         .get(this.$store.state.api + "selectCourseTeam", params)
-        .then((res) => {
+        .then(res => {
           this.courseTeam = res.data[0];
         })
-        .catch((err) => {
+        .catch(err => {
           console.error(err);
         });
     },
@@ -592,18 +654,20 @@ export default {
       this.dialogVisible = true;
     },
     copyCourse(cid) {
-      let params = [{
-        cid: cid,
-        uid: this.userid
-      }]
+      let params = [
+        {
+          cid: cid,
+          uid: this.userid
+        }
+      ];
       this.ajax
         .post(this.$store.state.api + "copyCourse", params)
-        .then((res) => {
-          this.page = 1
-          this.groupA = '0'
-          this.clear()
+        .then(res => {
+          this.page = 1;
+          this.groupA = "0";
+          this.clear();
         })
-        .catch((err) => {
+        .catch(err => {
           console.error(err);
         });
     }
@@ -612,33 +676,33 @@ export default {
     this.page = 1;
     this.selectType();
     this.getCourse();
-  },
+  }
 };
 </script>
 
 <style scoped>
-.dialog_diy>>>.el-dialog__header {
+.dialog_diy >>> .el-dialog__header {
   background: #3d67bc !important;
   padding: 15px 20px;
 }
 
-.dialog_diy>>>.el-dialog__title {
+.dialog_diy >>> .el-dialog__title {
   color: #fff;
 }
 
-.dialog_diy>>>.el-dialog__headerbtn {
+.dialog_diy >>> .el-dialog__headerbtn {
   top: 19px;
 }
 
-.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
   color: #fff;
 }
 
-.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
   color: #fff;
 }
 
-.student_head>>>.el-button--primary {
+.student_head >>> .el-button--primary {
   background-color: #2268bc;
 }
 
@@ -705,7 +769,7 @@ export default {
   align-items: center;
 }
 
-.el-table>>>.even_row {
+.el-table >>> .even_row {
   background-color: #f1f1f1;
 }
 
@@ -817,7 +881,7 @@ export default {
   justify-content: center;
 }
 
-.el_cards>>>.el-card__body {
+.el_cards >>> .el-card__body {
   height: 100%;
 }
 
@@ -833,7 +897,7 @@ export default {
   display: flex;
 }
 
-.wordUpload>.buttonUp {
+.wordUpload > .buttonUp {
   margin-right: 5px;
 }
 
@@ -863,7 +927,7 @@ export default {
   justify-content: space-evenly;
 }
 
-.bottom_box>div:nth-child(1) {
+.bottom_box > div:nth-child(1) {
   width: 230px;
   overflow: hidden;
   text-overflow: ellipsis;
@@ -879,7 +943,7 @@ export default {
   align-items: center;
 }
 
-.tup>img {
+.tup > img {
   width: 100%;
   height: 100%;
   object-fit: contain;
@@ -905,11 +969,11 @@ export default {
   font-size: 14px;
 }
 
-.three_bottom>div {
+.three_bottom > div {
   cursor: pointer;
 }
 
-.three_bottom>div:hover {
+.three_bottom > div:hover {
   color: #79a2ff;
 }
 
@@ -917,7 +981,7 @@ export default {
   display: flex;
 }
 
-.student_input>>>.el-input__inner {
+.student_input >>> .el-input__inner {
   height: 40px;
   width: 190px;
   font-size: 13px;
@@ -943,7 +1007,7 @@ export default {
   width: calc(100% / 3);
 }
 
-.all_choose>span {
+.all_choose > span {
   width: 50px;
   display: block;
 }
@@ -960,26 +1024,26 @@ export default {
   align-items: center;
 }
 
-.choose>div:nth-child(2) {
+.choose > div:nth-child(2) {
   margin-left: 1%;
   width: 32.33333%;
 }
 
-.choose>div:nth-child(4) {
+.choose > div:nth-child(4) {
   margin-right: 1%;
   width: 32.33333%;
 }
 
-.choose>div:nth-child(5) {
+.choose > div:nth-child(5) {
   margin: 5px 0 0 1%;
 }
 
-.choose>div:nth-child(4)>span {
+.choose > div:nth-child(4) > span {
   width: 74px !important;
   min-width: 74px;
 }
 
-.choose>div:nth-child(4)>>>.el-select {
+.choose > div:nth-child(4) >>> .el-select {
   width: 217.5px;
   min-width: 215.06px;
 }
@@ -1031,17 +1095,33 @@ export default {
   left: 5px;
 }
 
+.sub_head {
+  position: relative;
+}
+.sub_head::after {
+  content: "";
+  width: 100%;
+  background: #5a9cea;
+  height: 2px;
+  position: absolute;
+  left: 0;
+  bottom: -18px;
+}
+
 .subClick {
-  font-size: 16px;
+  /* font-size: 16px; */
+  font-size: 26px;
   cursor: pointer;
   margin-left: 10px;
   /* color: #ab582f; */
-  color: #409eff;
+  /* color: #409eff; */
+  color: #999;
+}
+.subClick:hover{
+  color: #000;
 }
-
 .more {
   position: relative;
-
 }
 
 .more:hover div {
@@ -1052,7 +1132,7 @@ export default {
 .more div {
   position: absolute;
   bottom: 0px;
-  transform: translate(-50%,100%);
+  transform: translate(-50%, 100%);
   background: #f5f4f4;
   padding: 10px 20px;
   z-index: 99;
@@ -1062,17 +1142,17 @@ export default {
   display: none;
 }
 
-.more div>span+span {
+.more div > span + span {
   margin-top: 10px;
 }
 
-.more div>span {
+.more div > span {
   display: block;
   width: 100%;
   text-align: center;
 }
 
-.more div>span:hover {
+.more div > span:hover {
   color: #79a2ff;
 }
 </style>

+ 223 - 31
src/components/pages/student/addCourse.vue

@@ -796,11 +796,14 @@
                             <span v-if="itemTool.tool == 1">
                               电子白板
                             </span>
+                            <span v-if="itemTool.tool == 3">
+                              思维导图
+                            </span>
                             <span v-if="itemTool.tool == 6">
                               协同文档
                             </span>
-                            <span v-if="itemTool.tool == 3">
-                              思维导图
+                            <span v-if="itemTool.tool == 15">
+                              问答工具
                             </span>
                             <span v-if="itemTool.tool == 48">
                               表格
@@ -824,16 +827,22 @@
                               <div style="margin: 5px 0">电子白板</div>
                             </div>
                           </div>
+                          <div class="tool" v-if="itemTool.tool == 3">
+                            <div class="whiteBIcon" @click="openToolFun(3, itemTaskIndex, toolIndex)">
+                              <img src="../../../assets/icon/secondToolList/mindMapping.png" alt />
+                              <div style="margin: 5px 0">思维导图</div>
+                            </div>
+                          </div>
                           <div class="tool" v-if="itemTool.tool == 6">
                             <div class="whiteBIcon" @click="openToolFun(6, itemTaskIndex, toolIndex)">
                               <img src="../../../assets/icon/secondToolList/doc.png" alt />
                               <div style="margin: 5px 0">协同文档</div>
                             </div>
                           </div>
-                          <div class="tool" v-if="itemTool.tool == 3">
-                            <div class="whiteBIcon" @click="openToolFun(3, itemTaskIndex, toolIndex)">
-                              <img src="../../../assets/icon/secondToolList/mindMapping.png" alt />
-                              <div style="margin: 5px 0">思维导图</div>
+                          <div class="tool" v-if="itemTool.tool == 15">
+                            <div class="whiteBIcon" @click="openToolFun(15, itemTaskIndex, toolIndex)">
+                              <img src="../../../assets/icon/thirdToolList/answer.png" alt />
+                              <div style="margin: 5px 0">问答工具</div>
                             </div>
                           </div>
                           <div class="tool" v-if="itemTool.tool == 48">
@@ -885,8 +894,7 @@
                                   <div class="workd_media" style="height: 100%">
                                     <video-player class="video-player vjs-custom-skin" :playsinline="true"
                                       :options="itemTool.toolData[itemTool.sourceIndex].src"
-                                      @play="onPlayerPlay($event)"
-                                      style="width: 99%; height: 100%;"></video-player>
+                                      @play="onPlayerPlay($event)" style="width: 99%; height: 100%;"></video-player>
                                   </div>
                                 </div>
                                 <div class="wheel" v-if="itemTool.toolData[itemTool.sourceIndex].type == 6" style="
@@ -962,8 +970,17 @@
                           </div>
                         </div>
                         <div v-if="itemTool.toolPhoto.length" style="margin-top:10px" class="toolimg_box">
-                          <div class="toolimg" v-for="(photo, pIndex) in itemTool.toolPhoto" :key="pIndex">
+                          <div class="toolimg" v-for="(photo, pIndex) in itemTool.toolPhoto" :key="pIndex"
+                            :class="{ answerWidth: photo.type == 3 }">
                             <img v-if="photo.type == 1" :src="photo.content" alt="" @click="previewImg(photo.content)">
+                            <div class="answerBg" v-if="photo.type == 3">
+                              <!-- <div>{{ w.sName }}</div> -->
+                              <el-tooltip class="item" effect="light" :content="photo.content" placement="top">
+                                <div class="answerContent">
+                                  {{ photo.content }}
+                                </div>
+                              </el-tooltip>
+                            </div>
                             <img v-if="photo.type == 10" src="../../../assets/icon/isWord.png" alt=""
                               @click="openTable(photo.content)">
                             <img class="deleteImg" src="../../../assets/deleteworks.png" v-if="
@@ -1196,6 +1213,12 @@
           </div>
           <div class="people_nav">选择成员</div>
         </div>
+        <div class="t_j_box" style="padding: 20px 0 0 25px;width: calc(100% - 45px);margin-left: 25px;">
+          <span>姓名</span>
+          <span>身份</span>
+          <span>账号</span>
+          <span>学校</span>
+        </div>
         <el-checkbox-group v-model="checkboxList3" class="people_name" v-if="teacherJuri.length">
           <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">
             <div class="t_j_box">
@@ -1233,6 +1256,12 @@
           </div> -->
           <div class="people_nav">选择成员</div>
         </div>
+        <div class="t_j_box" style="padding: 20px 0 0 25px;width: calc(100% - 45px);margin-left: 25px;">
+          <span>姓名</span>
+          <span>身份</span>
+          <span>账号</span>
+          <span>学校</span>
+        </div>
         <el-checkbox-group v-model="tcMember" class="people_name" v-if="ManAarray.length">
           <el-checkbox v-for="item in ManAarray" :key="item.userid" :label="item.userid">
             <div class="t_j_box">
@@ -1694,7 +1723,7 @@
                     <div style="margin: 5px 0">电子白板</div>
                   </div>
                 </div>
-                <div class="tool">
+                <div class="tool" v-if="false">
                   <div class="whiteBIcon" @click="addToolFun(6)">
                     <img src="../../../assets/icon/secondToolList/doc.png" alt />
                     <div style="margin: 5px 0">协同文档</div>
@@ -1712,6 +1741,12 @@
                     <div style="margin: 5px 0">表格</div>
                   </div>
                 </div>
+                <div class="tool">
+                  <div class="whiteBIcon" @click="addToolFun(15)">
+                    <img src="../../../assets/icon/thirdToolList/answer.png" alt />
+                    <div style="margin: 5px 0">问答工具</div>
+                  </div>
+                </div>
               </div>
             </div>
           </div>
@@ -1912,6 +1947,35 @@
         <el-button @click="fullDialogVisible = false">关 闭</el-button>
       </div> -->
     </el-dialog>
+    <el-dialog title="问答" :visible.sync="answerDialogVisible" :append-to-body="true" width="800px"
+      :before-close="handleClose" class="dialog_diy">
+      <div>
+        <div style="
+            display: flex;
+            flex-wrap: nowrap;
+            flex-direction: column;
+            position: relative;
+          ">
+          <div class="queTop" style="padding: 20px 0 20px 0">
+            <div class="question">
+              <img src="../../../assets/icon/question.png" alt />
+            </div>
+            <div class="queTitle">
+              <div style="width: 90px; min-width: 90px">提问:</div>
+              <div>{{ answerQ }}</div>
+            </div>
+          </div>
+          <div class="ediBottom">
+            <textarea rows="6" class="binfo_input" cols style="width: 95%; height: 120px"
+              v-model="questionAnswer"></textarea>
+          </div>
+        </div>
+      </div>
+      <div slot="footer">
+        <el-button @click="answerDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="addQuestion">提 交</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -1984,6 +2048,7 @@ export default {
       dialogVisibleChoice: false,
       dialogVisibleTool: false,
       dialogVisibleSource: false,
+      answerDialogVisible: false,
       isClickColor: 0,
       publicTool: 0,
       searchPeople: "",
@@ -2102,6 +2167,7 @@ export default {
       cidType: 0,
       cidttt: 1,
       answerQ: "",
+      questionAnswer: "",
       grade: [],
       courseUserid: "",
       timer: null,
@@ -3461,17 +3527,21 @@ export default {
       //   askTitle: "",
       //   askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
       // });
-      this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
-        this.taskCount
-      ].toolArray.push({
-        tool: tool,
-        toolDetail: "",
-        toolPhoto: "",
-        toolEdit: false,
-        toolId: this.guid()
-      });
-      this.$forceUpdate();
-      this.dialogVisibleTool = false;
+      if (tool == 15) {
+        this.dialogVisible8 = true;
+      } else {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.taskCount
+        ].toolArray.push({
+          tool: tool,
+          toolDetail: "",
+          toolPhoto: "",
+          toolEdit: false,
+          toolId: this.guid()
+        });
+        this.$forceUpdate();
+        this.dialogVisibleTool = false;
+      }
     },
     addToolFunD(itemTaskIndex) {
       this.taskCount = itemTaskIndex;
@@ -3479,6 +3549,8 @@ export default {
     },
     addSourceFunD(itemTaskIndex) {
       this.sourcesData = []
+      this.proVisible = false
+      this.progress = 0
       this.taskCount = itemTaskIndex;
       this.dialogVisibleSource = true;
     },
@@ -3536,6 +3608,11 @@ export default {
         this.taskCount = taskCount
         this.toolIndex = i
         this.dialogVisibleTable = true;
+      } else if (tool == 15) {
+        this.taskCount = taskCount
+        this.toolIndex = i
+        this.answerQ = JSON.parse(JSON.stringify(this.unitJson[this.unitIndex].chapterInfo[0].taskJson[taskCount].toolArray[i].answerQ))
+        this.answerDialogVisible = true;
       } else {
         window.parent.postMessage(
           {
@@ -5000,17 +5077,29 @@ export default {
         this.$message.error("请输入您想要问的问题");
         return;
       }
+      // this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+      //   this.taskCount
+      // ].toolChoose[this.toolIndex].answerQ = this.answerQ;
+
       this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
         this.taskCount
-      ].toolChoose[this.toolIndex].answerQ = this.answerQ;
+      ].toolArray.push({
+        tool: 15,
+        toolDetail: "",
+        toolPhoto: "",
+        toolEdit: false,
+        toolId: this.guid(),
+        answerQ: this.answerQ
+      });
+      this.$forceUpdate();
+      this.dialogVisibleTool = false;
       this.dialogVisible8 = false;
-
-      if (
-        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
-          .toolChoose[this.toolIndex].tool != 15
-      ) {
-        this.addTools(15, this.taskCount, this.toolIndex);
-      }
+      // if (
+      //   this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount]
+      //     .toolChoose[this.toolIndex].tool != 15
+      // ) {
+      //   this.addTools(15, this.taskCount, this.toolIndex);
+      // }
     },
     addMp3Answer() {
       if (this.answerQ == "") {
@@ -5701,6 +5790,35 @@ export default {
         .toolArray[index].toolData))
       this.dialogVisibleSource = true
     },
+    addQuestion() {
+      let params = [
+        {
+          uid: this.userid,
+          cid: this.courseId,
+          stage: this.unitIndex,
+          task: this.taskCount,
+          tool: this.toolIndex,
+          content: this.questionAnswer.replaceAll(/%/g, "%25"),
+          type: 3,
+          atool: 15,
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.api + "addCourseWorksS", params)
+        .then((res) => {
+          this.$message({
+            message: "提交成功",
+            type: "success",
+          });
+          this.questionAnswer = ""
+          this.answerDialogVisible = false;
+          this.seleteCourseUpdate();
+        })
+        .catch((err) => {
+          this.$message.error("提交失败");
+          console.error(err);
+        });
+    },
   },
   beforeDestroy() {
     clearTimeout(this.timer);
@@ -6351,7 +6469,7 @@ export default {
 .people_name {
   display: flex;
   justify-content: flex-start;
-  padding: 20px 0 0 25px;
+  padding: 10px 0 0 25px;
   flex-direction: column;
   flex-wrap: wrap;
 }
@@ -7292,6 +7410,7 @@ ol {
   width: 100%;
   align-items: center;
   justify-content: center;
+  margin-bottom: 35px;
 }
 
 .addToolFun+.addToolFun {
@@ -8355,7 +8474,7 @@ ol {
 }
 
 .toolimg {
-  margin: 0 20px 10px 0;
+  margin: 0 20px 20px 0;
 }
 
 .comment {
@@ -8504,4 +8623,77 @@ ol {
   height: calc(100% - 50px);
   padding: 0;
 }
+
+
+.queTop {
+  display: flex;
+  padding: 20px 0 20px 30px;
+  width: 100%;
+  flex-direction: row;
+  justify-content: flex-start;
+  align-items: center;
+  border-bottom: 1px solid #eeeeee;
+  box-sizing: border-box;
+}
+
+.question {
+  width: 40px;
+  margin-right: 10px;
+  margin-top: 7px;
+}
+
+.queTitle {
+  margin-left: 5px;
+  font-size: 25px;
+  display: flex;
+  align-items: center;
+}
+
+.addEditor {
+  width: 100px;
+  height: 30px;
+  background: #42cda6;
+  color: #fff;
+  border-radius: 5px;
+  text-align: center;
+  line-height: 30px;
+  box-shadow: 1px 3px 6px 1px #bfbfbf;
+  cursor: pointer;
+}
+
+.answerWidth {
+  width: 250px !important;
+}
+
+.answerBg {
+  background: url("../../../assets/icon/answerBgNew.png") no-repeat;
+  background-size: cover;
+  width: 100%;
+  height: 120px;
+  padding: 0 10px;
+  box-sizing: border-box;
+  color: #fff;
+  text-align: center;
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  align-items: center;
+  position: relative;
+  justify-content: center;
+}
+
+.answerContent {
+  /* width: 215px; */
+  max-height: 60px;
+  word-break: break-all;
+  text-align: center;
+  /* white-space: nowrap; */
+  overflow: hidden;
+  text-overflow: ellipsis;
+  /* padding: 23px 0 0; */
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+  display: -webkit-box;
+  font-size: 15px;
+}
 </style>

+ 21 - 3
src/components/pages/tencent/student.vue

@@ -8,7 +8,7 @@
         /* border-radius: 5px; */
       ">
       <div class="pb_head">
-        <span>我的学生列表</span>
+        <span class="sub_head">我的学生列表</span>
         <span
             @click="
               goTo(
@@ -699,12 +699,30 @@ export default {
 </script>
 
 <style scoped>
+.sub_head {
+  position: relative;
+}
+.sub_head::after {
+  content: "";
+  width: 100%;
+  background: #5a9cea;
+  height: 2px;
+  position: absolute;
+  left: 0;
+  bottom: -12px;
+}
+
 .pb_head > span:nth-child(2) {
-  font-size: 16px;
+  /* font-size: 16px; */
+  font-size: 26px;
   cursor: pointer;
   margin-left: 10px;
   /* color: #ab582f; */
-  color: #409eff;
+  /* color: #409eff; */
+  color: #999;
+}
+.pb_head > span:nth-child(2):hover{
+  color:#000
 }
 /* .pb_head>span:nth-child(2) {
   font-size: 20px;

+ 21 - 3
src/components/pages/works.vue

@@ -30,7 +30,7 @@
         "
       >
         <div class="pb_head">
-          <span>评价管理</span>
+          <span class="sub_head">评价管理</span>
           <!-- <span>备注:教师可以根据课程、班级条件筛选学生并查看该学生信息</span> -->
           <span
             v-if="type == '2'"
@@ -495,12 +495,30 @@ export default {
 </script>
 
 <style scoped>
+.sub_head {
+  position: relative;
+}
+.sub_head::after {
+  content: "";
+  width: 100%;
+  background: #5a9cea;
+  height: 2px;
+  position: absolute;
+  left: 0;
+  bottom: -12px;
+}
+
 .pb_head > span:nth-child(2) {
-  font-size: 16px;
+  /* font-size: 16px; */
+  font-size: 26px;
   cursor: pointer;
   margin-left: 10px;
   /* color: #ab582f; */
-  color: #409eff;
+  /* color: #409eff; */
+  color: #999;
+}
+.pb_head > span:nth-child(2):hover{
+  color:#000
 }
 .pb_head {
   margin: 0 !important;

+ 130 - 57
src/components/tools/wangEnduit.vue

@@ -4,6 +4,13 @@
     </div>
     <div ref="editor" class="text">
     </div>
+    <div v-if="proVisible" class="mask">
+      <div class="progressBox">
+        <div class="lbox">
+          <img src="../../assets/loading.gif" />上传中,请稍后
+        </div>
+      </div>
+    </div>
   </div>
 </template>  
   
@@ -19,6 +26,8 @@ export default {
       // uploadPath,
       editor: null,
       info_: null,
+      proVisible:false,
+      progress:0
     };
   },
   model: {
@@ -98,11 +107,12 @@ export default {
       this.editor.config.placeholder = this.placeholder;
       var that = this;
       this.editor.config.customUploadImg = function (files, insert) {
-        const loading = Loading.service({
-          lock: true,
-          background: 'rgba(0, 0, 0, 0.7)'
-        });
+        // const loading = Loading.service({
+        //   lock: true,
+        //   background: 'rgba(0, 0, 0, 0.7)'
+        // });
         // 图片自定义上传方法
+        var kk = 0
         for (var i = 0; i < files.length; i++) {
           var file = files[i];
           var credentials = {
@@ -113,7 +123,7 @@ export default {
           window.AWS.config.region = "cn-northwest-1"; //设置区域
 
           var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
-
+          that.proVisible = true
           if (file) {
             var params = {
               Key:
@@ -138,7 +148,11 @@ export default {
                 // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
               })
               .send(function (err, data) {
-                loading.close();
+                kk++
+                if(kk == files.length - 1 || kk > files.length - 1){
+                  that.proVisible = false
+                }
+                // loading.close();
                 if (err) {
                   that.$message.error("上传失败");
                 } else {
@@ -173,73 +187,132 @@ export default {
 };
 </script>  
   
-<style lang="css" scoped> 
+<style lang="css" scoped>
 .editor {
-  width: 100%;
-  margin: 10px auto;
-  position: relative;
-  z-index: 0;
-}
+   width: 100%;
+   margin: 10px auto;
+   position: relative;
+   z-index: 0;
+ }
 
-.toolbar {
-  border: 1px solid #ccc;
-}
+ .toolbar {
+   border: 1px solid #ccc;
+ }
 
-.text {
-  border: 1px solid #ccc;
-  height: 230px;
-  overflow: auto;
-}
+ .text {
+   border: 1px solid #ccc;
+   height: 230px;
+   overflow: auto;
+ }
+
+
+ /* table 样式 */
+ .cont>>>table {
+   border-top: 1px solid #ccc;
+   border-left: 1px solid #ccc;
+ }
 
+ .cont>>>table td,
+ .cont>>>table th {
+   border-bottom: 1px solid #ccc;
+   border-right: 1px solid #ccc;
+   padding: 20px 5px;
+   max-width: 0px;
+ }
+
+ .cont>>>table th {
+   border-bottom: 2px solid #ccc;
+   text-align: center;
+ }
+
+ /* blockquote 样式 */
+ .cont>>>blockquote {
+   display: block;
+   border-left: 8px solid #d0e5f2;
+   padding: 5px 10px;
+   margin: 10px 0;
+   line-height: 1.4;
+   font-size: 100%;
+   background-color: #f1f1f1;
+ }
+
+ /* code 样式 */
+ .cont>>>code {
+   display: inline-block;
+   *display: inline;
+   *zoom: 1;
+   background-color: #f1f1f1;
+   border-radius: 3px;
+   padding: 3px 5px;
+   margin: 0 3px;
+ }
+
+ .cont>>>pre code {
+   display: block;
+ }
+
+ /* ul ol 样式 */
+ .cont>>>ul,
+ ol {
+   margin: 10px 0 10px 20px;
+ }
+
+ .mask {
+  background-color: rgb(0 0 0 / 30%);
+  /* position: fixed; */
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 99999;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
 
-/* table 样式 */
-.cont>>>table {
-  border-top: 1px solid #ccc;
-  border-left: 1px solid #ccc;
+.mask2 {
+  position: fixed !important;
+  z-index: 999999;
 }
 
-.cont>>>table td,
-.cont>>>table th {
-  border-bottom: 1px solid #ccc;
-  border-right: 1px solid #ccc;
-  padding: 20px 5px;
-  max-width: 0px;
+.progressBox {
+  width: 300px;
+  height: 150px;
+  background: #fff;
+  border-radius: 10px;
+  box-shadow: 0 0 6px 1px #bfbfbf;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
 }
 
-.cont>>>table th {
-  border-bottom: 2px solid #ccc;
-  text-align: center;
+.progressBox .lbox {
+  height: 100px;
+  font-size: 16px;
+  display: flex;
+  align-items: center;
 }
 
-/* blockquote 样式 */
-.cont>>>blockquote {
-  display: block;
-  border-left: 8px solid #d0e5f2;
-  padding: 5px 10px;
-  margin: 10px 0;
-  line-height: 1.4;
-  font-size: 100%;
-  background-color: #f1f1f1;
+.progressBox .lbox img {
+  width: 40px;
+  margin-right: 20px;
 }
 
-/* code 样式 */
-.cont>>>code {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-  background-color: #f1f1f1;
-  border-radius: 3px;
-  padding: 3px 5px;
-  margin: 0 3px;
+.progressBox>>>.el-progress-bar__outer {
+  background-color: #d1dfff !important;
 }
 
-.cont>>>pre code {
-  display: block;
+.progressBox .lbox {
+  height: 100px;
+  font-size: 19px;
+  display: flex;
+  align-items: center;
 }
 
-/* ul ol 样式 */
-.cont>>>ul,
-ol {
-  margin: 10px 0 10px 20px;
+.progressBox .lbox img {
+  width: 40px;
+  margin-right: 20px;
 }
 </style>