|
@@ -280,51 +280,90 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div v-if="l.tool[0] == 45">
|
|
|
- <div class="toolBlk">
|
|
|
- <img
|
|
|
- src="../../../assets/icon/thirdToolList/choose.png"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- <div class="toolTit">
|
|
|
- <div>工具{{ lind + 1 }}:选择题</div>
|
|
|
- <div>
|
|
|
- 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
- </div>
|
|
|
+ <div class="toolBlk">
|
|
|
+ <img
|
|
|
+ src="../../../assets/icon/thirdToolList/choose.png"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ <div class="toolTit">
|
|
|
+ <div>工具{{ lind + 1 }}:选择题</div>
|
|
|
+ <div>
|
|
|
+ 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-for="(i, index) in l.content[0].testJson"
|
|
|
+ :key="index + 'm'"
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ 题目:{{ i.teststitle }}
|
|
|
+ <span
|
|
|
+ v-if="
|
|
|
+ JSON.stringify(l.content[0].radio[index]) ==
|
|
|
+ JSON.stringify(i.answer)
|
|
|
+ "
|
|
|
+ style="color: #868ce4"
|
|
|
+ >回答正确</span
|
|
|
+ >
|
|
|
+ <span v-else style="color: red">回答错误</span>
|
|
|
+ </div>
|
|
|
<div
|
|
|
- v-for="(i, index) in l.content[0].testJson"
|
|
|
- :key="index + 'm'"
|
|
|
+ v-if="i.type == 1"
|
|
|
+ style="display: flex; flex-direction: column"
|
|
|
>
|
|
|
- <div>
|
|
|
- 题目:{{ i.teststitle }}
|
|
|
- <span
|
|
|
- v-if="
|
|
|
- JSON.stringify(l.content[0].radio[index]) ==
|
|
|
- JSON.stringify(i.answer)
|
|
|
- "
|
|
|
- style="color: #868ce4"
|
|
|
- >回答正确</span
|
|
|
- >
|
|
|
- <span v-else style="color: red">回答错误</span>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- v-if="i.type == 1"
|
|
|
- style="display: flex; flex-direction: column"
|
|
|
- >
|
|
|
- <el-radio-group v-model="l.content[0].radio[index]">
|
|
|
- <div class="radioBox">
|
|
|
- <el-radio
|
|
|
- v-for="(item2, checkIndex) in i.checkList"
|
|
|
- :key="checkIndex + 'b'"
|
|
|
- :label="checkIndex"
|
|
|
- disabled
|
|
|
- :class="[
|
|
|
- i.answer == checkIndex
|
|
|
- ? 'redioStyle5'
|
|
|
- : 'redioStyle2'
|
|
|
- ]"
|
|
|
+ <el-radio-group v-model="l.content[0].radio[index]">
|
|
|
+ <div class="radioBox">
|
|
|
+ <el-radio
|
|
|
+ v-for="(item2, checkIndex) in i.checkList"
|
|
|
+ :key="checkIndex + 'b'"
|
|
|
+ :label="checkIndex"
|
|
|
+ disabled
|
|
|
+ :class="[
|
|
|
+ i.answer == checkIndex
|
|
|
+ ? 'redioStyle5'
|
|
|
+ : 'redioStyle2'
|
|
|
+ ]"
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ v-if="
|
|
|
+ item2 && item2.imgType && item2.imgType == 1
|
|
|
+ "
|
|
|
>
|
|
|
+ <div
|
|
|
+ class="inImg"
|
|
|
+ @click.stop="previewImg(item2.src)"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ style="display: block"
|
|
|
+ :src="item2.src"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <span v-else v-html="item2"></span>
|
|
|
+ </el-radio>
|
|
|
+ </div>
|
|
|
+ </el-radio-group>
|
|
|
+ </div>
|
|
|
+ <div class="radioBox">
|
|
|
+ <el-checkbox-group
|
|
|
+ v-model="l.content[0].radio[index]"
|
|
|
+ v-if="i.type == '2'"
|
|
|
+ >
|
|
|
+ <div class="radioBox">
|
|
|
+ <el-checkbox
|
|
|
+ v-for="(item2, checkIndex) in i.checkList"
|
|
|
+ :key="checkIndex + 'c'"
|
|
|
+ :label="checkIndex"
|
|
|
+ disabled
|
|
|
+ :class="[
|
|
|
+ i.answer.includes(checkIndex)
|
|
|
+ ? 'redioStyle3'
|
|
|
+ : 'redioStyle4'
|
|
|
+ ]"
|
|
|
+ >
|
|
|
+ <div style="display: flex">
|
|
|
<div
|
|
|
v-if="
|
|
|
item2 && item2.imgType && item2.imgType == 1
|
|
@@ -342,115 +381,74 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<span v-else v-html="item2"></span>
|
|
|
- </el-radio>
|
|
|
- </div>
|
|
|
- </el-radio-group>
|
|
|
- </div>
|
|
|
- <div class="radioBox">
|
|
|
- <el-checkbox-group
|
|
|
- v-model="l.content[0].radio[index]"
|
|
|
- v-if="i.type == '2'"
|
|
|
- >
|
|
|
- <div class="radioBox">
|
|
|
- <el-checkbox
|
|
|
- v-for="(item2, checkIndex) in i.checkList"
|
|
|
- :key="checkIndex + 'c'"
|
|
|
- :label="checkIndex"
|
|
|
- disabled
|
|
|
- :class="[
|
|
|
- i.answer.includes(checkIndex)
|
|
|
- ? 'redioStyle3'
|
|
|
- : 'redioStyle4'
|
|
|
- ]"
|
|
|
- >
|
|
|
- <div style="display: flex">
|
|
|
- <div
|
|
|
- v-if="
|
|
|
- item2 && item2.imgType && item2.imgType == 1
|
|
|
- "
|
|
|
- >
|
|
|
- <div
|
|
|
- class="inImg"
|
|
|
- @click.stop="previewImg(item2.src)"
|
|
|
- >
|
|
|
- <img
|
|
|
- style="display: block"
|
|
|
- :src="item2.src"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <span v-else v-html="item2"></span>
|
|
|
- </div>
|
|
|
- </el-checkbox>
|
|
|
- </div>
|
|
|
- </el-checkbox-group>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 选择匹配 -->
|
|
|
- <div v-if="l.tool[0] == 41">
|
|
|
- <div class="toolBlk">
|
|
|
- <img
|
|
|
- class="toolImg"
|
|
|
- src="../../../assets/icon/thirdToolList/select.png"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- <div class="toolTit">
|
|
|
- <div>工具{{ lind + 1 }}:选择匹配</div>
|
|
|
- <div>
|
|
|
- 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
+ </div>
|
|
|
+ </el-checkbox>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </el-checkbox-group>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 选择匹配 -->
|
|
|
+ <div v-if="l.tool[0] == 41">
|
|
|
+ <div class="toolBlk">
|
|
|
<img
|
|
|
- @click.stop="previewImg(l.selectJson.url)"
|
|
|
- style="max-width: 200px"
|
|
|
- :src="l.selectJson.url"
|
|
|
+ class="toolImg"
|
|
|
+ src="../../../assets/icon/thirdToolList/select.png"
|
|
|
alt=""
|
|
|
/>
|
|
|
- <div>
|
|
|
- <span style="margin-right: 10px">选项:</span
|
|
|
- ><span
|
|
|
- style="margin-right: 10px"
|
|
|
- v-for="(item, itInd) in l.selectJson.select"
|
|
|
- :key="itInd"
|
|
|
- >{{ item }}</span
|
|
|
- >
|
|
|
- </div>
|
|
|
- <div style="margin: 10px 0;">
|
|
|
- <span style="margin-right: 10px">回答:</span>
|
|
|
-
|
|
|
- <div
|
|
|
- style="margin-right: 10px"
|
|
|
- v-for="(item, itInd) in l.content[0]"
|
|
|
- :key="itInd"
|
|
|
- >
|
|
|
- 选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
|
|
|
- <span
|
|
|
- v-if="
|
|
|
- l.selectJson.answer[itInd] == l.content[0][itInd]
|
|
|
- "
|
|
|
- style="color: #868ce4"
|
|
|
- >回答正确</span
|
|
|
- >
|
|
|
- <span v-else style="color: red">回答错误</span>
|
|
|
+ <div class="toolTit">
|
|
|
+ <div>工具{{ lind + 1 }}:选择匹配</div>
|
|
|
+ <div>
|
|
|
+ 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <span style="margin-right: 10px">答案:</span>
|
|
|
+ </div>
|
|
|
+ <img
|
|
|
+ @click.stop="previewImg(l.selectJson.url)"
|
|
|
+ style="max-width: 200px"
|
|
|
+ :src="l.selectJson.url"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ <div>
|
|
|
+ <span style="margin-right: 10px">选项:</span
|
|
|
+ ><span
|
|
|
+ style="margin-right: 10px"
|
|
|
+ v-for="(item, itInd) in l.selectJson.select"
|
|
|
+ :key="itInd"
|
|
|
+ >{{ item }}</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div style="margin: 10px 0;">
|
|
|
+ <span style="margin-right: 10px">回答:</span>
|
|
|
|
|
|
+ <div
|
|
|
+ style="margin-right: 10px"
|
|
|
+ v-for="(item, itInd) in l.content[0]"
|
|
|
+ :key="itInd"
|
|
|
+ >
|
|
|
+ 选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
|
|
|
<span
|
|
|
- style="margin-right: 10px"
|
|
|
- v-for="(item, itInd) in l.selectJson.answer"
|
|
|
- :key="itInd"
|
|
|
- >选项{{ itInd + 1 }}:{{
|
|
|
- l.selectJson.select[item]
|
|
|
- }}</span
|
|
|
+ v-if="l.selectJson.answer[itInd] == l.content[0][itInd]"
|
|
|
+ style="color: #868ce4"
|
|
|
+ >回答正确</span
|
|
|
>
|
|
|
+ <span v-else style="color: red">回答错误</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- <div v-if="l.tool[0] == 41">
|
|
|
+ <div>
|
|
|
+ <span style="margin-right: 10px">答案:</span>
|
|
|
+
|
|
|
+ <span
|
|
|
+ style="margin-right: 10px"
|
|
|
+ v-for="(item, itInd) in l.selectJson.answer"
|
|
|
+ :key="itInd"
|
|
|
+ >选项{{ itInd + 1 }}:{{
|
|
|
+ l.selectJson.select[item]
|
|
|
+ }}</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <div v-if="l.tool[0] == 41">
|
|
|
<div class="toolBlk">
|
|
|
<img
|
|
|
src="../../../assets/icon/thirdToolList/select.png"
|
|
@@ -489,76 +487,76 @@
|
|
|
</div>
|
|
|
</div> -->
|
|
|
|
|
|
- <!-- 排序 -->
|
|
|
- <div v-if="l.tool[0] == 47">
|
|
|
- <div class="toolBlk">
|
|
|
- <img
|
|
|
- src="../../../assets/icon/fourthToolList/conSentences.png"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- <div class="toolTit">
|
|
|
- <div>工具{{ lind + 1 }}:排序</div>
|
|
|
- <div>
|
|
|
- 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
- </div>
|
|
|
+ <!-- 排序 -->
|
|
|
+ <div v-if="l.tool[0] == 47">
|
|
|
+ <div class="toolBlk">
|
|
|
+ <img
|
|
|
+ src="../../../assets/icon/fourthToolList/conSentences.png"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
+ <div class="toolTit">
|
|
|
+ <div>工具{{ lind + 1 }}:排序</div>
|
|
|
+ <div>
|
|
|
+ 根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
|
|
|
</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-for="(i, index) in l.content[0]"
|
|
|
+ :key="index"
|
|
|
+ style="margin-bottom: 10px"
|
|
|
+ >
|
|
|
<div
|
|
|
- v-for="(i, index) in l.content[0]"
|
|
|
- :key="index"
|
|
|
- style="margin-bottom: 10px"
|
|
|
- >
|
|
|
- <div
|
|
|
- style="
|
|
|
+ style="
|
|
|
height: 20px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
flex-wrap: wrap;
|
|
|
"
|
|
|
+ >
|
|
|
+ 题目:
|
|
|
+ <div
|
|
|
+ class="sortTool"
|
|
|
+ v-for="(i, index) in i.addSentence"
|
|
|
+ :key="index"
|
|
|
>
|
|
|
- 题目:
|
|
|
- <div
|
|
|
- class="sortTool"
|
|
|
- v-for="(i, index) in i.addSentence"
|
|
|
- :key="index"
|
|
|
- >
|
|
|
- {{ i }}
|
|
|
- </div>
|
|
|
- <span
|
|
|
- v-if="
|
|
|
- JSON.stringify(i.chooseSenList) ==
|
|
|
- JSON.stringify(i.addSentence)
|
|
|
- "
|
|
|
- style="color: #868ce4"
|
|
|
- >回答正确</span
|
|
|
- >
|
|
|
- <span v-else style="color: red">回答错误</span>
|
|
|
+ {{ i }}
|
|
|
</div>
|
|
|
- <div
|
|
|
- style="
|
|
|
+ <span
|
|
|
+ v-if="
|
|
|
+ JSON.stringify(i.chooseSenList) ==
|
|
|
+ JSON.stringify(i.addSentence)
|
|
|
+ "
|
|
|
+ style="color: #868ce4"
|
|
|
+ >回答正确</span
|
|
|
+ >
|
|
|
+ <span v-else style="color: red">回答错误</span>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ style="
|
|
|
margin: 10px 0;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
flex-wrap: wrap;
|
|
|
"
|
|
|
+ >
|
|
|
+ 学生回答:
|
|
|
+ <div
|
|
|
+ class="sortTool"
|
|
|
+ v-for="(i, index) in i.chooseSenList"
|
|
|
+ :key="index"
|
|
|
>
|
|
|
- 学生回答:
|
|
|
- <div
|
|
|
- class="sortTool"
|
|
|
- v-for="(i, index) in i.chooseSenList"
|
|
|
- :key="index"
|
|
|
- >
|
|
|
- {{ i }}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- 答案:
|
|
|
- <span style="margin: 0 5px">{{
|
|
|
- i.addSentence.join(",")
|
|
|
- }}</span>
|
|
|
+ {{ i }}
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div>
|
|
|
+ 答案:
|
|
|
+ <span style="margin: 0 5px">{{
|
|
|
+ i.addSentence.join(",")
|
|
|
+ }}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
|
|
|
<!-- ai作业得分 -->
|
|
@@ -586,7 +584,7 @@
|
|
|
<div class="taskScoCon">
|
|
|
<!-- 分数详情与素养 -->
|
|
|
<div style="flex: 1; display: flex; flex-wrap: wrap">
|
|
|
- <div style="width: 375px; margin:0 20px 10px 0">
|
|
|
+ <div style="width: 315px; margin:0 20px 10px 0">
|
|
|
<div class="taskScoConTit">分数详情</div>
|
|
|
<div
|
|
|
v-for="(wItem, ind) in l.eList"
|
|
@@ -655,14 +653,14 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<!-- 阶段 -->
|
|
|
<div
|
|
|
v-if="
|
|
|
- l.eList &&
|
|
|
+ l.eList &&
|
|
|
l.eList.length &&
|
|
|
- CState != 5 &&
|
|
|
- CState != 6 &&
|
|
|
+ CState != 5 &&
|
|
|
+ CState != 6 &&
|
|
|
lind == k.toolEList.length - 1
|
|
|
"
|
|
|
class="taskSco"
|
|
@@ -681,7 +679,7 @@
|
|
|
<div class="taskScoCon">
|
|
|
<!-- 分数详情与素养 -->
|
|
|
<div style="flex: 1; display: flex; flex-wrap: wrap">
|
|
|
- <div style="width: 375px; margin:0 20px 10px 0">
|
|
|
+ <div style="width: 315px; margin:0 20px 10px 0">
|
|
|
<div class="taskScoConTit">分数详情</div>
|
|
|
<div
|
|
|
v-for="(wItem, ind) in l.eList"
|
|
@@ -723,10 +721,12 @@
|
|
|
:content="wItem.target[wItem.target.length - 1]"
|
|
|
placement="top-start"
|
|
|
> -->
|
|
|
- <div class="RootImgBlockSy">
|
|
|
- <span v-if="wItem.target && wItem.target.length"> {{ wItem.target[wItem.target.length - 1] }}</span>
|
|
|
- <span v-else> {{ wItem.target }}</span>
|
|
|
- </div>
|
|
|
+ <div class="RootImgBlockSy">
|
|
|
+ <span v-if="wItem.target && wItem.target.length">
|
|
|
+ {{ wItem.target[wItem.target.length - 1] }}</span
|
|
|
+ >
|
|
|
+ <span v-else> {{ wItem.target }}</span>
|
|
|
+ </div>
|
|
|
<!-- </el-tooltip> -->
|
|
|
</div>
|
|
|
</div>
|
|
@@ -751,9 +751,8 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
-
|
|
|
+
|
|
|
<!-- 思维导图 -->
|
|
|
<div v-if="CState == 5 || CState == 6" class="taskTitInd">
|
|
|
<div></div>
|
|
@@ -860,15 +859,15 @@ export default {
|
|
|
totalScore() {
|
|
|
return function(val) {
|
|
|
let valT = JSON.parse(JSON.stringify(val));
|
|
|
-
|
|
|
+
|
|
|
if (!valT) return "0.0";
|
|
|
|
|
|
delete valT.content;
|
|
|
delete valT.comment;
|
|
|
- console.log('valT',JSON.parse(JSON.stringify(val)));
|
|
|
+ console.log("valT", JSON.parse(JSON.stringify(val)));
|
|
|
|
|
|
let data = Object.values(valT);
|
|
|
- console.log('data',JSON.parse(JSON.stringify(data)));
|
|
|
+ console.log("data", JSON.parse(JSON.stringify(data)));
|
|
|
|
|
|
let new1 = data.reduce(function(pre, next, index) {
|
|
|
return pre + next * 1;
|
|
@@ -879,22 +878,21 @@ export default {
|
|
|
return (new1 / data.length).toFixed(1);
|
|
|
};
|
|
|
},
|
|
|
- workTime(){
|
|
|
+ workTime() {
|
|
|
return function(val) {
|
|
|
- if (!val.length) return ''
|
|
|
- let TimeList = []
|
|
|
- val.forEach(e=>{
|
|
|
+ if (!val.length) return "";
|
|
|
+ let TimeList = [];
|
|
|
+ val.forEach(e => {
|
|
|
if (e.time) {
|
|
|
const timestamp = new Date(e.time).getTime();
|
|
|
- TimeList.push(timestamp)
|
|
|
+ TimeList.push(timestamp);
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
- console.log('TimeList',TimeList);
|
|
|
- TimeList.sort(function(a,b){
|
|
|
- return a-b;//从小到大排序
|
|
|
- })
|
|
|
+ });
|
|
|
|
|
|
+ console.log("TimeList", TimeList);
|
|
|
+ TimeList.sort(function(a, b) {
|
|
|
+ return a - b; //从小到大排序
|
|
|
+ });
|
|
|
|
|
|
return this.convertToTimestamp(TimeList[0]);
|
|
|
};
|
|
@@ -902,52 +900,43 @@ export default {
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
- // 时间戳转时间
|
|
|
- convertToTimestamp(val) {
|
|
|
+ // 时间戳转时间
|
|
|
+ convertToTimestamp(val) {
|
|
|
const date = new Date(val);
|
|
|
|
|
|
// 使用Date对象的方法获取年、月、日、时、分、秒
|
|
|
const year = date.getFullYear();
|
|
|
- const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1
|
|
|
- const day = String(date.getDate()).padStart(2, '0');
|
|
|
- const hours = String(date.getHours()).padStart(2, '0');
|
|
|
- const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
|
- const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,需要加1
|
|
|
+ const day = String(date.getDate()).padStart(2, "0");
|
|
|
+ const hours = String(date.getHours()).padStart(2, "0");
|
|
|
+ const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
|
+ const seconds = String(date.getSeconds()).padStart(2, "0");
|
|
|
|
|
|
// 格式化后的日期时间字符串
|
|
|
const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
|
-
|
|
|
- return formattedDateTime
|
|
|
+
|
|
|
+ return formattedDateTime;
|
|
|
},
|
|
|
// 下载pdf文件
|
|
|
getPdf() {
|
|
|
const content = this.$refs.reportPdf;
|
|
|
-
|
|
|
- html2canvas(content).then(canvas => {
|
|
|
-
|
|
|
+ const dpi = 300;
|
|
|
+ html2canvas(content, {
|
|
|
+ dpi: dpi, // 设置截图的分辨率
|
|
|
+ scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
|
|
|
+ }).then(canvas => {
|
|
|
var contentWidth = canvas.width;
|
|
|
var contentHeight = canvas.height;
|
|
|
|
|
|
-
|
|
|
- //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
|
|
|
- var imgWidth = 595.28;
|
|
|
- var imgHeight = (592.28 / contentWidth) * contentHeight;
|
|
|
-
|
|
|
- var imgData = canvas.toDataURL("image/jpeg", 1.0);
|
|
|
-
|
|
|
- const pdf = new jspdf("p", "pt", [
|
|
|
- imgWidth,
|
|
|
- imgHeight
|
|
|
- ]);
|
|
|
-
|
|
|
- pdf.addImage(
|
|
|
- imgData,
|
|
|
- "PNG",
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- imgWidth,
|
|
|
- imgHeight
|
|
|
- );
|
|
|
+ //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
|
|
|
+ var imgWidth = 595.28;
|
|
|
+ var imgHeight = (592.28 / contentWidth) * contentHeight;
|
|
|
+
|
|
|
+ var imgData = canvas.toDataURL("image/jpeg", 1.0);
|
|
|
+
|
|
|
+ const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
|
|
|
+
|
|
|
+ pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
|
|
|
pdf.save(
|
|
|
this.worksDialogCon2.course +
|
|
|
"-作业集-" +
|
|
@@ -955,42 +944,31 @@ export default {
|
|
|
".pdf"
|
|
|
);
|
|
|
});
|
|
|
-
|
|
|
-
|
|
|
},
|
|
|
|
|
|
// 压缩pdf
|
|
|
async getPdf2() {
|
|
|
-
|
|
|
const content = this.$refs.reportPdf;
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
- html2canvas(content)
|
|
|
+ const dpi = 300;
|
|
|
+ html2canvas(content, {
|
|
|
+ dpi: dpi, // 设置截图的分辨率
|
|
|
+ scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
|
|
|
+ })
|
|
|
.then(canvas => {
|
|
|
-
|
|
|
var contentWidth = canvas.width;
|
|
|
var contentHeight = canvas.height;
|
|
|
|
|
|
-
|
|
|
//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
|
|
|
var imgWidth = 595.28;
|
|
|
var imgHeight = (592.28 / contentWidth) * contentHeight;
|
|
|
|
|
|
var imgData = canvas.toDataURL("image/jpeg", 1.0);
|
|
|
-
|
|
|
- const pdf = new jspdf("p", "pt", [
|
|
|
- imgWidth,
|
|
|
- imgHeight
|
|
|
- ]);
|
|
|
-
|
|
|
- pdf.addImage(
|
|
|
- imgData,
|
|
|
- "PNG",
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- imgWidth,
|
|
|
- imgHeight
|
|
|
- );
|
|
|
+
|
|
|
+ const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
|
|
|
+
|
|
|
+ pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
|
|
|
var pdfData = {
|
|
|
pdfName:
|
|
|
this.worksDialogCon2.course +
|
|
@@ -1162,16 +1140,27 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
// 将没有提交作业,但是有评分标准的数据填上数据,防止报错
|
|
|
- if (!l.rate && l.eList && l.eList.length && (this.CState == 5 || this.CState == 6)) {
|
|
|
+ if (
|
|
|
+ !l.rate &&
|
|
|
+ l.eList &&
|
|
|
+ l.eList.length &&
|
|
|
+ (this.CState == 5 || this.CState == 6)
|
|
|
+ ) {
|
|
|
l.rate = { content: "" };
|
|
|
l.eList.forEach(elp => {
|
|
|
l.rate[elp.detail] = 0;
|
|
|
});
|
|
|
- }else if ((!l.rate && l.eList && l.eList.length && this.CState != 5 && this.CState != 6)) {
|
|
|
- l.rate = { content: "" };
|
|
|
- l.eList.forEach(elp => {
|
|
|
- l.rate[elp.value] = 0;
|
|
|
- });
|
|
|
+ } else if (
|
|
|
+ !l.rate &&
|
|
|
+ l.eList &&
|
|
|
+ l.eList.length &&
|
|
|
+ this.CState != 5 &&
|
|
|
+ this.CState != 6
|
|
|
+ ) {
|
|
|
+ l.rate = { content: "" };
|
|
|
+ l.eList.forEach(elp => {
|
|
|
+ l.rate[elp.value] = 0;
|
|
|
+ });
|
|
|
}
|
|
|
// 将素养添加进treeData中
|
|
|
if (l.eList && l.eList.length) {
|
|
@@ -1211,7 +1200,7 @@ export default {
|
|
|
children: [
|
|
|
{
|
|
|
id: kind + "+" + elind + "+" + stind + "b",
|
|
|
- topic: `工具${elind}`
|
|
|
+ topic: `工具${elind * 1 + 1}`
|
|
|
}
|
|
|
]
|
|
|
});
|
|
@@ -1220,7 +1209,7 @@ export default {
|
|
|
if (lc.topic == st.detail) {
|
|
|
lc.children.push({
|
|
|
id: kind + "+" + elind + "+" + stind + "b",
|
|
|
- topic: `工具${elind}`
|
|
|
+ topic: `工具${elind * 1 + 1}`
|
|
|
});
|
|
|
}
|
|
|
});
|
|
@@ -1384,7 +1373,7 @@ export default {
|
|
|
position: relative;
|
|
|
}
|
|
|
.pdfCon {
|
|
|
- width: 810pt;
|
|
|
+ width: 220mm;
|
|
|
margin: auto;
|
|
|
position: relative;
|
|
|
}
|
|
@@ -1420,8 +1409,9 @@ export default {
|
|
|
}
|
|
|
.coverPage {
|
|
|
/* height: 840pt; */
|
|
|
- padding: 185px 8% 0;
|
|
|
+ padding: 150px 8% 0;
|
|
|
background-color: #ccc;
|
|
|
+ box-sizing: border-box;
|
|
|
position: relative;
|
|
|
background-image: url("../../../assets/icon/exportPdfworks/bcg1.svg"),
|
|
|
url("../../../assets/icon/exportPdfworks/bcg2.svg");
|
|
@@ -1494,7 +1484,7 @@ export default {
|
|
|
background-color: #e3edfe;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
- padding: 0 110px;
|
|
|
+ padding: 0 60px;
|
|
|
padding-bottom: 100px;
|
|
|
box-sizing: border-box;
|
|
|
font-family: PingFang SC;
|