123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389 |
- <template>
- <div class="contrastObservation" v-loading="loading">
- <div class="co_card co_aggregateData" v-loading="aggregateLoading">
- <div class="co_ad_title">
- <img
- :src="
- require('../../../assets/icon/contrastObservation/titleIcon.svg')
- "
- />
- <span>总数据对比</span>
- </div>
- <div class="co_ad_chartArea">
- <chart :data="aggregateData.chartData" />
- </div>
- <div class="co_ad_messageArea" v-html="aggregateData.message"></div>
- </div>
- <div class="co_card co_ai_card">
- <div class="co_c_main" v-loading="aiLoading">
- <div class="co_c_title">AI观察结果</div>
- <div
- class="co_c_m_message"
- v-for="(item, index) in aiData"
- :key="index"
- >
- <div class="co_c_m_m_title co_ai_title">
- <el-tooltip
- class="item"
- effect="dark"
- :content="item.description"
- placement="bottom"
- popper-class="text_tooltip"
- >
- <span>{{ item.title }}</span>
- </el-tooltip>
- </div>
- <div class="score">
- <span class="titleBlob">评分:</span>{{ item.score }}
- </div>
- <div class="message">
- <span class="titleBlob">结论:</span>{{ item.message }}
- </div>
- <div class="basis">
- <span class="titleBlob">依据:</span>
- <ol>
- <li
- v-for="(item2, index2) in item.basis.length ? item.basis : []"
- :key="index2"
- >
- {{ item2 }}
- </li>
- </ol>
- </div>
- <!-- <div class="co_c_m_m_text">{{ item.message }}</div> -->
- </div>
- </div>
- </div>
- <div class="co_card co_teacher_card">
- <div class="co_c_main" v-loading="teacherLoading">
- <div class="co_c_title">教师观察结果</div>
- <div
- class="co_c_m_message"
- v-for="(item, index) in teacherData"
- :key="index"
- >
- <div class="co_c_m_m_title co_teacher_title">
- <el-tooltip
- class="item"
- effect="dark"
- :content="item.description"
- placement="bottom"
- popper-class="text_tooltip"
- >
- <span>{{ item.title }}</span>
- </el-tooltip>
- </div>
- <div class="score">
- <span class="titleBlob">评分:</span>{{ item.score }}
- </div>
- <div class="message">
- <span class="titleBlob">结论:</span>{{ item.message }}
- </div>
- <div class="basis">
- <span class="titleBlob">依据:</span>
- <ol>
- <li
- v-for="(item2, index2) in item.basis.length ? item.basis : []"
- :key="index2"
- >
- {{ item2 }}
- </li>
- </ol>
- </div>
- <!-- <div class="co_c_m_m_text">{{ item.message }}</div> -->
- </div>
- </div>
- </div>
- <div class="co_card co_contrast_card">
- <div class="co_c_main" v-loading="contrastLoading">
- <div class="co_c_title">对比观察结果</div>
- <div
- class="co_c_m_message"
- v-for="(item, index) in contrastData"
- :key="index"
- >
- <div class="co_c_m_m_title co_contrast_title">
- <el-tooltip
- class="item"
- effect="dark"
- :content="item.description"
- placement="bottom"
- popper-class="text_tooltip"
- >
- <span>{{ item.title }}</span>
- </el-tooltip>
- </div>
- <div class="similarity">
- <span class="titleBlob compareTitle">相同点:</span>
- <span>{{ item.similarity }}</span>
- </div>
- <!-- <div class="compare" v-else>
- <div class="titleBlob">相同点:</div>
- <ol>
- <li
- v-for="(item2, index2) in item.similarity.length ? item.similarity : []"
- :key="index2"
- >
- {{ item2 }}
- </li>
- </ol>
- </div> -->
- <div class="difference">
- <span class="titleBlob compareTitle">不同点:</span>
- <span>{{ item.difference }}</span>
- </div>
- <!-- <div class="compare" v-else>
- <div class="titleBlob">不同点:</div>
- <ol>
- <li
- v-for="(item2, index2) in item.difference.length ? item.difference : []"
- :key="index2"
- >
- {{ item2 }}
- </li>
- </ol>
- </div> -->
- <!--<div class="score">评分:{{ item.score }}分</div>
- <div class="message">结论:{{ item.message }}</div>
- <div class="basis">
- <span>依据:</span>
- <ol>
- <li
- v-for="(item2, index2) in item.basis.length ? item.basis : []"
- :key="index2"
- >
- {{ item2 }}
- </li>
- </ol>
- </div>-->
- <!-- <div class="co_c_m_m_text">{{ item.message }}</div> -->
- </div>
- </div>
- </div>
- <div
- :class="['refresh',(loading ||aggregateLoading ||aiLoading ||teacherLoading ||contrastLoading)?'refreshDisabled':'']"
- @click.stop="refresh()"
- v-loading="
- loading ||
- aggregateLoading ||
- aiLoading ||
- teacherLoading ||
- contrastLoading
- "
- >
- <img
- :src="require('../../../assets/icon/contrastObservation/refresh.svg')"
- />
- </div>
- </div>
- </template>
- <script>
- import chart from "./component/chart";
- import { v4 as uuidv4 } from "uuid";
- export default {
- components: {
- chart,
- },
- data() {
- return {
- tid: this.$route.query["tid"],
- testId: {
- testId: "",
- checkUrl: "",
- doUrl: "",
- },
- editorBarData: {
- type: 0,
- content: "",
- },
- testData: null,
- isDoTestList: [],
- loading: false,
- aggregateLoading: false,
- aiLoading: false,
- teacherLoading: false,
- contrastLoading: false,
- classroomObservationData: [],
- aggregateData: {
- message: ``,
- chartData: {
- legend: {
- data: ["AI的观察结果", "教师观察结果"],
- },
- radar: {
- // shape: 'circle',
- indicator: [
- { name: "教学设计", max: 10 },
- { name: "教学实施", max: 10 },
- { name: "学生参与", max: 10 },
- { name: "知识建构", max: 10 },
- { name: "课堂氛围", max: 10 },
- { name: "教学评价", max: 10 },
- ],
- },
- series: [
- {
- name: "Budget vs spending",
- type: "radar",
- data: [
- {
- value: [0, 0, 0, 0, 0, 0],
- name: "AI的观察结果",
- },
- {
- value: [0, 0, 0, 0, 0, 0],
- name: "教师观察结果",
- },
- ],
- },
- ],
- },
- },
- aiData: [],
- teacherData: [],
- contrastData: [],
- };
- },
- methods: {
- refresh() {
- if(this.loading || this.aggregateLoading || this.aiLoading || this.teacherLoading || this.contrastLoading)return;
- this.getData();
- },
- // 获取绑定的testId
- getBindTestId() {
- return new Promise((resolve, reject) => {
- if (this.loading || !this.tid) return;
- this.loading = true;
- let pram = {
- tid: this.tid,
- type: "0",
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/get_classroom_observation_new", pram)
- .then((res) => {
- let _result = res.data.FunctionResponse.result;
- if (_result) {
- let _jsonData = JSON.parse(_result);
- let baseMessage = _jsonData[0];
- let _bmJsonData = JSON.parse(baseMessage.jsonData);
- let _testData = _bmJsonData.testData;
- this.editorBarData = _bmJsonData.editorBarData;
- if (_testData) {
- this.testId = _testData;
- resolve();
- } else {
- this.$message.error("该观察未绑定表单");
- return;
- }
- }
- })
- .catch((e) => {
- this.$message.error("获取testId失败");
- console.log(e);
- return;
- })
- .finally(() => {
- this.loading = false;
- });
- });
- },
- // 获取绑定的表单数据
- getBindTestData() {
- return new Promise((resolve, reject) => {
- if (!this.testId.testId || !this.tid) return;
- this.loading = true;
- this.ajax
- .get(this.$store.state.api + "getTestWorksNoPage", {
- cid: this.testId.testId,
- cn: "",
- })
- .then((res) => {
- if (res.data[0].length != 0) {
- let _result = res.data[0][0];
- _result.chapters = JSON.parse(_result.chapters);
- // _result.cover = JSON.parse(_result.cover);
- this.testData = _result;
- resolve();
- }
- if (res.data[1].length != 0) {
- let _doTest = res.data[1];
- _doTest.forEach((i) => {
- i.courseJson = JSON.parse(i.courseJson);
- });
- this.isDoTestList = _doTest;
- }
- })
- .catch((e) => {
- this.$message.info("获取表单数据失败");
- console.log(e);
- return;
- })
- .finally((_) => {
- this.loading = false;
- });
- });
- },
- // 获取教师观察结果
- getTeacherResultData() {
- return new Promise((resolve, reject) => {
- if (this.teacherLoading || !this.testData) return;
- if(!this.testData>0)return this.$message.error("绑定的表单无数据")
- this.teacherLoading = true;
- this.teacherData = [];
- let _workData = [];
- this.isDoTestList.forEach((item, index) => {
- if (index == 0) {
- item.courseJson.forEach((i) => {
- if (i.type == 1) {
- // 选择题
- if (i.json.type == 1) {
- // 单选题
- _workData.push({
- typeName: "单选题",
- type: "1-1",
- title: i.json.title,
- checkList: i.json.array,
- answer: i.json.answer[0],
- userAnswer: [i.json.answer2[0]],
- score: i.json.score,
- });
- } else if (i.json.type == 2) {
- //多选题
- _workData.push({
- typeName: "多选题",
- type: "1-2",
- title: i.json.title,
- checkList: i.json.array,
- answer: i.json.answer,
- userAnswer: [i.json.answer2],
- score: i.json.score,
- });
- }
- } else if (i.type == 7) {
- //评分
- _workData.push({
- typeName: "评分题",
- type: "7",
- title: i.json.title,
- max: i.json.big,
- min: i.json.small,
- userAnswer: [i.json.answer2],
- });
- } else if (i.type == 3) {
- //问答题
- _workData.push({
- typeName: "问答题",
- type: "3",
- title: i.json.title,
- score: i.json.score,
- answer: i.json.answer,
- userAnswer: [i.json.answer2],
- });
- } else if (i.type == 5) {
- //附件上传
- }
- });
- } else {
- item.courseJson.forEach((i) => {
- if (i.type == 1) {
- // 选择题
- if (i.json.type == 1) {
- // 单选题
- let _index = _workData.findIndex((j) => j.type == "1-1");
- if (_index != -1) {
- _workData[_index].userAnswer.push(i.json.answer2[0]);
- }
- } else if (i.json.type == 2) {
- //多选题
- let _index = _workData.findIndex((j) => j.type == "1-2");
- if (_index != -1) {
- _workData[_index].userAnswer.push(i.json.answer2);
- }
- }
- } else if (i.type == 7) {
- //评分
- let _index = _workData.findIndex((j) => j.type == "7");
- if (_index != -1) {
- _workData[_index].userAnswer.push(i.json.answer2);
- }
- } else if (i.type == 3) {
- //问答题
- let _index = _workData.findIndex((j) => j.type == "3");
- if (_index != -1) {
- _workData[_index].userAnswer.push(i.json.answer2);
- }
- } else if (i.type == 5) {
- //附件上传
- }
- });
- }
- });
- let _workText = ``;
- _workData.forEach((i) => {
- if (i.type == "1-1") {
- let _checkListText = ``;
- i.checkList.forEach((i2, index) => {
- _checkListText += `选项${index + 1}:${i2.option}\n`;
- });
- let _userAnswerText = ``;
- let _newAnswer = [];
- i.userAnswer.forEach((i2) => {
- if (typeof i2 === "number") {
- _newAnswer.push(i2);
- } else {
- _newAnswer.push(...i2);
- }
- });
- i.checkList.forEach((item, index) => {
- _userAnswerText += `选择选项${index + 1}的次数:${
- _newAnswer.filter((i3) => i3 === index).length
- }\n`;
- });
- _workText += `单选题:\n总分:${i.score}分\n题目:${
- i.title
- }\n答案:选项${
- i.answer + 1
- }\n选项:\n${_checkListText}${_userAnswerText}\n`;
- } else if (i.type == "1-2") {
- let _checkListText = ``;
- i.checkList.forEach((i2, index) => {
- _checkListText += `选项${index + 1}:${i2.option}\n`;
- });
- let _answerText = ``;
- i.answer.forEach((i4, index4) => {
- if (index4 != 0) _answerText += `、`;
- _answerText += `选项${index4 + 1}`;
- });
- let _userAnswerText = ``;
- let _newAnswer = [];
- i.userAnswer.forEach((i2) => {
- if (typeof i2 === "number") {
- _newAnswer.push(i2);
- } else {
- _newAnswer.push(...i2);
- }
- });
- i.checkList.forEach((item, index) => {
- _userAnswerText += `选择选项${index + 1}的次数:${
- _newAnswer.filter((i3) => i3 === index).length
- }\n`;
- });
- _workText += `多选题:\n总分:${i.score}分\n题目:${i.title}\n答案:${_answerText}\n选项:\n${_checkListText}${_userAnswerText}\n`;
- } else if (i.type == "7") {
- let _userAnswerText = ``;
- let _groupUserAnswer = [];
- i.userAnswer.forEach((i2) => {
- if (!_groupUserAnswer.includes(i2)) {
- _groupUserAnswer.push(i2);
- }
- });
- _groupUserAnswer.forEach((i3) => {
- _userAnswerText += `${i3}:${
- i.userAnswer.filter((i4) => i4 === i3).length
- }\n`;
- });
- _workText += `评分题:\n最大评分:${i.max}\n最小评分:${i.min}\n评分与次数:\n${_userAnswerText}\n\n`;
- } else if (i.type == "3") {
- let _userAnswerText = ``;
- let _groupUserAnswer = [];
- i.userAnswer.forEach((i2) => {
- if (!_groupUserAnswer.includes(i2)) {
- _groupUserAnswer.push(i2);
- }
- });
- _groupUserAnswer.forEach((i3) => {
- _userAnswerText += `${i3}:${
- i.userAnswer.filter((i4) => i4 === i3).length
- }\n`;
- });
- _workText += `问答题:\n总分:${i.score}分\n题目:${i.title}\n答案:${i.answer}\n答题与次数:\n${_userAnswerText}\n\n`;
- }
- });
- let _msg = `
- NOTICE
- 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.
- ## 任务
- 你是专业的教育评估专家,熟悉教学评估的六个维度,了解如何从课堂观察报告中提取关键信息,并进行深入分析。
- 请你基于以下【课堂观察报告】,请你按照【教学目标与内容编排、教学策略与课堂组织、学生参与和学习体验、知识建构和能力培养、课堂氛围与师生关系、教学评价与反馈改进】这六个维度进行分析、总结,并按指定格式输出内容。
- 1. 教学目标与内容编排:评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 2. 教学策略与课堂组织:分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 3. 学生参与和学习体验:关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。
- 4. 知识建构和能力培养:分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。
- 5. 课堂氛围与师生关系:包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。
- 6. 教学评价与反馈改进:评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。
- ## 输出
- ### 输出要求
- ### 输出格式
- [
- {
- "title":"教学目标与内容编排",
- "description":"评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。",
- "score":"满分10分,给出具体的分值。",
- "message": "给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。"],
- },
- {
- "title": "教学策略与课堂组织",
- "description":"分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "学生参与和学习体验",
- "description":"关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "知识建构和能力培养",
- "description":"分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "课堂氛围与师生关系",
- "description":"包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "教学评价与反馈改进",
- "description":"评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- ]
- ## 教师课堂观察报告
- ### 1. 教学目标与内容编排
- > 评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 评分:{满分10分,给出具体的分值。}
- 结论:{给出具体的评分理由。使用3个完整的句子。}
- 依据:{基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。}
- ### 2. 教学策略与课堂组织
- > 分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 评分:
- 结论:
- 依据:
- ### 3.
- ### 4.
- ### 5.
- ### 6.
- ## 数据
- ${_workText}
- ### 课堂实录文稿
- ${this.editorBarData.type == 0 ? this.editorBarData.content : ""}`;
- const _uuid = uuidv4();
- let params = {
- model: "gpt-3.5-turbo",
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: [{ role: "user", content: _msg }],
- uid: _uuid,
- mind_map_question: "",
- stream: false,
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/chat", params)
- .then((res) => {
- let _data = res.data.FunctionResponse.choices[0];
- let _jsonData = _data.message.content;
- _jsonData = _jsonData
- .replaceAll("```json", "")
- .replaceAll("```", "");
- let _result = JSON.parse(_jsonData);
- this.teacherData = _result;
- resolve();
- })
- .catch((e) => {
- console.log(e);
- this.$message.error("生成教师观察结果失败");
- })
- .finally((_) => {
- this.teacherLoading = false;
- });
- });
- },
- //获取观察数据
- getClassroomObservationData() {
- return new Promise((resolve, reject) => {
- let params = {
- tid: this.tid,
- };
- this.loading = true;
- this.ajax
- .post("https://gpt4.cocorobo.cn/get_classroom_ob_tid", params)
- .then((res) => {
- let _data = res.data.FunctionResponse.result;
- let _result = JSON.parse(_data);
- this.classroomObservationData = _result;
- resolve();
- });
- });
- },
- // 获取AI观察结果
- getAiResultData() {
- return new Promise((resolve, reject) => {
- if (this.aiLoading || this.loading) return;
- if (!this.classroomObservationData.length > 0){
- return this.getClassroomObservationData().then(_=>{
- this.getAiResultData().then(_=>{
- resolve();
- });
- })
- };
- this.aiLoading = true;
- this.aiData = [];
- let _workText = ``; //转换的提示词
- let _sum = 0;
- this.classroomObservationData.forEach(i=>{
- if([0,1,2].includes(i.Type)){
- let _jsonObj = JSON.parse(i.jsonData);
- if(!_jsonObj.courseName){
- if(_jsonObj.name!=="课堂记录"){
- _workText+=`名称:${_jsonObj.name}\n分析内容:${_jsonObj.content}\n\n`
- }
- }
- }
- })
- let _msg = `
- NOTICE
- 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.
- ## 任务
- 你是专业的教育评估专家,熟悉教学评估的六个维度,了解如何从课堂观察报告中提取关键信息,并进行深入分析。
- 请你基于以下【课堂观察报告】,请你按照【教学目标与内容编排、教学策略与课堂组织、学生参与和学习体验、知识建构和能力培养、课堂氛围与师生关系、教学评价与反馈改进】这六个维度进行分析、总结,并按指定格式输出内容。
- 1. 教学目标与内容编排:评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 2. 教学策略与课堂组织:分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 3. 学生参与和学习体验:关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。
- 4. 知识建构和能力培养:分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。
- 5. 课堂氛围与师生关系:包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。
- 6. 教学评价与反馈改进:评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。
- ## 输出
- ### 输出要求
- ### 输出格式
- [
- {
- "title":"教学目标与内容编排",
- "description":"评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。",
- "score":"满分10分,给出具体的分值。",
- "message": "给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。"],
- },
- {
- "title": "教学策略与课堂组织",
- "description":"分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "学生参与和学习体验",
- "description":"关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "知识建构和能力培养",
- "description":"分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "课堂氛围与师生关系",
- "description":"包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- {
- "title": "教学评价与反馈改进",
- "description":"评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。",
- "score":"满分10分,给出具体的分值。",
- "message":"给出具体的评分理由。使用3个完整的句子。",
- "basis":["基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。列举出至少3个依据。使用"],
- },
- ]
- ## AI课堂观察报告
- ### 1. 教学目标与内容编排
- > 评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 评分:{满分10分,给出具体的分值。}
- 结论:{给出具体的评分理由。使用3个完整的句子。}
- 依据:{基于【课堂观察报告】中每个模块的分析数据,提供对应的评分依据,也就是支持你结论的数据。需要指出具体是哪一个模型以及该模型对应的内容。列举出至少3个依据。}
- ### 2. 教学策略与课堂组织
- > 分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 评分:
- 结论:
- 依据:
- ### 3.
- ### 4.
- ### 5.
- ### 6.
- ## 数据
- ${_workText}
- ### 课堂实录文稿
- ${this.editorBarData.type == 0 ? this.editorBarData.content : ""}`;
- const _uuid = uuidv4();
- let params = {
- model: "gpt-3.5-turbo",
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: [{ role: "user", content: _msg }],
- uid: _uuid,
- mind_map_question: "",
- stream: false,
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/chat", params)
- .then((res) => {
- let _data = res.data.FunctionResponse.choices[0];
- let _jsonData = _data.message.content;
- _jsonData = _jsonData
- .replaceAll("```json", "")
- .replaceAll("```", "");
- let _result = JSON.parse(_jsonData);
- this.aiData = _result;
- resolve();
- })
- .catch((e) => {
- console.log(e);
- this.$message.error("生成ai观察结果失败");
- })
- .finally((_) => {
- this.aiLoading = false;
- });
- });
- },
- // 获取对比观察
- getContrastResultData() {
- return new Promise((resolve, reject) => {
- if (this.contrastLoading || this.loading) return;
- if (!this.teacherData.length > 0) {
- return this.$message.error("缺少教师观察结果");
- } else if (!this.aiData.length > 0) {
- return this.$message.error("缺少ai观察结果");
- }
- this.contrastLoading = true;
- this.contrastData = [];
- let _teacherWorkText = ``; //教师观察转换的提示词
- let _aiWorkText = ``; //ai观察转换的提示词
- // 转换教师观察结果数据
- this.teacherData.forEach((i) => {
- _teacherWorkText += `
- 标题:${i.title}
- 描述:${i.description}
- 评分:${i.score}
- 结论:${i.message}
- 依据:${i.basis.join("、")}\n
- `;
- });
- //转换ai观察结果数据
- this.aiData.forEach((i) => {
- _aiWorkText += `
- 标题:${i.title}
- 描述:${i.description}
- 评分:${i.score}
- 结论:${i.message}
- 依据:${i.basis.join("、")}\n
- `;
- });
- let _msg = `
- NOTICE
- 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.
- ## 任务
- 你是专业的教育评估专家,熟悉教学评估的六个维度,了解如何从课堂观察报告中提取关键信息,并进行深入分析。
- 以下是两份不同的【课堂观察报告】,两个包含均从这六个维度对课堂进行分析,【教学目标与内容编排、教学策略与课堂组织、学生参与和学习体验、知识建构和能力培养、课堂氛围与师生关系、教学评价与反馈改进】这六个维度。请你对两个报告的内容从六个不同维度进行对比分析。
- 1. 教学目标与内容编排:评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 2. 教学策略与课堂组织:分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 3. 学生参与和学习体验:关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。
- 4. 知识建构和能力培养:分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。
- 5. 课堂氛围与师生关系:包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。
- 6. 教学评价与反馈改进:评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。
- ## 输出
- ### 输出要求
- ### 输出格式
- [
- {
- "title":"教学目标与内容编排",
- "description":"评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- },
- {
- "title": "教学策略与课堂组织",
- "description":"分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- },
- {
- "title": "学生参与和学习体验",
- "description":"关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。",
- "similarity":"使用3句完整的话进行描述(最好是数组)",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- },
- {
- "title": "知识建构和能力培养",
- "description":"分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- },
- {
- "title": "课堂氛围与师生关系",
- "description":"包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- },
- {
- "title": "教学评价与反馈改进",
- "description":"评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。",
- "similarity":"使用3句完整的话进行描述",
- "difference": "使用3句完整的话进行描述"
- }
- ]
- ### 1. 教学目标与内容编排
- > 评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 相同点:{使用3句完整的话进行描述}
- 不同点:{使用3句完整的话进行描述}
- ### 2. 教学策略与课堂组织
- > 分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- ### 3.
- ### 4.
- ### 5.
- ### 6.
- ## 数据
- ### 教师课堂观察报告
- ${_teacherWorkText}
- ### AI课堂观察报告
- ${_aiWorkText}
- `;
- // this.contrastLoading = false;
- // console.log("对比观察提示词👇👇")
- // console.log(_msg)
- // return;
- const _uuid = uuidv4();
- let params = {
- model: "gpt-3.5-turbo",
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: [{ role: "user", content: _msg }],
- uid: _uuid,
- mind_map_question: "",
- stream: false,
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/chat", params)
- .then((res) => {
- let _data = res.data.FunctionResponse.choices[0];
- let _jsonData = _data.message.content;
- _jsonData = _jsonData
- .replaceAll("```json", "")
- .replaceAll("```", "");
- let _result = JSON.parse(_jsonData);
- this.contrastData = _result;
- })
- .catch((e) => {
- console.log(e);
- this.$message.error("生成ai观察结果失败");
- })
- .finally((_) => {
- this.contrastLoading = false;
- });
- });
- },
- // 获取总数据对比
- getAggregateResultData() {
- return new Promise((resolve, reject) => {
- if (!this.aiData.length > 0) {
- return this.$message.info("请先获取ai观察结果");
- } else if (!this.teacherData.length > 0) {
- return this.$message.error("请先获取教师观察结果");
- }
- this.aggregateLoading = true;
- this.aggregateData.message = "";
- let _teacherWorkText = ``; //教师观察转换的提示词
- let _aiWorkText = ``; //ai观察转换的提示词
- // 转换教师观察结果数据
- this.teacherData.forEach((i) => {
- _teacherWorkText += `
- 标题:${i.title}
- 描述:${i.description}
- 评分:${i.score}
- 结论:${i.message}
- 依据:${i.basis.join("、")}\n
- `;
- });
- //转换ai观察结果数据
- this.aiData.forEach((i) => {
- _aiWorkText += `
- 标题:${i.title}
- 描述:${i.description}
- 评分:${i.score}
- 结论:${i.message}
- 依据:${i.basis.join("、")}\n
- `;
- });
- let _msg = `
- NOTICE
- 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.
- ## 任务
- 你是专业的教育评估专家,熟悉教学评估的六个维度,了解如何从课堂观察报告中提取关键信息,并进行深入分析。
- 以下是两份不同的【课堂观察报告】,两个包含均从这六个维度对课堂进行分析,【教学目标与内容编排、教学策略与课堂组织、学生参与和学习体验、知识建构和能力培养、课堂氛围与师生关系、教学评价与反馈改进】这六个维度。请你对两个报告的内容进行对比分析,指出其中的相同点和不同点。仅仅输出一段完整的小论文进行介绍,使用不超过10句完整的话,需适当指出各自的得分情况。
- 1. 教学目标与内容编排:评估教学目标的明确性、内容的科学性、系统性和前沿性,内容与学生实际生活的联系,以及教学活动、资源的合理编排。
- 2. 教学策略与课堂组织:分析教师采用的教学模式、教学方法和策略,组织管理能力,师生互动方式,多媒体技术运用,以及教学设计实施的效果。
- 3. 学生参与和学习体验:关注学生在课堂上的参与度、参与深度,包括回答问题、提出疑问、讨论互动、动手实践、探究性学习等,以及学习体验的积极性。
- 4. 知识建构和能力培养:分析学生对知识的理解深度,知识内化、迁移应用,参与高阶思维活动的情况,以及培养批判性思维、创新能力、问题解决能力等核心素养的效果。
- 5. 课堂氛围与师生关系:包括课堂氛围、师生关系、同伴互助、学习动机激发、心理安全感等软实力因素,以及对学生个体差异的关注和包容。
- 6. 教学评价与反馈改进:评估教师对学生学习效果的评价方式及时性,形成性评价、小测验、作业反馈等评价方式的运用,反馈质量对学习的促进作用,并根据评价结果持续改进教学。
- ## 输出
- ### 输出要求
- ### 输出格式
- {仅仅输出一段完整的小论文进行介绍,使用不超过10句完整的话,需适当指出各自的得分情况。最好是字符串}
- ## 数据
- ### 教师课堂观察报告
- ${_teacherWorkText}
- ### AI课堂观察报告
- ${_aiWorkText}
-
- `;
- // console.log("总数居对比");
- // console.log(_msg)
- // return this.aggregateLoading = false;
- const _uuid = uuidv4();
- let params = {
- model: "gpt-3.5-turbo",
- temperature: 0,
- max_tokens: 4096,
- top_p: 1,
- frequency_penalty: 0,
- presence_penalty: 0,
- messages: [{ role: "user", content: _msg }],
- uid: _uuid,
- mind_map_question: "",
- stream: false,
- };
- this.ajax
- .post("https://gpt4.cocorobo.cn/chat", params)
- .then((res) => {
- let _data = res.data.FunctionResponse.choices[0];
- let _result = _data.message.content;
- this.aggregateData.message = _result;
- // let _jsonData = _data.message.content;
- // _jsonData = _jsonData.replaceAll("```json", "").replaceAll("```", "");
- // let _result = JSON.parse(_jsonData);
- // this.aiData = _result;
- })
- .catch((e) => {
- console.log(e);
- this.$message.error("生成总结数据对比");
- })
- .finally((_) => {
- this.aggregateLoading = false;
- });
- });
- },
- // 计算总数据对比里的雷达图
- getAggregateChartData() {
- if (!this.aiData.length > 0) {
- return this.$message.info("请先获取ai观察结果");
- } else if (!this.teacherData.length > 0) {
- return this.$message.error("请先获取教师观察结果");
- }
- let _teacherData = {
- value: [],
- name: "教师观察结果",
- };
- let _aiData = {
- value: [],
- name: "AI的观察结果",
- };
- let _chartData = JSON.parse(JSON.stringify(this.aggregateData.chartData));
- let _titleList = {
- 教学目标与内容编排: 0,
- 教学策略与课堂组织: 1,
- 学生参与和学习体验: 2,
- 知识建构和能力培养: 3,
- 课堂氛围与师生关系: 4,
- 教学评价与反馈改进: 5,
- };
- this.teacherData.forEach((i) => {
- if (i.title in _titleList) {
- let _scoreStr = i.score;
- _scoreStr=parseInt(_scoreStr.replaceAll('分',''))
- _teacherData.value[_titleList[i.title]] = parseInt(_scoreStr);
- }
- });
- this.aiData.forEach((i) => {
- if (i.title in _titleList) {
- let _scoreStr = i.score;
- _scoreStr=parseInt(_scoreStr.replaceAll('分',''))
- _aiData.value[_titleList[i.title]] = parseInt(_scoreStr);
- }
- });
- _chartData.series[0].data = [_aiData, _teacherData];
- this.aggregateData.chartData = _chartData;
- },
- //获取
- getData() {
- // 获取观察所绑定的表单
- this.getBindTestId().then((_) => {
- // 后去表单的数据
- this.getBindTestData().then((_) => {
- Promise.all([
- this.getTeacherResultData(),
- this.getAiResultData(),
- ]).then((_) => {
- this.getAggregateChartData();
- this.getContrastResultData();
- this.getAggregateResultData();
- });
- });
- });
- },
- },
- mounted() {
- this.getData();
- },
- };
- </script>
- <style scoped>
- .contrastObservation {
- min-width: 1500px;
- /* min-height: 800px; */
- width: 100%;
- height: 100vh;
- display: flex;
- background-color: #f0f2f5;
- box-sizing: border-box;
- padding: 30px 20px;
- background-image: #d4d8f6;
- display: flex;
- justify-content: space-around;
- align-items: center;
- position: relative;
- }
- .refresh {
- position: fixed;
- right: 0;
- top: 40px;
- width: 60px;
- height: 60px;
- background-color: #fff;
- border-radius: 12px 0px 0px 12px;
- display: flex;
- justify-content: center;
- align-items: center;
- box-shadow: 0 16px 24px 2px #0000000a;
- cursor: pointer;
- }
- .refreshDisabled{
- cursor: not-allowed;
- }
- .co_card_area {
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: space-around;
- align-items: center;
- }
- .co_card {
- min-width: 24%;
- max-width: 24%;
- width: 23%;
- height: 100%;
- box-sizing: border-box;
- border-radius: 12px;
- background-color: #fff;
- box-sizing: border-box;
- padding: 20px;
- position: relative;
- overflow: hidden;
- }
- .co_aggregateData {
- background-color: #fbfcfe;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- }
- .co_ad_title {
- height: 35px;
- font-size: 22px;
- color: #434e69;
- font-weight: 600;
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- }
- .co_ad_title > img {
- width: 25px;
- height: 25px;
- margin-right: 10px;
- }
- .co_ad_chartArea {
- width: 100%;
- height: 45%;
- max-height: 45%;
- margin-bottom: 20px;
- }
- .co_ad_messageArea {
- width: 100%;
- height: calc(100% - 35px - 45% - 40px);
- background-color: #eef2fc;
- box-sizing: border-box;
- padding: 20px;
- overflow-y: auto;
- border: solid 1px #e0eafb;
- border-radius: 6px;
- white-space: pre-line;
- font-size: 18px;
- }
- .co_ai_card {
- padding: 8px 0 0 0;
- background: linear-gradient(to right, #3673e8, #ad88fd);
- /* background: linear-gradient(#f4eefd, #fff, #fff, #fff, #fff, #fff); */
- /* height: calc(100% - 10px); */
- }
- .co_ai_card > .co_c_main {
- background: linear-gradient(#f4eefd, #fff, #fff, #fff, #fff, #fff);
- }
- .co_teacher_card {
- padding: 8px 0 0 0;
- background: linear-gradient(to right, #3673e8, #88fdc5);
- /* background: linear-gradient(#f5fffa, #fff, #fff, #fff, #fff, #fff); */
- /* height: calc(100% - 10px); */
- }
- .co_teacher_card > .co_c_main {
- background: linear-gradient(#f5fffa, #fff, #fff, #fff, #fff, #fff);
- }
- .co_contrast_card {
- padding: 8px 0 0 0;
- background: linear-gradient(to right, #fdcd72, #fd8888);
- /* background: linear-gradient(#fffaee, #fff, #fff, #fff, #fff, #fff); */
- /* height: calc(100% - 10px); */
- }
- .co_contrast_card > .co_c_main {
- background: linear-gradient(#fffaee, #fff, #fff, #fff, #fff, #fff);
- }
- .co_c_main {
- width: calc(100%);
- height: calc(100%);
- padding: 20px;
- box-sizing: border-box;
- border-radius: 12px;
- overflow-x: hidden;
- }
- .co_c_title {
- width: calc(100% + 20px);
- height: 80px;
- display: flex;
- justify-content: center;
- align-items: center;
- position: relative;
- left: -20px;
- top: -20px;
- font-size: 24px;
- box-sizing: border-box;
- }
- .co_c_m_message {
- width: 100%;
- height: auto;
- margin-bottom: 20px;
- }
- .co_c_m_m_title {
- width: 100%;
- height: 50px;
- display: flex;
- align-items: center;
- font-size: 22px;
- font-weight: bold;
- position: relative;
- }
- .co_c_m_m_title > span {
- position: relative;
- transition: 0.3s;
- }
- .co_c_m_m_title > span:hover {
- color: #3681fc;
- cursor: help;
- }
- .co_c_m_m_title > span::before {
- content: "";
- width: 100%;
- height: 10px;
- position: absolute;
- bottom: 0;
- left: 0;
- opacity: 0.5;
- }
- .co_ai_title > span::before {
- background: linear-gradient(to right, #3673e8, #ad88fd);
- }
- .co_teacher_title > span::before {
- background: linear-gradient(to right, #3673e8, #88fdc5);
- }
- .co_contrast_title > span::before {
- background: linear-gradient(to right, #fdcd72, #fd8888);
- }
- .message,
- .score,
- .basis {
- font-size: 18px;
- }
- .basis > ol {
- margin-left: 30px;
- }
- .compare > ol {
- margin-left: 30px;
- }
- .similarity,
- .difference,
- .compare {
- font-size: 18px;
- margin-bottom: 10px;
- }
- .titleBlob {
- font-weight: bold;
- }
- /* .compareTitle{
- margin-left: 10px;
- position: relative;
- display: inline-block;
- }
- .compareTitle::after{
- content: "";
- width: 20px;
- height: 20px;
- position: relative;
- } */
- </style>
|