|
@@ -195,13 +195,13 @@
|
|
|
style="justify-content: center; min-width: 175px"></el-switch> -->
|
|
|
<span>生成模式:</span>
|
|
|
<el-radio-group v-model="isuseT" style="display: flex; align-items: center" @change="changeIsuseT">
|
|
|
- <div class="all_choose info_radio" style="margin-left: 10px">
|
|
|
+ <div class="all_choose info_radio">
|
|
|
<el-radio :label="false">从零开始生成</el-radio>
|
|
|
</div>
|
|
|
<div class="all_choose info_radio" style="margin-left: 10px">
|
|
|
<el-radio :label="true">从已有教案生成</el-radio>
|
|
|
</div>
|
|
|
- <div class="all_choose info_radio">
|
|
|
+ <div class="all_choose info_radio" style="margin-left: 10px">
|
|
|
<el-radio :label="1">对话模式生成</el-radio>
|
|
|
</div>
|
|
|
<div class="all_choose info_radio" style="margin-left: 10px">
|
|
@@ -1525,7 +1525,7 @@
|
|
|
<el-tooltip effect="light" content="右键单击可配置提示词" placement="bottom">
|
|
|
<button class="c_pub_button_confirm" style="margin: 0px 0 0px auto;"
|
|
|
@contextmenu.prevent="openAiDialog(1, 'aitargetTextDetail3',1), addCourseBehavior('courseBehavior', '右键课程目标-生成目标按钮')"
|
|
|
- @click="openAiDialog(2, 'aitargetTextDetail3',1), addCourseBehavior('courseBehavior', '点击课程目标-生成目标按钮')">生成目标</button>
|
|
|
+ @click="openAiDialog(2, 'aitargetTextDetail3',1), addCourseBehavior('courseBehavior', '点击课程目标-生成目标按钮')" ref="aitargetTextDetail3">生成目标</button>
|
|
|
</el-tooltip>
|
|
|
<div style="margin-top: 10px;width:100%" v-if="mubiaoInfoData.length">
|
|
|
<div class="add_chapters_box add_c_none" v-if="
|
|
@@ -2595,10 +2595,20 @@
|
|
|
v-if="steps > 1 && steps != 5 && istemplate != 1" @click="lastSteps" style="margin-left: auto;border: none;">
|
|
|
{{ steps == 4 ? "返回课程" : "上一步" }}
|
|
|
</button>
|
|
|
- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="openAiDialog2(2, 'aiTask3','all', ''), addCourseBehavior('courseBehavior', `点击学历案-重新生成所有任务按钮`)">重新生成所有任务</button>
|
|
|
- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="openAiDialog(2, 'aiTaskG2', 'all'), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有工具按钮`)" v-if="panTool() == 0">一键生成所有工具</button>
|
|
|
- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="allEvaCan(), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有评价按钮`)" v-if="panTool() > 0 && panTaskElist() == 0 && panEvaCont() == 0">一键生成所有评价</button>
|
|
|
- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="exportTaskEA(), addCourseBehavior('courseBehavior', `点击学历案-导出评价和学历案按钮`)">导出评价和学历案</button>
|
|
|
+ <button class="c_pub_button_confirm3 buttonBoxB">
|
|
|
+ <span>一键生成</span>
|
|
|
+ <div class="buttonBox">
|
|
|
+ <div @click="openAiDialog2(2, 'aiTask3','all', ''), addCourseBehavior('courseBehavior', `点击学历案-重新生成所有任务按钮`)">重新生成所有任务</div>
|
|
|
+ <div @click="openAiDialog(2, 'aiTaskG2', 'all'), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有工具按钮`)" v-if="panTool() == 0">一键生成所有工具</div>
|
|
|
+ <div @click="openAiDialog2(2, 'aiTaskG2', 'all'), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有工具按钮`)" v-if="panTool() > 0">重新生成所有工具</div>
|
|
|
+ <div @click="allEvaCan(), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有评价按钮`)" v-if="panTool() > 0">{{panTaskElist() == 0 && panEvaCont() == 0 ? '一键生成所有评价' : '重新生成所有评价'}}</div>
|
|
|
+ <div @click="exportTaskEA(), addCourseBehavior('courseBehavior', `点击学历案-导出评价和学历案按钮`)">导出评价和学历案</div>
|
|
|
+ </div>
|
|
|
+ </button>
|
|
|
+ <!-- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="openAiDialog2(2, 'aiTask3','all', ''), addCourseBehavior('courseBehavior', `点击学历案-重新生成所有任务按钮`)">重新生成所有任务</button> -->
|
|
|
+ <!-- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="openAiDialog(2, 'aiTaskG2', 'all'), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有工具按钮`)" v-if="panTool() == 0">一键生成所有工具</button> -->
|
|
|
+ <!-- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="allEvaCan(), addCourseBehavior('courseBehavior', `点击学历案-一键生成所有评价按钮`)" v-if="panTool() > 0 && panTaskElist() == 0 && panEvaCont() == 0">一键生成所有评价</button> -->
|
|
|
+ <!-- <button class="c_pub_button_confirm3" style="margin: 0 0 0 10px;" @click="exportTaskEA(), addCourseBehavior('courseBehavior', `点击学历案-导出评价和学历案按钮`)">导出评价和学历案</button> -->
|
|
|
<button class="c_pub_button_confirm" style="margin: 0 0 0 10px;" v-if="steps < 4 && istemplate != 1" @click="nextSteps">
|
|
|
{{ steps == 3 ? "确认上传" : "下一步" }}
|
|
|
</button>
|
|
@@ -2668,7 +2678,7 @@
|
|
|
|
|
|
<div style="margin: 0 0 10px 0; padding: 0" v-for="(item, index) in unitJson[unitIndex].chapterInfo"
|
|
|
:key="index">
|
|
|
- <div v-if="courseState == 4" style="position: relative;
|
|
|
+ <div v-loading="anLoading[0]" v-if="courseState == 4" style="position: relative;
|
|
|
background: #fff;
|
|
|
box-sizing: border-box;
|
|
|
padding: 1px 20px 10px;
|
|
@@ -2693,7 +2703,7 @@
|
|
|
</el-tooltip>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div>
|
|
|
+ <div >
|
|
|
<div class="add_chapters_box add_c_none" v-if="
|
|
|
item.taskJson[0].chapterData &&
|
|
|
item.taskJson[0].chapterData.length == 0
|
|
@@ -3107,6 +3117,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div
|
|
|
+ v-loading="anLoading[itemTaskIndex]"
|
|
|
style="position: relative"
|
|
|
v-if="courseState == 5"
|
|
|
>
|
|
@@ -7319,7 +7330,7 @@ import JSZip from "jszip";
|
|
|
import evaList from "./evaList.vue";
|
|
|
import MindTask from "./jsmind2";
|
|
|
import ConvertApi from 'convertapi-js'
|
|
|
-let convertApi = ConvertApi.auth('secret_8jZzewWvAJluEjTR')
|
|
|
+let convertApi = ConvertApi.auth('secret_U1EO5rhgMCnoBnBT')
|
|
|
|
|
|
var OpenCC = require("opencc-js");
|
|
|
let converter = OpenCC.Converter({
|
|
@@ -7867,6 +7878,7 @@ export default {
|
|
|
r_agentid: "",
|
|
|
course_info: "",
|
|
|
stepShow: true,
|
|
|
+ anLoading: [],
|
|
|
};
|
|
|
},
|
|
|
directives: {
|
|
@@ -9624,9 +9636,9 @@ export default {
|
|
|
},
|
|
|
async createTeacherAn(index){
|
|
|
// this.lineCount = index;
|
|
|
- this.loading = true
|
|
|
let md = new MarkdownIt();
|
|
|
if(this.courseState == 4){
|
|
|
+ this.anLoading[0] = true
|
|
|
// if(index == 0 || index){
|
|
|
// let _task = this.unitJson[0].chapterInfo[0].taskJson[index]
|
|
|
// let name = _task.task+'-教案'
|
|
@@ -9641,6 +9653,7 @@ export default {
|
|
|
}
|
|
|
// }
|
|
|
}else if(this.courseState == 5){
|
|
|
+ this.anLoading[index] = true
|
|
|
if(index == 0 || index){
|
|
|
let _task = this.unitJson[0].chapterInfo[0].taskJson[index]
|
|
|
let name = _task.task+'-教案'
|
|
@@ -9754,13 +9767,21 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
// });
|
|
|
// const file = new File([blob], dname, { type: 'application/msword' });
|
|
|
let file = new File([blob], dname, { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
|
|
|
- let params = convertApi.createParams()
|
|
|
- params.add('file', file)
|
|
|
- let result = await convertApi.convert('docx', 'docx', params)
|
|
|
- file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
- return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
- });
|
|
|
+ // let params = convertApi.createParams()
|
|
|
+ // params.add('file', file)
|
|
|
+ // try {
|
|
|
+ // let result = await convertApi.convert('docx', 'docx', params)
|
|
|
+ // file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
+ // return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
+ // });
|
|
|
+ // await this.beforeUploadHtml(file, index, callback)
|
|
|
+ // } catch (error) {
|
|
|
+ // console.log('=================','报错')
|
|
|
+ // await this.beforeUploadHtml(file, index, callback)
|
|
|
+ // return
|
|
|
+ // }
|
|
|
await this.beforeUploadHtml(file, index, callback)
|
|
|
+
|
|
|
},
|
|
|
async generateExport(a, html, index) {
|
|
|
// <html lang="en">
|
|
@@ -9797,15 +9818,22 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
// 创建文件流
|
|
|
|
|
|
let file = new File([blob], dname, { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
|
|
|
- let params = convertApi.createParams()
|
|
|
- params.add('file', file)
|
|
|
- let result = await convertApi.convert('docx', 'docx', params)
|
|
|
- file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
- return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
- });
|
|
|
+ // let params = convertApi.createParams()
|
|
|
+ // params.add('file', file)
|
|
|
+ // try {
|
|
|
+ // let result = await convertApi.convert('docx', 'docx', params)
|
|
|
+ // file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
+ // return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
+ // });
|
|
|
|
|
|
- // 执行下载
|
|
|
+ // // 执行下载
|
|
|
+ // saveAs(file, dname);
|
|
|
+ // } catch (error) {
|
|
|
+ // saveAs(file, dname);
|
|
|
+ // // this.$message.error('导出失败')
|
|
|
+ // }
|
|
|
saveAs(file, dname);
|
|
|
+
|
|
|
// return file
|
|
|
},
|
|
|
async generateExport2(a, html, index) {
|
|
@@ -9846,12 +9874,19 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
let file = new File([blob], dname, { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
|
|
|
let params = convertApi.createParams()
|
|
|
params.add('file', file)
|
|
|
- let result = await convertApi.convert('docx', 'docx', params)
|
|
|
- file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
- return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
- });
|
|
|
-
|
|
|
resolve(file); // 通过 Promise 返回 File 对象
|
|
|
+
|
|
|
+ // try {
|
|
|
+ // let result = await convertApi.convert('docx', 'docx', params)
|
|
|
+ // file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
+ // return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
+ // });
|
|
|
+
|
|
|
+ // resolve(file); // 通过 Promise 返回 File 对象
|
|
|
+ // } catch (error) {
|
|
|
+ // resolve(''); // 通过 Promise 返回 File 对象
|
|
|
+ // }
|
|
|
+
|
|
|
});
|
|
|
},
|
|
|
beforeUploadHtml(event, index, callback) {
|
|
@@ -9891,13 +9926,15 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
})
|
|
|
.send(function (err, data) {
|
|
|
if(index == (_this.unitJson[0].chapterInfo[0].taskJson.length - 1) && _this.courseState == 4){
|
|
|
- _this.loading = false
|
|
|
+ _this.anLoading[0] = false
|
|
|
}
|
|
|
|
|
|
if(_this.courseState == 5){
|
|
|
- _this.loading = false
|
|
|
+ _this.anLoading[index] = false
|
|
|
}
|
|
|
callback ? callback() : ''
|
|
|
+ _this.$forceUpdate();
|
|
|
+
|
|
|
if (err) {
|
|
|
_this.$message.error("上传失败");
|
|
|
} else {
|
|
@@ -9954,12 +9991,18 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
// });
|
|
|
// const file = new File([blob], dname, { type: 'application/msword' });
|
|
|
let file = new File([blob], dname, { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
|
|
|
- let params = convertApi.createParams()
|
|
|
- params.add('file', file)
|
|
|
- let result = await convertApi.convert('docx', 'docx', params)
|
|
|
- file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
- return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
- });
|
|
|
+ // let params = convertApi.createParams()
|
|
|
+ // params.add('file', file)
|
|
|
+ // try {
|
|
|
+ // let result = await convertApi.convert('docx', 'docx', params)
|
|
|
+ // file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
+ // return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
+ // });
|
|
|
+ // await this.beforeUploadHtml2(file, index, callback)
|
|
|
+ // } catch (error) {
|
|
|
+ // await this.beforeUploadHtml2(file, index, callback)
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
await this.beforeUploadHtml2(file, index, callback)
|
|
|
},
|
|
|
beforeUploadHtml2(event, index, callback) {
|
|
@@ -10691,6 +10734,17 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
// loading.close();
|
|
|
return;
|
|
|
}
|
|
|
+ if (
|
|
|
+ ['DOC'].indexOf(
|
|
|
+ file.name
|
|
|
+ .split(".")
|
|
|
+ [file.name.split(".").length - 1].toLocaleUpperCase()
|
|
|
+ ) !== -1
|
|
|
+ ) {
|
|
|
+ this.$message.error("抱歉,小可暂时不支持.doc的文件呢");
|
|
|
+ this.inputShow = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
if (type == 3) {
|
|
|
var b = [
|
|
@@ -10797,13 +10851,62 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
// this.inputShow = true;
|
|
|
let params = convertApi.createParams()
|
|
|
params.add('file', file)
|
|
|
- let result = await convertApi.convert('doc', 'docx', params)
|
|
|
- // Get result file URL
|
|
|
- file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
- return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
- });
|
|
|
- console.log(result)
|
|
|
- console.log(file)
|
|
|
+ try {
|
|
|
+ let result = await convertApi.convert('doc', 'docx', params);
|
|
|
+ // Get result file URL
|
|
|
+ file = await fetch(result.files[0].Url).then(res => res.blob()).then(blob => {
|
|
|
+ return new File([blob], result.files[0].FileName, { type: 'application/octet-stream' });
|
|
|
+ });
|
|
|
+ console.log(result)
|
|
|
+ console.log(file)
|
|
|
+ } catch (error) {
|
|
|
+ cfindex2++;
|
|
|
+ if(type == 14){
|
|
|
+ _this.teacherinfoisFinishSize = cfindex2;
|
|
|
+ }else if(type == 16){
|
|
|
+ _this.mubiaoinfoisFinishSize = cfindex2;
|
|
|
+ }else if(type == 17){
|
|
|
+ _this.xuanzeinfoisFinishSize = cfindex2;
|
|
|
+ }else if(type == 18){
|
|
|
+ _this.pingjiainfoisFinishSize[tindex] = cfindex2;
|
|
|
+ }else if(type == 19){
|
|
|
+ _this.knowinfoisFinishSize = cfindex2;
|
|
|
+ }else if(type == 20){
|
|
|
+ _this.knowinfoisFinishSize2 = cfindex2;
|
|
|
+ }else {
|
|
|
+ _this.infoisFinishSize = cfindex2;
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ if (
|
|
|
+ cfindex2 == event.target.files.length ||
|
|
|
+ cfindex2 > event.target.files.length
|
|
|
+ ) {
|
|
|
+ if(type == 14){
|
|
|
+ _this.teacherinfoproVisible = false;
|
|
|
+ }else if(type == 16){
|
|
|
+ _this.mubiaoinfoproVisible = false;
|
|
|
+ }else if(type == 17){
|
|
|
+ _this.xuanzeinfoproVisible = false;
|
|
|
+ }else if(type == 18){
|
|
|
+ _this.pingjiainfoproVisible[tindex] = false;
|
|
|
+ }else if(type == 19){
|
|
|
+ _this.knowinfoproVisible = false;
|
|
|
+ }else if(type == 20){
|
|
|
+ _this.knowinfoproVisible2 = false;
|
|
|
+ }else{
|
|
|
+ _this.infoproVisible = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _this.$forceUpdate();
|
|
|
+ }, 1000);
|
|
|
+ _this.inputShow = true;
|
|
|
+ _this.$message.error("抱歉,小可暂时不支持.doc的文件呢");
|
|
|
+ // 捕捉到这个convertApi.convert报错就不要往下走了
|
|
|
+ return; // 直接返回,不继续执行后续代码
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
// return;
|
|
|
}
|
|
|
|
|
@@ -17705,6 +17808,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
confirmButtonText: "确定",
|
|
|
cancelButtonText: "取消",
|
|
|
type: "warning",
|
|
|
+ customClass: 'custom-confirm-box'
|
|
|
})
|
|
|
.then(() => {
|
|
|
// if ((this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" || this.templateid == "cf5722a4-401b-11ef-b873-005056b86dc3") && type == "aiTeacher2") {
|
|
@@ -17716,6 +17820,9 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
.catch(() => {
|
|
|
|
|
|
});
|
|
|
+ setTimeout(() => {
|
|
|
+ this.setTipsIndex()
|
|
|
+ }, 500)
|
|
|
},
|
|
|
async openAiDialog(clickType, type, callback, index, tindex) {
|
|
|
let fileid = this.isFileSearch ? [...this.fileIds] : []
|
|
@@ -17866,6 +17973,13 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
+ if(callback != 'all' && !this.unitJson[0].chapterInfo[0].taskJson[callback].taskDetail3){
|
|
|
+ this.$message({
|
|
|
+ message: `请先生成任务${callback}的教案在执行此操作`,
|
|
|
+ type: "warning"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
this.aitype = type
|
|
|
this.aiText = this.aiJson.aiTaskG2
|
|
|
this.aiCallBack = callback
|
|
@@ -18100,6 +18214,12 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
|
|
|
this.$message.error("请生成简要描述后再生成目标");
|
|
|
return;
|
|
|
}
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const targetDiv = this.$refs.aitargetTextDetail3;
|
|
|
+ if (targetDiv) {
|
|
|
+ targetDiv.scrollIntoView();
|
|
|
+ }
|
|
|
+ });
|
|
|
this.aitype = type
|
|
|
this.aiText = this.aiJson.aiTargetGet
|
|
|
this.aiText2 = this.aiJson.aiTarget2
|
|
@@ -18632,7 +18752,8 @@ ${msg3}
|
|
|
let _this = this
|
|
|
function processNext() {
|
|
|
if (ij < _this.unitJson[0].chapterInfo[0].taskJson.length) {
|
|
|
- if(!_this.taskGLoading[ij][1]){
|
|
|
+ if(!_this.taskGLoading[ij][1] || !_this.unitJson[0].chapterInfo[0].taskJson[ij].taskDetail3){
|
|
|
+ _this.taskGLoading[ij][1] = false
|
|
|
ij++;
|
|
|
processNext();
|
|
|
return;
|
|
@@ -19484,6 +19605,12 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
|
|
|
this.isTargetCancelSource2.close()
|
|
|
this.isTargetCancelSource2 = null
|
|
|
}
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const targetDiv = this.$refs.aitargetTextDetail3;
|
|
|
+ if (targetDiv) {
|
|
|
+ targetDiv.scrollIntoView();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
if(this.isTargetCancelToken1 && type == 'target1'){
|
|
|
this.$message.success("已经成功停止生成目标")
|
|
@@ -29932,4 +30059,54 @@ ol {
|
|
|
height: 12px;
|
|
|
margin-left: 5px;
|
|
|
}
|
|
|
+
|
|
|
+.buttonBoxB{
|
|
|
+ position: relative;
|
|
|
+ margin: 0 0 0 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBoxB::after{
|
|
|
+ content: '';
|
|
|
+ display: block;
|
|
|
+ background-image: url(../../../assets/icon/course/downArrow.svg);
|
|
|
+ background-size: 100% 100%;
|
|
|
+ width: 15px;
|
|
|
+ height: 15px;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBoxB:hover .buttonBox{
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBox {
|
|
|
+ position: absolute;
|
|
|
+ bottom: -0;
|
|
|
+ left: 0;
|
|
|
+ transform: translateY(100%);
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 5px;
|
|
|
+ box-shadow: 0 0 3px 1px #e3e3e3;
|
|
|
+ width: 155px;
|
|
|
+ display: none;
|
|
|
+ z-index: 99999;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBox>div {
|
|
|
+ height: 40px;
|
|
|
+ line-height: 40px;
|
|
|
+ width: 100%;
|
|
|
+ text-align: center;
|
|
|
+ color: #000;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBox>div+div {
|
|
|
+ border-top: 1px solid #e0e0e0;
|
|
|
+}
|
|
|
+
|
|
|
+.buttonBox>div:hover {
|
|
|
+ background: #f6f8ff;
|
|
|
+}
|
|
|
</style>
|