|
@@ -658,6 +658,11 @@
|
|
|
@contextmenu.prevent="openAiDialog(1, 'aiOutline')"
|
|
|
@click="openAiDialog(2, 'aiOutline')">生成大纲</button>
|
|
|
</el-tooltip>
|
|
|
+ <el-tooltip effect="light" content="右键单击可配置提示词" placement="bottom" v-if="panOutline() > 0">
|
|
|
+ <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;"
|
|
|
+ @contextmenu.prevent="openAiDialog2(1, 'aiOutline')"
|
|
|
+ @click="openAiDialog2(2, 'aiOutline')">重新生成大纲</button>
|
|
|
+ </el-tooltip>
|
|
|
<!-- <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;">AI优化</button> -->
|
|
|
</div>
|
|
|
<div class="task_outline">
|
|
@@ -796,6 +801,11 @@
|
|
|
@contextmenu.prevent="openAiDialog(1, 'aiTeacher2')"
|
|
|
@click="openAiDialog(2, 'aiTeacher2')" v-if="istemplate == 1 && dArray.length">生成教案</button>
|
|
|
</el-tooltip>
|
|
|
+ <el-tooltip effect="light" content="右键单击可配置提示词" placement="bottom" v-if="panTeacher() > 0">
|
|
|
+ <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;"
|
|
|
+ @contextmenu.prevent="openAiDialog2(1, 'aiTeacher2')"
|
|
|
+ @click="openAiDialog2(2, 'aiTeacher2')">重新生成大纲</button>
|
|
|
+ </el-tooltip>
|
|
|
<!-- <button class="c_pub_button_confirm" style="margin: 0 20px 0 auto;">AI优化</button> -->
|
|
|
</div>
|
|
|
<div class="task_outline">
|
|
@@ -1441,6 +1451,11 @@
|
|
|
</div>
|
|
|
<div class="chapter_upload_ic">
|
|
|
<div class="chapter_upload_noSee" v-if="item1.type == 12"></div>
|
|
|
+ <div class="chapter_upload_ic_check" v-if="item1.type == 3" @click.stop="
|
|
|
+ checkChpater( $event, unitIndex, 0, index1 )
|
|
|
+ ">
|
|
|
+ <div></div>
|
|
|
+ </div>
|
|
|
<div class="chapter_upload_ud" style="z-index: 99">
|
|
|
<div class="chapter_upload_up" @click="
|
|
|
upCd(
|
|
@@ -1942,6 +1957,11 @@
|
|
|
class="chapter_upload_noSee"
|
|
|
v-if="item1.type == 12"
|
|
|
></div>
|
|
|
+ <div class="chapter_upload_ic_check" v-if="item1.type == 3" @click.stop="
|
|
|
+ checkChpater( $event, unitIndex, itemTaskIndex, index1 )
|
|
|
+ ">
|
|
|
+ <div></div>
|
|
|
+ </div>
|
|
|
<div
|
|
|
class="chapter_upload_ud"
|
|
|
style="z-index: 99"
|
|
@@ -4655,7 +4675,7 @@
|
|
|
closePan(45);
|
|
|
}
|
|
|
" class="dialog_diy fullStyle">
|
|
|
- <div style="height: 100%">
|
|
|
+ <div style="height: 100%" v-loading="choiceLoading" element-loading-text="小可正在努力生成中,请稍等...">
|
|
|
<!-- <div class="a_add_title" style="
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
@@ -4671,8 +4691,13 @@
|
|
|
color: #c7c7c7;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
+ justify-content: flex-end;
|
|
|
">
|
|
|
<!-- 请输入题目内容 -->
|
|
|
+ <button class="c_pub_button_add pub_btn_paste_img" @click="aiChoice(45)" style="margin-left: 10px">
|
|
|
+ 智能生成
|
|
|
+ </button>
|
|
|
+ <!-- 请输入题目内容 -->
|
|
|
<button class="c_pub_button_add pub_btn_paste_img" @click="pasteOption" style="margin-left: 10px"
|
|
|
v-if="isPasteChoice">
|
|
|
智能粘贴
|
|
@@ -5710,6 +5735,8 @@
|
|
|
@retrunCourse="retrunCourse" :templateid.sync="templateid" @addWork="addWork"></tipsDialog>
|
|
|
<aiCreateDialog :dialogVisibleAiCreate.sync="dialogVisibleAiCreate" :courseName="courseName" @createAiPpt="createAiPpt" :infoData="infoData" :courseTypeId="courseTypeId" :CourseTypeJson="CourseTypeJson" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateDialog>
|
|
|
<aiCreateVideoDialog :dialogVisibleAiCreateVideo.sync="dialogVisibleAiCreateVideo" :courseName="courseName" @createAiVideo="createAiVideo" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateVideoDialog>
|
|
|
+ <wpdf :dialogVisiblePdf.sync="dialogVisiblePdf" :url="wurl"></wpdf>
|
|
|
+ <wOffice :dialogVisibleOffice.sync="dialogVisibleOffice" :url="wurl" ></wOffice>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -5738,6 +5765,8 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
import MarkdownIt from "markdown-it";
|
|
|
import aiCreateDialog from './aiCreateDialog.vue'
|
|
|
import aiCreateVideoDialog from './aiCreateVideoDialog.vue'
|
|
|
+import wpdf from "../test/file/wPdf2.vue";
|
|
|
+import wOffice from "../test/file/wOffice.vue";
|
|
|
|
|
|
var OpenCC = require("opencc-js");
|
|
|
let converter = OpenCC.Converter({
|
|
@@ -5765,6 +5794,8 @@ export default {
|
|
|
tipsDialog,
|
|
|
aiCreateDialog,
|
|
|
aiCreateVideoDialog,
|
|
|
+ wpdf,
|
|
|
+ wOffice,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
@@ -6126,6 +6157,10 @@ export default {
|
|
|
courseJie:1,
|
|
|
courseTime:45,
|
|
|
allTextArray: [],
|
|
|
+ dialogVisiblePdf: false,
|
|
|
+ dialogVisibleOffice: false,
|
|
|
+ wurl: "",
|
|
|
+ choiceLoading: false,
|
|
|
};
|
|
|
},
|
|
|
directives: {
|
|
@@ -6250,6 +6285,34 @@ export default {
|
|
|
? md.render(c) : "";
|
|
|
};
|
|
|
},
|
|
|
+ panOutline(){
|
|
|
+ return function () {
|
|
|
+ let count = 0;
|
|
|
+ for(var i = 0; i < this.unitJson.length; i++){
|
|
|
+ let _task = this.unitJson[i].chapterInfo[0].taskJson
|
|
|
+ for(var j = 0; j < _task.length; j++){
|
|
|
+ if(_task[j].taskDetail2){
|
|
|
+ count++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ };
|
|
|
+ },
|
|
|
+ panTeacher(){
|
|
|
+ return function () {
|
|
|
+ let count = 0;
|
|
|
+ for(var i = 0; i < this.unitJson.length; i++){
|
|
|
+ let _task = this.unitJson[i].chapterInfo[0].taskJson
|
|
|
+ for(var j = 0; j < _task.length; j++){
|
|
|
+ if(_task[j].taskDetail3){
|
|
|
+ count++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ };
|
|
|
+ },
|
|
|
},
|
|
|
watch: {
|
|
|
unitIndex(newValue, oldValue) {
|
|
@@ -8962,12 +9025,56 @@ export default {
|
|
|
// ic
|
|
|
// ].name = JSON.parse(JSON.stringify(e.target.value));
|
|
|
this.line =
|
|
|
- this.unitJson[i].chapterInfo[0].taskJson[0].chapterData[ic].name;
|
|
|
+ this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].name;
|
|
|
this.taskCount = j;
|
|
|
this.lineCount = ic;
|
|
|
this.dialogVisibleupdataVideoT = true;
|
|
|
this.$forceUpdate();
|
|
|
},
|
|
|
+ checkChpater(e, i, j, ic){
|
|
|
+ let type = this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].type
|
|
|
+ if(type == 3){
|
|
|
+ var fileA = [
|
|
|
+ "DOC",
|
|
|
+ "DOCX",
|
|
|
+ "DOCM",
|
|
|
+ "DOTM",
|
|
|
+ "DOTX",
|
|
|
+ "PPTX",
|
|
|
+ "PPSX",
|
|
|
+ "PPT",
|
|
|
+ "PPS",
|
|
|
+ "PPTM",
|
|
|
+ "POTM",
|
|
|
+ "PPAM",
|
|
|
+ "POTX",
|
|
|
+ "PPSM",
|
|
|
+ "XLSX",
|
|
|
+ "XLS"
|
|
|
+ ];
|
|
|
+ let url = this.unitJson[i].chapterInfo[0].taskJson[j].chapterData[ic].url
|
|
|
+ if (
|
|
|
+ fileA.indexOf(
|
|
|
+ url.split(".")[
|
|
|
+ url.split(".").length - 1
|
|
|
+ ].toLocaleUpperCase()
|
|
|
+ ) != -1
|
|
|
+ ) {
|
|
|
+ this.dialogVisibleOffice = true
|
|
|
+ this.wurl = url
|
|
|
+ } else if (
|
|
|
+ "pdf".indexOf(
|
|
|
+ url.split(".")[
|
|
|
+ url.split(".").length - 1
|
|
|
+ ].toLocaleLowerCase()
|
|
|
+ ) != -1
|
|
|
+ ) {
|
|
|
+ this.dialogVisiblePdf = true
|
|
|
+ this.wurl = url
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
updataVideoC() {
|
|
|
this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
|
|
|
this.taskCount
|
|
@@ -13517,6 +13624,23 @@ export default {
|
|
|
}
|
|
|
this.$forceUpdate();
|
|
|
},
|
|
|
+ openAiDialog2(clickType, type, callback, index, tindex){
|
|
|
+ this.$confirm("重新生成会影响已生成内容,确定重新生成吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ if (this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" && type == "aiTeacher2") {
|
|
|
+ this.openAiDialog(clickType, 'aiTeacher')
|
|
|
+ }else {
|
|
|
+ this.openAiDialog(clickType, type, callback, index, tindex)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+
|
|
|
+ });
|
|
|
+ },
|
|
|
openAiDialog(clickType, type, callback, index, tindex) {
|
|
|
// if(clickType == 1){
|
|
|
// return;
|
|
@@ -13905,6 +14029,7 @@ ${sub.length ? '学科:' + sub.join(",") : ''}
|
|
|
${mclass.length ? '面向年级:' + mclass.join(",") : ''}
|
|
|
${this.templatePan.includes(this.templateid) ? '课程节数:'+this.courseJie+'节' : ''}
|
|
|
${this.templatePan.includes(this.templateid) ? '课程时长:'+this.courseTime+'min' : ''}
|
|
|
+${this.courseText ? '参考内容:'+this.courseText : ''}
|
|
|
|
|
|
## 要求
|
|
|
${message} 以及##参考资料 以文本格式输出项目概况,驱动性问题,最终作品
|
|
@@ -13912,7 +14037,9 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
|
|
|
## Format example
|
|
|
课程简要描述:课程内容的简单叙述。
|
|
|
驱动性问题:1个驱动整个项目的问题。
|
|
|
-最终作品:对应解决驱动性问题的作品,可个人可团队。`
|
|
|
+最终作品:对应解决驱动性问题的作品,可个人可团队。
|
|
|
+
|
|
|
+${this.courseText ? '注意,你生成的内容不能与原有<参考内容>一致,重新生成不一样的<参考内容>' : ''}`
|
|
|
this.aiGet(msg)
|
|
|
},
|
|
|
setUnitJson() {
|
|
@@ -14207,36 +14334,81 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
|
|
|
}
|
|
|
}
|
|
|
_this.dArray = dArray
|
|
|
- _this.unitJson[0].chapterInfo[0].taskJson = []
|
|
|
|
|
|
- for (var i = 0; i < dArray.length; i++) {
|
|
|
- let _task = dArray[i]
|
|
|
- _this.unitJson[0].chapterInfo[0].taskJson.push({
|
|
|
- task: _task.task,
|
|
|
- taskDetail: "",
|
|
|
- taskDetail2: _task.detail,
|
|
|
- taskDetail3: "",
|
|
|
- chapterData: [],
|
|
|
- toolText: "",
|
|
|
- toolChoose: [
|
|
|
- {
|
|
|
- tool: [],
|
|
|
- toolDetail: "",
|
|
|
- toolType: 0,
|
|
|
+ if(_this.panOutline() > 0){
|
|
|
+ for(var i = 0; i < _this.unitJson[0].chapterInfo[0].taskJson.length; i++){
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson[i].task = ""
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail2 = ""
|
|
|
+ }
|
|
|
+ for (var i = 0; i < dArray.length; i++) {
|
|
|
+ let _task = dArray[i]
|
|
|
+ if(_this.unitJson[0].chapterInfo[0].taskJson[i]){
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson[i].task = _task.task
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson[i].taskDetail2 = _task.detail
|
|
|
+ }else {
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson.push({
|
|
|
+ task: _task.task,
|
|
|
+ taskDetail: "",
|
|
|
+ taskDetail2: _task.detail,
|
|
|
+ taskDetail3: "",
|
|
|
+ chapterData: [],
|
|
|
+ toolText: "",
|
|
|
+ toolChoose: [
|
|
|
+ {
|
|
|
+ tool: [],
|
|
|
+ toolDetail: "",
|
|
|
+ toolType: 0,
|
|
|
+ askCount: 1,
|
|
|
+ askTitle: "",
|
|
|
+ askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ isShowTools: false,
|
|
|
askCount: 1,
|
|
|
+ isFold: 2,
|
|
|
askTitle: "",
|
|
|
askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
|
|
|
- },
|
|
|
- ],
|
|
|
- isShowTools: false,
|
|
|
- askCount: 1,
|
|
|
- isFold: 2,
|
|
|
- askTitle: "",
|
|
|
- askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
|
|
|
- checkJson: [{ checkCount: [], checkPerent: [] }],
|
|
|
- homeworkList: [],
|
|
|
- })
|
|
|
+ checkJson: [{ checkCount: [], checkPerent: [] }],
|
|
|
+ homeworkList: [],
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson = []
|
|
|
+
|
|
|
+ for (var i = 0; i < dArray.length; i++) {
|
|
|
+ let _task = dArray[i]
|
|
|
+ _this.unitJson[0].chapterInfo[0].taskJson.push({
|
|
|
+ task: _task.task,
|
|
|
+ taskDetail: "",
|
|
|
+ taskDetail2: _task.detail,
|
|
|
+ taskDetail3: "",
|
|
|
+ chapterData: [],
|
|
|
+ toolText: "",
|
|
|
+ toolChoose: [
|
|
|
+ {
|
|
|
+ tool: [],
|
|
|
+ toolDetail: "",
|
|
|
+ toolType: 0,
|
|
|
+ askCount: 1,
|
|
|
+ askTitle: "",
|
|
|
+ askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ isShowTools: false,
|
|
|
+ askCount: 1,
|
|
|
+ isFold: 2,
|
|
|
+ askTitle: "",
|
|
|
+ askJson: [{ askstitle: "", askItem: 1, checkList: [] }],
|
|
|
+ checkJson: [{ checkCount: [], checkPerent: [] }],
|
|
|
+ homeworkList: [],
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
_this.unitJson[0].chapterInfo[0].taskJson[0].chapterData = JSON.parse(JSON.stringify(_this.infoData))
|
|
|
_this.unitJson2 = JSON.parse(JSON.stringify(_this.unitJson))
|
|
|
_this.$forceUpdate();
|
|
@@ -14646,6 +14818,160 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[task].taskDetail3.replaceAll('#','')
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
+ async aiChoice(type){
|
|
|
+ if(type == 45){
|
|
|
+ this.choiceLoading = true
|
|
|
+ }
|
|
|
+ let _this = this
|
|
|
+ let fileid = _this.isFileSearch ? [..._this.fileIds] : []
|
|
|
+ if (_this.infoData.length) {
|
|
|
+ for (var i = 0; i < _this.infoData.length; i++) {
|
|
|
+ if(_this.infoData[i].fileid){
|
|
|
+ fileid.push(_this.infoData[i].fileid)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ let sub = []
|
|
|
+ let mclass = []
|
|
|
+ if (this.courseTypeId.length) {
|
|
|
+ for (var i = 0; i < this.courseTypeId.length; i++) {
|
|
|
+ let _sid = this.courseTypeId[i]
|
|
|
+ for (var j = 0; j < this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'].length; j++) {
|
|
|
+ if (_sid == this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'][j].id) {
|
|
|
+ mclass.push(this.CourseTypeJson['34628934-d02f-11ec-8c78-005056b86db5'][j].name)
|
|
|
+ }
|
|
|
+ if (_sid == this.CourseTypeJson['34629907-d02f-11ec-8c78-005056b86db5'][j].id) {
|
|
|
+ sub.push(this.CourseTypeJson['34629907-d02f-11ec-8c78-005056b86db5'][j].name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let messages = ""
|
|
|
+ if(type == 15){
|
|
|
+ messages = `NOTICE
|
|
|
+Role: 你是创建课程的老师,可以利用file_search的方式完整的去分析文件内容(注:如果文件内容里面不包含需要检索的内容,就不引用文件内容),并生成需要的JSON数据。
|
|
|
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
|
|
|
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
|
|
|
+Instruction: Based on the context, follow "Format example", write content.
|
|
|
+
|
|
|
+# Context
|
|
|
+## 任务
|
|
|
+根据本任务的#教案,在考虑到面向学生年级(<面向年级>)以及相对应的学科(<课程学科>)的基础上生成1道问答题。题目的意义是测试学生对本教学任务知识点的掌握情况,你的题目应当是有意义的。然后根据Format example的要求返回要以json的格式
|
|
|
+
|
|
|
+## 限制
|
|
|
+- 生成题目应该充分考虑学生年级<面向年级>和面向学科<课程学科>,你的题目应有教学意义。
|
|
|
+- 你仅仅需要输出题目,其他什么内容都不需要输出。禁止输出题目以外的任何内容。
|
|
|
+
|
|
|
+## 课程简介
|
|
|
+课程名字:${_this.courseName}
|
|
|
+${_this.courseText ? '课程简要描述:' + _this.courseText : ''}
|
|
|
+${sub.length ? '学科:' + sub.join(",") : ''}
|
|
|
+${mclass.length ? '面向年级:' + mclass.join(",") : ''}
|
|
|
+
|
|
|
+## 教案
|
|
|
+${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
|
|
|
+
|
|
|
+# Format example
|
|
|
+{answerQ:"问题"}
|
|
|
+`
|
|
|
+ }else if(type == 45){
|
|
|
+ messages = `NOTICE
|
|
|
+Role: 你是创建课程的老师,可以利用file_search的方式完整的去分析文件内容(注:如果文件内容里面不包含需要检索的内容,就不引用文件内容),并生成需要的JSON数据。
|
|
|
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
|
|
|
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
|
|
|
+Instruction: Based on the context, follow "Format example", write content.
|
|
|
+
|
|
|
+# Context
|
|
|
+## 任务
|
|
|
+根据本任务的#教案,在考虑到面向学生年级(<面向年级>)以及相对应的学科(<课程学科>)的基础上生成5道单选题。题目的意义是测试学生对本教学任务知识点的掌握情况,你的题目应当是有意义的。
|
|
|
+
|
|
|
+## 限制
|
|
|
+- 生成题目禁止重复。
|
|
|
+- 生成题目应该充分考虑学生年级<面向年级>和面向学科<课程学科>,你的题目应有教学意义。
|
|
|
+- 请严格按照以下格式要求输出内容,题目必须是单选题。
|
|
|
+- 你仅仅需要输出题目,其他什么内容都不需要输出。禁止输出题目以外的任何内容。
|
|
|
+
|
|
|
+## 课程简介
|
|
|
+课程名字:${_this.courseName}
|
|
|
+${_this.courseText ? '课程简要描述:' + _this.courseText : ''}
|
|
|
+${sub.length ? '学科:' + sub.join(",") : ''}
|
|
|
+${mclass.length ? '面向年级:' + mclass.join(",") : ''}
|
|
|
+
|
|
|
+## 教案
|
|
|
+${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
|
|
|
+
|
|
|
+# Format example
|
|
|
+[{"teststitle":"题目内容","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"},{"teststitle":"题目内容","testItem":"选项数量(数字)","checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":"答案(数字)","type":"1"}]
|
|
|
+`
|
|
|
+ }
|
|
|
+
|
|
|
+ let parm = {
|
|
|
+ assistant_id: '6063369f-289a-11ef-8bf4-12e77c4cb76b',
|
|
|
+ message: [{"type":"text", "text":messages}],
|
|
|
+ session_name: uuidv4(),
|
|
|
+ userId: this.userid,
|
|
|
+ file_ids: fileid.length ? [...fileid] : '',
|
|
|
+ }
|
|
|
+ this.ajax
|
|
|
+ .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", parm)
|
|
|
+ .then((response) => {
|
|
|
+ console.log(response);
|
|
|
+ let data = response.data.FunctionResponse
|
|
|
+ if (data.message) {
|
|
|
+ console.log(data.message);
|
|
|
+ try {
|
|
|
+ // let tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
|
|
|
+ let tArray = {}
|
|
|
+ try {
|
|
|
+ tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
|
|
|
+ } catch (error) {
|
|
|
+ console.log("error_________________" + error);
|
|
|
+ try {
|
|
|
+ let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
|
|
|
+ let match = data.message.match(regex);
|
|
|
+ tArray = JSON.parse(match[0]);
|
|
|
+
|
|
|
+ // var message = data.message;
|
|
|
+ // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
|
|
|
+ // var jsonEnd = message.indexOf("```", jsonStart);
|
|
|
+ // var jsonString = message.substring(jsonStart, jsonEnd).trim();
|
|
|
+ // tArray = JSON.parse(jsonString);
|
|
|
+ } catch (error) {
|
|
|
+ console.log("error_________________" + error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(type == 45){
|
|
|
+ this.testJson = {"testCount":tArray.length,"testTitle":"","testJson":tArray}
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ if(type == 15){
|
|
|
+ {answerQ: "题目"}
|
|
|
+ }else if(type == 45){
|
|
|
+ let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
|
|
|
+ this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test}
|
|
|
+ }
|
|
|
+ _this.choiceLoading = false
|
|
|
+ }
|
|
|
+
|
|
|
+ }else if(type == 15){
|
|
|
+ {answerQ: "题目"}
|
|
|
+ }else if(type == 45){
|
|
|
+ let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
|
|
|
+ this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test}
|
|
|
+ }
|
|
|
+ _this.choiceLoading = false
|
|
|
+ }).catch((error) => {
|
|
|
+ if(type == 15){
|
|
|
+ {answerQ: "题目"}
|
|
|
+ }else if(type == 45){
|
|
|
+ let _test = [{"teststitle":"题目1","testItem":4,"checkList":["选项1","选项2","选项3","选项4"],"timuList":[],"answer":0,"type":"1"}]
|
|
|
+ this.testJson = {"testCount":_test.length,"testTitle":"","testJson":_test}
|
|
|
+ }
|
|
|
+ console.log(error);
|
|
|
+ _this.choiceLoading = false
|
|
|
+ });
|
|
|
+ },
|
|
|
async aiGet4(messages, callback, clickType) {
|
|
|
let _this = this
|
|
|
|
|
@@ -17224,6 +17550,22 @@ ${this.aitype == 'aiCpote4' ? '## 目标层\n'+this.cpote['cpote3'] : ''}`
|
|
|
background-size: 100% 100%;
|
|
|
}
|
|
|
|
|
|
+.chapter_upload_ic_check {
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ cursor: pointer;
|
|
|
+ margin: 0 10px 0 0;
|
|
|
+}
|
|
|
+
|
|
|
+.chapter_upload_ic_check div {
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
+ background-image: url("../../../assets/icon/course/lookeye.svg");
|
|
|
+ background-size: 100% 100%;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
.chapter_upload_ic_r {
|
|
|
height: 100%;
|
|
|
display: flex;
|