|
@@ -537,9 +537,9 @@
|
|
|
v-html="
|
|
|
chapInfoList[courseType].chapterInfo[0].taskJson[taskCount]
|
|
|
.taskDetail
|
|
|
- ? chapInfoList[courseType].chapterInfo[0].taskJson[
|
|
|
+ ? renderedFormula(chapInfoList[courseType].chapterInfo[0].taskJson[
|
|
|
taskCount
|
|
|
- ].taskDetail
|
|
|
+ ].taskDetail)
|
|
|
: '暂无描述'
|
|
|
"
|
|
|
></div>
|
|
@@ -1021,7 +1021,7 @@
|
|
|
@click="addTools(tooC, toolIndex, taskCount)"
|
|
|
/>
|
|
|
<div style="margin: 5px 0">电子白板</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,1)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,1)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1033,7 +1033,7 @@
|
|
|
@click="addTools(tooC, toolIndex, taskCount)"
|
|
|
/>
|
|
|
<div style="margin: 5px 0">思维导图</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,3)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,3)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1054,7 +1054,7 @@
|
|
|
/>
|
|
|
<div style="margin: 5px 0">思维网格</div>
|
|
|
<!-- && worksStudent[toolIndex].length>0 -->
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,7)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,7)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1090,7 +1090,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">问卷调查</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,4)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,4)"
|
|
|
style="position: absolute;right: 153px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1107,7 +1107,7 @@
|
|
|
/>
|
|
|
<div style="margin: 5px 0">选择题</div>
|
|
|
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,45)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,45)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1136,7 +1136,7 @@
|
|
|
/>
|
|
|
<div style="margin: 5px 0">问答</div>
|
|
|
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,15)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,15)"
|
|
|
style="position: absolute;right: 135px;top: -45px;height: 40px;display: flex;align-items: center;justify-content: center;background: #409EFF;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1156,7 +1156,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">训练服务器</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,18)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,18)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1184,7 +1184,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">AIoT Blockly</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,21)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,21)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1204,7 +1204,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">AI Python</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,23)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,23)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1216,7 +1216,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">AI Blockly</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,24)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,24)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1236,7 +1236,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">数学画板</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,31)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,31)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1248,7 +1248,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">翻译</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,28)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,28)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1276,7 +1276,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">GeoGebra</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,39)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,39)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1288,7 +1288,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">源码编辑</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,32)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,32)"
|
|
|
style="position: absolute;right: 153px;top: -42px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1306,7 +1306,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">个人评价</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,40)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,40)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1318,7 +1318,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">选择匹配</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,41)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,41)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1338,7 +1338,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">排序</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,47)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,47)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1350,7 +1350,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">表格</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,48)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,48)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1362,7 +1362,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">文档</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,52)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,52)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1374,7 +1374,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">学生分组</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,49)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,49)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1386,7 +1386,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">CocoPi</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,57)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,57)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1438,7 +1438,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">海龟编程</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,63)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,63)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1450,7 +1450,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">AI智能体</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,71)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,71)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1475,7 +1475,7 @@
|
|
|
{{tool.appJson && tool.appJson.name ? tool.appJson.name : '应用中心'}}
|
|
|
</div>
|
|
|
</el-tooltip>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,72)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1495,7 +1495,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">公式编辑</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,66)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,66)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1527,7 +1527,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">英语写作</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,69)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,69)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1539,7 +1539,7 @@
|
|
|
alt
|
|
|
/>
|
|
|
<div style="margin: 5px 0">英语口语</div>
|
|
|
- <div class="upload_toolBtn" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,70)"
|
|
|
+ <div class="upload_toolBtn" v-if="tType == 1" @click="openChoseWorksDetailDialog(tooC,toolIndex,taskCount,70)"
|
|
|
style="position: absolute;right: 33px;top: -30px;">
|
|
|
分析
|
|
|
</div>
|
|
@@ -1551,7 +1551,7 @@
|
|
|
<!-- <div class="toolTitle">工具描述</div> -->
|
|
|
<!-- @click.stop="updateToolDetail(toolIndex, 2)" 点击开启修改-->
|
|
|
<div style="height:100%;"
|
|
|
- v-html="contentConvent(tool.toolDetail)"
|
|
|
+ v-html="renderedFormula(tool.toolDetail)"
|
|
|
v-if="toolDetailIndex != toolIndex"
|
|
|
></div>
|
|
|
<div v-else @click.stop="" style="height:100%;">
|
|
@@ -1738,7 +1738,7 @@
|
|
|
<img
|
|
|
style="cursor: pointer"
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<div
|
|
@@ -1812,7 +1812,7 @@
|
|
|
<div class="workImg">
|
|
|
<img
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<div
|
|
@@ -1886,7 +1886,7 @@
|
|
|
<div class="workImg">
|
|
|
<img
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
v-if="w.type == 12"
|
|
|
alt
|
|
|
/>
|
|
@@ -2875,7 +2875,7 @@
|
|
|
<img
|
|
|
style="cursor: pointer"
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<!-- @click="openVideo(w.works)" -->
|
|
@@ -3128,7 +3128,7 @@
|
|
|
<img
|
|
|
style="cursor: pointer"
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<!-- @click="openVideo(w.works)" -->
|
|
@@ -3442,7 +3442,7 @@
|
|
|
<div class="workImg">
|
|
|
<img
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<div
|
|
@@ -3603,7 +3603,7 @@
|
|
|
<div class="workImg">
|
|
|
<img
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
v-if="w.type == 12"
|
|
|
alt
|
|
|
/>
|
|
@@ -7491,7 +7491,7 @@
|
|
|
<img
|
|
|
style="cursor: pointer"
|
|
|
:src="word2"
|
|
|
- @click="downloadFile(w.works)"
|
|
|
+ @click="downloadFile(w.works,w.userid)"
|
|
|
alt
|
|
|
/>
|
|
|
<!-- @click="openVideo(w.works)" -->
|
|
@@ -9663,7 +9663,7 @@
|
|
|
>
|
|
|
(多选题)
|
|
|
</div>
|
|
|
- <div>题目:{{ testJson.testJson[index1].teststitle }}</div>
|
|
|
+ <div>题目:<span v-html="renderedFormula(testJson.testJson[index1].teststitle)"></span></div>
|
|
|
</div>
|
|
|
<img
|
|
|
v-if="testJson.testJson[index1].img"
|
|
@@ -20091,49 +20091,52 @@ export default {
|
|
|
};
|
|
|
x.send();
|
|
|
},
|
|
|
- downloadFile(url) {
|
|
|
- var credentials = {
|
|
|
- accessKeyId: "AKIATLPEDU37QV5CHLMH",
|
|
|
- secretAccessKey: "Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR",
|
|
|
- }; //秘钥形式的登录上传
|
|
|
- window.AWS.config.update(credentials);
|
|
|
- window.AWS.config.region = "cn-northwest-1"; //设置区域
|
|
|
- let url2 = url;
|
|
|
- let _url2 = "";
|
|
|
- if (
|
|
|
- url2.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1
|
|
|
- ) {
|
|
|
- _url2 = url2.split(
|
|
|
- "https://view.officeapps.live.com/op/view.aspx?src="
|
|
|
- )[1];
|
|
|
- } else {
|
|
|
- _url2 = url2;
|
|
|
+ downloadFile(url,uid) {
|
|
|
+ if (this.tType == 1 || this.userid == uid) {
|
|
|
+ var credentials = {
|
|
|
+ accessKeyId: "AKIATLPEDU37QV5CHLMH",
|
|
|
+ secretAccessKey: "Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR",
|
|
|
+ }; //秘钥形式的登录上传
|
|
|
+ window.AWS.config.update(credentials);
|
|
|
+ window.AWS.config.region = "cn-northwest-1"; //设置区域
|
|
|
+ let url2 = url;
|
|
|
+ let _url2 = "";
|
|
|
+ if (
|
|
|
+ url2.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1
|
|
|
+ ) {
|
|
|
+ _url2 = url2.split(
|
|
|
+ "https://view.officeapps.live.com/op/view.aspx?src="
|
|
|
+ )[1];
|
|
|
+ } else {
|
|
|
+ _url2 = url2;
|
|
|
+ }
|
|
|
+ const loading2 = this.$loading.service({
|
|
|
+ background: "rgba(255, 255, 255, 0.7)",
|
|
|
+ target: document.body,
|
|
|
+ text: "文件加载中...",
|
|
|
+ });
|
|
|
+ var s3 = new window.AWS.S3({ params: { Bucket: "ccrb" } });
|
|
|
+ let name = decodeURIComponent(_url2.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1])
|
|
|
+ var params = {
|
|
|
+ Bucket: "ccrb",
|
|
|
+ Key: name
|
|
|
+ };
|
|
|
+ s3.getObject(params, function (err, data) {
|
|
|
+ loading2.close();
|
|
|
+ if (err) console.log(err, err.stack); // an error occurred
|
|
|
+ else {
|
|
|
+ let url = window.URL.createObjectURL(new Blob([data.Body]));
|
|
|
+ let a = document.createElement("a");
|
|
|
+ a.name = name;
|
|
|
+ a.href = url;
|
|
|
+ a.download = name;
|
|
|
+ a.click();
|
|
|
+ console.log(data);
|
|
|
+ } // sxuccessful response
|
|
|
+
|
|
|
+ });
|
|
|
}
|
|
|
- const loading2 = this.$loading.service({
|
|
|
- background: "rgba(255, 255, 255, 0.7)",
|
|
|
- target: document.body,
|
|
|
- text: "文件加载中...",
|
|
|
- });
|
|
|
- var s3 = new window.AWS.S3({ params: { Bucket: "ccrb" } });
|
|
|
- let name = decodeURIComponent(_url2.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1])
|
|
|
- var params = {
|
|
|
- Bucket: "ccrb",
|
|
|
- Key: name
|
|
|
- };
|
|
|
- s3.getObject(params, function (err, data) {
|
|
|
- loading2.close();
|
|
|
- if (err) console.log(err, err.stack); // an error occurred
|
|
|
- else {
|
|
|
- let url = window.URL.createObjectURL(new Blob([data.Body]));
|
|
|
- let a = document.createElement("a");
|
|
|
- a.name = name;
|
|
|
- a.href = url;
|
|
|
- a.download = name;
|
|
|
- a.click();
|
|
|
- console.log(data);
|
|
|
- } // sxuccessful response
|
|
|
|
|
|
- });
|
|
|
|
|
|
return;
|
|
|
let _this = this;
|
|
@@ -21542,7 +21545,42 @@ export default {
|
|
|
renderedFormula() {
|
|
|
return function(val){
|
|
|
try {
|
|
|
- return katex.renderToString(val,{ throwOnError: false });
|
|
|
+ // 判断是否含有HTML标签,<tag ...>...</tag>
|
|
|
+ const hasTag = /<([a-zA-Z][\w\-]*)([^>]*)>([\s\S]*?)<\/\1>/g.test(val);
|
|
|
+ if (!hasTag) {
|
|
|
+ val = val.trim().replace(/[\u200B-\u200D\uFEFF]/g, '');
|
|
|
+ // 纯文本,整体渲染
|
|
|
+ try {
|
|
|
+ return katex.renderToString(val.trim(), {
|
|
|
+ throwOnError: false,
|
|
|
+ strict: false,
|
|
|
+ output: "htmlAndMathml"
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ return val; // 渲染失败原样输出
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // 有标签,对每个标签内容渲染
|
|
|
+ return val.replace(
|
|
|
+ /<([a-zA-Z][\w\-]*)([^>]*)>([\s\S]*?)<\/\1>/g,
|
|
|
+ (match, tag, attrs, inner) => {
|
|
|
+ let html;
|
|
|
+ val = val.trim().replace(/[\u200B-\u200D\uFEFF]/g, '');
|
|
|
+
|
|
|
+ try {
|
|
|
+ html = katex.renderToString(inner.trim(), {
|
|
|
+ throwOnError: false,
|
|
|
+ strict: false,
|
|
|
+ output: "htmlAndMathml"
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ html = inner;
|
|
|
+ }
|
|
|
+ return `<${tag}${attrs}>${html}</${tag}>`;
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
console.error('KaTeX渲染错误:', e);
|
|
|
return val;
|
|
@@ -21561,7 +21599,7 @@ export default {
|
|
|
? c
|
|
|
.replaceAll(/\r\n/g, "<br/>")
|
|
|
.replaceAll(/\n/g, "<br/>")
|
|
|
- .replaceAll(/\s/g, "  ")
|
|
|
+ .replaceAll(/\s/g, " ")
|
|
|
: "";
|
|
|
};
|
|
|
},
|
|
@@ -22010,7 +22048,9 @@ export default {
|
|
|
overflow:hidden;
|
|
|
box-sizing:border-box;
|
|
|
}
|
|
|
-
|
|
|
+.pb_content >>> .katex {
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
.file {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|