|
@@ -6642,6 +6642,7 @@
|
|
|
:ref="`markSco${toolIndex}${wIndex}`"
|
|
|
@updateLoading=updateLoading
|
|
|
@updateDocSco=updateDocSco
|
|
|
+ @refreshOther=refreshOther
|
|
|
:wIndex="wIndex"
|
|
|
:scoCon="w"
|
|
|
:TotalScore="AIloading[toolIndex][wIndex].sco"
|
|
@@ -6681,7 +6682,7 @@
|
|
|
v-if="
|
|
|
w.userid == userid || tType == 1 || tType == 4
|
|
|
"
|
|
|
- @click.stop="deleteWorks(w.wid)"
|
|
|
+ @click.stop="deleteWorksTwo(w.wid,toolIndex,wIndex)"
|
|
|
alt
|
|
|
/>
|
|
|
</div>
|
|
@@ -7863,8 +7864,19 @@
|
|
|
stripe
|
|
|
style="width: 100%"
|
|
|
>
|
|
|
+ <el-table-column width="150" label="目标" align="center">
|
|
|
+ <template slot-scope="scope"
|
|
|
+ ><div>
|
|
|
+ {{
|
|
|
+ scope.row.target
|
|
|
+ ? scope.row.target[scope.row.target.length - 1]
|
|
|
+ : "-"
|
|
|
+ }}
|
|
|
+ </div></template
|
|
|
+ ></el-table-column
|
|
|
+ >
|
|
|
<el-table-column
|
|
|
- label="评价名称"
|
|
|
+ label="评价维度"
|
|
|
align="center"
|
|
|
>
|
|
|
<template slot-scope="scope"
|
|
@@ -7872,7 +7884,7 @@
|
|
|
>
|
|
|
</el-table-column>
|
|
|
<el-table-column
|
|
|
- label="评价描述"
|
|
|
+ label="维度描述"
|
|
|
align="center"
|
|
|
>
|
|
|
<template slot-scope="scope"
|
|
@@ -7881,17 +7893,27 @@
|
|
|
</div></template
|
|
|
>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="目标" align="center">
|
|
|
- <template slot-scope="scope"
|
|
|
- ><div>
|
|
|
- {{
|
|
|
- scope.row.target
|
|
|
- ? scope.row.target[scope.row.target.length - 1]
|
|
|
- : "-"
|
|
|
- }}
|
|
|
- </div></template
|
|
|
- ></el-table-column
|
|
|
+
|
|
|
+ <el-table-column
|
|
|
+ label="细则"
|
|
|
+ align="center"
|
|
|
+ v-if="courseDetail.state == 5"
|
|
|
>
|
|
|
+ <template slot-scope="scope"
|
|
|
+ ><div style="display:flex;justify-content: space-around;margin:auto" v-if="scope.row.rule">
|
|
|
+ <el-popover
|
|
|
+ placement="top"
|
|
|
+ width="350"
|
|
|
+ trigger="hover"
|
|
|
+ >
|
|
|
+ <div v-html="scope.row.rule" style="white-space:pre-wrap"></div>
|
|
|
+ <div slot="reference" style="color:#4383FF;cursor: pointer;">查看</div>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ <div v-else>-</div>
|
|
|
+ </template
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
</el-table>
|
|
|
<!-- <div
|
|
|
v-for="(eItem, eIndex) in chapInfoList[courseType]
|
|
@@ -12494,6 +12516,12 @@ export default {
|
|
|
},
|
|
|
async loopEva(con,tit,stage,task,toolIndex,toolDetail,worksStudent){
|
|
|
// console.log(con,tit,stage,task,toolIndex,toolDetail);
|
|
|
+ tit.forEach((e,index)=>{
|
|
|
+ if(!e.isai){
|
|
|
+ e.isai=1
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // return console.log(tit)
|
|
|
|
|
|
let jude = false
|
|
|
this.AIloading.forEach((e,index)=>{
|
|
@@ -12519,24 +12547,29 @@ export default {
|
|
|
|
|
|
let _text = ''
|
|
|
for (let i = 0; i < tit.length; i++) {
|
|
|
+ if(tit[i].isai == 1){
|
|
|
_text += `评价名称:${tit[i].value} 评价描述:${tit[i].detail} \n`
|
|
|
+ }
|
|
|
}
|
|
|
+ let laws = ""
|
|
|
+ for (let i = 0; i < tit.length; i++) {
|
|
|
+ if(tit[i].isai == 1){
|
|
|
+ laws += `评价维度:${tit[i].value} 评价标准:${tit[i].rule} \n`
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
for (let i = 0; i < con.length; i++) {
|
|
|
let msg = `NOTICE
|
|
|
- Role: 你是一个专业的项目式学习导师,你要对学生的评价高度负责。你要根据“五级评价细则”给学生作品评分,并生成需要的JSON数据。
|
|
|
+ Role: 你是一个专业的项目式学习导师,你要对学生的评价高度负责。你要根据“六级评价细则”给学生作品评分,并生成需要的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级——1级,2级,3级,4级,5级。
|
|
|
- 1 级,没有识别问题和需求;
|
|
|
- 2 级,问题或需求没有被清晰理解或准确识别;
|
|
|
- 3 级,问题或需求的一部分被识别;
|
|
|
- 4 级,问题或需求的大部分被识别;
|
|
|
- 5 级,问题或需求都被识别。
|
|
|
+ 根据<评价细则>和<作业内容>与<作业题目>的相关性评价作业,判断该作业对应的评价维度标准属于六级中的哪个等级。
|
|
|
+ 具体的评价标准分为6级——0级,1级,2级,3级,4级,5级。
|
|
|
+ ${laws}
|
|
|
|
|
|
##评分资料
|
|
|
评价细则:${_text}
|
|
@@ -12554,8 +12587,6 @@ export default {
|
|
|
|
|
|
this.AIloading[toolIndex][i].loading=false
|
|
|
}
|
|
|
- // console.log('666666666');
|
|
|
- // console.log('this.loopLoading', this.loopLoading);
|
|
|
this.loopLoading[toolIndex].loading = false;
|
|
|
|
|
|
worksStudent.forEach((e,index)=>{
|
|
@@ -12566,14 +12597,106 @@ export default {
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
+ },
|
|
|
+ againEva(i,k){
|
|
|
+ let msg = `NOTICE
|
|
|
+ Role: 你是一个专业的项目式学习导师,你要根据<评价维度>和<维度描述>制定具体的评价标准。
|
|
|
+ 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
|
|
|
+ ##要求
|
|
|
+ 根据<评价维度>和<维度描述>,制定具体的评价标准。
|
|
|
+ 具体的评价标准分为6级——0星,1星,2星,3星,4星,5星。
|
|
|
+
|
|
|
+ ##制定标准资料
|
|
|
+ 评价维度:${this.chapInfoList[0].chapterInfo[0].taskJson[i].eList[k].value}
|
|
|
+ 维度描述:${this.chapInfoList[0].chapterInfo[0].taskJson[i].eList[k].detail}
|
|
|
+
|
|
|
+ # Format example
|
|
|
+ 0 星,作业内容与作业要求无关;
|
|
|
+ 1 星,没有识别问题和需求;
|
|
|
+ 2 星,问题或需求没有被清晰理解或准确识别;
|
|
|
+ 3 星,问题或需求的一部分被识别;
|
|
|
+ 4 星,问题或需求的大部分被识别;
|
|
|
+ 5 星,问题或需求都被识别。
|
|
|
+
|
|
|
+ `
|
|
|
+ let params = {
|
|
|
+ // "model": "Chat",
|
|
|
+ model: "gpt-4o",
|
|
|
+ temperature: 0,
|
|
|
+ max_tokens: 4096,
|
|
|
+ top_p: 1,
|
|
|
+ frequency_penalty: 0,
|
|
|
+ presence_penalty: 0,
|
|
|
+ messages: [
|
|
|
+ {
|
|
|
+ content: msg.replaceAll("\n", " ").replaceAll("*", ""),
|
|
|
+ role: "user"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ stream: false,
|
|
|
+ uid: this.userid,
|
|
|
+ mind_map_question: ""
|
|
|
+ };
|
|
|
+
|
|
|
+ this.ajax
|
|
|
+ .post("https://gpt4.cocorobo.cn/chat", params)
|
|
|
+ .then(response => {
|
|
|
+ let data = response.data.FunctionResponse;
|
|
|
+ console.log("data", data);
|
|
|
+ if (data.choices && data.choices.length && data.choices[0].message) {
|
|
|
+ let content = data.choices[0].message.content;
|
|
|
+
|
|
|
+ // 使用正则表达式匹配# Output段落的内容
|
|
|
+ const outputRegex = /# Output([\s\S]*?)(?:#|$)/;
|
|
|
+ const outputMatch = content.match(outputRegex);
|
|
|
+
|
|
|
+ // if (outputMatch) {
|
|
|
+ // let outputContent = outputMatch[1].trim(); // 提取# Output段落的内容并去除首尾空格
|
|
|
+ console.log('outputContent',content);
|
|
|
+ console.log('this.chapInfoList',this.chapInfoList);
|
|
|
+ let elist = JSON.parse(JSON.stringify(this.chapInfoList[0].chapterInfo[0].taskJson[i].eList[k]))
|
|
|
+ // this.chapInfoList[0].chapterInfo[0].taskJson[i].eList[k].rule=JSON.parse(JSON.stringify(content.replaceAll("#", "")))
|
|
|
+ elist.rule = JSON.parse(JSON.stringify(content.replaceAll("#", "")))
|
|
|
+ this.$set(this.chapInfoList[0].chapterInfo[0].taskJson[i].eList,k,elist)
|
|
|
+ this.$forceUpdate();
|
|
|
+ let params2 = [
|
|
|
+ {
|
|
|
+ cid: this.id,
|
|
|
+ chapters: JSON.stringify(this.chapInfoList),
|
|
|
+ uid: this.userid,
|
|
|
+ unitIndex: this.courseType,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ this.ajax
|
|
|
+ .post(this.$store.state.api + "updateWorkNew4", params2)
|
|
|
+ .then((res) => {
|
|
|
+ this.getCourseDetail(2);
|
|
|
+ this.$forceUpdate();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$message.error("网络不佳");
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ // 进行进一步处理或解析outputContent
|
|
|
+ // } else {
|
|
|
+ // console.log("No match found for # Output section.");
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
|
|
|
},
|
|
|
|
|
|
// 组件刷新
|
|
|
refreshAssembly(val){
|
|
|
this.refreshKey++
|
|
|
- console.log(this.refreshKey)
|
|
|
+ // console.log(this.refreshKey)
|
|
|
},
|
|
|
updateLoading(payload){
|
|
|
this.AIloading[payload.val][payload.val2].loading=payload.val3
|
|
@@ -12584,11 +12707,14 @@ export default {
|
|
|
this.$refs[mk][0].getData()
|
|
|
},
|
|
|
handleHide(toolIndex,val,worksStudent) {
|
|
|
- // console.log(worksStudent)
|
|
|
let mk = `markSco${toolIndex}${val}`
|
|
|
this.$refs[mk][0].getData()
|
|
|
+ },
|
|
|
|
|
|
- worksStudent.forEach((e,index)=>{
|
|
|
+ // 刷新其他组件分数
|
|
|
+ refreshOther(toolIndex){
|
|
|
+
|
|
|
+ this.worksStudent.forEach((e,index)=>{
|
|
|
if(toolIndex != index){
|
|
|
e.forEach((i,inx)=>{
|
|
|
let mk = `markSco${index}${inx}`
|
|
@@ -14545,7 +14671,7 @@ export default {
|
|
|
.then(() => {
|
|
|
let params = [
|
|
|
{
|
|
|
- id: id,
|
|
|
+ id: id
|
|
|
},
|
|
|
];
|
|
|
this.ajax
|
|
@@ -14566,6 +14692,43 @@ export default {
|
|
|
})
|
|
|
.catch(() => {});
|
|
|
},
|
|
|
+ deleteWorksTwo(id,toolIndex,wIndex) {
|
|
|
+ console.log(id)
|
|
|
+ let mk = `markSco${toolIndex}${wIndex}`
|
|
|
+ console.log(this.$refs[mk][0].homeworkVal)
|
|
|
+
|
|
|
+ let wid = this.$refs[mk][0].homeworkVal.id
|
|
|
+ this.$confirm("确定删除此作业吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ let params = [
|
|
|
+ {
|
|
|
+ id: id,
|
|
|
+ wid: wid ? wid : 1
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ // return console.log(params)
|
|
|
+ this.ajax
|
|
|
+ .post(this.$store.state.api + "deleteCourseWorkTwo", params)
|
|
|
+ .then((res) => {
|
|
|
+ this.$message({
|
|
|
+ message: "删除成功",
|
|
|
+ type: "success",
|
|
|
+ });
|
|
|
+ this.selectStudent();
|
|
|
+ this.selectSWorks();
|
|
|
+ this.selectSLook();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.$message.error("网络异常");
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ },
|
|
|
selectSWorks(gindex) {
|
|
|
//教师查看全部作业
|
|
|
let params = {
|
|
@@ -16707,6 +16870,8 @@ export default {
|
|
|
this.courseType
|
|
|
];
|
|
|
this.chapInfoList = JSON.parse(this.courseDetail.chapters);
|
|
|
+ console.log('this.chapInfoList22222',this.chapInfoList);
|
|
|
+
|
|
|
if (this.tcid && res.data[1].length) {
|
|
|
let _inviteA = [];
|
|
|
for (var ik = 0; ik < res.data[1].length; ik++) {
|
|
@@ -16940,6 +17105,16 @@ export default {
|
|
|
this.vChapterData = _chapterData;
|
|
|
this.$forceUpdate();
|
|
|
}
|
|
|
+ if(this.courseDetail.state == 5){
|
|
|
+ let chapInfoListCopy = this.chapInfoList[0].chapterInfo[0].taskJson;
|
|
|
+
|
|
|
+ for (let k = 0; k < chapInfoListCopy[this.taskCount].eList.length; k++) {
|
|
|
+ if(!chapInfoListCopy[this.taskCount].eList[k].rule){
|
|
|
+ this.againEva(this.taskCount,k)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// else {
|
|
|
// this.courseDetail = res.data[0][0];
|
|
|
// this.chapInfoList = JSON.parse(this.courseDetail.chapters);
|
|
@@ -17503,6 +17678,7 @@ export default {
|
|
|
.then((res) => {
|
|
|
if (res.data[0].length > 0 && this.IsLookOpen && type == 1) {
|
|
|
this.chapInfoList = JSON.parse(res.data[0][0].state);
|
|
|
+ console.log('this.chapInfoList',this.chapInfoList);
|
|
|
this.setNavList();
|
|
|
this.$forceUpdate();
|
|
|
} else if (res.data[0].length > 0 && this.IsLookOpen && type == 2) {
|