123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526 |
- <template>
- <div>
- <div v-loading="loading" style="cursor: pointer;" @click.stop="markScoreDigBtn">
- <div class="scoreTit">
- <div>任务得分</div>
- <div>{{ totalScore ? totalScore : 0 }}分</div>
- </div>
- <div class="allD">
- <div class="scoreStarBack2">
- <div
- v-for="(e, index) in scoTitList"
- :key="index"
- style="height: 30px;"
- >
- <img
- class="rootImg"
- v-if="e.isai == 1 || !e.isai"
- src="../../../assets/icon/newIcons/blueRoot.png"
- alt=""
- />
- </div>
- </div>
- <div class="scoreStar">
- <div v-for="(e, index) in scoTitList" :key="index">
- <div class="scoreStarBack">
- <el-tooltip
- class="item"
- effect="dark"
- :content="e.detail"
- placement="top"
- >
- <div class="briefTit">
- {{ e.detail }}
- </div>
- </el-tooltip>
- <el-rate
- disabled
- disabled-void-color="#ccc"
- v-model="e.cog"
- ></el-rate>
- </div>
- </div>
- </div>
- </div>
- <div class="AreaCss">
- {{ textarea }}
- <!-- <el-input
- type="textarea"
- disabled
- placeholder="您可在此输入评语"
- v-model="textarea"
- style="padding-bottom: 10px;"
- >
- </el-input> -->
- </div>
- <!-- <div style="width:100%;display:flex;justify-content: flex-end;">
- <el-button size="mini" @click="reset">重置</el-button>
- <el-button type="primary" size="mini" @click="submit">确认</el-button>
- <el-button type="primary" size="mini" @click="AIsubmit"
- >AI评分</el-button
- >
- </div> -->
- </div>
- </div>
- </template>
- <script>
- import { v4 as uuidv4 } from "uuid";
- export default {
- name: "PblStudentTableMarkScore",
- props: [
- "scoTit",
- "scoCon",
- "task",
- "stage",
- "loading",
- "wIndex",
- "toolIndex",
- "tool",
- "markScoreVisible"
- ],
- data() {
- return {
- homeworkVal: [],
- scoTitList: [],
- markScoPopover: false,
- id: this.$route.query.courseId,
- stUid: this.scoCon.userid,
- userid: this.$route.query.userid,
- total: 0,
- textarea:''
- };
- },
- computed: {
- totalScore() {
- let a = 0;
- let isPing = 0;
-
- this.scoTitList.forEach(e => {
- if (e.cog || e.cog == "0") {
- a += e.cog * 1;
- } else {
- isPing += 1;
- }
- });
-
- let data = 0;
- if (isPing == this.scoTitList.length) {
- this.$emit("updateDocSco", {
- val: this.toolIndex,
- val2: this.wIndex,
- val3: null
- });
- } else {
- data = (a / this.scoTitList.length).toFixed(1);
- this.$emit("updateDocSco", {
- val: this.toolIndex,
- val2: this.wIndex,
- val3: data
- });
- }
- return data;
- }
- },
- mounted() {
-
- if (this.tool.eList && this.tool.eList.length) {
- this.scoTitList = JSON.parse(JSON.stringify(this.tool.eList));
- }else{
- this.scoTitList = JSON.parse(JSON.stringify(this.scoTit));
- }
- this.getData();
- },
- methods: {
-
- // // 获取文档id
- createFileid(url) {
- let _this = this;
- return new Promise((resolve, reject) => {
- try {
- _this.ajax
- .put("https://gpt4.cocorobo.cn/upload_file_knowledge", {
- url: url
- })
- .then(res => {
- let _data = res.data.FunctionResponse;
- if (_data.result && _data.result.id) {
- resolve(_data.result.id);
- } else {
- resolve(1);
- }
- })
- .catch(function(error) {
- resolve(1);
- });
- } catch (e) {
- resolve(1);
- }
- });
- },
- // 获取单个数据
- getData() {
- let params = {
- uid: this.scoCon.userid,
- cid: this.id,
- s:this.stage,
- t:this.task,
- tool:this.toolIndex ? this.toolIndex :''
- };
- this.ajax
- .get(this.$store.state.api + "selectWorksEvaScoreTwo", params)
- .then(res => {
- // console.log("res", res.data);
- if (res.data[0].length > 0) {
-
- var data2 = [];
- res.data[0].forEach((val, index) => {
- if (val.task == this.task) {
- data2 = res.data[0][index];
- this.homeworkVal = res.data[0][index];
- }
- });
-
- if (data2.length == 0) {
- if (this.tool.eList && this.tool.eList.length) {
- this.scoTitList = JSON.parse(JSON.stringify(this.tool.eList));
- }else{
- this.scoTitList = JSON.parse(JSON.stringify(this.scoTit));
- }
- } else {
- let data = JSON.parse(data2.rate);
- this.scoTitList.forEach((e, index) => {
- e.cog = null;
- for (const key in data) {
- if (isNaN(parseFloat(e.detail)) && e.detail) {
- var result = e.detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var result = e.detail
- }
- if (isNaN(parseFloat(key)) && key) {
- var key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var key2 = key
- }
- // let result = e.detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- // let key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- if (result.indexOf(key2) != -1) {
- e.cog = data[key];
- }
- if ("content" == key) {
- this.textarea = data[key];
- }
- }
- });
- this.scoTitList = JSON.parse(JSON.stringify(this.scoTitList));
- // console.log(this.scoTitList);
- }
- } else {
- this.scoTitList.forEach((e, index) => {
- e.cog = null;
- })
- this.scoTitList = JSON.parse(JSON.stringify(this.scoTitList));
- }
- })
- .catch(err => {
- console.error(err);
- });
- },
- markScoreDigBtn() {
- if (this.tool.eList && this.tool.eList.length) {
- this.$emit("markScoreDig", {
- val: this.stUid,
- val2: this.toolIndex,
- tit: this.tool.eList,
- uname:this.scoCon.sName
- });
- }else{
- this.$emit("markScoreDig", {
- val: this.stUid,
- val2: this.toolIndex,
- tit: this.scoTit,
- uname:this.scoCon.sName
- });
- }
- },
- // 重置
- reset() {
- this.scoTitList.forEach(e => {
- e.cog = 0;
- // console.log(e.cog);
- });
- },
- // ai循环评分
- async aiupdetaSco(messages, uid, stage, task,_fileid,work) {
-
- let _this = this;
- let params = {
- assistant_id: "6063369f-289a-11ef-8bf4-12e77c4cb76b",
- message: [
- {
- type: "text",
- text: messages.replaceAll("\n", " ").replaceAll("*", "")
- }
- ],
- session_name: uuidv4(),
- userId: this.userid,
- file_ids: _fileid ? [_fileid] : [],
- isImage: work == 0 ? true : '',
- model: _fileid ? "gpt-4o-2024-11-20" : "gpt-4o-2024-11-20"
- };
- return new Promise((resolve,reject) => {
- this.ajax
- .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", params)
- .then( response => {
- let data = response.data.FunctionResponse;
- console.log(data);
- if (data.message) {
- let dArray = {};
- try {
- dArray = 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);
- // console.log("dArray2", match);
- dArray = JSON.parse(
- match[0]
- .replace(/\n/g, "")
- .replace(/\s{2,}/g, "")
- .replace(/\'/g, '"')
- );
- // dArray = data.choices[0].message.content
- } catch (error) {
- try {
- dArray = JSON.parse(
- data.message
- .replaceAll("```json", "")
- .replaceAll("```javascript", "")
- .replaceAll("# Solution", "")
- .replaceAll("```", "")
- .replace(/\n/g, "")
- .replace(/\s{2,}/g, "")
- .replace(/\'/g, '"')
- );
- } catch (error) {
- console.log("error_________________" + error);
- }
- console.log("error_________________" + error);
- }
- }
- let processedData = {};
- dArray.forEach(function(item) {
- let key = Object.keys(item)[0];
- let value = item[key];
- processedData[key] = value;
- });
- let IsAIsuccess = 0
- for (let tKey in this.scoTitList) {
- for (let key in processedData) {
- if (isNaN(parseFloat(this.scoTitList[tKey].detail)) && this.scoTitList[tKey].detail) {
- var result = this.scoTitList[tKey].detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var result = this.scoTitList[tKey].detail
- }
- if (isNaN(parseFloat(key)) && key) {
- var key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var key2 = key
- }
- // let result = this.scoTitList[tKey].detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- // let key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- if (key != "comment") {
- let isNumK = /^\d+(\.\d+)?$/.test(processedData[key]);
- if (result.indexOf(key2) != -1 && isNumK) {
- key = this.scoTitList[tKey].detail
- IsAIsuccess++
- }
- continue;
- }
- }
- continue;
- }
- let scotNum = 0
- this.scoTitList.forEach(e=>{
- if (e.isai == 1 || !e.isai) {
- scotNum++
- }
- })
- if (IsAIsuccess != scotNum) {
- console.log("评价失败");
- _this.ScLoading = false;
- return _this.aiupdetaSco(messages, uid, stage, task,_fileid).then(_=>{
- resolve();
- })
- }
- let processedDataCopy = {}
- for (const tKey in _this.scoTitList) {
- for (const key in processedData) {
- if (isNaN(parseFloat(_this.scoTitList[tKey].detail)) && _this.scoTitList[tKey].detail) {
- var result = _this.scoTitList[tKey].detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var result = _this.scoTitList[tKey].detail
- }
- if (isNaN(parseFloat(key)) && key) {
- var key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- }else{
- var key2 = key
- }
- // let result = _this.scoTitList[tKey].detail.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- // let key2 = key.match(/[\u4e00-\u9fa5a-zA-Z]+/g).join("");
- if (result.indexOf(key2) != -1) {
- let aaa = _this.scoTitList[tKey].detail
- processedDataCopy[aaa] = processedData[key]
- }
- }
- }
- for (const key in processedData) {
- if (key == "comment") {
- processedDataCopy.content = processedData[key];
- }
- }
- let params = {
- cid: _this.id,
- s: stage,
- t: task,
- tool: this.toolIndex ? this.toolIndex : '',
- rate: JSON.stringify(processedDataCopy),
- uid: uid
- };
- // console.log("params", params);
- _this.ajax
- .get(_this.$store.state.api + "updateWorksEvaTwo", params)
- .then(res => {
- console.log('999999999999999999999999999999999999999999999999999');
- this.getData()
- this.$emit('refreshOther',{tid:this.toolIndex,wid:this.wIndex})
-
- return resolve(1);
-
- })
- .catch(err => {
- console.error(err);
- return _this.aiupdetaSco(messages, uid, stage, task,_fileid).then(_=>{
- resolve();
- })
- });
-
- }
- })
- .catch(error => {
- console.log(error);
-
- return _this.aiupdetaSco(messages, uid, stage, task,_fileid).then(_=>{
- resolve();
- })
- });
- });
- },
-
- }
- };
- </script>
- <style scoped>
- .scoreTit {
- font-size: 16px;
- font-weight: 600;
- display: flex;
- justify-content: space-between;
- box-sizing: border-box;
- }
- .allD {
- margin: 5px 0;
- display: flex;
- width: 100%;
- overflow: auto;
- max-height: 100px;
- min-height: 60px;
- }
- .scoreStar {
- background-color: #f3f7fd;
- padding: 10px;
- height: 100%;
- flex: 1;
- }
- .scoreStar > div:last-child > .scoreStarBack {
- margin-bottom: 0;
- }
- .scoreStarBack {
- flex: 1;
- display: flex;
- justify-content: space-between;
- margin-bottom: 10px;
- }
- .rootImg {
- padding-top: 1px;
- box-sizing: border-box;
- display: block;
- }
- .scoreStarBack2 {
- padding: 10px 0;
- margin-right: 2px;
- }
- .AreaCss {
- margin-bottom: 5px;
- -webkit-line-clamp: 2;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- overflow: hidden;
- text-overflow: ellipsis;
- /* margin-left: 20px; */
- }
- .AreaCss >>> .el-textarea__inner {
- min-height: 60px;
- max-height: 150px;
- padding-bottom: 20px;
- }
- .briefTit {
- width: 150px;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- }
- </style>
|