|
@@ -1,16 +1,21 @@
|
|
<template>
|
|
<template>
|
|
- <div style="position: relative;" v-loading="loading" :style="{ minHeight: loading ? '250px' : 'auto' }" element-loading-text="小可正在努力生成中,请稍等...">
|
|
|
|
- <div class="c_pub_button_confirm stopBtn" v-if="loading" @click="cancelAjax()">停止</div>
|
|
|
|
|
|
+ <div style="position: relative;" v-loading="loading" :style="{ minHeight: loading ? '250px' : 'auto' }"
|
|
|
|
+ element-loading-text="小可正在努力生成中,请稍等...">
|
|
|
|
+ <div class="c_pub_button_confirm stopBtn" v-if="loading" @click="cancelAjax('elist')">停止</div>
|
|
<div class="elist_title">
|
|
<div class="elist_title">
|
|
<div style=" display: flex; flex-direction: row;align-items: center; margin: 20px 0; ">
|
|
<div style=" display: flex; flex-direction: row;align-items: center; margin: 20px 0; ">
|
|
<div class="lineTitle clineTitle">评价设置</div>
|
|
<div class="lineTitle clineTitle">评价设置</div>
|
|
<div style="margin-left:auto;display: flex;">
|
|
<div style="margin-left:auto;display: flex;">
|
|
- <div class="r_pub_button_op" style="margin-left:10px;" @contextmenu.prevent="openAiDialog(1)"
|
|
|
|
- @click="openAiDialog(2)">{{ (eList && eList.length) ? '重新生成评价' : '生成评价' }}</div>
|
|
|
|
|
|
+ <div class="r_pub_button_op" style="margin-left:10px;" @click="openAiDialog('elist')">{{ (eList &&
|
|
|
|
+ eList.length) ? '重新生成评价' : '生成评价' }}</div>
|
|
|
|
+ <div v-if="eList && eList.length" class="show_taskD" :class="{ show: interPan }" @click="toggleInterPan">
|
|
|
|
+ <img src="../../../assets/icon/new/u_up.png" />
|
|
|
|
+ {{ interPan ? '收起' : '展开' }}
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="mbCss">
|
|
|
|
|
|
+ <div class="mbCss" v-show="interPan">
|
|
<div class="pjCss">
|
|
<div class="pjCss">
|
|
<div v-if="eList && eList.length" class="elist_input">
|
|
<div v-if="eList && eList.length" class="elist_input">
|
|
<div v-for="(eItem, eIndex) in eList" :key="eIndex" class="elist_input_box">
|
|
<div v-for="(eItem, eIndex) in eList" :key="eIndex" class="elist_input_box">
|
|
@@ -37,9 +42,16 @@
|
|
<div style="width: calc(100%);">
|
|
<div style="width: calc(100%);">
|
|
<div @click="openRule(eIndex)" class="ruleBtn">{{ eItem.isrule ? '收起细则' : '展开细则' }}
|
|
<div @click="openRule(eIndex)" class="ruleBtn">{{ eItem.isrule ? '收起细则' : '展开细则' }}
|
|
</div>
|
|
</div>
|
|
- <div style="width: calc(100%);" class='op_task_box' v-if="eItem.isrule">
|
|
|
|
|
|
+ <div style="width: calc(100%);" class='op_task_box' v-if="eItem.isrule" v-loading="ruleLoading.length && ruleLoading[eIndex]" element-loading-text='小可正在努力生成中,请稍等...'>
|
|
|
|
+ <div class="c_pub_button_confirm stopBtn" v-if="ruleLoading.length && ruleLoading[eIndex]" @click="cancelAjax('rule', eIndex)">停止</div>
|
|
<textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols
|
|
<textarea v-autoHeight="68" rows="2" class="binfo_input binfo_textarea" cols
|
|
v-model="eItem.rule" placeholder="请输入评价细则"></textarea>
|
|
v-model="eItem.rule" placeholder="请输入评价细则"></textarea>
|
|
|
|
+ <div class="op_box">
|
|
|
|
+ <div class="op_remark"></div>
|
|
|
|
+ <div style="display: flex;">
|
|
|
|
+ <div class="r_pub_button_op" @click="openAiDialog('rule', eIndex)">{{ eList[eIndex].rule ? '重新生成' : '生成细则'}}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -97,6 +109,10 @@ export default {
|
|
type: Number,
|
|
type: Number,
|
|
required: true
|
|
required: true
|
|
},
|
|
},
|
|
|
|
+ aiJson: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => { }
|
|
|
|
+ }
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
@@ -104,6 +120,9 @@ export default {
|
|
isEvaFold: true,
|
|
isEvaFold: true,
|
|
loading: false,
|
|
loading: false,
|
|
cancelToken: null,
|
|
cancelToken: null,
|
|
|
|
+ ruleLoading: [],
|
|
|
|
+ cancelRuleToken: [],
|
|
|
|
+ interPan: true
|
|
}
|
|
}
|
|
},
|
|
},
|
|
watch: {
|
|
watch: {
|
|
@@ -142,16 +161,33 @@ export default {
|
|
},
|
|
},
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- cancelAjax() {
|
|
|
|
- this.$message.success("已经成功停止生成评价设置")
|
|
|
|
- if (this.cancelToken) {
|
|
|
|
- this.cancelToken.cancel('Request canceled by the user.');
|
|
|
|
- this.cancelToken = null;
|
|
|
|
- }
|
|
|
|
- if (this.loading) {
|
|
|
|
- this.loading = false
|
|
|
|
|
|
+ toggleInterPan() {
|
|
|
|
+ this.interPan = !this.interPan;
|
|
|
|
+ this.forceUpdate();
|
|
|
|
+ },
|
|
|
|
+ cancelAjax(type, index) {
|
|
|
|
+ if(type == 'elist'){
|
|
|
|
+ this.$message.success("已经成功停止生成评价设置")
|
|
|
|
+ if (this.cancelToken) {
|
|
|
|
+ this.cancelToken.cancel('Request canceled by the user.');
|
|
|
|
+ this.cancelToken = null;
|
|
|
|
+ }
|
|
|
|
+ if (this.loading) {
|
|
|
|
+ this.loading = false
|
|
|
|
+ }
|
|
|
|
+ this.$forceUpdate()
|
|
|
|
+ }else if(type == 'rule'){
|
|
|
|
+ this.$message.success("已经成功停止生成评价细则")
|
|
|
|
+ if (this.cancelRuleToken && this.cancelRuleToken[index]) {
|
|
|
|
+ this.cancelRuleToken[index].cancel('Request canceled by the user.');
|
|
|
|
+ this.cancelRuleToken[index] = null;
|
|
|
|
+ }
|
|
|
|
+ if (this.ruleLoading[index]) {
|
|
|
|
+ this.ruleLoading[index] = false
|
|
|
|
+ }
|
|
|
|
+ this.$forceUpdate()
|
|
}
|
|
}
|
|
- this.$forceUpdate()
|
|
|
|
|
|
+
|
|
},
|
|
},
|
|
forceUpdate() {
|
|
forceUpdate() {
|
|
this.$forceUpdate();
|
|
this.$forceUpdate();
|
|
@@ -167,12 +203,23 @@ export default {
|
|
}
|
|
}
|
|
return lang
|
|
return lang
|
|
},
|
|
},
|
|
- openAiDialog() {
|
|
|
|
|
|
+ openAiDialog(type, index) {
|
|
|
|
+ if (type == 'elist') {
|
|
|
|
+ this.aiElist();
|
|
|
|
+ } else if (type == 'rule') {
|
|
|
|
+ this.aiRule(index);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ aiElist() {
|
|
let _this = this
|
|
let _this = this
|
|
|
|
+ if(!_this.knowFileids.length){
|
|
|
|
+ this.$message.error(`请添加文件后,再生成评价`)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
_this.loading = true
|
|
_this.loading = true
|
|
|
|
|
|
let fileid = _this.knowFileids.length ? [..._this.knowFileids] : []
|
|
let fileid = _this.knowFileids.length ? [..._this.knowFileids] : []
|
|
- let taskDetail = _this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].taskDetail.replaceAll('\n', ' ')
|
|
|
|
|
|
+ let taskDetail = _this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].taskDetail ? _this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].taskDetail.replaceAll('\n', ' ') : ''
|
|
let tool = _this.toolsData[_this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].toolChoose[_this.toolIndex].tool[0]].name
|
|
let tool = _this.toolsData[_this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].toolChoose[_this.toolIndex].tool[0]].name
|
|
let toolDetail = _this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].toolChoose[_this.toolIndex].toolDetail.replaceAll('\n', ' ')
|
|
let toolDetail = _this.unitJson[0].chapterInfo[0].taskJson[_this.itemTaskIndex].toolChoose[_this.toolIndex].toolDetail.replaceAll('\n', ' ')
|
|
let messages = `
|
|
let messages = `
|
|
@@ -191,14 +238,17 @@ Language: ${this.getLang()}
|
|
【排序】通过设置卡片内容及正确顺序,用于教师使用排序类题目检查学生对知识的掌握和理解,参考指标为题目的正确率。。
|
|
【排序】通过设置卡片内容及正确顺序,用于教师使用排序类题目检查学生对知识的掌握和理解,参考指标为题目的正确率。。
|
|
【选择匹配】通过上传题目图片与设置正确回答,用于教师使用选择匹配(连线)检查学生对知识的掌握和理解,参考指标为题目的正确率。
|
|
【选择匹配】通过上传题目图片与设置正确回答,用于教师使用选择匹配(连线)检查学生对知识的掌握和理解,参考指标为题目的正确率。
|
|
|
|
|
|
-你要学习上传的文件。文件中包含了该学科的“核心素养”和“课程目标”。“学科核心素养”指学生应具备的,能够适应终身发展和社会发展需要的必备品格和关键能力。“课程目标”指课程本身要实现的具体目标和意图。它规定了某一教育阶段的学生通过课程学习以后,在发展品德、智力、体质等方面期望实现的程度,它是确定课程内容、教学目标和教学方法的基础。当选择多个学科时,上传的文件中会有《跨学科素养参考资料》,跨学科素养能力指具有跨文化一致性的、能够跨越一系列情境长期存在和发挥作用的、个体用于应对和解决日常工作和生活中遇到的各种复杂挑战和需求的能力;例如“个人社会责任”“任务规划”“自我管理”“承担风险”等。你要理解学科核心素养和学科目标之间的关系。你生成的评价标准可以被理解为课程目标。
|
|
|
|
|
|
+你要学习上传的文件。你只需要学习文件中“课程目标”一级标题下的内容,其中包含了该学科的“核心素养”和“目标”。“学科核心素养”指学生应具备的,能够适应终身发展和社会发展需要的必备品格和关键能力。“目标”指课程本身要实现的具体目标和意图。它规定了某一教育阶段的学生通过课程学习以后,在发展品德、智力、体质等方面期望实现的程度,它是确定课程内容、教学目标和教学方法的基础。
|
|
|
|
+当选择多个学科时,上传的文件中会有《跨学科素养参考资料》,跨学科素养能力指具有跨文化一致性的、能够跨越一系列情境长期存在和发挥作用的、个体用于应对和解决日常工作和生活中遇到的各种复杂挑战和需求的能力;例如“个人社会责任”“任务规划”“自我管理”“承担风险”等。
|
|
|
|
+你要理解学科核心素养和学科目标之间的关系。你生成的评价标准可以被理解为课程目标。
|
|
|
|
|
|
#目标#
|
|
#目标#
|
|
你需要完成以下五个步骤:
|
|
你需要完成以下五个步骤:
|
|
1.你要结合<任务描述:${taskDetail}><工具名称:${tool}>和<工具描述:${toolDetail}>生成适合当前作业的评价标准。评价标准用于评估学生的能力。
|
|
1.你要结合<任务描述:${taskDetail}><工具名称:${tool}>和<工具描述:${toolDetail}>生成适合当前作业的评价标准。评价标准用于评估学生的能力。
|
|
-2.你要严格按照上传的文件中的“核心素养”和“课程目标”将评价标准对应到课程目标中,并且用学科核心素养归类。3.只有当上传的文件包含多个学科的课程标准时,允许你检索《跨学科素养参考资料》。你需要先检索学科的课程标准,如果你判断当前的评价标准无法对应具体学科的核心素养,可以检索《跨学科素养参考资料》,找到最合适的并输出。输出的内容一定要包含“核心素养”和“上传文件对应的学科”。
|
|
|
|
|
|
+2.你要严格检索和匹配上传文件的核心素养和课程目标内容。你要先将评价标准对应到课程目标中,然后检索上传的文件中的“核心素养”与评价标准进行匹配。所有的核心素养信息必须以上传文件的内容为依据,不可以使用其他的默认信息或者模版!每个评价标准必须与文件中明确的核心素养对应。避免使用文件中未出现的任何术语,不允许输出范例内容!。
|
|
|
|
+3.只有当上传的文件包含多个学科的课程标准时,允许你检索《跨学科素养参考资料》。你需要先检索学科的课程标准,如果你判断当前的评价标准无法对应具体学科的核心素养,可以检索《跨学科素养参考资料》,找到最合适的并输出。
|
|
4.你要根据第一步生成的评价标准制定每一条标准的六级评价细则,这个评价细则将用于对学生能力的打分。
|
|
4.你要根据第一步生成的评价标准制定每一条标准的六级评价细则,这个评价细则将用于对学生能力的打分。
|
|
-5.你要将前四步生成的内容整理成json格式。
|
|
|
|
|
|
+5.只输出json格式的内容,其他的不要输出!不要输出范例内容!
|
|
|
|
|
|
#风格#
|
|
#风格#
|
|
专业的教育教学用语,简练易懂,逻辑性强。
|
|
专业的教育教学用语,简练易懂,逻辑性强。
|
|
@@ -211,7 +261,7 @@ Language: ${this.getLang()}
|
|
|
|
|
|
#输出要求#
|
|
#输出要求#
|
|
1.评价标准的个数为3个,最多不能超过5个。每一个评价标准不能超过30字。生成的评价标准只能和当前的工具描述相关。选择题、排序、选择匹配工具只生成1个评价标准。输出内容和格式要求参考#评价标准范例#。注意!输出内容不能复制范例内容。注意!不要出现#评价标准错误范例#中的情况。
|
|
1.评价标准的个数为3个,最多不能超过5个。每一个评价标准不能超过30字。生成的评价标准只能和当前的工具描述相关。选择题、排序、选择匹配工具只生成1个评价标准。输出内容和格式要求参考#评价标准范例#。注意!输出内容不能复制范例内容。注意!不要出现#评价标准错误范例#中的情况。
|
|
-2.每1个评价标准只对应1个关联度最高的核心素养。学科核心素养输出参考#核心素养输出范例#。注意!1个评价标准不能对应多个核心素养。
|
|
|
|
|
|
+2.每1个评价标准只对应1个关联度最高的核心素养。学科核心素养输出参考#核心素养输出范例#。注意!1个评价标准不能对应多个核心素养。不允许出现上传文件中没有的核心素养。严格按照上传文件中检索到的核心素养输出。每个评价标准必须与文件中明确的核心素养对应。避免使用文件中未出现的任何术语。不要出现#核心素养错误范例#中的情况,不允许输出范例内容!。
|
|
3.具体的评价细则分为6级——0星,1星,2星,3星,4星,5星。输出格式参考#评价细则范例#。
|
|
3.具体的评价细则分为6级——0星,1星,2星,3星,4星,5星。输出格式参考#评价细则范例#。
|
|
4.参考#json格式范例#,将内容整理成json格式。**之间的内容为json格式中的代码。以*[*开头,以*]*结尾。每一条评价标准、核心素养以及评价细则以*{*开头,以*}*结尾。核心素养前有*"core":*。评价标准前有*"std":*。评价细则前有*"rule":*。具体内容放在""之间。格式如下:
|
|
4.参考#json格式范例#,将内容整理成json格式。**之间的内容为json格式中的代码。以*[*开头,以*]*结尾。每一条评价标准、核心素养以及评价细则以*{*开头,以*}*结尾。核心素养前有*"core":*。评价标准前有*"std":*。评价细则前有*"rule":*。具体内容放在""之间。格式如下:
|
|
[
|
|
[
|
|
@@ -219,7 +269,7 @@ Language: ${this.getLang()}
|
|
{"std":"评价标准","core":"核心素养(识别上传文件对应的学科)","rule":"评价细则"},
|
|
{"std":"评价标准","core":"核心素养(识别上传文件对应的学科)","rule":"评价细则"},
|
|
{"std":"评价标准","core":"核心素养(识别上传文件对应的学科)","rule":"评价细则"},
|
|
{"std":"评价标准","core":"核心素养(识别上传文件对应的学科)","rule":"评价细则"},
|
|
]
|
|
]
|
|
-5.只输出json格式的内容,其他的不要输出!
|
|
|
|
|
|
+5.只输出json格式的内容,其他的不要输出!不要输出范例内容!
|
|
|
|
|
|
#评价标准范例#
|
|
#评价标准范例#
|
|
学生能够准确描述红树林生态功能及动植物之间的关系。
|
|
学生能够准确描述红树林生态功能及动植物之间的关系。
|
|
@@ -238,12 +288,16 @@ Language: ${this.getLang()}
|
|
4 星,问题或需求的大部分被识别;
|
|
4 星,问题或需求的大部分被识别;
|
|
5 星,问题或需求都被识别。
|
|
5 星,问题或需求都被识别。
|
|
|
|
|
|
|
|
+#核心素养错误范例#
|
|
|
|
+错误范例1:评价标准是“学生能够展示诗歌与美术作品的创作主题和过程”。输出“审美创造(艺术)”是错误的,因为艺术学科的核心素养中没有“审美创造”。
|
|
|
|
+错误范例2:评价标准是“学生能通过文档工具记录并总结对诗词的人文感悟。”。输出“表达与交流(语文)”是错误的,因为艺术学科的核心素养中没有“表达与交流”。
|
|
|
|
+
|
|
#核心素养输出范例#
|
|
#核心素养输出范例#
|
|
评价标准:学生应该能准确指出光合作用发生的具体部位(叶绿体),并解释叶绿体在光合作用中的重要性。
|
|
评价标准:学生应该能准确指出光合作用发生的具体部位(叶绿体),并解释叶绿体在光合作用中的重要性。
|
|
这一条标准对应了《义务教育科学课程标准(2022年版)》中“科学观念”这一条核心素养,识别上传文件对应的学科为“科学”。所以输出内容为:科学观念(科学)。
|
|
这一条标准对应了《义务教育科学课程标准(2022年版)》中“科学观念”这一条核心素养,识别上传文件对应的学科为“科学”。所以输出内容为:科学观念(科学)。
|
|
|
|
|
|
评价标准:学生能够通过文档工具清晰表达小学生活的回忆与未来期望。
|
|
评价标准:学生能够通过文档工具清晰表达小学生活的回忆与未来期望。
|
|
-这一条标准对应了《义务教育艺术课程标准(2022年版)》中“艺术表现”这一条核心素养,识别上传文件对应的学科为“艺术”。所以输出内容为:科学观念(艺术)。
|
|
|
|
|
|
+这一条标准对应了《义务教育艺术课程标准(2022年版)》中“艺术表现”这一条核心素养,识别上传文件对应的学科为“艺术”。所以输出内容为:艺术表现(艺术)。
|
|
|
|
|
|
评价标准:学生能够在小组讨论中积极表达观点。
|
|
评价标准:学生能够在小组讨论中积极表达观点。
|
|
这一条标准对应了《跨学科素养参考资料》中“合作能力”这一条核心素养,识别上传文件对应的学科为“跨学科”。所以输出内容为:合作能力(跨学科)。
|
|
这一条标准对应了《跨学科素养参考资料》中“合作能力”这一条核心素养,识别上传文件对应的学科为“跨学科”。所以输出内容为:合作能力(跨学科)。
|
|
@@ -333,6 +387,106 @@ Language: ${this.getLang()}
|
|
console.log(error);
|
|
console.log(error);
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
+ aiRule(index) {
|
|
|
|
+ if (!this.eList[index].target || !this.eList[index].detail) {
|
|
|
|
+ this.$message.error(`评价信息完善信息后再生成细则`)
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ this.ruleLoading[index] = true
|
|
|
|
+ this.$forceUpdate();
|
|
|
|
+ let message = `NOTICE
|
|
|
|
+Role: 你是一个专业的项目式学习导师
|
|
|
|
+Language: ${this.getLang()}
|
|
|
|
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
|
|
|
|
+Instruction: Based on the context, follow "Format example", write content.
|
|
|
|
+
|
|
|
|
+#Context
|
|
|
|
+##要求
|
|
|
|
+${this.aiJson['aiRateRule']}
|
|
|
|
+
|
|
|
|
+<评价标准:${this.eList[index].detail}>
|
|
|
|
+<素养:${this.eList[index].target}>
|
|
|
|
+
|
|
|
|
+参考#Format example#,将内容整理成字符串格式。。以*====*开头,以*====*结尾。格式如下:
|
|
|
|
+====
|
|
|
|
+0 星,作业内容与作业要求无关;
|
|
|
|
+1 星,没有识别问题和需求;
|
|
|
|
+2 星,问题或需求没有被清晰理解或准确识别;
|
|
|
|
+3 星,问题或需求的一部分被识别;
|
|
|
|
+4 星,问题或需求的大部分被识别;
|
|
|
|
+5 星,问题或需求都被识别。
|
|
|
|
+====
|
|
|
|
+
|
|
|
|
+# Format example
|
|
|
|
+====
|
|
|
|
+0 星,作业内容与作业要求无关;
|
|
|
|
+1 星,没有识别问题和需求;
|
|
|
|
+2 星,问题或需求没有被清晰理解或准确识别;
|
|
|
|
+3 星,问题或需求的一部分被识别;
|
|
|
|
+4 星,问题或需求的大部分被识别;
|
|
|
|
+5 星,问题或需求都被识别。
|
|
|
|
+==== `
|
|
|
|
+ this.cancelRuleToken[index] = this.ajax.setCancelSource();
|
|
|
|
+ let parm = {
|
|
|
|
+ assistant_id: 'b19f1a1a-7586-11ef-8ce0-12e77c4cb76b',
|
|
|
|
+ message: [{ "type": "text", "text": this.languageSetting == 1 ? converter2(message.replaceAll('\n', " ").replaceAll('*', "")) : message.replaceAll('\n', " ").replaceAll('*', "") }],
|
|
|
|
+ session_name: uuidv4(),
|
|
|
|
+ userId: this.userid,
|
|
|
|
+ file_ids: [],
|
|
|
|
+ model: 'gpt-4o-2024-08-06',
|
|
|
|
+ temperature: this.mode == 3 ? 0.5 : 0.1,
|
|
|
|
+ }
|
|
|
|
+ this.ajax
|
|
|
|
+ .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", parm, this.cancelRuleToken[index])
|
|
|
|
+ .then(async (response) => {
|
|
|
|
+ console.log(response);
|
|
|
|
+ let data = response.data.FunctionResponse
|
|
|
|
+ if (data.message) {
|
|
|
|
+ console.log(data.message);
|
|
|
|
+
|
|
|
|
+ let content = data.message;
|
|
|
|
+
|
|
|
|
+ var regex = new RegExp('====([^=]+)====');
|
|
|
|
+ let match = content.match(regex);
|
|
|
|
+ if (match) {
|
|
|
|
+ content = match[1].trim().replaceAll(' ', '');
|
|
|
|
+ // 获取匹配到的内容并去除两端空格
|
|
|
|
+ console.log('contentInsideDoubleEquals', content);
|
|
|
|
+ if (content.indexOf('0星') == -1 || content.indexOf('2星') == -1 || content.indexOf('3星') == -1 || content.indexOf('4星') == -1 || content.indexOf('5星') == -1) {
|
|
|
|
+ console.log("未有星级。");
|
|
|
|
+ this.cancelRuleToken[index] = null
|
|
|
|
+ this.aiRule(index)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // return
|
|
|
|
+ } else {
|
|
|
|
+ console.log("未找到匹配的内容。");
|
|
|
|
+ this.cancelRuleToken[index] = null
|
|
|
|
+ this.aiRule(index)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let elist = JSON.parse(JSON.stringify(this.eList[index]))
|
|
|
|
+ elist.rule = JSON.parse(JSON.stringify(content.replaceAll("#", "")))
|
|
|
|
+ this.$set(this.eList, index, elist)
|
|
|
|
+ this.$forceUpdate();
|
|
|
|
+ this.ruleLoading[index] = false
|
|
|
|
+ this.cancelRuleToken[index] = null
|
|
|
|
+ this.$message.success(`评价细则生成成功`)
|
|
|
|
+ } else {
|
|
|
|
+ this.ruleLoading[index] = false
|
|
|
|
+ this.cancelRuleToken[index] = null
|
|
|
|
+ }
|
|
|
|
+ this.$forceUpdate();
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ .catch((error) => {
|
|
|
|
+ this.cancelRuleToken[index] = null
|
|
|
|
+ this.ruleLoading[index] = false
|
|
|
|
+ this.$forceUpdate();
|
|
|
|
+ console.log(error);
|
|
|
|
+ });
|
|
|
|
+ },
|
|
addEList() {
|
|
addEList() {
|
|
|
|
|
|
},
|
|
},
|
|
@@ -340,7 +494,7 @@ Language: ${this.getLang()}
|
|
this.$confirm('确定删除吗?').then(() => {
|
|
this.$confirm('确定删除吗?').then(() => {
|
|
this.eList.splice(index, 1)
|
|
this.eList.splice(index, 1)
|
|
if (!this.eList.length) {
|
|
if (!this.eList.length) {
|
|
- this.$emit('setEvaList', this.itemTaskIndex, this.toolIndex, _this.eList)
|
|
|
|
|
|
+ this.$emit('setEvaList', this.itemTaskIndex, this.toolIndex, this.eList)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
@@ -363,6 +517,14 @@ Language: ${this.getLang()}
|
|
mounted() {
|
|
mounted() {
|
|
let elist = this.unitJson[0].chapterInfo[0].taskJson[this.itemTaskIndex].toolChoose[this.toolIndex].eList
|
|
let elist = this.unitJson[0].chapterInfo[0].taskJson[this.itemTaskIndex].toolChoose[this.toolIndex].eList
|
|
this.eList = elist ? JSON.parse(JSON.stringify(elist)) : []
|
|
this.eList = elist ? JSON.parse(JSON.stringify(elist)) : []
|
|
|
|
+ for (let i = 0; i < this.eList.length; i++) {
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.eList[i].rule += "*0*%*";
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.eList[i].rule = this.eList[i].rule.replaceAll("*0*%*", "");
|
|
|
|
+ }, 0);
|
|
|
|
+ }, 500);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|
|
@@ -848,6 +1010,22 @@ Language: ${this.getLang()}
|
|
display: flex
|
|
display: flex
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+.op_box {
|
|
|
|
+ position: absolute;
|
|
|
|
+ bottom: 10px;
|
|
|
|
+ display: none;
|
|
|
|
+ align-items: center;
|
|
|
|
+ justify-content: space-between;
|
|
|
|
+ width: calc(100% - 20px);
|
|
|
|
+ left: 50%;
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.op_box .op_remark {
|
|
|
|
+ color: #8E8E8E;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+}
|
|
|
|
+
|
|
.binfo_input {
|
|
.binfo_input {
|
|
width: 100%;
|
|
width: 100%;
|
|
margin: 0;
|
|
margin: 0;
|
|
@@ -905,11 +1083,32 @@ Language: ${this.getLang()}
|
|
background-image: url(../../../assets/icon/new/u_op.png);
|
|
background-image: url(../../../assets/icon/new/u_op.png);
|
|
}
|
|
}
|
|
|
|
|
|
-.stopBtn{
|
|
|
|
- z-index: 999999;
|
|
|
|
- position: absolute;
|
|
|
|
- left: 50%;
|
|
|
|
- top: calc(50% + 70px);
|
|
|
|
- transform: translateX(-50%);
|
|
|
|
|
|
+.stopBtn {
|
|
|
|
+ z-index: 999999;
|
|
|
|
+ position: absolute;
|
|
|
|
+ left: 50%;
|
|
|
|
+ top: calc(50% + 70px);
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.show_taskD {
|
|
|
|
+ min-width: fit-content;
|
|
|
|
+ margin-left: 10px;
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ color: #0061FF;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.show_taskD>img {
|
|
|
|
+ width: 15px;
|
|
|
|
+ margin-right: 5px;
|
|
|
|
+ transition: 0.2s all;
|
|
|
|
+ transform: rotate(-90deg);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.show_taskD.show>img {
|
|
|
|
+ transform: rotate(0deg);
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|