@@ -1,517 +0,0 @@
-<template>
- <div>
- <div class="sd_class">
- <div class="sd_module">
- <div class="sd_module_content">
- <div class="sd_module_children">
- <span class="s">课堂时长</span>
- <span class="s2">
- <span>{{randomNum(1,15)}}</span>时
- <span>{{randomNum(1,60)}}</span>分
- <span>{{randomNum(1,60)}}</span>秒
- </span>
- <span>已经击败99%教师</span>
- </div>
- <span class="s">课堂互动</span>
- <span>{{randomNum(1,10)}}</span>次
-
- <span class="s">提交作业</span>
- <span>{{randomNum(1,15)}}</span>次
- <div class="sd_module_data">
- <span class="sdddtitle">数据统计</span>
- <div id="charts_canvas" class="echart" style="width: 100%; height: 100%;"></div>
- <div class="sd_class sd_class2">
- <span class="sdddtitle">学生个人能力</span>
- <!-- <div class="sd_person_button">
- <span @click="setType(6)" :class="{'active':type == 6}">学生个人能力</span>
- </div> -->
- <div class="sd_person_data">
- <div
- id="person_canvas1"
- class="echart"
- style="width: 50%; height: 100%; margin: 0 0 0 1rem"
- ></div>
- id="person_canvas2"
-</template>
-<script>
-export default {
- data() {
- return {
- type: 6,
- chartObj: null,
- chartObj2: null,
- chartObj3: null,
- ooption: [],
- option: {
- tooltip: {
- trigger: "item",
- },
- legend: {
- orient: "vertical",
- left: "50",
- top: "center",
- series: [
- {
- type: "pie",
- radius: "65%",
- center: ["65%", "50%"],
- label: {
- color: "inherit",
- formatter: "{b|{b}:} {d}% ",
- rich: {
- b: {
- fontSize: 14,
- fontWeight: "bold",
- lineHeight: 33,
- data: [
- { value: 0, name: "学习时间" },
- { value: 0, name: "自我介绍" },
- { value: 0, name: "提交活动表" },
- { value: 0, name: "讨论交流" },
- { value: 0, name: "作业提交" },
- { value: 0, name: "能力测试" },
- { value: 0, name: "自我评价调查问卷" },
- { value: 0, name: "课程满意度调查问卷" },
- ],
- emphasis: {
- itemStyle: {
- shadowBlur: 10,
- shadowOffsetX: 0,
- shadowColor: "rgba(0, 0, 0, 0.5)",
- data: [],
- //const colors = ['red', 'blue', 'green', 'purple'];
- option2: {
- //color:colors,
- series: {
- type: "sunburst",
- radius: [20, "80%"],
- borderRadius: 7,
- borderWidth: 2,
- show: true,
- option3: {
- xAxis: {
- type: "category",
- data: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
- boundaryGap: false,
- splitLine: {
- axisLine: {
- show: false,
- yAxis: {
- "信息应用意识",
- "信息安全意识",
- "信息感知意识",
- "信息社会责任",
- "信息法律法规",
- "信息应用技能",
- "信息科学知识",
- "信息思维",
- "信息行为",
- grid: {
- left: 100,
- bottom: 50,
- right: 30,
- top: 50,
- name: "Punch Card",
- type: "scatter",
- symbolSize: function (val) {
- return val[2] * 2;
- animationDelay: function (idx) {
- return idx * 5;
- };
- methods: {
- setChart() {
- // 雷达图显示的标签
- let newPromise = new Promise((resolve) => {
- resolve();
- });
- //然后异步执行echarts的初始化函数
- newPromise.then(() => {
- const chartObj = this.$echarts.init(
- //劳动课程
- this.$el.querySelector("#charts_canvas")
- );
- var optionB = [
- { value: this.randomNum(0, 300), name: "学习时间" },
- { value: this.randomNum(0, 300), name: "自我介绍" },
- { value: this.randomNum(0, 300), name: "能力闯关" },
- { value: this.randomNum(0, 300), name: "提交活动表" },
- { value: this.randomNum(0, 300), name: "讨论交流" },
- { value: this.randomNum(0, 300), name: "作业提交" },
- { value: this.randomNum(0, 300), name: "能力测试" },
- { value: this.randomNum(0, 300), name: "自我评价调查问卷" },
- { value: this.randomNum(0, 300), name: "课程满意度调查问卷" },
- ];
- this.option.series[0].data = optionB;
- const chartObj2 = this.$echarts.init(
- this.$el.querySelector("#person_canvas1")
- this.option2.series.data = [
- name: "信息意识",
- value: 15,
- children: [
- name: "信息应用意识",
- value: this.randomNum(1, 5),
- name: "信息安全意识",
- name: "信息感知意识",
- name: "信息社会责任",
- name: "信息伦理道德",
- name: "信息法律法规",
- value: this.randomNum(1, 10),
- name: "信息知识与技能",
- name: "信息应用技能",
- value: 5,
- name: "信息科学知识",
- value: 10,
- name: "信息思维与行为",
- name: "信息思维",
- name: "信息行为",
- const chartObj3 = this.$echarts.init(
- this.$el.querySelector("#person_canvas2")
- let data = [];
- for (var i = 1; i < 10; i++) {
- for (var j = 0; j < 9; j++) {
- var x = i;
- var y = j;
- var z = this.randomNum(0, 10);
- data.push([x, y, z]);
- }
- this.option3.series[0].data = data;
- // console.log(this.option.series[0].data);
- // 初始化雷达图
- this.chartObj = chartObj;
- this.chartObj2 = chartObj2;
- this.chartObj3 = chartObj3;
- this.chartObj.setOption(this.option);
- this.chartObj2.setOption(this.option2);
- this.chartObj3.setOption(this.option3);
- randomNum(minNum, maxNum) {
- switch (arguments.length) {
- case 1:
- return parseInt(Math.random() * minNum + 1, 10);
- break;
- case 2:
- return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
- default:
- return 0;
- setType(type) {
- this.type = type;
- name: "信息思维与行为2",
- mounted() {
- this.setChart();
-};
-</script>
-<style scoped>
-.sd_name {
- font-size: 20px;
-}
-.sd_class {
- width: 100%;
-.sd_class2 {
- background: #fff;
- margin: 20px 0;
- border-radius: 5px;
- padding: 20px 0;
- box-sizing: border-box;
- position: relative;
-.sd_module {
- display: flex;
- justify-content: space-between;
-.sd_module_content {
- width: calc(100% / 3 - 10px);
- flex-direction: column;
- align-items: center;
-.sd_module_content:nth-child(1) .sd_module_children {
- background: rgb(232, 141, 105);
-.sd_module_content:nth-child(2) .sd_module_children {
- background: rgb(87, 156, 238);
-.sd_module_content:nth-child(3) .sd_module_children {
- background: rgb(112, 221, 232);
-.sd_module_children {
- height: 130px;
- color: #fff;
- justify-content: center;
-.sd_module_children .s {
- position: absolute;
- font-size: 16px;
- top: 10px;
- left: 10px;
-.sd_module_children .s2 span {
- font-size: 45px;
- margin-right: 3px;
-.sd_module_count {
- font-size: 18px;
- margin: 20px 0 0 0;
-.sd_module_count span:nth-child(1) {
- width: 100px;
- text-align: right;
-.sd_module_count span:nth-child(2) {
- text-align: center;
- color: rgb(214, 132, 150);
-.sd_module_data {
- height: 700px;
-.sdddtitle {
- border-bottom: 2px solid rgb(30, 146, 255);
- color: rgb(30, 146, 255);
- top: 20px;
- left: 40px;
-.sd_person_data {
- height: 500px;
-.sd_person_button {
-.sd_person_button span {
- margin-left: 20px;
- padding: 0 0 6px;
- cursor: pointer;
-.sd_person_button .active {
-</style>
@@ -1,263 +0,0 @@
- <div class="data_body">
- <div class="title">
- <span>问答数量</span>
- <div style="width: 100%; height: 400px">
- <!-- <img src="../../assets/dataimage/1.png" style="width:90%" /> -->
- id="charts_canvas"
- style="width: 100%; height: 100%; margin: 0 0 0 1rem"
- <div class="tips">
- <img src="../../../assets/tips.png" alt />
- <span>
- 提示:目前答对
- <span>正确选项{{ Aa }}</span
- >的,有<span>{{ count }}</span
- >位同学!要继续往“实践探究”方向继续加强学习哦!
- <div class="c_box">
- <div class="correct">
- <span
- >答题人数<span>{{ people.length + "人" }}</span></span
- >
- >正确率为<span>{{
- people.length > 0 ? Math.round(count / people.length * 10000) / 10000 * 100 + "%" : 0
- }}</span></span
- props: ["problemJson", "answer", "people"],
- Aa: "",
- count: 0,
- ooption: {
- xdata: ["A", "B", "C", "D"],
- sdata: [0, 0, 0, 0],
- left: "1%",
- bottom: "10%",
- top: "15%",
- containLabel: true,
- type: "value",
- boundaryGap: [0, 1],
- minInterval: 1,
- onZero: false,
- axisLabel: {
- textStyle: {
- color: "#000",
- type: "bar",
- showBackground: true,
- barWidth: "50px",
- position: "top",
- color: "#2e2e2e",
- setChart(option) {
- this.option.xAxis.data = option.xdata;
- this.option.series[0].data = option.sdata;
- watch: {
- problemJson(val) {
- this.Aa = "";
- if (this.answer.indexOf(1) != -1) {
- this.Aa += "A";
- if (this.answer.indexOf(2) != -1) {
- this.Aa += "B";
- if (this.answer.indexOf(3) != -1) {
- this.Aa += "C";
- if (this.answer.indexOf(4) != -1) {
- this.Aa += "D";
- if (this.people.length) {
- this.count = 0;
- for (var i = 0; i < this.people.length; i++) {
- var a = JSON.parse(this.people[i].upload);
- if (a.join(",") == this.answer.join(",")) {
- this.count++;
- } else {
- this.ooption = {
- sdata: [],
- this.ooption.sdata[0] = this.problemJson.A;
- this.ooption.sdata[1] = this.problemJson.B;
- this.ooption.sdata[2] = this.problemJson.C;
- this.ooption.sdata[3] = this.problemJson.D;
- if (!this.chartObj) {
- this.setChart(this.ooption);
- this.option.yAxis.data = this.ooption.xdata;
- this.option.series[0].data = this.ooption.sdata;
- this.$forceUpdate();
- var _this = this;
- window.addEventListener("resize", () => {
- if (_this.chartObj) {
- _this.chartObj.resize();
-.data_body {
- /* display: flex; */
- /* border: 1px solid #eee; */
- margin: 10px auto;
- padding: 10px;
- width: 95%;
-.data_body .title {
- /* position: absolute;
- left: 20px; */
-.tips {
- align-items: flex-start;
- background: #eee;
- padding: 6px 6px;
- color: #171717;
-.tips img {
- margin-right: 5px;
-.tips span span {
- color: #077aff;
- margin: 0 3px;
-.c_box {
- margin-top: 10px;
-.correct + .correct {
- margin-left: 10px;
-.correct {
- width: fit-content;
-.correct span span {
@@ -1,222 +0,0 @@
- <span>答对数量</span>
- >全部答对人数为<span>{{
- count+'人'
- xdata: [],
- formatter: "第{b0}题: 答对{c0}人",
- for (var i = 0; i < this.problemJson; i++) {
- this.ooption.xdata.push(i + 1);
- this.ooption.sdata.push(0);
- let count = 0;
- let el = JSON.parse(this.people[i].upload);
- let count2 = 0;
- for (var j = 0; j < this.problemJson; j++) {
- if (this.answer[j] == el[j]) {
- this.ooption.sdata[j]++;
- count2++;
- if (count2 == this.problemJson) {
- count++;
- this.count = count;
@@ -1,177 +0,0 @@
- <div class="cp_title">
- <span>{{this.problemCourse.title}}</span>
- <div style="margin-top:10px">
- <el-table
- v-loading="Loading"
- ref="table"
- :data="Data"
- border
- :height="500"
- :fit="true"
- style="width: 100%"
- :row-class-name="tableRowClassName"
- :header-cell-style="{ background: 'rgb(238,238,238)' }"
- <el-table-column prop="courseName" label="课程" min-width="25" show-overflow-tooltip></el-table-column>
- <el-table-column prop="classname" label="章节" min-width="20" show-overflow-tooltip></el-table-column>
- <el-table-column prop="name" label="姓名" min-width="15" show-overflow-tooltip></el-table-column>
- <el-table-column prop="time" label="时间" min-width="20"></el-table-column>
- <el-table-column label="操作" min-width="10">
- <template slot-scope="scope">
- <el-button type="primary" size="small" @click="checkProblem(scope.row)">查看</el-button>
- </template>
- </el-table-column>
- </el-table>
- <el-pagination
- background
- layout="prev, pager, next"
- :page-size="10"
- :total="Total"
- @current-change="handleCurrentChange"
- ></el-pagination>
- <el-dialog
- title="查看提问详情"
- :visible.sync="dialogVisible"
- :append-to-body="true"
- width="500px"
- :before-close="handleClose"
- class="dialog_diy"
- <div class="a_addBox">
- <ProblemDetail :problem="problem"></ProblemDetail>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogVisible = false">关 闭</el-button>
- </el-dialog>
-import ProblemDetail from "./problemDetail";
- components: {
- ProblemDetail,
- props: ["problemCourse"],
- Course: this.problemCourse,
- chapters: [],
- Loading: false,
- Data: [],
- Total: 0,
- page: 1,
- courseId: "",
- dialogVisible: false,
- problem: {},
- getData() {
- this.Loading = true;
- let params = {
- cid: this.courseId,
- page: this.page,
- this.ajax
- .get(this.$store.state.api + "getProblem", params)
- .then((res) => {
- this.Loading = false;
- this.Total = res.data[0].length > 0 ? res.data[0][0].num : 0;
- let _array = res.data[0];
- let _chapters = this.chapters;
- _array.forEach((item) => {
- _chapters.forEach((chapter,index) => {
- if (item.chapterid == index) {
- item.classname = chapter.name;
- this.Data = res.data[0];
- })
- .catch((err) => {
- console.error(err);
- tableRowClassName({ row, rowIndex }) {
- if ((rowIndex + 1) % 2 === 0) {
- return "even_row";
- return "";
- handleCurrentChange(val) {
- this.page = val;
- this.getData();
- console.log(`当前页: ${val}`);
- handleClose(done) {
- done();
- checkProblem(res) {
- this.problem = res;
- this.dialogVisible = true;
- // 使用监听的方式,监听数据的变化
- problemCourse(val) {
- this.Course = val;
- var _chapters = JSON.parse(val.chapters);
- this.chapters = [];
- this.courseId = val.courseId;
- _chapters.forEach((element) => {
- this.chapters.push({
- name: element.dyName,
- id: element.chapterInfo[0].chapterid,
- this.page = 1;
- console.log(JSON.parse(this.problemCourse.chapters));
- var _chapters = JSON.parse(this.problemCourse.chapters);
- this.courseId = this.problemCourse.courseId;
-.cp_title {
- font-size: 24px;
-.dialog_diy >>> .el-dialog__header {
- background: #3d67bc !important;
- padding: 15px 20px;
-.dialog_diy >>> .el-dialog__title {
-.dialog_diy >>> .el-dialog__headerbtn {
- top: 19px;
-.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
-.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
@@ -1,170 +0,0 @@
- <div style="width: 100%">
- props: ["problemJson", "chapters"],
- inverse: true,
- offset: -10,
- inside: true,
- left: 10,
- axisTick: {
- z: 10,
- dataZoom: [
- type: "inside",
- yAxisIndex: 0,
- startValue: 0,
- endValue: 5,
- zoomLock: true,
- position: "right",
- this.option.yAxis.data = option.xdata;
- this.chapters.forEach((item, index) => {
- this.ooption.xdata.push(item.name);
- this.problemJson.forEach((item, index) => {
- this.ooption.sdata[item.stage]++;
- left: 20px;
@@ -1,154 +0,0 @@
- <span>量规评分</span>
- props: ["scoreJson"],
- ooption: [
- { value: 0, name: "意识能力" },
- { value: 0, name: "科学探究能力" },
- { value: 0, name: "实践创新能力" },
- { value: 0, name: "学习房媳能力" },
- { value: 0, name: "工程思维能力" },
- name: "量规评分",
- radius: "70%",
- center: ["50%", "50%"],
- normal: {
- formatter: "{d}%",
- position: "inner",
- labelLine: { show: false },
- this.option.series[0].data = option;
- console.log(this.option.series[0].data);
- scoreJson(val) {
- this.ooption = [
- { value: 0, name: "学习反思能力" },
- this.scoreJson.forEach((item) => {
- if (item.rate) {
- this.ooption[0].value += item.rate.ca;
- this.ooption[1].value += item.rate.sia;
- this.ooption[2].value += item.rate.eta;
- this.ooption[3].value += item.rate.pia;
- this.ooption[4].value += item.rate.lra;
- this.option.series[0].data = this.ooption;
- //ca 意识能力 sia 科学探究能力 eta 实践创新能力 pia 学习反思能力 lra 工程思维能力
- window.addEventListener('resize', () => {
@@ -1,167 +0,0 @@
- <span>工具使用</span>
- <div style="width:100%">
- <div id="charts_canvas" class="echart" style="width: 100%; height: 100%;margin:0 0 0 1rem"></div>
- props: ["toolsJson", "tools"],
- tools: [],
- // 1电子白板 2便签 3思维导图 4问卷调查 5量规评分 6协同文档
- type: "line",
- this.chartObj.setOption(option);
- toolsJson(val) {
- console.log(this.tools);
- console.log(this.toolsJson);
- this.tools.forEach((item, index) => {
- if (item == 1) {
- this.ooption.xdata.push("电子白板");
- } else if (item == 2) {
- this.ooption.xdata.push("便签");
- } else if (item == 3) {
- this.ooption.xdata.push("思维导图");
- } else if (item == 4) {
- this.ooption.xdata.push("问卷调查");
- } else if (item == 5) {
- this.ooption.xdata.push("量规评分");
- } else if (item == 6) {
- this.ooption.xdata.push("协同文档");
- this.ooption.tools.push(item);
- this.toolsJson.forEach((item, index) => {
- this.ooption.tools.forEach((x, i) => {
- if (item.tools == x) {
- this.ooption.sdata[i] += item.count;
- console.log(this.ooption);
- this.option.xAxis.data = this.ooption.xdata;
@@ -1,180 +0,0 @@
- <span>作业数量</span>
- props: ["workJson", "chapters"],
- formatter: function (val) {
- var strs = val.split(""); //字符串数组
- var str = "";
- for (var i = 0, s; (s = strs[i++]); ) {
- //遍历字符串数组
- str += s;
- if (!(i % 1)) str += "\n";
- return str;
- workJson(val) {
- this.workJson.forEach((item, index) => {
@@ -1,297 +0,0 @@
- <div class="pdf">
- <div class="show">
- <pdf
- ref="pdf"
- :src="pdfUrl"
- :page="pageNum"
- :rotate="pageRotate"
- @password="password"
- @progress="loadedRatio = $event"
- @page-loaded="pageLoaded($event)"
- @num-pages="pageTotalNum = $event"
- @error="pdfError($event)"
- @link-clicked="page = $event"
- ></pdf>
- <div class="pdf_footer">
- <div class="info">
- <div>当前页数/总页数:{{ pageNum }}/{{ pageTotalNum }}</div>
- <!-- <div>进度:{{loadedRatio}}</div> -->
- <!-- <div>页面加载成功: {{curPageNum}}</div> -->
- <div class="operate">
- <!-- <div class="btn" @click.stop="clock">顺时针</div>
- <div class="btn" @click.stop="counterClock">逆时针</div>-->
- <div class="btn" @click.stop="prePage">上一页</div>
- <div class="btn" @click.stop="nextPage">下一页</div>
- <!-- <div class="btn" @click="scaleD">放大</div>
- <div class="btn" @click="scaleX">缩小</div>
- <div class="btn" @click="fileDownload(pdfUrl,'pdf文件')">下载</div>-->
-import pdf from "vue-pdf";
- name: "vue_pdf_preview",
- props: {
- // 当前pdf路径
- pdfUrl: {
- type: String,
- "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/0629%E5%AE%9E%E6%97%B6%E8%AF%BE%E5%A0%82%E6%A8%A1%E6%8B%9F%E6%BC%94%E7%A4%BA%E8%AF%BE%E4%BB%B61656920880446.pdf",
- getPage: {
- type: Function,
- pdf,
- // 总页数
- pageTotalNum: 1,
- // 当前页数
- pageNum: 1,
- // 加载进度
- loadedRatio: 0,
- // 页面加载完成
- curPageNum: 0,
- // 放大系数 默认百分百
- scale: 69,
- // 旋转角度 ‘90’的倍数才有效
- pageRotate: 0,
- // 单击内部链接时触发 (目前我没有遇到使用场景)
- page: 0,
- loading: null,
- pageTotalNum(val) {
- if (val) {
- this.loading.close();
- this.getPage(1);
- computed: {},
- created() {},
- this.loading = this.$loading.service({
- background: "rgba(255, 255, 255, 0.7)",
- target: document.querySelector(".pdf"),
- let dwidth = document.body.offsetWidth;
- let cwidth =
- (document.getElementsByClassName("pdf")[0].offsetHeight - 100) * 1.77;
- let owidth = "";
- if (cwidth > dwidth) {
- owidth = dwidth + "px";
- owidth = cwidth + "px";
- var a = document.getElementsByClassName("pdf")[0].offsetWidth;
- let _this = this;
- this.$refs.pdf.$el.style.width = owidth;
- this.$emit("getWidth", owidth);
- dwidth = document.body.offsetWidth;
- cwidth =
- _this.$refs.pdf.$el.style.width = owidth;
- _this.$emit("getWidth", owidth);
- // var a = document.getElementsByClassName("pdf")[0].offsetWidth;
- // if (a < 1300) {
- // _this.scale = 100;
- // _this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
- // } else if (a > 1300 && a < 1500) {
- // _this.scale = 80;
- // } else if (a > 1500) {
- // _this.scale = 69;
- // } else if (a == 1500) {
- // }
- //下载PDF
- fileDownload(data, fileName) {
- let blob = new Blob([data], {
- //type类型后端返回来的数据中会有,根据自己实际进行修改
- type: "application/pdf;charset-UTF-8",
- let filename = fileName || "pdf.pdf";
- if (typeof window.navigator.msSaveBlob !== "undefined") {
- window.navigator.msSaveBlob(blob, filename);
- var blobURL = window.URL.createObjectURL(blob);
- // 创建隐藏<a>标签进行下载
- var tempLink = document.createElement("a");
- tempLink.style.display = "none";
- tempLink.href = blobURL;
- tempLink.setAttribute("download", filename);
- if (typeof tempLink.download === "undefined") {
- tempLink.setAttribute("target", "_blank");
- document.body.appendChild(tempLink);
- tempLink.click();
- document.body.removeChild(tempLink);
- window.URL.revokeObjectURL(blobURL);
- //放大
- scaleD() {
- this.scale += 5;
- this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
- //缩小
- scaleX() {
- // scale 是百分百展示 不建议缩放
- if (this.scale == 100) {
- return;
- this.scale += -5;
- console.log(parseInt(this.scale) + "%");
- // 切换上一页
- prePage() {
- var p = this.pageNum;
- p = p > 1 ? p - 1 : this.pageTotalNum;
- this.pageNum = p;
- this.getPage(p);
- // 切换下一页
- nextPage() {
- p = p < this.pageTotalNum ? p + 1 : 1;
- // 顺时针选中角度
- clock() {
- this.pageRotate += 90;
- // 逆时针旋转角度
- counterClock() {
- this.pageRotate -= 90;
- // pdf 有密码 则需要输入秘密
- password(updatePassword, reason) {
- updatePassword(prompt('password is "test"'));
- console.log("...reason...");
- console.log(reason);
- // 页面加载成功 当前页数
- pageLoaded(e) {
- this.$emit("current", e);
- this.curPageNum = e;
- // 异常监听
- pdfError(error) {
- console.error(error);
- // 打印所有
- pdfPrintAll() {
- this.$refs.pdf.print();
- // 打印 第一页和第二页
- pdfPrint() {
- // 第一个参数 文档打印的分辨率
- // 第二个参数 文档打印的页数
- this.$refs.pdf.print(100, [1, 2]);
- // 获取当前页面pdf的文字信息内容
- logContent() {
- this.$refs.pdf.pdf.forEachPage(function (page) {
- return page.getTextContent().then(function (content) {
- let text = content.items.map((item) => item.str);
- let allStr = content.items.reduce(
- (initVal, item) => (initVal += item.str),
- ""
- console.log(allStr); // 内容字符串
- console.log(text); // 内容数组
-.pdf {
- height: 100%;
-.pdf .show {
- overflow: auto;
- margin: auto;
- height: calc(100% - 100px);
-.pdf .pdf_footer {
- bottom: 0;
- left: 0;
- right: 0;
- padding: 10px 0;
- height: 75px;
- background-color: rgba(255, 255, 255, 0.5);
-.pdf .pdf_footer .info {
- flex-wrap: wrap;
-/* .pdf .pdf_footer .info div {
- width: 30%;
-} */
-.pdf .pdf_footer .operate {
- margin: 10px 0 0;
-.pdf .pdf_footer .operate div {
- font-size: 15px;
-.pdf .pdf_footer .operate .btn {
- margin: 5px 10px;
- border-radius: 10px;
- padding: 5px;
- background-color: #066ebe;
@@ -1,260 +0,0 @@
- <!-- <div class="pdf_footer">
- <div>当前页数/总页数:{{pageNum}}/{{pageTotalNum}}</div>
- </div>-->
- this.$emit("getPageTotal", val);
- this.$refs.pdf.$el.style.width =
- document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px";
- /* height: calc(100% - 100px); */
- height: calc(100%);
@@ -1,312 +0,0 @@
- <div v-for="i in numPages" :key="i" class="p-pdf">
- <pdf :src="pdfUrl" :page="i" class="pdfbox"></pdf>
- <span>{{i}}</span>
- <!-- <div class="line"></div> -->
- ppage: {
- type: Number,
- default: 1,
- numPages: 0,
- ppage(val) {
- this.pageNum = val;
- // this.pageNum = this.ppage;
- // let _this = this;
- // this.$refs.pdf.$el.style.width =
- // document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px";
- // window.addEventListener("resize", () => {
- // });
- this.reportPreview();
- async reportPreview() {
- this.src = pdf.createLoadingTask(this.pdfUrl);
- this.src.promise.then((pdf) => {
- this.numPages = pdf.numPages;
- /* height: calc(100%); */
- max-height: 100%;
- /* min-height: 100%; */
-.pdf .show .p-pdf {
- width: calc(100% / 5 - 60px);
- /* overflow: hidden; */
- margin-bottom: 50px;
- margin: 25px;
-.pdf .show .p-pdf .line {
- width: 50px;
- right: -50px;
- background: rgb(255, 186, 96);
- height: 2px;
-.pdf .show .p-pdf span {
-.pdf .show .p-pdf span + span {
-.pdfbox {
- border: 3px solid #000;
- border-radius: 4px;
- overflow: hidden;
- position: sticky;
-.pdf::-webkit-scrollbar {
- /*滚动条整体样式*/
- width: 6px;
- /*高宽分别对应横竖滚动条的尺寸*/
- height: 6px;
-/*定义滚动条轨道 内阴影+圆角*/
- background-color: #b8bdc9;
-/*定义滑块 内阴影+圆角*/
-.pdf::-webkit-scrollbar-thumb {
- -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
- background-color: #2c5ab3;
@@ -1,41 +0,0 @@
- <div class="pd_title">
- <span>{{problem.courseName}}</span>
- <div class="pd_stitle">
- <span>{{problem.classname}}</span>
- <div class="pd_text">
- <span v-html="problem.text"></span>
- props: ["problem"],
- return {};
-.pd_title {
-.pd_stitle {
- font-size: 22px;
-.pd_text {
- height: 400px;
@@ -1,506 +0,0 @@
- <div class="r_box">
- <div class="r_cbox">
- <span>学生姓名</span>
- <el-select
- multiple
- collapse-tags
- class="r_select"
- v-model="uname"
- placeholder="全部"
- filterable
- <el-option
- v-for="item in userAarray"
- :key="item.userid"
- :label="item.username"
- :value="item.userid"
- </el-option>
- </el-select>
- <span>选择阶段</span>
- v-model="chap"
- @change="changeChap"
- v-for="(item, index) in dyList"
- :key="index"
- :label="item.name"
- :value="item.id"
- ></el-option>
- <span>任务内容</span>
- v-model="task"
- <el-option-group
- v-for="(group, index) in dyAarray"
- :label="group.name"
- v-for="(item, index2) in group.taskList"
- :key="index + '-' + index2"
- :value="group.id + '-' + item.id"
- </el-option-group>
- <div class="btn_box">
- <el-button class="btn" type="primary" @click="confirm">确定</el-button>
-import htmlDocx from "html-docx-js/dist/html-docx";
-import saveAs from "file-saver";
- props: ["cid"],
- uname: [],
- chap: [],
- task: [],
- dyAarray: [],
- dyList: [],
- userAarray: [],
- imgList: [],
- askList: [],
- questList: [],
- wordList: [],
- course: {},
- getCourseDetail() {
- cid: this.cid,
- .get(this.$store.state.api + "getCourseWorksReport", params)
- this.course = res.data[0][0];
- var dyJSON = JSON.parse(res.data[0][0].chapters);
- let dyList = [];
- for (var i = 0; i < dyJSON.length; i++) {
- dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
- var a = dyJSON[i].chapterInfo[0].taskJson;
- for (var j = 0; j < a.length; j++) {
- dyList[i].taskList.push({ name: a[j].task, id: j });
- this.dyList = dyList;
- this.userAarray = res.data[1];
- console.log(res.data[0][1]);
- this.imgList = res.data[2];
- this.askList = res.data[3];
- this.questList = res.data[4];
- this.wordList = res.data[5];
- confirm() {
- var _uname = [];
- var _userA = this.userAarray;
- var _chap = JSON.parse(JSON.stringify(this.chap));
- var _task = this.task;
- if (this.uname.length) {
- for (var i = 0; i < _userA.length; i++) {
- if (this.uname.join(",").indexOf(_userA[i].userid) != -1) {
- _uname.push(_userA[i]);
- if (!_chap.length) {
- for (var i = 0; i < this.dyList.length; i++) {
- _chap.push(this.dyList[i].id);
- let imgList = this.imgList;
- let askList = this.askList;
- let questList = this.questList;
- let wordList = this.wordList;
- let workArray = [];
- // json{
- // img: [],
- // askList: [],
- // questList: {},
- // wordList: [],
- // chapName: "",
- // taskName: "",
- // username:""
- for (let i = 0; i < _uname.length; i++) {
- for (let chapI = 0; chapI < _chap.length; chapI++) {
- if (_task.length) {
- for (let taskI = 0; taskI < _task.length; taskI++) {
- let _tI = _task[taskI].split("-");
- if (_tI[0] == _chap[chapI]) {
- let _workjson = {
- img: [],
- chapName:
- "第" +
- (parseInt(_chap[chapI]) + 1) +
- "阶段 " +
- this.dyList[_chap[chapI]].name,
- taskName:
- "任务" +
- (parseInt(_tI[1]) + 1) +
- this.dyList[_chap[chapI]].taskList[_tI[1]].name,
- username: _uname[i].username,
- // imgList;askList;questList;wordList;
- for (let a = 0; a < imgList.length; a++) {
- if (
- imgList[a].stage == _chap[chapI] &&
- imgList[a].task == _tI[1] &&
- imgList[a].userid == _uname[i].userid
- ) {
- _workjson.img.push({ src: imgList[a].content });
- for (let b = 0; b < askList.length; b++) {
- askList[b].stage == _chap[chapI] &&
- askList[b].task == _tI[1] &&
- askList[b].userid == _uname[i].userid
- const element = askList[b];
- let a1 = JSON.parse(element.content)[0];
- let b1 = a1.anwer.split(",");
- let c1 = [];
- for (var j1 = 0; j1 < b1.length; j1++) {
- c1.push(parseInt(b1[j1]));
- a1.askJson.radio = c1;
- a1.askJson.time = element.time;
- _workjson.askList.push(a1.askJson);
- for (let c = 0; c < questList.length; c++) {
- questList[c].stage == _chap[chapI] &&
- questList[c].task == _tI[1] &&
- questList[c].userid == _uname[i].userid
- const element = questList[c];
- _workjson.questList.push(JSON.parse(element.content)[0]);
- for (let d = 0; d < wordList.length; d++) {
- wordList[d].stage == _chap[chapI] &&
- wordList[d].task == _tI[1] &&
- wordList[d].userid == _uname[i].userid
- const element = wordList[d];
- _workjson.wordList.push(element.content);
- workArray.push(_workjson);
- for (
- let taskI = 0;
- taskI < this.dyList[_chap[chapI]].taskList.length;
- taskI++
- let _tI = [
- _chap[chapI],
- this.dyList[_chap[chapI]].taskList[taskI].id,
- var _course = `<h1>${this.course.title}</h1>`;
- let html = "";
- for (let i = 0; i < workArray.length; i++) {
- let _html = this.setHtml(workArray[i]);
- html += _html;
- this.generate(_course + html);
- console.log(workArray);
- setHtml(workJson) {
- var _title =
- // style='display:flex;align-items:center'
- "<div >" +
- "<h2>" +
- workJson.chapName +
- "-" +
- workJson.username;
- ("</h2>");
- ("</div>");
- var _subtitle = "<h3>" + workJson.taskName + "</h3>";
- var _img = "";
- if (workJson.img.length > 0) {
- for (var i = 0; i < workJson.img.length; i++) {
- // _img+=`<div style="margin-top:10px"><div>图片${
- // i + 1
- // }:<a href='${ workJson.img[i].src}'>${ workJson.img[i].src}</a></div>`
- _img += `<div style="margin-top:10px"><div>图片${
- i + 1
- }</div><img style="max-width:500px" src="${
- workJson.img[i].src
- }"/></div>`;
- var _ask = "";
- if (workJson.askList.length > 0) {
- var _ask = "<h3>问卷调查</h3>";
- for (var i = 0; i < workJson.askList.length; i++) {
- var _div = document.createElement("div");
- _div.innerHTML = `<h4>问卷标题:${workJson.askList[i].askTitle}</h4>`;
- for (var j = 0; j < workJson.askList[i].askJson.length; j++) {
- var _div2 = document.createElement("div");
- _div2.innerHTML = `<h5>第${j + 1}题:${
- workJson.askList[i].askJson[j].askstitle
- } 选择:${workJson.askList[i].radio[j] + 1}</h5> `;
- var _div3 = document.createElement("div");
- var z = 0;
- z < workJson.askList[i].askJson[j].checkList.length;
- z++
- _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${
- workJson.askList[i].askJson[j].checkList[z]
- }</span>`;
- _div2.innerHTML += `<div>${_div3.innerHTML}</div>`;
- _div.innerHTML += `<div>${_div2.innerHTML}</div>`;
- _ask += `<div>${_div.innerHTML}</div>`;
- var _answer = "";
- if (workJson.questList.length > 0) {
- var _answer = "<h3>问答</h3>";
- for (var i = 0; i < workJson.questList.length; i++) {
- _div.innerHTML = `<h4>问答:${workJson.questList[i].answerTitle}</h4>`;
- _div.innerHTML += `<div>${workJson.questList[i].answer}</div>`;
- _answer += `<div>${_div.innerHTML}</div>`;
- var _link = "";
- if (workJson.wordList.length > 0) {
- for (var i = 0; i < workJson.wordList.length; i++) {
- _link += `<div style="margin-top:10px"><a href='${workJson.wordList[i]}'>${workJson.wordList[i]}</a></div>`;
- !workJson.img.length &&
- !workJson.askList.length &&
- !workJson.questList.length &&
- !workJson.wordList.length
- return _title + _subtitle + _img + _ask + _answer + _link;
- async generate(a) {
- // 将html文件中需要用到的数据挂载到store上
- this.$store.commit("update", ["report", a]);
- console.log(this.$store.state.report);
- const content = `<!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>报告</title>
- </head>
- <body>
- ${this.$store.state.report}
- </body>
- </html>`;
- // debugger
- //生成报告
- const link = document.createElement("a");
- // link.download = "报告.html"; // 文件名
- let dname = this.course.title+'-'
- _uname.push(_userA[i].username);
- dname+=_uname.join('、')+'.html'
- dname+='全部学生.html'
- link.download = dname; // 文件名
- link.style.display = "none";
- // 创建文件流
- // 创建bolb实例时,内容一定要放在[]中
- const blob = new Blob([content], {
- type: "text/plain;charset='utf-8'",
- link.href = window.URL.createObjectURL(blob);
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- // saveAs(
- // htmlDocx.asBlob(content, {
- // orientation: "landscape", //跨域设置
- // }),
- // //文件名
- // "报告.doc"
- // );
- changeChap() {
- let _dyList = this.dyList;
- this.dyAarray = [];
- this.task = [];
- for (var i = 0; i < _dyList.length; i++) {
- if (this.chap.indexOf(_dyList[i].id) != -1) {
- this.dyAarray.push(_dyList[i]);
- cid(newValue, oldValue) {
- this.getCourseDetail();
-.r_box {
-.r_cbox {
- margin-bottom: 20px;
-.r_cbox span {
- margin-right: 20px;
-.r_box .r_select {
- width: 400px;
-.btn_box {
- margin: 40px 0 0 0;
-.btn_box .btn {
- width: 60%;
- background: rgb(14, 114, 230);
@@ -1,406 +0,0 @@
- <div style="" class="cdr_box">
- <div id="charts_canvas1" class="echart"></div>
- <div id="charts_canvas2" class="echart"></div>
- <div id="charts_canvas3" class="echart" ref="table">
- <div style="font-size: 13px; font-weight: 600">
- 项目综合评估:各个阶段评价平均分
- class="table"
- :data="tdata"
- :height="tableHeight"
- :header-cell-style="{
- background: '#fff',
- fontSize: '12px',
- fontWeight: 'unset',
- padding: '0',
- border: 'unset',
- }"
- header-row-class-name="header_row_class"
- <el-table-column label="排名" min-width="29px" align="center">
- <div style="font-weight: 600">{{ scope.$index + 1 }}</div>
- <el-table-column
- prop="name"
- label="名称"
- min-width="39px"
- align="center"
- <div style="color: rgb(96, 96, 96); font-weight: 600">
- {{ scope.row.name }}
- </template></el-table-column
- prop="rate"
- label="完成度"
- ><template slot-scope="scope">
- <div style="color: rgb(35, 91, 188); font-weight: 600">
- {{ scope.row.rate }}
- prop="rate1"
- label="活跃度"
- {{ scope.row.rate1 }}
- prop="rate2"
- label="参与度"
- {{ scope.row.rate2 }}
- prop="rate3"
- label="综合表现"
- min-width="49px"
- <div style="color: rgb(35, 91, 188);font-weight: 600">{{ scope.row.rate3 }}</div>
- prop="ratez"
- label="综合"
- min-width="29px"
- <div style="color: rgb(233, 140, 148);font-weight: 600">{{ scope.row.ratez }}</div>
- chartObj1: null,
- tableHeight: 0,
- tdata: [],
- option1: {
- title: {
- text: "项目完成度:各个阶段完成情况",
- fontSize: 13,
- trigger: "axis",
- axisPointer: {
- type: "cross",
- backgroundColor: "#6a7985",
- data: ["个人完成度", "班级平均完成度"],
- top: "bottom",
- icon: "circle",
- left: "15%",
- right: "5%",
- bottom: "20%",
- xAxis: [
- data: ["阶段1", "阶段2", "阶段3", "阶段4", "阶段5"],
- yAxis: [
- name: "个人完成度",
- areaStyle: {},
- data: [0, 0, 0, 0, 0],
- name: "班级平均完成度",
- text: "项目活跃度:不同任务的学习时间占比",
- // Use axis to trigger tooltip
- type: "shadow", // 'shadow' as default; can also be 'line' or 'shadow'
- right: "0%",
- bottom: "15%",
- name: "任务1",
- stack: "total",
- focus: "series",
- name: "任务2",
- name: "任务3",
- name: "任务4",
- name: "任务5",
- return "even_row row_class";
- return "row_class";
- const chartObj1 = this.$echarts.init(
- this.$el.querySelector("#charts_canvas1")
- let _array1 = [];
- let _array2 = [];
- for (var i = 0; i < 5; i++) {
- // this.option.series[0].data[i].value = this.randomNum(30, 80);
- _array1.push(this.randomNum(50, 100));
- _array2.push(this.randomNum(50, 100));
- this.option1.series[0].data = _array1;
- this.option1.series[1].data = _array2;
- this.$el.querySelector("#charts_canvas2")
- let _array21 = [];
- let _array22 = [];
- let _array23 = [];
- let _array24 = [];
- let _array25 = [];
- _array21.push(this.randomNum(2, 20));
- _array22.push(this.randomNum(2, 20));
- _array23.push(this.randomNum(2, 20));
- _array24.push(this.randomNum(2, 20));
- _array25.push(this.randomNum(2, 20));
- this.option2.series[0].data = _array21;
- this.option2.series[1].data = _array22;
- this.option2.series[2].data = _array23;
- this.option2.series[3].data = _array24;
- this.option2.series[4].data = _array25;
- this.chartObj1 = chartObj1;
- this.chartObj1.setOption(this.option1);
- this.tdata = [];
- var _rate = this.randomNum(3, 5);
- var _rate1 = this.randomNum(3, 5);
- var _rate2 = this.randomNum(3, 5);
- var _rate3 = this.randomNum(3, 5);
- var _ratez = (_rate + _rate1 + _rate2 + _rate3) / 4;
- this.tdata.push({
- name: "阶段" + (i + 1),
- rate: _rate.toFixed(1),
- rate1: _rate1.toFixed(1),
- rate2: _rate2.toFixed(1),
- rate3: _rate3.toFixed(1),
- ratez: _ratez.toFixed(1),
- this.tdata.sort(this.sortId);
- this.$nextTick(() => {
- this.setTableHeight();
- if (_this.chartObj1) {
- _this.chartObj1.resize();
- _this.chartObj2.resize();
- _this.setTableHeight();
- sortId(a, b) {
- return b.ratez - a.ratez;
- setTableHeight() {
- this.tableHeight =
- window.innerHeight - this.$refs.table.offsetHeight - 190;
- // 监听窗口大小变化
-.cdr_box {
- width: calc(100% - 5px);
-.echart {
- width: calc(100% / 3 - 5px);
-.el-table >>> .even_row {
- background-color: rgb(238, 243, 250) !important;
-.el-table >>> .row_class td {
- padding: 8px 0;
- border: unset;
-.el-table >>> .row_class {
- background: rgb(249, 249, 249);
-.el-table >>> .row_class .cell {
- padding: 0;
- white-space: nowrap;
- font-size: 12px;
-.el-table >>> .header_row_class .cell {
@@ -1,271 +0,0 @@
- <div v-loading="isloading">
- <div class="ci_info" v-if="Object.keys(courseInfo).length">
- <div class="ci_info_box">
- <span>项目名称:</span><span>{{ courseInfo.title }}</span>
- <span>创建人:</span><span>{{ courseInfo.name }}</span>
- <span>协同人员:</span><span>{{ teacher ? teacher : "无协同人员" }}</span>
- <div class="ci_info_box2">
- 阶段<span>{{ tool.stage }}</span>个
- 任务<span>{{ tool.task }}</span>个
- 工具<span>{{ tool.tool }}</span>个
- <div style="width: 90%; height: calc(100% - 130px); margin: 10px auto 0">
- <div id="charts_canvas" class="echart" style="width: 100%; height: 100%"></div>
- props: ["courseid"],
- isloading:false,
- chartJson: {},
- courseInfo: {},
- teacher: "",
- tool: {
- stage: 0,
- task: 0,
- tool: 0,
- toolbox: {
- grid: {},
- name: "学习活动时间分配图",
- // radius: [10, "80%"],
- // roseType: "area",
- // itemStyle: {
- // borderRadius: 8,
- // },
- position: "inside",
- formatter: "{b}\n{d}%",
- { value: 0, name: "思维网格" },
- { value: 0, name: "思维导图" },
- { value: 0, name: "电子白板" },
- { value: 0, name: "选择题" },
- // { value: 0, name: "自主学习" },
- { value: 0, name: "其他" },
- getInfo() {
- this.isloading = true
- cid: this.courseid,
- console.log(this.courseid);
- if (!this.courseid) {
- .get(this.$store.state.api + "getCourseInfo", params)
- this.isloading = false
- this.courseInfo = res.data[0][0];
- let teachers = res.data[1];
- let teacher = [];
- for (var i = 0; i < teachers.length; i++) {
- teacher.push(teachers[i].name);
- this.teacher = teacher.join("、");
- let chapters = JSON.parse(res.data[0][0].chapters);
- var task = 0;
- var tool = 0;
- var wang = 0;//7
- var si = 0;//3
- var dian = 0;//1
- var xuan = 0;//4
- var other = 0;
- for (var i = 0; i < chapters.length; i++) {
- task += chapters[i].chapterInfo[0].taskJson.length;
- var j = 0;
- j < chapters[i].chapterInfo[0].taskJson.length;
- j++
- if (chapters[i].chapterInfo[0].taskJson[j].toolChoose.length) {
- for (var k = 0; k < chapters[i].chapterInfo[0].taskJson[j].toolChoose.length; k++) {
- if (chapters[i].chapterInfo[0].taskJson[j].toolChoose[k].tool.indexOf(7) != -1) {
- wang++
- } else if (chapters[i].chapterInfo[0].taskJson[j].toolChoose[k].tool.indexOf(3) != -1) {
- si++
- } else if (chapters[i].chapterInfo[0].taskJson[j].toolChoose[k].tool.indexOf(1) != -1) {
- dian++
- } else if (chapters[i].chapterInfo[0].taskJson[j].toolChoose[k].tool.indexOf(4) != -1) {
- xuan++
- other++
- tool += chapters[i].chapterInfo[0].taskJson[j].toolChoose.length;
- this.chartJson = {
- wang,
- si,
- dian,
- xuan,
- other
- this.tool.stage = chapters.length;
- this.tool.task = task;
- this.tool.tool = tool;
- // document.getElementById("#charts_canvas")
- let _array = [];
- // for (var i = 0; i < 5; i++) {
- // // _array.push(this.randomNum(0, 80));
- this.option.series[0].data[0].value = this.chartJson.wang
- this.option.series[0].data[1].value = this.chartJson.si
- this.option.series[0].data[2].value = this.chartJson.dian
- this.option.series[0].data[3].value = this.chartJson.xuan
- this.option.series[0].data[4].value = this.chartJson.other
- // this.option.series[0].data[0].value = _array;
- courseid(newValue, oldValue) {
- this.getInfo();
- created() {
-.ci_info {
- font-size: 14px;
-.ci_info_box {
- width: 90%;
- margin: 0 auto;
-.ci_info_box span {
-.ci_info_box span+span {
- text-overflow: ellipsis;
-.ci_info_box+.ci_info_box {
-.ci_info_box2 {
- color: rgb(15, 120, 187);
-.ci_info_box2 div {
-.ci_info_box2 span {
- color: rgb(234, 146, 59);
- width: 30px;
- font-size: 25px;
- font-weight: 700;
- color: #5c549f;
@@ -1,317 +0,0 @@
- <div style="width: 95%; height: calc(100% - 40px); margin: 20px auto;" ref="innder">
- <!-- <div
- style="width: 100%; height: 100%"
- ></div> -->
- <!-- <div style="font-size: 13px; font-weight: 600">
- <el-table class="table" :data="tdata" :height="tableHeight" :fit="true" style="width: 100%" :header-cell-style="{
- }" :row-class-name="tableRowClassName" header-row-class-name="header_row_class">
- <el-table-column prop="name" label="名称" min-width="39px" align="center">
- <el-table-column prop="rate" label="完成度" min-width="39px" align="center"><template slot-scope="scope">
- </template></el-table-column>
- <el-table-column prop="rate1" label="活跃度" min-width="39px" align="center"><template slot-scope="scope">
- <el-table-column prop="rate2" label="参与度" min-width="39px" align="center"><template slot-scope="scope">
- <el-table-column prop="rate3" label="综合表现" min-width="49px" align="center"><template slot-scope="scope">
- <div style="color: rgb(233, 140, 148);font-weight: 600">{{ scope.row.rate3 }}</div>
- <!-- <el-table-column prop="ratez" label="综合" min-width="29px" align="center"><template slot-scope="scope">
- </template></el-table-column> -->
- props: ["userid", "courseid"],
- workJson: [],
- radius: [10, "80%"],
- roseType: "area",
- borderRadius: 8,
- { value: 0, name: "问卷调查" },
- { value: 0, name: "自主学习" },
- uid: this.userid,
- console.log(this.userid);
- if (!this.userid) {
- .get(this.$store.state.api + "getUserInfo", params)
- let chapters = JSON.parse(res.data[2][0].chapters);
- let workJson = []
- let _pWork = res.data[3];
- let _allWork = res.data[4];
- let _allComment = res.data[5];
- workJson[i] = { tool: 0, ptool: 0, work: 0, ishuo: 0, isCan: 0 }
- // 1、电子白板,3、思维导图,6协同文档,7思维网格 16、作业提交,40.项目-学生互评 41.项目-下拉选择题 42.项目-录音功能
- let _toolsAarry = [1, 3, 6, 7, 16, 15, 4, 40, 41, 42];
- var k = 0;
- k < chapters[i].chapterInfo[0].taskJson[j].toolChoose.length;
- k++
- _toolsAarry.indexOf(
- chapters[i].chapterInfo[0].taskJson[j].toolChoose[k].tool[0]
- ) != -1
- tool++;
- workJson[i].tool++
- for (var k = 0; k < _pWork.length; k++) {
- if (_pWork[k].stage == i) {
- workJson[i].ptool++
- for (var k = 0; k < _allComment.length; k++) {
- if (_allComment[k].stage == i) {
- workJson[i].ishuo++
- this.userinfo = res.data[0][0];
- this.ccount = tool;
- this.islearn = tool - parseInt(res.data[1][0].vcount);
- this.iscount = res.data[1][0].vcount;
- this.vcount = 0;
- for (var i = 0; i < workJson.length; i++) {
- if (workJson[i].ptool > workJson[i].tool) {
- workJson[i].work = 5
- } else if( workJson[i].tool === 0){
- }else{
- workJson[i].work = Math.round(workJson[i].ptool / workJson[i].tool * 100 / 20)
- if (workJson[i].ptool) {
- workJson[i].isCan = 1
- this.workJson = workJson
- console.log(workJson);
- // const chartObj = this.$echarts.init(
- // //劳动课程
- // this.$el.querySelector("#charts_canvas")
- // // document.getElementById("#charts_canvas")
- // let _array = [];
- // for (var i = 0; i < 6; i++) {
- // // this.option.series[0].data[0].value = _array;
- // // 初始化雷达图
- // this.chartObj = chartObj;
- // this.chartObj.setOption(this.option);
- for (var i = 0; i < this.workJson.length; i++) {
- var _rate = this.workJson[i].work < 3 ? 3 : this.workJson[i].work;
- var _rate1 = this.workJson[i].ishuo ? 5 : 3;
- var _rate2 = this.workJson[i].isCan ? 5 : 3;
- var _rate3 = (_rate + _rate1 + _rate2) / 3;
- // if (_this.chartObj) {
- // _this.chartObj.resize();
- console.log(this.$refs.innder.offsetHeight);
- this.tableHeight = this.$refs.innder.offsetHeight
- // window.innerHeight - this.$refs.table.offsetHeight - 600;
- userid(newValue, oldValue) {
-.el-table>>>.even_row {
-.el-table>>>.row_class td {
-.el-table>>>.row_class {
-.el-table>>>.row_class .cell {
-.el-table>>>.header_row_class .cell {
-.el-table::before {
- height: 0;
- <div style="color: #5c549f; font-weight: 600">
@@ -1,235 +0,0 @@
- <div style="width: 95%; height: calc(100%);margin: 0 auto;">
- // title: {
- // text: "项目完成度:各个阶段完成情况",
- // textStyle: {
- // fontSize: 13,
- workJson[i] = { tool: 0, ptool: 0, work: 0, allTool: 0, allWork: 0 }
- for (var k = 0; k < _allWork.length; k++) {
- if (_allWork[k].stage == i) {
- workJson[i].allTool++
- workJson[i].work = 100
- workJson[i].work = Math.round(workJson[i].ptool / workJson[i].tool * 100)
- if ((workJson[i].allTool / res.data[1][0].workCount) > workJson[i].tool) {
- workJson[i].allWork = 100
- workJson[i].allWork = Math.round((workJson[i].allTool / res.data[1][0].workCount) / workJson[i].tool * 100)
- let _xarray = [];
- _array1.push(this.workJson[i].work);
- _array2.push(this.workJson[i].allWork);
- _xarray.push("阶段" + (i + 1))
- this.option.series[0].data = _array1;
- this.option.xAxis[0].data = _xarray;
- this.option.series[1].data = _array2;
-<style>
@@ -1,769 +0,0 @@
- <div style="background: #fff; padding: 10px 0; height: 100%">
- <div class="sd_person_button">
- <span @click="setType(1)" :class="{ active: type == 1 }">项目目标设置</span>
- <span @click="setType(2)" :class="{ active: type == 2 }">班级项目评价得分占比</span>
- <!-- <span @click="setType(3)" :class="{ active: type == 3 }">其他项目</span> -->
- <div style="display: flex; width: 100%; height: calc(100% - 50px)">
- <div id="person_canvas1" class="echart" v-show="type == 1"
- style="width: 100%; height: 100%;display: flex;align-items: center;justify-content: center;">
- <span v-if="!eJson">暂无数据</span>
- <div id="person_canvas2" class="echart" v-show="type == 2"
- <!-- <div class="box2" v-show="work.length ? true : false">
- <div v-for="(item,index) in work" :key="index" class="target_box">
- <div class="target_task">
- <span>第{{item.stage+1}}阶段</span>
- <span>任务{{item.task+1}}</span>
- <div class="target_content_box">
- <div v-for="(target,k) in item.work" :key="index+'-'+k"
- :style="{width:(target.count / item.count * 100)+'%',backgroundColor:color[k]}">
- <el-tooltip :content="target.name+' '+target.count">
- <span class="targetA">{{target.count}}</span>
- </el-tooltip>
- <span v-show="!work.length ? true : false">暂无数据</span> -->
- <span v-show="!randarJson.length ? true : false">暂无数据</span>
- randarJson: [],
- isloading: false,
- color: [],
- workW: [],
- work: [],
- eJson: "",
- type: 1,
- fontSize: 10
- // text: "项目活跃度:不同任务的学习时间占比",
- right: "15%",
- show: false
- radarOption: {
- splitNumber: 5,
- triggerOn: "mousemove",
- //雷达图的tooltip不会超出div,也可以设置position属性,position定位的tooltip 不会随着鼠标移动而位置变化,不友好
- confine: true,
- enterable: true, //鼠标是否可以移动到tooltip区域内
- backgroundColor: "rgba(255,255,255,0.7)",
- // 文字样式
- align: "left",
- left: "right",
- radar: {
- radius: ["0%", "70%"],
- shape: "circle",
- axisName: {
- color: "#58a5e6",
- formatter: function (value, indicator) {
- // value = value.replace(/\S{2}/g, function (match) {
- // return match + "\n";
- return value;
- indicator: [
- // 雷达图的指示器,用来指定雷达图中的多个变量(维度)
- // 雷达图背景的颜色,在这儿随便设置了一个颜色,完全不透明度为0,就实现了透明背景
- splitArea: {
- areaStyle: {
- color: "rgba(255,0,0,0)", // 图表背景的颜色
- lineStyle: {
- width: 1,
- color: "rgba(131,141,158,.1)", // 设置网格的颜色
- name: "目标得分占比", // tooltip中的标题
- type: "radar", // 表示是雷达图
- symbol: "circle", // 拐点的样式,还可以取值'rect','angle'等
- symbolSize: 8, // 拐点的大小
- opacity: 0.2,
- // 设置各个指标原始值
- value: [],
- // 设置区域边框和区域的颜色
- if (this.type == 1 && this.eJson) {
- // this.option2.series.data = [
- // {
- // name: "信息意识",
- // value: 15,
- // children: [
- // name: "信息应用意识",
- // value: this.randomNum(1, 5),
- // name: "信息安全意识",
- // name: "信息感知意识",
- // ],
- // name: "信息社会责任",
- // name: "信息伦理道德",
- // name: "信息法律法规",
- // value: this.randomNum(1, 10),
- // name: "信息知识与技能",
- // name: "信息应用技能",
- // value: 5,
- // name: "信息科学知识",
- // value: 10,
- // name: "信息思维与行为",
- // name: "信息思维",
- // name: "信息行为",
- // ];
- var res = this.eJson;
- var _array = [];
- let i = 0;
- for (var item in res) {
- let num = Object.keys(res);
- let count = 10 / num.length;
- let _item = res[item];
- _array.push({ name: _item.name, value: count, children: [] });
- let j = 0;
- for (var item2 in _item.child) {
- let num2 = Object.keys(res);
- let count2 = count / num2.length;
- let _item2 = _item.child[item2];
- _array[i].children.push({
- name: _item2.name,
- value: count2,
- children: [],
- for (var item3 in _item2.child) {
- let num3 = Object.keys(res);
- let count3 = count2 / num3.length;
- let _item3 = _item2.child[item3];
- _array[i].children[j].children.push({
- name: _item3.name,
- value: count3,
- j++;
- i++;
- console.log(item);
- this.option2.series.data = _array
- } else if (this.type == 2) {
- // const chartObj3 = this.$echarts.init(
- // this.$el.querySelector("#person_canvas2")
- // let _array21 = [];
- // let _array22 = [];
- // let _array23 = [];
- // let _array24 = [];
- // let _array25 = [];
- // // this.option.series[0].data[i].value = this.randomNum(30, 80);
- // _array21.push(this.randomNum(2, 20));
- // _array22.push(this.randomNum(2, 20));
- // _array23.push(this.randomNum(2, 20));
- // _array24.push(this.randomNum(2, 20));
- // _array25.push(this.randomNum(2, 20));
- // this.option3.series[0].data = _array21;
- // this.option3.series[1].data = _array22;
- // this.option3.series[2].data = _array23;
- // this.option3.series[3].data = _array24;
- // this.option3.series[4].data = _array25;
- if (this.randarJson.length) {
- let radarOption = JSON.parse(JSON.stringify(this.radarOption))
- for (var i = 0; i < this.randarJson.length; i++) {
- radarOption.radar.indicator.push({
- name: this.randarJson[i].target,
- max: 5,
- radarOption.series[0].data[0].value.push((this.randarJson[i].value / this.randarJson[i].count).toFixed(1));
- this.chartObj3.setOption(radarOption);
- // var _work = []
- // this.color = []
- // for (var i = 0; i < this.workW.length; i++) {
- // _work[i] = { stage: this.workW[i].stage, task: this.workW[i].task, work: [], count: 0 }
- // for (var j = 0; j < this.workW[i].work.length; j++) {
- // for (var k = 0; k < this.workW[i].work[j].target.length; k++) {
- // this.color.push(this.color16())
- // _work[i].work.push(this.workW[i].work[j].target[k])
- // _work[i].count += this.workW[i].work[j].target[k].count
- // this.work = _work;
- // console.log(_work);
- // this.$forceUpdate();
- // if (_this.chartObj2) {
- // _this.chartObj2.resize();
- // _this.chartObj3.resize();
- if (_this.chartObj2) {
- if (_this.chartObj3) {
- _this.chartObj3.resize();
- let _isWorks = res.data[6];
- var randarJson = []
- var randarAarray = []
- this.eJson = res.data[2][0].content ? JSON.parse(res.data[2][0].content) : "";
- } else if (workJson[i].tool === 0) {
- let _workW = []
- for (var i = 0; i < _isWorks.length; i++) {
- if (chapters[_isWorks[i].stage].chapterInfo[0].taskJson[_isWorks[i].task].eList && chapters[_isWorks[i].stage].chapterInfo[0].taskJson[_isWorks[i].task].eList.length) {
- _workW.push({ stage: _isWorks[i].stage, task: _isWorks[i].task, rate: JSON.parse(_isWorks[i].rate), elist: chapters[_isWorks[i].stage].chapterInfo[0].taskJson[_isWorks[i].task].eList })
- // else {
- // let elist = [
- // "value": "意识能力",
- // "score": 5,
- // "target": [
- // "name": "意识能力1",
- // "per": 0.5
- // "name": "意识能力2",
- // ]
- // "value": "科学探究能力",
- // "name": "科学探究能力1",
- // "name": "科学探究能力2",
- // "value": "实践创新能力",
- // "name": "实践创新能力1",
- // "name": "实践创新能力2",
- // "value": "学习反思能力",
- // "name": "学习反思能力1",
- // "name": "学习反思能力2",
- // "value": "工程思维能力",
- // "name": "工程思维能力1",
- // "name": "工程思维能力2",
- // _workW.push({ stage: _isWorks[i].stage, task: _isWorks[i].task, rate: JSON.parse(_isWorks[i].rate), elist: elist })
- for (var i = 0; i < _workW.length; i++) {
- _workW[i].work = []
- for (var j = 0; j < _workW[i].elist.length; j++) {
- if (_workW[i].elist[j].target) {
- if (randarAarray.indexOf(_workW[i].elist[j].target) == -1) {
- randarAarray.push(_workW[i].elist[j].target)
- // for (var k = 0; k < _workW[i].elist[j].target.length; k++) {
- // _workW[i].elist[j].target[k].count = _workW[i].rate[_workW[i].elist[j].value] * _workW[i].elist[j].target[k].per
- _workW[i].work.push({ name: _workW[i].elist[j].value, target: _workW[i].elist[j].target })
- _workW[i].work[_workW[i].work.length - 1][_workW[i].elist[j].value] = _workW[i].rate[_workW[i].elist[j].value]
- _workW[i].work[_workW[i].work.length - 1].value = _workW[i].rate[_workW[i].elist[j].value]
- for (var k = 0; k < randarAarray.length; k++) {
- randarJson.push({ target: randarAarray[k], count: 0, value: 0 })
- for (var j = 0; j < _workW[i].work.length; j++) {
- if (_workW[i].work[j].target == randarAarray[k]) {
- randarJson[k].count++
- randarJson[k].value += _workW[i].work[j].value
- console.log('chapter=-----', chapters);
- console.log('_workW=-----', _workW);
- console.log('randarAarray=-----', randarAarray);
- console.log('randarJson=-----', randarJson);
- this.workW = _workW
- this.randarJson = randarJson
- if (this.chartObj2) {
- this.chartObj2.dispose();
- if (this.chartObj3) {
- this.chartObj3.dispose();
- color16() {//十六进制颜色随机
- var r = Math.floor(Math.random() * 256);
- var g = Math.floor(Math.random() * 256);
- var b = Math.floor(Math.random() * 256);
- var color = '#' + r.toString(16) + g.toString(16) + b.toString(16);
- return color;
- margin-bottom: 10px;
-.target_box {
- width: 80%;
-.target_box+.target_box {
-.target_task {
- color: rgb(91, 91, 91);
-.target_content_box {
- width: calc(100% - 100px);
-.target_content_box div {
- height: 50px;
-.box2 {
- margin-top: 40px;
- height: 80%;
-.targetA {
- color: "#5c549f",
- border-bottom: 2px solid #5c549f;
@@ -1,203 +0,0 @@
- <div class="si_head" v-if="Object.keys(userinfo).length">
- <img class="si_img" src="@/assets/portal.png" alt="" />
- <div class="si_content">
- <span>姓名:</span><span>{{ userinfo.name }}</span>
- <span>班级:</span><span>{{
- userinfo.classname ? userinfo.classname : "暂无班级"
- }}</span>
- <span>账号:</span><span>{{ userinfo.username }}</span>
- <div class="si_course" v-if="Object.keys(userinfo).length">
- <div class="si_course_head">项目概况</div>
- <div class="si_course_content">
- <div class="si_course_box">
- <div>{{ ccount }}</div>
- <div>全部任务</div>
- <div>{{ iscount }}</div>
- <div>已完成</div>
- <!-- <div class="si_course_box">
- <div>{{ vcount }}</div>
- <div>进行中</div>
- <div>{{ islearn }}</div>
- <div>待学习</div>
- userinfo: {},
- vcount: 0,
- iscount: 0,
- islearn: 0,
- ccount: 0,
- // tool += chapters[i].chapterInfo[0].taskJson[j].toolChoose.length;
- // this.ccount = res.data[1][0].ccount;
- // let count = this.randomNum(0, parseInt(res.data[1][0].vcount));
-.si_head {
-.si_img {
- width: 90px;
- height: 90px;
-.si_content {
- width: calc(100% - 150px);
- margin-left: 15px;
-.si_content div+div {
-.si_content div {
-.si_content span+span {
- width: calc(100% - 50px);
-.si_course {
- width: calc(100% - 60px);
- margin-top: 20px;
-.si_course_head {
-.si_course_content {
-.si_course_box div:nth-child(1) {
- color: rgb(47 70 136);
-.si_course_box div:nth-child(2) {
- width: 60px;
- border: 1px solid rgb(140, 140, 140);
- padding: 1px 0;
- margin-top: 5px;
- color: rgb(67, 67, 67);
@@ -1,518 +0,0 @@
- <el-button class="btn btnClassGM" type="primary" @click="confirm">确定</el-button>
- /* background: rgb(14, 114, 230); */
-.r_cbox >>> .el-select .el-input.is-focus .el-input__inner {
- border-color: #5c549f;
-.r_cbox.student_search >>> .el-select .el-input__inner:focus {
-.el-select-dropdown__item.selected {
- color: #5c549f !important;
@@ -1,567 +0,0 @@
- <div class="sd_name">
- <span>学生姓名:</span>
- <span>{{studentInfo.sName}}</span>
- <div class="sd_tTitle">課堂表現</div>
- <span class="s">課堂活動</span>
- <span>{{randomNum(1,20)}}</span>次
- <span>已經擊敗99%學生</span>
- <div class="sd_module_count">
- <span>挑戰:</span>
- <span>{{randomNum(1,5)}}</span>次
- <span>選項挑戰:</span>
- <span>分數挑戰:</span>
- <span class="s">課堂生成</span>
- <span>作品上傳:</span>
- <span>{{randomNum(1,20)}}</span>张
- <span>視頻上傳:</span>
- <span>{{randomNum(1,5)}}</span>部
- <span class="s">自主活動</span>
- <span>{{randomNum(1,15)}}</span>分
- <span>計時:</span>
- <span>{{randomNum(1,5)}}</span>分
- <span>小組計分:</span>
- <span>個人計分:</span>
- <div class="sd_tTitle">個人能力</div>
- <span @click="setType(1)" :class="{'active':type == 1}">語文</span>
- <span @click="setType(2)" :class="{'active':type == 2}">數學</span>
- <span @click="setType(3)" :class="{'active':type == 3}">英語</span>
- <span @click="setType(4)" :class="{'active':type == 4}">資訊科技</span>
- <span @click="setType(5)" :class="{'active':type == 5}">藝術</span>
- <span @click="setType(6)" :class="{'active':type == 6}">跨學科素養</span>
- props: ["studentInfo"],
- radius: "60%",
- { value: 0, name: "能力闯关" },
- { value: 0, name: "提交探究表" },
- { value: 0, name: "与大家分享你的“神兽”" },
- { value: 0, name: "总结其它动物保护自己" },
- { value: 0, name: "拓展思考,讨论交流" },
- { value: 0, name: "提交倡议书" },
- { value: 0, name: "提交学习手册" },
- { value: 0, name: "家长评价问卷调查" },
- radius: [20, "90%"],
- "資訊應用意識",
- "資訊安全意識",
- "資訊感知意識",
- "資訊社會責任",
- "資訊法律法規",
- "資訊應用技能",
- "資訊科學知識",
- "資訊思維",
- "資訊行為",
- { value: this.randomNum(0, 300), name: "學習時間" },
- { value: this.randomNum(0, 300), name: "自我介紹" },
- { value: this.randomNum(0, 300), name: "能力闖關" },
- { value: this.randomNum(0, 300), name: "提交探究錶" },
- { value: this.randomNum(0, 300), name: "提交活動錶" },
- { value: this.randomNum(0, 300), name: "討論交流" },
- { value: this.randomNum(0, 300), name: "與大家分享你的“神獸”" },
- { value: this.randomNum(0, 300), name: "總結其它動物保護自己" },
- { value: this.randomNum(0, 300), name: "拓展思考,討論交流" },
- { value: this.randomNum(0, 300), name: "提交倡議書" },
- { value: this.randomNum(0, 300), name: "提交學習手册" },
- { value: this.randomNum(0, 300), name: "能力測試" },
- { value: this.randomNum(0, 300), name: "自我評價調查問卷" },
- { value: this.randomNum(0, 300), name: "課程滿意度調查問卷" },
- { value: this.randomNum(0, 300), name: "家長評估問卷調查" },
- name: "資訊意識",
- name: "資訊應用意識",
- name: "資訊安全意識",
- name: "資訊感知意識",
- name: "資訊社會責任",
- name: "資訊倫理道德",
- name: "資訊法律法規",
- name: "資訊知識與技能",
- name: "資訊應用技能",
- name: "資訊科學知識",
- name: "資訊思維與行為",
- name: "資訊思維",
- name: "資訊行為",
- name: "資訊思維與行為2",
-.sd_tTitle {
- background: rgb(199, 217, 212);
- padding: 10px 10px;
- border: 1px solid rgb(165, 182, 177);
- font-weight: 500;
- font-weight: 600;
@@ -1,191 +0,0 @@
- <div style="width: 100%; height: 100%">
- <div class="sr_head">学生成长报告</div>
- <div class="sr_body">
- <div class="sr_box">
- <div class="sr_first">
- <div class="first">
- <div class="sub_title"><span>学生基本信息</span></div>
- <StudentInfo class="r_box" :userid="userid" :courseid="courseid"></StudentInfo>
- <div class="second">
- <div class="sub_title"><span>项目基本信息</span></div>
- <CourseInfo class="r_box" :courseid="courseid"></CourseInfo>
- <div class="sr_second">
- <div class="sub_title"><span>学生综合能力评估</span></div>
- <StudentAbility class="r_box" :userid="userid" :courseid="courseid"></StudentAbility>
- <!-- <div class="second">
- <div class="sub_title"><span>项目详细报告</span></div>
- <CourseDetailReport class="r_box"></CourseDetailReport>
- <div class="sr_third">
- <div class="sub_title"><span>阶段完成情况</span></div>
- <CourseRadar class="r_box" :userid="userid" :courseid="courseid"></CourseRadar>
- <div class="sub_title"><span>阶段评价平均分</span></div>
- <CoursePie class="r_box" :userid="userid" :courseid="courseid"></CoursePie>
- <div style="height:100%;min-width: 1100px;">
- <worksDetail3 class="r_box" :cid="courseid" :uid="userid" :ooid="scoid"></worksDetail3>
-import StudentInfo from "./report/studentInfo.vue";
-import CourseInfo from "./report/courseInfo.vue";
-import StudentAbility from "./report/studentAbility.vue";
-import CourseRadar from "./report/courseRadar.vue";
-import CoursePie from "./report/coursePie.vue";
-import CourseDetailReport from "./report/courseDetailReport.vue";
-import worksDetail3 from "./worksDetail3.vue";
- props: ["checkCourse", "checkStudent","oid"],
- StudentInfo,
- CourseInfo,
- StudentAbility,
- CourseRadar,
- CoursePie,
- CourseDetailReport,
- worksDetail3
- userid: "",
- courseid: "",
- scoid:"",
- checkStudent(newValue, oldValue) {
- this.userid = this.checkStudent;
- this.courseid = this.checkCourse;
- this.scoid = this.oid;
-.sr_head {
- color: rgb(21, 80, 183);
- font-size: 30px;
- font-weight: bolder;
- margin-bottom: 15px;
-.sr_body {
- height: calc(100% - 55px);
-.sr_box {
- min-width: 1100px;
- min-height: 700px;
-.sr_first {
- width: calc(100% / 3.75);
-.sr_second {
- width: calc(100% / 3.75 * 2);
-.sr_third {
- width: calc(100% / 3.75 * 0.75);
-.sr_first,
-.sr_second,
-.sr_first .first,
-.sr_first .second,
-.sr_second .first,
-.sr_second .second,
-.sr_third .first,
-.sr_third .second {
- width: 98%;
-.sr_first .first {
- height: calc(100% / 3 * 1.1);
-.sr_first .second {
- height: calc(100% / 3 * 1.9);
-.sr_second .first {
- /* height: calc(100% / 3.5 * 2); */
- /* margin-bottom: 20px; */
-.sr_second .second {
- /* height: calc(100% / 3.5 * 1.5); */
-.sr_third .first {
- height: calc(100% / 2.25 * 1.25);
- height: calc(100% / 2.25);
-.sub_title {
- color: rgb(0, 107, 180);
- height: 40px;
- width: 200px;
-.sub_title span {
-.sub_title::after {
- content: "";
- width: 20px;
- height: 20px;
- background-image: url(../../../assets/report/left_coin.png);
- background-size: 100% 100%;
-.sub_title::before {
- background-image: url(../../../assets/report/right_coin.png);
- height: calc(100% - 40px);
-import CourseInfo from "./report/courseInfoGM.vue";
-import StudentAbility from "./report/studentAbilityGM.vue";
-import CoursePie from "./report/coursePieGM.vue";
-import worksDetail3 from "./worksDetail3GM.vue";
- background-image: url(../../../assets/report/left_coinGM.png);
- background-image: url(../../../assets/report/right_coinGM.png);
@@ -1,1014 +0,0 @@
- <div class="cp_title" v-if="false">
- <span>{{ this.dataJson.title }}</span>
- <span>{{ "教师姓名:" + this.dataJson.uname }}</span>
- <div class="data_body" v-if="false">
- <div class="data_c">
- <WorkData :workJson="workJson" :chapters="chapters"></WorkData>
- <ProblelmData
- :problemJson="problemJson"
- :chapters="chapters"
- ></ProblelmData>
- <ToolsData :toolsJson="toolsJson" :tools="tools"></ToolsData>
- <ScoreData :scoreJson="scoreJson"></ScoreData>
- <div class="sd_class" v-if="false">
- <div class="sd_tTitle">课堂表现</div>
- <div class="wd_class_body">
- <div class="wd_module">
- class="sd_module_children"
- style="
- padding: 0 25px;
- "
- <span>课程人数:共100人,已完成人数{{ randomNum(50, 100) }}人</span>
- <span>{{ randomNum(5, 15) }}</span
- >次 <span>{{ randomNum(1, 60) }}</span
- >分 <span>{{ randomNum(1, 59) }}</span
- >秒
- <span class="s">课堂节数</span>
- <span>{{ randomNum(5, 20) }}</span
- >节
- <div style="width: 45%; position: relative">
- id="gauge_canvas"
- bottom: 25px;
- padding: 0 100px;
- <span>教师为中心</span>
- <span>学生为中心</span>
- <span>{{ randomNum(10, 20) }}</span
- >次
- <span class="s">课堂生成</span>
- <span>{{ randomNum(7, 15) }}</span
- <span class="s">自主活动</span>
- >分 <span>{{ randomNum(10, 59) }}</span
- <div class="wd_bottom">
- <div class="bdiv">
- id="line_canvas"
- id="bar_canvas"
- <!-- <img src="../../../assets/data/tu1.png" alt style="width:100%" /> -->
- <div class="sd_tTitle" v-if="false">班级学生能力分析</div>
- <div style="background: #fff; padding: 10px 0">
- <div class="sd_person_button" v-if="false">
- <span @click="setType(1)" :class="{ active: type == 1 }">语文</span>
- <span @click="setType(2)" :class="{ active: type == 2 }">数学</span>
- <span @click="setType(3)" :class="{ active: type == 3 }">英语</span>
- <span @click="setType(4)" :class="{ active: type == 4 }"
- >信息科技</span
- <span @click="setType(5)" :class="{ active: type == 5 }">艺术</span>
- <span @click="setType(6)" :class="{ active: type == 6 }"
- >跨学科素养</span
- <div style="display: flex; flex-wrap: wrap">
- <div style="width: 50%; height: 500px" v-if="false">
- id="sunburst_canvas"
- id="scatter_canvas"
- <WorksDetail2 :cid="cid" :uid="uid" :ooid="ooid"></WorksDetail2>
- <!-- <el-table
- :data="tableData"
- style="width: 100%; height: 60%"
- :header-cell-style="{ background: '#f1f1f1' }"
- <el-table-column prop="name" label="姓名" min-width="20%" align="center"></el-table-column>
- <el-table-column prop="number" label="学号" min-width="20%" align="center"></el-table-column>
- <el-table-column prop="class" label="班级" min-width="20%" align="center"></el-table-column>
- <el-table-column prop="score" label="分数" min-width="20%" align="center"></el-table-column>
- <el-table-column label="操作" min-width="20%">
- <template>
- <el-button type="primary" size="small">查看</el-button>
- </el-table>-->
- <!-- <img src="../../../assets/data/tu3.png" alt style="width:50%" />
- <img src="../../../assets/data/tu2.png" alt style="width:50%" />-->
- <!-- <img src="../../../assets/data/tu4.png" alt style="width:100%" /> -->
-import WorkData from "./data/workData";
-import ProblelmData from "./data/problelmData";
-import ToolsData from "./data/toolsData";
-import ScoreData from "./data/scoreData";
-import WorksDetail2 from "./worksDetail2";
- props: ["dataJson", "cid", "uid", "ooid"],
- WorkData,
- ProblelmData,
- ToolsData,
- ScoreData,
- WorksDetail2,
- tableData: [
- name: "卓曾向",
- number: "202205311",
- class: "三年级七班",
- score: "100",
- name: "王志成",
- number: "202205411",
- class: "四年级一班",
- score: "99",
- name: "李沛郡",
- number: "202205361",
- class: "三年级六班",
- score: "89",
- name: "李世昌",
- number: "202205321",
- class: "三年级二班",
- score: "88",
- name: "李佳薇",
- number: "202205471",
- class: "四年级七班",
- score: "69",
- name: "叶玉卿",
- number: "202205671",
- class: "六年级七班",
- score: "78",
- name: "冯翊泽",
- number: "202205571",
- class: "五年级七班",
- score: "68",
- { name: "乐舞", number: "202205372", class: "三年级七班", score: "77" },
- name: "关晓辉",
- number: "202205475",
- name: "谭晶陈",
- number: "202205271",
- class: "二年级七班",
- score: "79",
- Course: this.dataJson,
- workJson: [], //多少人提交作业数据
- scoreJson: [], //量规评分数据
- problemJson: [], //问答数据
- toolsJson: [], //工具数据
- chartObj4: null,
- chartObj5: null,
- gaugeOption: {
- type: "gauge",
- radius: "100%",
- width: 10,
- color: [
- [
- 100,
- type: "linear",
- x: 0,
- y: 0,
- x2: 0,
- y2: 1,
- colorStops: [
- offset: 1,
- color: "rgb(240,50,243)", // 0% 处的颜色
- offset: 0,
- color: "rgb(37,61,249)", // 100% 处的颜色
- global: false, // 缺省为 false
- pointer: {
- width: 8,
- length: "65%",
- color: "auto",
- distance: 20,
- fontSize: 20,
- detail: {
- valueAnimation: true,
- formatter: "{value}",
- value: 60,
- name: "課堂類型",
- offsetCenter: [0, "80%"],
- fontSize: 30,
- lineOption: {
- text: "課堂時間",
- data: ["課堂時長", "麻吉星時長"],
- left: "3%",
- right: "4%",
- bottom: "3%",
- // feature: {
- // saveAsImage: {},
- data: ["05-25", "05-26", "05-27", "05-28", "05-29", "05-30", "05-31"],
- formatter: "{value}M",
- name: "課堂時長",
- data: [10, 20, 30, 11, 15, 16, 18],
- name: "麻吉星時長",
- data: [22, 16, 18, 15, 19, 28, 17],
- barOption: {
- text: "任教班級",
- legend: {},
- data: ["中山五年5班", "中山五年5班"],
- name: "圖片",
- data: [220, 150],
- name: "視頻",
- data: [120, 132],
- name: "互動",
- data: [110, 132],
- name: "投票",
- name: "挑戰",
- data: [221, 110],
- name: "評估",
- data: [120, 133],
- name: "棄權",
- data: [105, 132],
- sunburstOption: {
- color: "#fff",
- scatterOption: {
- data: ["问题意识", "科学探究", "实践创新", "工程思维", "学习反思"],
- name: "能力指标",
- name: "分值",
- right: 100,
- top: 70,
- color: "rgb(222,126,62)",
- top: "0%",
- name: "学生百分数(单位:%)",
- return val[2] * 1.5;
- color: "rgb(222,126,62,.5)",
- data: [[1, 2, 50]],
- fontSize: 16,
- formatter: function (a, b, c) {
- return a.data[2];
- .get(this.$store.state.api + "getWorkData", params)
- let _data = res.data[1]; //所有作业数据
- let _data2 = res.data[2]; //问答提交数据
- let _data3 = res.data[3]; //工具使用数据
- let workJson = [];
- let scoreJson = [];
- let problemJson = [];
- let toolsJson = [];
- _data.forEach((item, index) => {
- workJson.push({ stage: item.stage, userid: item.userid });
- scoreJson.push({ rate: JSON.parse(item.rate) });
- _data2.forEach((item, index) => {
- problemJson.push({ stage: item.chapterid });
- _data3.forEach((item, index) => {
- toolsJson.push({ tools: item.tools, count: item.count });
- this.workJson = workJson;
- this.scoreJson = scoreJson;
- this.problemJson = problemJson;
- this.toolsJson = toolsJson;
- this.$el.querySelector("#gauge_canvas")
- this.gaugeOption.series[0].data[0].value = this.randomNum(10, 100);
- this.$el.querySelector("#line_canvas")
- var _array1 = [];
- var _array2 = [];
- for (let index = 0; index < 7; index++) {
- _array1.push(this.randomNum(40, 50));
- _array2.push(this.randomNum(40, 50));
- this.lineOption.series[0].data = _array1;
- this.lineOption.series[1].data = _array2;
- this.$el.querySelector("#bar_canvas")
- var _arraybar1 = [];
- var _arraybar2 = [];
- var _arraybar3 = [];
- var _arraybar4 = [];
- var _arraybar5 = [];
- var _arraybar6 = [];
- var _arraybar7 = [];
- _arraybar1.push(this.randomNum(20, 70));
- _arraybar2.push(this.randomNum(20, 70));
- _arraybar3.push(this.randomNum(20, 70));
- _arraybar4.push(this.randomNum(20, 70));
- _arraybar5.push(this.randomNum(20, 70));
- _arraybar6.push(this.randomNum(20, 70));
- _arraybar7.push(this.randomNum(20, 70));
- this.barOption.series[0].data = _arraybar1;
- this.barOption.series[1].data = _arraybar2;
- this.barOption.series[2].data = _arraybar3;
- this.barOption.series[3].data = _arraybar4;
- this.barOption.series[4].data = _arraybar5;
- this.barOption.series[5].data = _arraybar6;
- this.barOption.series[6].data = _arraybar7;
- const chartObj4 = this.$echarts.init(
- this.$el.querySelector("#sunburst_canvas")
- this.sunburstOption.series.data = [
- name: "学习反思能力",
- name: "终生学习",
- name: "自我进步",
- name: "自我反思",
- name: "工程思维能力",
- value: this.randomNum(1, 15),
- name: "实践创新能力",
- value: this.randomNum(5, 15),
- name: "科学探究能力",
- name: "问题意识",
- const chartObj5 = this.$echarts.init(
- this.$el.querySelector("#scatter_canvas")
- var scatterArray = [];
- scatterArray[i] = [];
- var a = 0;
- for (var j = 0; j < 5; j++) {
- var b = this.randomNum(0, 20);
- a += b;
- if (j == 4) {
- scatterArray[i].push(100 - a);
- scatterArray[i].sort(function () {
- return Math.random() - 0.5;
- scatterArray[i].push(b);
- var _arrayScatter = [];
- for (var j = 1; j < 6; j++) {
- // var z = this.randomNum(0, 100);
- var z = scatterArray[i][j - 1];
- _arrayScatter.push([x, y, z]);
- this.scatterOption.series[0].data = _arrayScatter;
- this.chartObj4 = chartObj4;
- this.chartObj5 = chartObj5;
- this.chartObj.setOption(this.gaugeOption);
- this.chartObj2.setOption(this.lineOption);
- this.chartObj3.setOption(this.barOption);
- this.chartObj4.setOption(this.sunburstOption);
- this.chartObj5.setOption(this.scatterOption);
- this.tableData = this.tableData.sort(function () {
- dataJson(val) {
- this.tools = [];
- if (element.chapterInfo[0].toolChoose) {
- this.tools.push(...element.chapterInfo[0].toolChoose);
- this.tools.push(...[1, 1, 1, 1, 2, 2, 2, 2]);
- this.tools = Array.from(new Set(this.tools)).sort();
- this.courseId = this.dataJson.courseId;
- var _chapters = JSON.parse(this.dataJson.chapters);
-.data_body .data_c {
- width: 50%;
- width: calc(50% / 2);
-.sd_module_content:nth-child(1) .sd_module_children:nth-child(1) {
- background: rgb(68, 228, 116);
-.sd_module_content:nth-child(1) .sd_module_children:nth-child(2) {
- background: rgb(244, 132, 101);
-.sd_module_content:nth-child(1) .sd_module_children:nth-child(3) {
- background: rgb(99, 205, 156);
-.sd_module_content:nth-child(3) .sd_module_children:nth-child(1) {
- background: rgb(253, 183, 184);
-.sd_module_content:nth-child(3) .sd_module_children:nth-child(2) {
- background: rgb(60, 174, 254);
-.sd_module_content:nth-child(3) .sd_module_children:nth-child(3) {
- background: rgb(61, 223, 234);
-.sd_module_children + .sd_module_children {
-.wd_class_body {
- background: rgb(242, 242, 242);
-.wd_module {
-.wd_bottom {
- margin: 20px auto 0;
-.wd_bottom .bdiv {
- width: 48%;
- background-color: #f1f1f1;
-import WorksDetail2 from "./worksDetail2GM";
@@ -1,2760 +0,0 @@
- <div class="pb_content" style="background: unset">
- <div class="pb_content_body" style="
- padding: 25px 0 0;
- ">
- <div class="student_head">
- <!-- <div class="student_search">
- <div>班级筛选</div>
- <el-select v-model="sClass" placeholder="请选择班级" @change="searchWork">
- <el-option label="所有班级" value></el-option>
- v-for="(item, index) in grade"
- <!-- chooseDy
- chooseTask-->
- <div class="student_search">
- <div>课程筛选</div>
- <div style="display: flex; width: 90%">
- <el-select class="r_select" v-model="uname" placeholder="请选择学生" @change="searchWork2">
- <el-option label="所有学生" value></el-option>
- <el-option v-for="item in userAarray" :key="item.userid" :label="item.username" :value="item.userid">
- <el-select v-model="chooseDy" placeholder="请选择阶段" @change="searchWork1">
- <el-option label="所有阶段" value></el-option>
- <el-option v-for="(item, index) in dyList" :key="index" :label="item.name" :value="item.id"></el-option>
- <el-select v-model="chooseTask" placeholder="请选择任务" @change="searchWork2">
- <el-option label="所有任务" value></el-option>
- <el-option v-for="(item, index) in dyList[chooseDy]
- ? dyList[chooseDy].taskList
- : []" :key="index" :label="item.name" :value="item.id"></el-option>
- <div class="pb_content_body">
- <div class="student_table">
- <el-table ref="table" :data="tableData" border :height="tableHeight" :fit="true" v-loading="isLoading"
- style="width: 100%" :header-cell-style="{ background: '#f1f1f1' }" :row-class-name="tableRowClassName" stripe>
- <el-table-column prop="sName" label="姓名" min-width="15" align="center"></el-table-column>
- <el-table-column prop="class" label="班级" min-width="20" align="center">
- <div>{{ scope.row.class ? scope.row.class : "暂无班级" }}</div>
- <el-table-column prop="course" label="项目" min-width="20" align="center" show-overflow-tooltip>
- <el-table-column prop="course" label="阶段" min-width="20" align="center" show-overflow-tooltip>
- {{ dyList.length > 0 ? dyList[scope.row.stage].name : "" }}
- <el-table-column prop="course" label="任务" min-width="20" align="center" show-overflow-tooltip>
- {{
- dyList.length > 0
- ? dyList[scope.row.stage].taskList[scope.row.task]
- ? dyList[scope.row.stage].taskList[scope.row.task].name
- : ""
- }}
- <el-table-column prop="time" label="时间" width="100px" align="center"></el-table-column>
- <el-table-column label="操作" width="200px">
- <el-button type="primary" size="small" @click="
- lookWork(
- scope.row.id,
- scope.row.userid,
- scope.row.stage,
- scope.row.task
- )
- ">查看作业</el-button>
- <!-- <el-button
- type="primary"
- size="small"
- @click="lookData(scope.row.userid)"
- >生成报告</el-button
- >-->
- lookWork2(
- ">导出报告</el-button>
- class="de_button"
- @click="deleteWork(scope.row.id)"
- >删除</el-button>-->
- <el-dialog title="查看作业" :visible.sync="dialogVisible3" :append-to-body="true" :before-close="handleClose"
- width="100%" class="dialog_diy2 max_diy" :class="{ fullStyle: full }">
- <div slot="title" class="header-title">
- <div style="color: #fff">查看作业</div>
- <div style="position: absolute; top: 14px; right: 50px">
- <img src="../../../assets/full.png" style="height: 14px; cursor: pointer" alt="" @click="fullTools" />
- <div class="zyBoxC">
- <div class="courseTitle" v-if="allWorks.course">
- <div class="txName">
- <div class="tx"><img :src="tx" alt="" /></div>
- <div>{{ allWorks.sName }}</div>
- <div>{{ allWorks.course }}</div>
- <div class="cBox">
- <div class="pb_left">
- <el-tooltip class="cTitle" effect="light" :content="allWorks.course" placement="top">
- <div class="ml">目录</div>
- <div class="cru_selectBox">
- <div v-for="(dy, dyIndex) in dyList2" :key="dyIndex">
- <div class="blue_box_one" @click="isOpen(dyIndex)">
- <div>第{{ dy.id + 1 }}阶段</div>
- <div>{{ dy.name }}</div>
- <div class="twoChild" :class="{
- navActive: dy.isOpen,
- }">
- <div class="navChild" v-for="(nav, navIndex) in dy.taskList" :key="navIndex">
- <div class="navTask" @click="openTask(dy.id, nav.id)" :class="{
- openTaskActive:
- nav.id == taskCount &&
- dy.id + '-' + nav.id == navId &&
- dy.id == stageIndex,
- <div class="vedioNav" :class="{
- isClick:
- }" style="margin: 0">
- 任务{{ navIndex + 1 }}
- <el-tooltip class="navTaskname item" effect="light" :content="nav.name" placement="top">
- <div>{{ nav.name }}</div>
- <div class="shuBox" v-if="worksDetail.length" :class="{ fullBox: full }">
- <div class="allBox" v-for="(sin, sIndex) in sInfo" :key="sIndex">
- <div class="zyBox" v-if="sin.course" :class="{ fullZyBox: full }">
- <div class="top">
- <div class="jdName">
- (sin.stage + 1) +
- dyList[sin.stage].name
- <div class="taskName" style="width: 100%; justify-content: space-between">
- <div class="taskName" :id="sin.stage + '-' + sin.task" :scrollindex="sIndex">
- <div class="task">任务{{ sin.task + 1 }}</div>
- {{ dyList[sin.stage].taskList[sin.task].name }}
- <div v-if="worksDetail[sIndex].wpptInfo.length > 0">
- <el-button type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
- 查看文档</el-button>
- <div class="contentBox">
- <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}"
- v-if="worksDetail[sIndex].img.length > 0">
- <div class="bigImg" v-if="
- worksDetail[sIndex].img &&
- worksDetail[sIndex].img.length
- <img @click="
- previewImg(
- worksDetail[sIndex].img[
- worksDetail[sIndex].imgIndex
- ].src
- " :src="
- " alt />
- <div class="thumbnail" v-if="
- <div v-for="(item, index) in worksDetail[sIndex].img" :key="index" :class="
- worksDetail[sIndex].imgIndex == index
- ? 'isClick'
- : ''
- <img :src="item.src" alt @click="worksDetail[sIndex].imgIndex = index" />
- <div class="work_nopicture" v-else>暂无上传截图</div>
- v-else-if="worksDetail[sIndex].answerInfo.length > 0">
- <div class="answerbox">
- <div style="min-width: 80px">问答标题</div>
- {{ worksDetail[sIndex].answerInfo[0].answerTitle }}
- <div class="answerbox1">
- <div>学生回答</div>
- {{ worksDetail[sIndex].answerInfo[0].answer }}
- v-else-if="worksDetail[sIndex].askInfo.length > 0">
- <div class="a_add_title" style="
- flex-direction: row;
- <div style="margin-right: 20px; font-size: 20px">
- 标题:
- <div style="font-size: 20px">
- {{ worksDetail[sIndex].askInfo[0].askTitle }}
- <div style="font-size: 16px; color: #c7c7c7">
- 内容
- <div class="a_add_box" v-for="(item1, index1) in worksDetail[sIndex]
- .askInfo[0].askCount" :key="index1">
- <div class="a_add_head">
- <div style="display: flex">
- {{ index1 + 1 + "、" }}
- 题目:{{
- worksDetail[sIndex].askInfo[0].askJson[
- index1
- ].askstitle
- <div class="a_add_body">
- <div class="a_add_input">
- <el-radio-group v-model="
- worksDetail[sIndex].askInfo[0].radio[
- ]
- <el-radio v-for="(item2, checkIndex) in worksDetail[
- sIndex
- ].askInfo[0].askJson[index1].checkList" :key="checkIndex" :label="checkIndex"
- disabled class="redioStyle"><span v-html="item2"></span></el-radio>
- </el-radio-group>
- v-else-if="worksDetail[sIndex].wpptInfo.length > 0">
- <div style="height: 238px" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
- <div @click="openFile(worksDetail[sIndex].wpptInfo[0])" style="
- width: 300px;
- height: 300px;
- z-index: 999;
- "></div>
- <pdf v-if="showPDF" :pdfUrl="worksDetail[sIndex].wpptInfo[0]"
- style="width: 100%; height: 520px; overflow: auto"></pdf>
- <iframe v-else :src="worksDetail[sIndex].wpptInfo[0]" frameborder="0" width="100%"
- height="100%"></iframe>
- <div class="right_top" v-show="worksDetail[sIndex].eList.length">
- <div class="ech">
- <img src="../../../assets/icon/pj/ech.png" alt="" />
- <div class="echart charts_canvas" style="
- margin: 0 0 0 1rem;
- <div class="right_score" :class="{ rightScoreFullBox: full }">
- <div class="sd_score" style="
- box-shadow: none;
- <div class="worksTime">
- 作业提交时间:<span style="width: auto">{{ worksDetail[sIndex].time }}
- <div class="ech" style="margin-left: 23px">
- <img src="../../../assets/icon/pj/score.png" alt="" />
- <div style="height: 80%;overflow: auto;">
- <div class="score_box" v-for="(item, index) in worksDetail[sIndex].eList" :key="index">
- <el-tooltip class="item" effect="dark" :content="item.value" placement="top-start">
- <span>{{ item.value }}</span>
- <el-rate class="rate_size" style="min-width: 120px"
- v-model="worksDetail[sIndex].rateList[item.value]" @change="getStar(sIndex)"></el-rate>
- <div class="buttonCss">
- <el-button type="primary" size="small" @click="updatePj">保存评分</el-button>
- <div class="student_page">
- <el-pagination background layout="prev, pager, next" :page-size="10" :total="total" v-if="page"
- @current-change="handleCurrentChange"></el-pagination>
- <el-dialog :visible.sync="pictureDialog" size="tiny">
- <img width="100%" :src="dialogImageUrl" alt />
- <el-dialog title="项目评分" :visible.sync="dataVisible" :append-to-body="true" width="1100px"
- :before-close="handleClose" class="dialog_diy">
- <div class="a_addBox2">
- <StudentData :studentInfo="studentInfo"></StudentData>
- <el-button @click="dataVisible = false">关 闭</el-button>
- <el-dialog title="查看选择题" :visible.sync="dialogVisible4" :append-to-body="true" width="800px"
- <div style="font-size: 20px">{{ askJson.askTitle }}</div>
- <div style="font-size: 16px; color: #c7c7c7">内容</div>
- <div class="a_add_box" v-for="(item, index) in askJson.askJson" :key="index">
- {{ index + 1 + "、" }}
- <div>题目:{{ item.askstitle }}</div>
- <el-radio-group v-model="askJson.radio[index]">
- <el-radio v-for="(item3, checkIndex1) in item.checkList" :key="checkIndex1" :label="checkIndex1"
- class="redioStyle" disabled>{{ item3 }}</el-radio>
- <el-button type="primary" @click="dialogVisible4 = false">关 闭</el-button>
- <el-dialog title="文件预览" :visible.sync="dialogVisible6" width="100%" :before-close="handleClose" class="full_diy"
- :append-to-body="true">
- <div style="color: #fff">文件预览</div>
- <pdf v-if="showPDF" :pdfUrl="pptImgUrl" style="width: 100%; height: 520px; overflow: auto"></pdf>
- <iframe v-else :src="pptImgUrl" frameborder="0" width="100%" height="600"></iframe>
-import StudentData from "./studentData";
- StudentData,
- props: ["cid", "uid", "ooid"],
- tableHeight: "500px",
- isLoading: false,
- id: this.cid,
- userid: this.uid,
- oid: this.ooid,
- formLabelWidth: "100px",
- dialogImageUrl: "",
- pictureDialog: false,
- dialogVisible1: false,
- dialogVisible2: false,
- dialogVisible3: false,
- dialogVisible4: false,
- dataVisible: false,
- full: true,
- isStar: 0,
- studentInfo: {},
- courseByUser: "诗词中的植物",
- userName: "林点",
- answerName: "宿赞公房",
- studentAnswer: "雨荒深院菊,霜倒半池莲.唐杜甫《宿赞公房》",
- commentCount: 0,
- publicIndex: 0,
- allWorks: [],
- playerOptions: {
- playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
- autoplay: false, //如果true,浏览器准备好时开始回放。
- muted: false, // 默认情况下将会消除任何音频。
- loop: false, // 导致视频一结束就重新开始。
- preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
- language: "zh-CN",
- aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
- fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
- sources: [
- type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目 || "video/ogg"|| "video/webm"
- src: "", //url地址require("../../../assets/media/aaa.mp4")
- // poster: require("../../../assets/tu31.png"), //你的封面地址
- // poster: dataRes.imgUrl, //你的封面地址
- notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
- controlBar: {
- timeDivider: true, //当前时间和持续时间的分隔符
- durationDisplay: true, //显示持续时间
- remainingTimeDisplay: false, //是否显示剩余时间功能
- fullscreenToggle: true, //全屏按钮
- playerO: {},
- commentName: "谭子松",
- commentTime: "2021/2/5",
- commentAnswer:
- "作为家长我很高兴看到孩子的进步,希望这个进步只是一个开始,在新学期能够继续延续,这样才能不负老师的期望",
- tableData: [],
- uploadBoolean: false,
- studentMessage: [],
- subject: "",
- sClass: "",
- stageIndex: "",
- taskCount: "",
- navId: "",
- chooseDy: "",
- uname: "",
- chooseTask: "",
- subjectJuri: [],
- projectJuri: [],
- pptImgUrl: "",
- grade: [],
- mr: require("../../../assets/icon/wheel.png"),
- tx: require("../../../assets/avatar.png"),
- projectchoose: "",
- scopeId: "",
- thumbnail: [],
- rateList: {
- ca: 0,
- sia: 0,
- eta: 0,
- pia: 0,
- lra: 0,
- content: "",
- rateParams: [],
- total: 0,
- worksDetail: [],
- suserId: "",
- sInfo: {},
- chapInfo: [],
- showPDF: false,
- dialogVisible6: false,
- vedio: [],
- file: [],
- tType: 0,
- chartObj: [],
- // 雷达图的数据
- name: "能力图", // tooltip中的标题
- askJson: {},
- dyList2: [],
- this.$nextTick(function () {
- window.innerHeight - this.$refs.table.$el.offsetTop - 200;
- if (this.tableHeight <= 530) {
- this.tableHeight = 530;
- let self = this;
- window.onresize = function () {
- self.tableHeight =
- window.innerHeight - self.$refs.table.$el.offsetTop - 200;
- if (self.tableHeight <= 530) {
- self.tableHeight = 530;
- previewImg(url) {
- this.$hevueImgPreview(url);
- lookData(uid) {
- uid: uid,
- cid: this.id,
- .get(this.$store.state.api + "selectWorksDetail", params)
- this.studentInfo = res.data[0][0];
- this.dataVisible = true;
- this.getWorks();
- lookWork(id, uid, stage, task) {
- // this.scopeId = id;
- stage: stage,
- task: task,
- .get(this.$store.state.api + "selectWorksDetail3", params)
- this.sInfo = res.data[0];
- var chapters = [],
- eList = [],
- _ooption = [],
- _rate = [],
- _rateList = [];
- var worksDetail = res.data[1];
- // this.scopeId = res.data[2][0].id;
- // var scopeId = res.data[2][0].id;
- var askInfo = res.data[3];
- var answerInfo = res.data[4];
- var pptInfo = res.data[5];
- var workJson = [];
- for (var k = 0; k < res.data[0].length; k++) {
- this.allWorks = res.data[0][k];
- this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
- chapters.push(JSON.parse(res.data[0][k].chapters));
- if (!chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
- res.data[0][k].task
- ]) {
- continue
- workJson.push({
- imgIndex: 0,
- eList: [],
- rateList: {},
- askInfo: [],
- answerInfo: [],
- wpptInfo: [],
- scopeId: res.data[0][k].id,
- stagetask: "",
- time: "",
- eList =
- chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
- ].eList;
- workJson[k].time = res.data[0][k].time;
- workJson[k].stagetask =
- res.data[0][k].stage + "-" + res.data[0][k].task;
- if (eList && eList.length) {
- _ooption = [];
- workJson[k].eList = eList;
- for (var i = 0; i < eList.length; i++) {
- _ooption.push({ value: 0, name: eList[i].value });
- workJson[k].rateList[eList[i].value] = 0;
- workJson[k].rateList.content = "";
- this.ooption[k] = _ooption;
- // _ooption = [];
- // workJson[k].eList = [
- // { value: "意识能力", detail: "", score: 5 },
- // { value: "科学探究能力", detail: "", score: 5 },
- // { value: "实践创新能力", detail: "", score: 5 },
- // { value: "学习反思能力", detail: "", score: 5 },
- // { value: "工程思维能力", detail: "", score: 5 },
- // for (var i = 0; i < workJson[k].eList.length; i++) {
- // _ooption.push({ value: 0, name: workJson[k].eList[i].value });
- // workJson[k].rateList[workJson[k].eList[i].value] = 0;
- // workJson[k].rateList.content = "";
- // this.ooption[k] = [
- // { value: 0, name: "意识能力" },
- // { value: 0, name: "科学探究能力" },
- // { value: 0, name: "实践创新能力" },
- // { value: 0, name: "学习反思能力" },
- // { value: 0, name: "工程思维能力" },
- if (res.data[0][k].rate && eList && eList.length) {
- _rate[k] = JSON.parse(res.data[0][k].rate);
- _rateList[k] = Object.keys(JSON.parse(res.data[0][k].rate));
- for (var i = 0; i < _rateList[k].length; i++) {
- var _c = Object.keys(workJson[k].rateList);
- if (_c.indexOf(_rateList[k][i]) != -1) {
- workJson[k].rateList[_rateList[k][i]] =
- _rate[k][_rateList[k][i]];
- for (var i = 0; i < this.ooption[k].length; i++) {
- if (_rateList[k].indexOf(this.ooption[k][i].name) != -1) {
- this.ooption[k][i].value = _rate[k][this.ooption[k][i].name];
- _rate[k] = [];
- _rateList[k] = [];
- for (var i = 0; i < worksDetail.length; i++) {
- res.data[0][k].stage == worksDetail[i].stage &&
- res.data[0][k].task == worksDetail[i].task
- workJson[k].img.push({ src: worksDetail[i].content, id: i });
- for (var i = 0; i < askInfo.length; i++) {
- res.data[0][k].stage == askInfo[i].stage &&
- res.data[0][k].task == askInfo[i].task
- const element = askInfo[i];
- let a = JSON.parse(element.content)[0];
- let b = a.anwer.split(",");
- let c = [];
- for (var j = 0; j < b.length; j++) {
- c.push(parseInt(b[j]));
- a.askJson.radio = c;
- a.askJson.time = element.time;
- workJson[k].askInfo.push(a.askJson);
- for (var i = 0; i < pptInfo.length; i++) {
- res.data[0][k].stage == pptInfo[i].stage &&
- res.data[0][k].task == pptInfo[i].task
- var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
- a.indexOf(
- pptInfo[i].content
- .split(".")
- pptInfo[i].content.split(".").length - 1
- ].toLocaleUpperCase()
- var a =
- "https://view.officeapps.live.com/op/view.aspx?src=" +
- pptInfo[i].content;
- workJson[k].wpptInfo.push(a);
- this.showPDF = false;
- } else if (
- ].toLocaleUpperCase() == "PDF"
- workJson[k].wpptInfo.push(pptInfo[i].content);
- this.showPDF = true;
- for (var i = 0; i < answerInfo.length; i++) {
- res.data[0][k].stage == answerInfo[i].stage &&
- res.data[0][k].task == answerInfo[i].task
- const element = answerInfo[i];
- workJson[k].answerInfo.push(JSON.parse(element.content)[0]);
- this.worksDetail = workJson;
- this.courseDetail = res.data[0][0];
- this.$forceUpdate;
- this.dialogVisible3 = true;
- setTimeout(() => {
- for (var p = 0; p < res.data[0].length; p++) {
- if (!this.ooption[p]) {
- this.chartObj[p] = null;
- var _ooption = JSON.parse(JSON.stringify(this.ooption[p]));
- var _option = JSON.parse(JSON.stringify(this.radarOption));
- _option.radar.indicator = [];
- _option.series[0].data[0].value = [];
- for (var i = 0; i < _ooption.length; i++) {
- _option.radar.indicator.push({
- name: _ooption[i].name,
- _option.series[0].data[0].value.push(_ooption[i].value);
- console.log(_option);
- this.setChart(_option, p);
- }, 0);
- let _dyList = JSON.parse(JSON.stringify(this.dyList));
- let _dyList2 = [];
- let _dyList3 = [];
- for (var c = 0; c < _dyList.length; c++) {
- _dyList[c].taskList = [];
- _dyList2.push(_dyList[c]);
- _dyList = JSON.parse(JSON.stringify(this.dyList));
- for (var c = 0; c < workJson.length; c++) {
- let _stage = workJson[c].stagetask.split("-")[0];
- let _task = workJson[c].stagetask.split("-")[1];
- _dyList2[_stage].taskList.push(_dyList[_stage].taskList[_task]);
- _dyList2[_stage].taskList;
- for (var c = 0; c < _dyList2.length; c++) {
- if (_dyList2[c].taskList.length) {
- _dyList2[c].isOpen = c === 0 ? true : false;
- _dyList3.push(_dyList2[c]);
- this.dyList2 = _dyList3;
- this.stageIndex = this.dyList2[0].id;
- this.taskCount = this.dyList2[0].taskList[0].id;
- this.navId =
- this.dyList2[0].id + "-" + this.dyList2[0].taskList[0].id;
- // this.sInfo = res.data[0][0];
- // this.chapInfo = JSON.parse(res.data[0][0].chapters);
- // var chapters = JSON.parse(res.data[0][0].chapters);
- // var worksDetail = res.data[1];
- // // var askArray = res.data[2];
- // this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
- // var askInfo = res.data[3];
- // var answerInfo = res.data[4];
- // var workJson = {
- // imgIndex: 0,
- // eList: [],
- // rateList: {},
- // askInfo: [],
- // answerInfo: [],
- // };
- // var eList =
- // chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
- // .eList;
- // var _ooption = [];
- // if (eList) {
- // workJson.eList = eList;
- // for (var i = 0; i < eList.length; i++) {
- // _ooption.push({ value: 0, name: eList[i].value });
- // workJson.rateList[eList[i].value] = 0;
- // workJson.rateList.content = "";
- // this.ooption = _ooption;
- // } else {
- // workJson.eList = [
- // for (var i = 0; i < workJson.eList.length; i++) {
- // _ooption.push({ value: 0, name: workJson.eList[i].value });
- // workJson.rateList[workJson.eList[i].value] = 0;
- // this.ooption = [
- // if (this.sInfo.rate) {
- // var _rate = JSON.parse(this.sInfo.rate);
- // var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
- // for (var i = 0; i < _rateList.length; i++) {
- // var _c = Object.keys(workJson.rateList);
- // if (_c.indexOf(_rateList[i]) != -1) {
- // workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
- // for (var i = 0; i < this.ooption.length; i++) {
- // if (_rateList.indexOf(this.ooption[i].name) != -1) {
- // this.ooption[i].value = _rate[this.ooption[i].name];
- // for (var i = 0; i < worksDetail.length; i++) {
- // workJson.img.push({ src: worksDetail[i].content, id: i });
- // for (var i = 0; i < askInfo.length; i++) {
- // const element = askInfo[i];
- // let a = JSON.parse(element.content)[0];
- // let b = a.anwer.split(",");
- // let c = [];
- // for (var j = 0; j < b.length; j++) {
- // c.push(parseInt(b[j]));
- // a.askJson.radio = c;
- // a.askJson.time = element.time;
- // workJson.askInfo.push(a.askJson);
- // for (var i = 0; i < answerInfo.length; i++) {
- // const element = answerInfo[i];
- // workJson.answerInfo.push(JSON.parse(element.content)[0]);
- // this.worksDetail = workJson;
- // this.courseDetail = res.data[0][0];
- // this.$forceUpdate;
- // this.dialogVisible3 = true;
- // setTimeout(() => {
- // var _ooption = JSON.parse(JSON.stringify(this.ooption));
- // var _option = this.radarOption;
- // _option.radar.indicator = [];
- // _option.series[0].data[0].value = [];
- // for (var i = 0; i < _ooption.length; i++) {
- // _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
- // _option.series[0].data[0].value.push(_ooption[i].value);
- // console.log(_option);
- // this.setChart(_option);
- // }, 0);
- checkAsk(askJson) {
- this.askJson = askJson;
- this.dialogVisible4 = true;
- setChart(option, k) {
- console.log(_this.option);
- const chartObj = _this.$echarts.init(
- // _this.$el.querySelector("#charts_canvas")
- document.getElementsByClassName("charts_canvas")[k]
- _this.chartObj[k] = chartObj;
- _this.chartObj[k].setOption(option);
- giveScore() {
- this.rateList = this.chapInfo[this.publicIndex].rate;
- this.dialogVisible2 = true;
- openFile(f) {
- this.pptImgUrl = f;
- this.dialogVisible6 = true;
- //获取班级列表
- getClass() {
- this.isLoading = true;
- oid: this.oid,
- .get(this.$store.state.api + "selectClassBySchool", params)
- this.isLoading = false;
- this.grade = res.data[0];
- //获取分组分类
- getGroup() {
- let params = {};
- .get(this.$store.state.api + "getGroup", params)
- this.subjectJuri = res.data[0];
- this.projectJuri = res.data[0];
- searchWork1() {
- this.chooseTask = "";
- searchWork2() {
- fullTools() {
- this.full = !this.full;
- //获取作业
- getWorks() {
- var mr = this.mr;
- uname: this.uname,
- stage: this.chooseDy,
- task: this.chooseTask,
- .get(this.$store.state.api + "getCourseWorks3", params)
- this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
- this.tableData = res.data[0];
- // getCourseDetail() {
- // const loading = this.$loading.service({
- // background: "rgba(255, 255, 255, 0.7)",
- // target: document.querySelector(".student_table"),
- // console.log(this.id);
- // let params = {
- // courseId: this.id,
- // this.ajax
- // .get(this.$store.state.api + "selectCourseDetail", params)
- // .then((res) => {
- // loading.close();
- // // this.chapInfo = JSON.parse(res.data[0][0].chapters);
- // var dyJSON = JSON.parse(res.data[0][0].chapters);
- // let dyList = [];
- // for (var i = 0; i < dyJSON.length; i++) {
- // dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
- // var a = dyJSON[i].chapterInfo[0].taskJson;
- // for (var j = 0; j < a.length; j++) {
- // dyList[i].taskList.push({ name: a[j].task, id: j });
- // console.log(dyList);
- // this.dyList = dyList;
- // // var dyJSON = JSON.parse()
- // })
- // .catch((err) => {
- // console.error(err);
- handlePictureCardPreview(url) {
- this.dialogImageUrl = url;
- this.pictureDialog = true;
- updatePj() {
- for (var i = 0; i < this.worksDetail.length; i++) {
- if (!this.worksDetail[i].eList.length) {
- this.updateWorks(
- this.worksDetail[i].scopeId,
- this.worksDetail[i].rateList,
- i
- getStar(i) {
- const k = i;
- var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
- var _rate = this.worksDetail[i].rateList;
- var _rateList = Object.keys(this.worksDetail[i].rateList);
- if (_rateList.indexOf(_ooption[i].name) != -1) {
- _ooption[i].value = _rate[_ooption[i].name];
- // var _option = JSON.parse(JSON.stringify(this.radarOption));
- var _option = this.radarOption;
- _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
- if (this.chartObj && this.chartObj[k]) {
- // _option.series[0].data = _ooption;
- this.chartObj[k].setOption(_option);
- this.setChart(_ooption);
- updateWorks(scopeId, rateList, i) {
- rate: rateList,
- tuid: this.userid,
- id: scopeId,
- .get(this.$store.state.api + "updateWorks", params)
- // var _option = JSON.parse(JSON.stringify(this.option));
- var _rate = rateList;
- var _rateList = Object.keys(rateList);
- if (this.chartObj) {
- // this.uploadBoolean = false;
- // this.dialogVisible2 = false;
- let _k = 0
- if (this.worksDetail[i].eList.length) {
- _k = i
- if (k == _k) {
- this.$message({
- message: "评价成功",
- type: "success",
- this.$message.error("评价失败");
- switchVideo(media, index) {
- this.playerO = {};
- this.playerOptions.poster = "";
- this.playerOptions.sources[0].src = media;
- this.playerO = this.playerOptions;
- onPlayerPlay() { },
- // this.$store.commit("update", ["userInfo", userInfo]);
- lookWork2(id, uid, stage, task) {
- .get(this.$store.state.api + "selectWorksDetail2", params)
- this.sInfo = res.data[0][0];
- this.chapInfo = JSON.parse(res.data[0][0].chapters);
- var chapters = JSON.parse(res.data[0][0].chapters);
- // var askArray = res.data[2];
- this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
- var linkInfo = res.data[5];
- var workJson = {
- var eList =
- chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
- .eList;
- // ooption: [
- var _ooption = [];
- if (eList) {
- workJson.eList = eList;
- workJson.rateList[eList[i].value] = 0;
- workJson.rateList.content = "";
- this.ooption = _ooption;
- workJson.eList = [
- { value: "意识能力", detail: "", score: 5 },
- { value: "科学探究能力", detail: "", score: 5 },
- { value: "实践创新能力", detail: "", score: 5 },
- { value: "学习反思能力", detail: "", score: 5 },
- { value: "工程思维能力", detail: "", score: 5 },
- for (var i = 0; i < workJson.eList.length; i++) {
- _ooption.push({ value: 0, name: workJson.eList[i].value });
- workJson.rateList[workJson.eList[i].value] = 0;
- if (this.sInfo.rate) {
- var _rate = JSON.parse(this.sInfo.rate);
- var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
- for (var i = 0; i < _rateList.length; i++) {
- var _c = Object.keys(workJson.rateList);
- if (_c.indexOf(_rateList[i]) != -1) {
- workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
- for (var i = 0; i < this.ooption.length; i++) {
- if (_rateList.indexOf(this.ooption[i].name) != -1) {
- this.ooption[i].value = _rate[this.ooption[i].name];
- workJson.img.push({ src: worksDetail[i].content, id: i });
- workJson.askInfo.push(a.askJson);
- workJson.answerInfo.push(JSON.parse(element.content)[0]);
- var _course = `<h1>${this.sInfo.course}</h1>`;
- (this.sInfo.stage + 1) +
- this.dyList[this.sInfo.stage].name +
- "</h2>";
- var _subtitle =
- "<h3>" +
- (this.sInfo.task + 1) +
- " " +
- this.dyList[this.sInfo.stage].taskList[this.sInfo.task].name +
- this.sInfo.sName +
- "</h3>";
- // _img += `<div style="margin-top:10px"><div>图片${
- // }:<a href='${workJson.img[i].src}'>${
- // workJson.img[i].src
- // }</a></div>`;
- _img += `<div style="margin-top:10px"><div>图片${i + 1
- }</div><img style="max-width:500px" src="${workJson.img[i].src
- if (workJson.askInfo.length > 0) {
- var _ask = "<h3>选择题</h3>";
- for (var i = 0; i < workJson.askInfo.length; i++) {
- _div.innerHTML = `<h4>标题:${workJson.askInfo[i].askTitle}</h4>`;
- for (var j = 0; j < workJson.askInfo[i].askJson.length; j++) {
- _div2.innerHTML = `<h5>第${j + 1}题:${workJson.askInfo[i].askJson[j].askstitle
- } 选择:${workJson.askInfo[i].radio[j] + 1}</h5> `;
- z < workJson.askInfo[i].askJson[j].checkList.length;
- _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${workJson.askInfo[i].askJson[j].checkList[z]
- if (workJson.answerInfo.length > 0) {
- for (var i = 0; i < workJson.answerInfo.length; i++) {
- _div.innerHTML = `<h4>问答:${workJson.answerInfo[i].answerTitle}</h4>`;
- _div.innerHTML += `<div>${workJson.answerInfo[i].answer}</div>`;
- if (linkInfo.length > 0) {
- for (var i = 0; i < linkInfo.length; i++) {
- _link += `<div style="margin-top:10px"><a href='${linkInfo[i].content}'>${linkInfo[i].content}</a></div>`;
- var _html =
- _course + _title + _subtitle + _img + _ask + _answer + _link;
- this.generate(_html);
- isOpen(s) {
- // this.stageIndex = s;
- this.dyList2[s].isOpen = !this.dyList2[s].isOpen;
- openTask(s, i) {
- var a = s + "-" + i;
- var b = document.getElementById(a);
- var d = b.getAttribute("scrollindex");
- var c = document.getElementsByClassName("shuBox")[0];
- c.scrollTop = parseInt(d) * 375;
- this.stageIndex = s;
- this.taskCount = i;
- this.navId = a;
- // 生成报告
- let dname = this.sInfo.course + "-" + this.sInfo.sName + ".html";
- this.getClass();
- this.getGroup();
-.pb_head>span:nth-child(2) {
- margin-left: 80px;
- color: #ab582f;
-.pb_head {
- margin: 0 !important;
- width: 100% !important;
-.student_page {
-.student_head {
- padding-bottom: 15px;
-.student_search {
-.student_search>div:nth-child(1) {
- line-height: 35px;
-.student_search>>>.el-input__inner {
- width: 190px;
- height: 35px;
-.student_table>>>.el-table--border td {
- border-right: 0px !important;
-.add_work>>>.el-dialog__header {
- padding: 20px 20px 10px;
- background: #32455b;
-.add_work>>>.el-dialog__title {
- font-size: 14px !important;
- color: #fff !important;
-.add_work>>>.el-dialog__headerbtn {
- font-size: 20px !important;
- top: 5px !important;
- right: 8px !important;
-.add_work>>>.el-form-item__label {
- margin-left: 65px;
-.add_work>>>.el-form-item {
-.add_work>>>.el-form-item__content {
-.add_work>>>.el-dialog__footer {
- text-align: center !important;
-.add_work>>>.el-dialog {
- min-width: 650px !important;
- width: 1080px;
-.add_work>>>.el-dialog__body {
- height: 660px;
-.header-title {
-.logoImg {
-.logoImg>img {
-.title_add_student {
-.first {
- margin-top: 25px;
- border-bottom: 1px solid #c5c5c5;
-.one_top {
-.one_top>div:nth-child(1) {
- color: #2490bf;
-.one_top>button {
- background: #24a0a4;
- height: 30px;
- color: #e0e0e0;
- font-size: 13px;
- padding: 0 !important;
-.work_Img {
- width: 150px;
- margin: 10px 0;
-.assess_Img {
- padding: 15px 0;
-.work_Img>img,
-.assess_Img>img {
-.work_input {
- border: 1px solid;
- width: 135px;
- line-height: 20px;
-.poetry {
- margin: 10px 0 15px 0;
-.assess {
- background: #169bd5 !important;
-.assess_top {
- border-bottom: 2px solid #eee;
- padding-bottom: 10px;
-.assess_top>div:nth-child(1) {
-.student_Answer {
- /* padding-bottom: 25px; */
-.workName {
- font-weight: bold;
-.toux {
- width: 35px;
- /* margin: auto 0; */
-.toux>img {
-.nav {
-.studentName {
-.studentAnswer {
- margin: 5px 0 0 10px;
- height: 42px;
-.comment {
- /* margin: 20px 0 0 10px;
- height: 75%;
- max-height: 330px; */
- /* height: 290px; */
- height: 525px;
-.comment_body {
- height: calc(100% - 25px);
-.comment>.comment_title {
-.comment>.comment_title>span {
-.other_Answer {
- margin-left: 5px;
-.nameAndTime {
-.otherName {
-.time {
- margin-left: 25px;
- margin-top: 3px;
-.otherAnswer {
- word-wrap: break-word;
- word-break: break-all;
-.doingAssess {
- background: #169bd5;
- border-radius: 3px;
- margin-top: 30px;
-.score_top {
-.userTou {
-.userTou>img {
-.score_user_name {
- line-height: 53px;
-.course_top {
-.course_top>div:nth-child(1) {
- line-height: 25px;
-.course_top>div:nth-child(2) {
- border: 1px solid #ccc;
- width: 250px;
- height: 25px;
- margin-left: 30px;
-.sd_score {
- padding-top: 40px;
- box-shadow: 2px 2px 5px #909090;
-.sd_score .score_box {
- /* margin-left: 30px; */
-.sd_score .score_box:last-child {
- margin-bottom: 0;
-.rate_size>>>.el-rate__icon {
-.rate_size>>>.el-icon-star-off {
-.sd_score span {
- width: 130px;
- text-align: justify;
- text-align-last: justify;
- display: block;
-.moreSay {
- margin: 0px 0 5px 20px;
-.more_say_input {
-.more_say_input>>>.el-input__inner {
- padding: 0 0 0 10px;
-.assess_right {
- background: #82b0ee;
- line-height: 30px;
-.display {
- display: none;
-.firstTop {
- padding: 10px 25px;
-.talkScore>>>.el-dialog__body {
- background: #efefef;
-.lastTop {
- height: 120px;
-.left,
-.right {
- /* background: #fff; */
- /* padding: 10px; */
-.left {
- margin-right: 10px;
- min-height: 425px;
-/* .left .left_top {
-.left .left_bottom {
- height: 160px;
- width: 20%;
- background: none;
-.courseTitle {
- color: #7c7c7c;
-.course_t {
- font-size: 19px;
- align-items: flex-end;
-.course_t span:nth-child(2) {
-.courseTitle span:nth-child(2) {
- /* font-size: 14px;
- cursor: pointer; */
-.bigImg {
- /* height: 300px; */
- height: 150px;
-.bigImg>img,
-.thumbnail>div>img {
- object-fit: contain;
-.thumbnail {
- justify-content: flex-start;
- margin: 5px 0 8px;
- overflow-x: auto;
- overflow-y: hidden;
-.isClick {
- border: 3px solid #5f89d4;
-.thumbnail>div {
- width: 80px;
- height: 80px;
- flex-shrink: 0;
-.zyBoxC {
- background: #ededed;
- padding: 20px 0px;
- height: calc(100% - 50px);
-.zyBox {
- min-width: 600px;
- width: 600px;
- flex-wrap: nowrap;
-.zyBoxC+.zyBoxC {
-.rbButtom {
- background: #06a7ff;
- right: 10px;
-.bigImg>>>.vjs-tech,
-.bigImg>>>.video-js {
- height: 300px !important;
- height: 200px;
-.dialog_diy>>>.el-dialog__header {
- padding: 9px 20px 10px;
- background: #32455b !important;
-.dialog_diy>>>.el-dialog__title {
-.dialog_diy>>>.el-dialog__headerbtn {
- top: 14px;
-.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
-.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
-.dialog_diy>>>.el-dialog__body,
-.dialog_diy>>>.el-dialog__footer {
- background: #fafafa;
-.max_diy>>>.el-dialog {
- /* max-width: 1200px; */
- max-width: 1300px;
- /* height:800px */
-.max_diy>>>.el-dialog__body {
- height: 800px;
-.dialog_diy2>>>.el-dialog__header {
-.dialog_diy2>>>.el-dialog__title {
-.dialog_diy2>>>.el-dialog__headerbtn {
- top: 12px;
-.dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close {
-.dialog_diy2>>>.el-dialog__headerbtn .el-dialog__close:hover {
-.dialog_diy2>>>.el-dialog__body,
-.dialog_diy2>>>.el-dialog__footer {
-.a_addBox2 {
- padding: 15px;
-.a_addBox {
- /* max-height: 400px; */
- max-height: 160px;
-.a_add_box {
-.a_add_head {
-.a_add_head .a_add_head_input {
-.a_add_head .a_add_head_div {
-.a_add_body {
-.a_add_input {
- /* flex-direction: column; */
- /* width: 100%; */
-.a_add_input>>>el-radio-group {
-.a_add_input>>>.el-radio-group {
-.redioStyle>>>.el-radio__label {
-.task_title {
-.ask_Answer {
- /* margin-top: 10px; */
-.ask_Answer_title {
-.ask_Answer_content {
-.answer_body {
- border-bottom: 1px solid #f5f5f5;
-.answer_title {
-.answer_content {
-.ask_body {
- /* padding: 0 10px; */
-.ask_body div {
- /* cursor: pointer; */
-.ask_body div .btn {
- background-color: #409eff;
- padding: 6px 12px;
-.ask_body div span:nth-child(1) {
- max-width: 250px;
-.ask_body div+div {
-.work_nopicture {
- /* height: 350px; */
- height: 352px;
-.student_table>>>.el-table,
-.student_table>>>.el-table__body-wrapper {
- height: auto !important;
-.tx {
-.ech {
-.tx>img,
-.ech>img {
-.txName {
-.txName>div:nth-child(2) {
-.top {
- padding: 15px 0 15px 20px;
-.jdName>div:nth-child(1) {
-.taskName {
-.task {
- background: #49a0f0;
- height: 22px;
- line-height: 22px;
-.contentBox {
- height: 253px;
-.left_top {
- width: 45%;
- padding-left: 20px;
-.right_top {
- width: 53%;
-.cBox {
- height: calc(100% - 60px);
-.right_score {
- min-width: 370px;
- height: 351px;
-.pb_left {
- background: rgb(255, 255, 255);
- /* padding-right: 10px; */
- /* height: 500px; */
-.cTitle {
- background: #205cc6;
- width: 85%;
- line-height: 50px;
- padding: 0 10px;
-.ml {
- color: #5b7dba;
- border-left: 3px solid #5b7dba;
- padding-left: 5px;
-.cru_selectBox {
- height: calc(100% - 90px);
- overflow-x: hidden;
-.cru_selectBox::-webkit-scrollbar {
-.cru_selectBox::-webkit-scrollbar-track {
-.cru_selectBox::-webkit-scrollbar-thumb {
-.blue_box_one {
- background-image: linear-gradient(90deg, #477cd7, #65b9fc);
- border-radius: 7px;
- height: 45px;
-.blue_box_one>div:nth-child(1) {
- margin: 0 5px 0 10px;
- min-width: 70px;
-.blue_box_one>div:nth-child(2) {
- width: 70%;
- text-align: left;
- max-width: calc(100% - 85px);
-.blue_box_one>div:nth-child(2):hover {
-.twoChild {
- background: #f2f2f2;
- transition: all 0.5s;
- background: #e7f3ff;
-.twoChild>div:nth-child(1) {
-.navChild {
-.navActive {
- height: auto;
-.navTask {
- align-content: flex-start;
-.vedioNav {
- margin: 10px 0 0 15px;
- border-bottom: 1px solid #d7d7d7;
- padding-bottom: 5px;
- background: #96d1ff;
- width: 55px;
- min-width: 55px;
- line-height: 26px;
-.navTaskname {
-.allBox {
-.shuBox {
-.answerbox {
- /* align-items: center; */
-.answerbox>div:nth-child(2) {
-.answerbox1 {
-.answerbox1>div:nth-child(2) {
- width: 265px;
- max-height: 147px;
-.jdName {
-.full_diy>>>.el-dialog {
-.full_diy>>>.el-dialog__body {
-.openTaskActive {
- color: #4386e6;
- background: #4d9def;
-.buttonCss {
- justify-content: flex-end;
-.fullStyle>>>.el-dialog__body {
- height: 100% !important;
-.fullStyle>>>.el-dialog,
-.fullStyle {
- max-width: 100% !important;
-.worksTime {
- align-items: baseline;
-.fullBox {
- /* overflow: unset !important;
- height: auto !important; */
-.fullZyBox {
- width: 60% !important;
-.rightScoreFullBox {
- width: 40%;
@@ -1,2780 +0,0 @@
- <el-button type="primary" size="small" class="btnClassGM" @click="
- <el-button class="btnClassGM" type="primary" size="small" @click="
- <el-button class="btnClassGM" type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">
- ? 'isClick2'
- <el-button type="primary" size="small" @click="updatePj" class="btnClassGM">保存评分</el-button>
- <el-button @click="dataVisible = false" class="cancel_button">关 闭</el-button>
- <el-button type="primary" @click="dialogVisible4 = false" class="cancel_button">关 闭</el-button>
-.isClick2 {
- border: 3px solid #8f7fe2;
- background: #8f7fe2;
- background: #634fa4;
- background-image: linear-gradient(90deg, #7960d5, #65b9fc);
- /* border-bottom: 1px solid #d7d7d7; */
- background: #b7aadf;
- color: #8f7fe2;
-.student_page
- >>> .el-pagination.is-background
- .el-pager
- li:not(.disabled).active {
- background-color: #5c549f;
- li:not(.disabled):hover {
-.cancel_button:focus,
-.cancel_button:hover {
- color: rgb(92, 84, 159);
- background-color: #dbd7ff;
@@ -1,2602 +0,0 @@
- <div class="pb_content" style="background: unset; height: 100%">
- <!-- <div class="txName">
- <div>{{ allWorks.course }}</div> -->
- <div>查看作业</div>
- "第" + (sin.stage + 1) + "阶段 " + dyList[sin.stage].name
- <el-button type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">查看文档
- </el-button>
- <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}" v-if="worksDetail[sIndex].img.length > 0">
- worksDetail[sIndex].img && worksDetail[sIndex].img.length
- worksDetail[sIndex].img[worksDetail[sIndex].imgIndex]
- .src
- worksDetail[sIndex].imgIndex == index ? 'isClick' : ''
- <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}" v-else-if="worksDetail[sIndex].answerInfo.length > 0">
- <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}" v-else-if="worksDetail[sIndex].askInfo.length > 0">
- <div class="a_add_box" v-for="(item1, index1) in worksDetail[sIndex].askInfo[0]
- .askCount" :key="index1">
- worksDetail[sIndex].askInfo[0].askJson[index1]
- .askstitle
- worksDetail[sIndex].askInfo[0].radio[index1]
- ].askInfo[0].askJson[index1].checkList" :key="checkIndex" :label="checkIndex" disabled
- class="redioStyle"><span v-html="item2"></span></el-radio>
- <div class="left_top" :style="{width:worksDetail[sIndex].eList.length?'45%':'95%'}" v-else-if="worksDetail[sIndex].wpptInfo.length > 0">
- <div class="echart charts_canvas" style="width: 100%; height: 100%; margin: 0 0 0 1rem"></div>
- v-model="worksDetail[sIndex].rateList[item.value]" disabled></el-rate>
- <!-- <div class="student_page">
- :total="total"
- v-if="page"
- full: false,
- // mounted() {
- // this.$nextTick(function () {
- // this.tableHeight =
- // window.innerHeight - this.$refs.table.$el.offsetTop - 200;
- // if (this.tableHeight <= 530) {
- // this.tableHeight = 530;
- // // 监听窗口大小变化
- // let self = this;
- // window.onresize = function () {
- // self.tableHeight =
- // window.innerHeight - self.$refs.table.$el.offsetTop - 200;
- // if (self.tableHeight <= 530) {
- // self.tableHeight = 530;
- lookWork() {
- uid: this.uid,
- // this.allWorks = res.data[0][k];
- // this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
- // chapters.push(JSON.parse(res.data[0][k].chapters));
- if (eList && eList.length > 0) {
- if (res.data[0][k].rate && eList && eList.length > 0) {
- this.lookWork();
- if (k == this.worksDetail.length - 1) {
- uid(newValue, oldValue) {
- // this.lookWork();
- /* background: #ededed; */
- overflow: unset !important;
@@ -1,2609 +0,0 @@
- <el-button class="btnClassGM" type="primary" size="small" @click="openFile(worksDetail[sIndex].wpptInfo[0])">查看文档
- worksDetail[sIndex].imgIndex == index ? 'isClick2' : ''