Explorar el Código

Merge branch 'beta'

qgt hace 1 semana
padre
commit
dcfa9da3de

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.429741cd50165bbe7834c5144f9168b2.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.b7212920b6e58d14a873.js></script><script type=text/javascript src=./static/js/app.83a25253e3953402dae6.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.d770d79d31e5d9799c4147837bbed3e9.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.9811ebe9d5c4458a1b2a.js></script><script type=text/javascript src=./static/js/vendor.bb486323f0fa002ba2e7.js></script><script type=text/javascript src=./static/js/app.991495e7d3894e9fb9fc.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/css/app.d770d79d31e5d9799c4147837bbed3e9.css


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/css/app.d770d79d31e5d9799c4147837bbed3e9.css.map


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/0.4f3b05586c3acc102a54.js.map


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/0.df8814bab917ab2583e0.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/0.df8814bab917ab2583e0.js.map


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/app.991495e7d3894e9fb9fc.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/app.991495e7d3894e9fb9fc.js.map


+ 2 - 2
dist/static/js/manifest.161e82026ac2ae03ab6f.js → dist/static/js/manifest.9811ebe9d5c4458a1b2a.js

@@ -1,2 +1,2 @@
-!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var i,u,f,s=0,l=[];s<r.length;s++)u=r[s],t[u]&&l.push(t[u][0]),t[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(n&&n(r,c,a);l.length;)l.shift()();if(a)for(s=0;s<a.length;s++)f=o(o.s=a[s]);return f};var r={},t={6:0};function o(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"4f3b05586c3acc102a54",1:"14e8e8c7e44fc858e4a6",2:"94e1427bfc7ef0b4c685",3:"3a9f53a78da16650e6b8"}[e]+".js";var i=setTimeout(u,12e4);function u(){a.onerror=a.onload=null,clearTimeout(i);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=u,c.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="./",o.oe=function(e){throw console.error(e),e}}([]);
-//# sourceMappingURL=manifest.161e82026ac2ae03ab6f.js.map
+!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,a,c){for(var i,u,f,s=0,l=[];s<r.length;s++)u=r[s],t[u]&&l.push(t[u][0]),t[u]=0;for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);for(n&&n(r,a,c);l.length;)l.shift()();if(c)for(s=0;s<c.length;s++)f=o(o.s=c[s]);return f};var r={},t={6:0};function o(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var a=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,o.nc&&c.setAttribute("nonce",o.nc),c.src=o.p+"static/js/"+e+"."+{0:"df8814bab917ab2583e0",1:"14e8e8c7e44fc858e4a6",2:"94e1427bfc7ef0b4c685",3:"3a9f53a78da16650e6b8"}[e]+".js";var i=setTimeout(u,12e4);function u(){c.onerror=c.onload=null,clearTimeout(i);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return c.onerror=c.onload=u,a.appendChild(c),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="./",o.oe=function(e){throw console.error(e),e}}([]);
+//# sourceMappingURL=manifest.9811ebe9d5c4458a1b2a.js.map

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/manifest.9811ebe9d5c4458a1b2a.js.map


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/vendor.bb486323f0fa002ba2e7.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
dist/static/js/vendor.bb486323f0fa002ba2e7.js.map


+ 17 - 2
src/components/pages/liyuan/page/examine/index.vue

@@ -542,9 +542,19 @@ export default {
           testId: val.join(",")
         }
       ];
+
+      let _url = "selectExamineTestName"
+      if(this.testExamineBaseList[0].value){
+        const timeValue = JSON.parse(this.testExamineBaseList[0].value).time;
+        params[0].startTime = timeValue[0];
+        params[0].endTime = timeValue[1];
+        _url = `selectExamineTestNameFilterTime`
+      }
+
+
       return new Promise(resolve => {
         this.ajax
-          .post(this.$store.state.api + "selectExamineTestName", params)
+          .post(this.$store.state.api + _url, params)
           .then(res => {
             resolve(res.data[0]);
           })
@@ -556,7 +566,12 @@ export default {
     // 查看数据来源
     lookPrize(val) {
       // return;
-      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}`;
+      if(this.testExamineBaseList[0].value){
+        const timeValue = JSON.parse(this.testExamineBaseList[0].value).time;
+        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}&timeLimit=${timeValue}`;
+      }else{
+        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}`;
+      }
       // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;
       this.diaIframe = true;
     },

+ 50 - 11
src/components/pages/liyuan/page/teadTest.vue

@@ -48,7 +48,11 @@
                             v-if="item.array">
                             <div class="test" v-for="(test, index) in item.array" :key="test.id">
                                 <div class="time">
-                                    <span>提交记录{{item.array.length - index}}</span>
+                                    <span v-if="!test.editName && !test.name">提交记录{{item.array.length - index}}</span>
+                                    <span v-if="!test.editName && test.name">{{test.name}}</span>
+                                </div>
+                                <div class="testType">
+                                    <span :class="`typeStatus_${test.type}`">{{ typeStatusList[test.type] }}</span>
                                 </div>
                                 <div class="utime">
                                     <span>{{ test.utime }}</span>
@@ -116,7 +120,8 @@ export default {
             org: this.$route.query.org,
             role: this.$route.query.role,
             loading: false,
-            checkTypeValue:""
+            checkTypeValue:"",
+            typeStatusList:["","未提交","已提交","","已退回"]
         };
     },
     computed: {
@@ -663,19 +668,20 @@ export default {
 
 <style scoped>
 .i_body_box {
-    /* height: calc(100% - 10px); */
-    height: 100%;
+    height: calc(100% - 80px);
+    padding: 10px 0 0;
+    box-sizing: border-box;
 }
 
 .check_nav {
     display: flex;
     height: 50px;
     align-items: center;
+    padding: 0;
     box-sizing: border-box;
     width: 100%;
-    padding: 0 90px;
-    box-sizing: border-box;
     overflow: auto;
+    padding: 0 90px;
 }
 
 .check_nav>.nav {
@@ -689,7 +695,6 @@ export default {
     cursor: pointer;
     min-width: fit-content;
     margin-right: 10px;
-    
 }
 
 .check_nav>.active {
@@ -763,12 +768,12 @@ export default {
 
 
 .check_box {
-    height: calc(100% - 90px);
+    height: calc(100% - 50px);
     overflow: auto;
-    padding: 0 0px 20px;
-    margin: 0 90px;
+    padding: 0 0 20px;
     box-sizing: border-box;
     background: rgb(248, 250, 254);
+    margin: 0 90px;
 }
 
 .test_panel {
@@ -1059,7 +1064,7 @@ export default {
     font-size: 14px;
     width: 160px;
     min-width: 160px;
-    margin: 0 30px 0 auto;
+    margin: 0 30px 0 0;
 }
 .test_add_box>.test>.mask {
     display: flex;
@@ -1156,4 +1161,38 @@ export default {
 .isDead{
     color:#EE3E3E;
 }
+
+.testType{
+  width: 60px;
+  margin: 0 45px 0 auto;
+}
+
+.testType>span{
+  padding: 6px 10px;
+  border-radius: 4px;
+  border: solid 1px gray;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 12px;
+}
+
+
+.testType>.typeStatus_2{
+  background:#F0F9F2;
+  border-color: #B5E3BF;
+  color:#5FC875;
+}
+
+.testType>.typeStatus_4{
+  background:#FEF5EC;
+  border-color: #FAD0A1;
+  color:#F7933B;
+}
+
+.testType>.typeStatus_1{
+  background:#EEF3FC;
+  border-color: #0F40F5;
+  color:#0F40F5;
+}
 </style>

+ 1 - 0
src/components/pages/liyuan/teacherDevelop.vue

@@ -41,6 +41,7 @@ export default {
         { title: '课堂观察', icon: require('../../../assets/icon/liyuan/ketangguancha.svg'), type: 1, to: "/classroomObservation",role:0 },
         { title: '智能表单', icon: require('../../../assets/icon/liyuan/zhinengbiaodan.svg'), type: 1, to: "/test",role:1 },
         { title: '考核资料', icon: require('../../../assets/icon/liyuan/zlsj.svg'), type: 1, to: "/teadTest",role:0,sortId:'eefb7195-8ee7-11f0-9c7b-005056924926' },
+        { title: '考核审核', icon: require('../../../assets/icon/liyuan/workTest.svg'), type: 1, to: "/testReview",role:0 },
       ]
     }
   },

+ 206 - 0
src/components/pages/noticeCenter/component/received.vue

@@ -0,0 +1,206 @@
+<template>
+  <div class="received">
+    <div class="r_header">
+      <div class="r_h_title">已收通知</div>
+      <div class="r_h_right">
+        <div class="r_h_r_total">
+          共(
+          <div>{{ pageData.total }}</div>
+          )封
+        </div>
+        <el-input
+          style="width: 250px;"
+          placeholder="请输入关键词"
+          v-model="searchValue"
+        >
+          <i slot="suffix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+      </div>
+    </div>
+    <div class="r_content" v-loading="tableLoading">
+      <el-table
+        :data="tableData"
+        :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
+        style="width: 100%"
+        height="calc(100%)"
+      >
+        <el-table-column
+          fixed
+          prop="title"
+          label="通知标题"
+          width="auto"
+          min-width="200"
+        >
+        <template slot-scope="scope">
+          <span v-html="scope.row.title"></span>
+        </template>
+        </el-table-column>
+        <el-table-column label="状态 " width="150" align="center">
+          <template slot-scope="scope">
+          <span>{{status[scope.row.status]}}</span>
+        </template>
+        </el-table-column>
+        <el-table-column
+          prop="type"
+          label="类型 "
+          width="150"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="create_at" label="时间 " width="250" align="center">
+        </el-table-column>
+        <el-table-column
+          prop="publisherName"
+          label="发布者 "
+          width="300"
+          align="center"
+        >
+        </el-table-column>
+        <el-table-column prop="source" label="发布来源" width="200" align="center">
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="r_bottom">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="pageData.nowPage"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageData.size"
+        layout="sizes, prev, pager, next"
+        :total="pageData.total"
+      >
+      </el-pagination>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      userId: this.$route.query.userid,
+      org: this.$route.query.org,
+      oid: this.$route.query.oid,
+      tableLoading: false,
+      status:["未读","已读"],
+      searchValue: "",
+      tableData: [],
+      copyData:[],
+      pageData: {
+        nowPage: 1,
+        total: 0,
+        size: 20
+      }
+    };
+  },
+  methods: {
+    handleSizeChange(val) {
+      this.pageData.size = val;
+      this.getData();
+    },
+    handleCurrentChange(val) {
+      this.pageData.nowPage = val;
+      this.getData();
+    },
+    getData() {
+      if (this.tableLoading) return;
+      this.tableLoading = true;
+      let params = [{
+        uid: this.userId,
+        status:"",
+        type:"",
+        source:"",
+        pUid:"",
+        searchValue:this.searchValue,
+        pageNum:this.pageData.nowPage,
+        pageSize:this.pageData.size,
+      }]
+
+      this.ajax.post(this.$store.state.api+"select_noticeCenter",params).then(res=>{
+        let _resData = res.data[0];
+        if(_resData.length>0){
+          this.copyData = _resData;
+          this.tableData = _resData;
+          this.pageData.total = res.data[1][0].total;
+        }else{
+          this.copyData = [];
+          this.pageData.total = 0;
+          this.pageData.nowPage = 1;
+        }
+        this.tableLoading = false;
+        // this.tableData = res.data.list
+        // this.pageData.total = res.data.total
+      }).catch(e=>{
+        console.log(e);
+        this.$message.error("获取通知失败")
+        this.tableLoading = false;
+      })
+    }
+  },
+  mounted(){
+    this.getData();
+  }
+};
+</script>
+
+<style scoped>
+.received {
+  width: calc(100%);
+  height: 100%;
+  padding: 20px 20px;
+  background: #fff;
+  border: solid 1px #dfdfe0;
+  border-radius: 4px;
+  box-sizing: border-box;
+}
+
+.r_header {
+  width: 100%;
+  height: 80px;
+  display: flex;
+  box-sizing: border-box;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.r_h_right {
+  width: fit-content;
+  display: flex;
+  align-items: center;
+}
+
+.r_h_r_total {
+  width: fit-content;
+  margin-right: 20px;
+  display: flex;
+  align-items: center;
+}
+
+.r_h_r_total > div {
+  display: flex;
+  color: #5398e3;
+}
+
+.r_h_title {
+  font-size: 28px;
+  font-weight: bold;
+}
+
+.r_content {
+  width: 100%;
+  height: calc(100% - 80px - 40px);
+  overflow: auto;
+  box-sizing: border-box;
+  padding: 20px 0px;
+  border-top: solid 1px #dfdfe0;
+}
+
+.r_bottom {
+  width: 100%;
+  height: 40px;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+</style>

+ 7 - 122
src/components/pages/noticeCenter/index.vue

@@ -3,84 +3,23 @@
     <div class="nc_main">
       <div class="nc_m_left" v-show="false"></div>
       <div class="nc_m_right">
-        <div class="nc_m_r_header">
-          <div class="nc_m_r_h_title">已收通知</div>
-          <div class="nc_m_r_h_right">
-            <div class="nc_m_r_h_r_total">
-              共(
-              <div>{{ pageData.total }}</div>
-              )封
-            </div>
-            <el-input
-              style="width: 250px;"
-              placeholder="请输入关键词"
-              v-model="searchValue"
-            >
-              <i slot="suffix" class="el-input__icon el-icon-search"></i>
-            </el-input>
-          </div>
-        </div>
-        <div class="nc_m_r_content">
-          <el-table :data="tableData"  :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }" style="width: 100%" height="calc(100%)">
-            <el-table-column fixed prop="date" label="通知标题" width="auto" min-width="200">
-            </el-table-column>
-            <el-table-column prop="name" label="状态 " width="150" align="center">
-            </el-table-column>
-            <el-table-column prop="province" label="类型 " width="150" align="center">
-            </el-table-column>
-            <el-table-column prop="city" label="时间 " width="200" align="center">
-            </el-table-column>
-            <el-table-column prop="address" label="发布者 " width="300" align="center">
-            </el-table-column>
-            <el-table-column prop="zip" label="发布来源" width="200" align="center">
-            </el-table-column>
-          </el-table>
-        </div>
-        <div class="nc_m_r_bottom">
-          <el-pagination
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-            :current-page="pageData.nowPage"
-            :page-sizes="[10, 20, 30, 40]"
-            :page-size="pageData.size"
-            layout="sizes, prev, pager, next"
-            :total="pageData.total">
-          </el-pagination>
-        </div>
+        <received v-show="showRight === 0" ref="receivedRef"/>
       </div>
     </div>
   </div>
 </template>
 
 <script>
+import received from './component/received.vue';
 export default {
+  components:{
+    received
+  },
   data() {
     return {
-      userId:this.$route.query.userid,
-      org:this.$route.query.org,
-      oid:this.$route.query.oid,
-      searchValue: "",
-      tableData: [],
-      pageData:{
-        nowPage:1,
-        total: 0,
-        size:20,
-      },
+      showRight:0,
     };
   },
-  methods:{
-    handleSizeChange(val){
-      this.pageData.size = val;
-      this.getData()
-    },
-    handleCurrentChange(val){
-      this.pageData.nowPage = val;
-      this.getData();
-    },
-    getData(){
-      this.$message.info("获取数据")
-    },
-  },
 };
 </script>
 
@@ -116,62 +55,8 @@ export default {
 }
 
 .nc_m_right {
-  width: calc(100% - 300px - 20px);
+  /* width: calc(100% - 300px - 20px); */
   width: calc(100%);
   height: 100%;
-  padding: 20px 20px;
-  background: #fff;
-  border: solid 1px #dfdfe0;
-  border-radius: 4px;
-  box-sizing: border-box;
-}
-
-.nc_m_r_header {
-  width: 100%;
-  height: 80px;
-  display: flex;
-  box-sizing: border-box;
-  align-items: center;
-  justify-content: space-between;
-}
-
-.nc_m_r_h_right {
-  width: fit-content;
-  display: flex;
-  align-items: center;
-}
-
-.nc_m_r_h_r_total {
-  width: fit-content;
-  margin-right: 20px;
-  display: flex;
-  align-items: center;
-}
-
-.nc_m_r_h_r_total > div {
-  display: flex;
-  color: #5398e3;
-}
-
-.nc_m_r_h_title {
-  font-size: 28px;
-  font-weight: bold;
-}
-
-.nc_m_r_content {
-  width: 100%;
-  height: calc(100% - 80px - 40px);
-  overflow: auto;
-  box-sizing: border-box;
-  padding: 20px 0px;
-  border-top: solid 1px #dfdfe0;
-}
-
-.nc_m_r_bottom {
-  width: 100%;
-  height: 40px;
-  display: flex;
-  align-items: center;
-  justify-content: flex-end;
 }
 </style>

+ 3 - 1
src/components/pages/test/check/check.vue

@@ -4,7 +4,7 @@
       <div class="right">
         <div class="courseTop">
           <div class="stepsNav">
-            <el-breadcrumb separator-class="el-icon-arrow-right">
+            <el-breadcrumb separator-class="el-icon-arrow-right" v-if="!back">
               <el-breadcrumb-item
                 :to="{
                   path:
@@ -83,6 +83,7 @@ export default {
   },
   data() {
     return {
+      back:this.$route.query.back,
       userid: this.$route.query.userid,
       userid2: this.$route.query.userid2,
       tid: this.$route.query.tid,
@@ -105,6 +106,7 @@ export default {
   },
   methods: {
     retrunCourse() {
+      if (this.back) return this.$router.go(-1)
       if(this.type == 3){
         this.goTo(
         "/checkToTest2?uid=" +

+ 77 - 39
src/components/pages/test/check/index.vue

@@ -1588,7 +1588,7 @@
                     @click="returnTest(scope.row)"
                     type="primary"
                     size="small"
-                    v-if="((examineData && examineData.type == 1) || !examineData) && review == '1'"
+                   v-if="((examineData && examineData.type == 1) || !examineData) && review == '1'"
                     >退回</el-button
                   >
                   <!-- v-if="((examineData && examineData.type == 1) || !examineData) && review == '1'" -->
@@ -2615,22 +2615,38 @@ ${JSON.stringify(forAllList)}
 
 
           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: '',
-            model: "gpt-4o-2024-11-20"
+              id: '978252d7-a26e-4e70-8d75-3336497abac1',
+              message: [
+                {
+                  type: "text",
+                  text: messages.replaceAll("\n", " ").replaceAll("*", "")
+                }
+              ],
+              userId: this.userid,
+              model: 'open-gpt-4.1',
+              file_ids: [],
+              sound_url: '',
+              temperature: 0.2,
+              top_p: 1,
+              max_completion_tokens: 100000,
+              // uid: _uid,
+              session_name: uuidv4(),
+            // assistant_id: "6063369f-289a-11ef-8bf4-12e77c4cb76b",
+            // message: [
+            //   {
+            //     type: "text",
+            //     text: messages.replaceAll("\n", " ").replaceAll("*", "")
+            //   }
+            // ],
+            // session_name: uuidv4(),
+            // userId: this.userid,
+            // file_ids: '',
+            // model: "gpt-4o-2024-11-20"
           };
           this.ajax
-            .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", params)
+            .post("https://appapi.cocorobo.cn/api/agentchats/ai_agent_chat", params)
             .then(response => {
-                 let data = response.data.FunctionResponse;
+                 let data = response.data;
                   // console.log("data", data.message);
                   // console.log('kkkk',JSON.parse(data.message));
 
@@ -2802,22 +2818,38 @@ ${JSON.stringify(forAllList)}
 
 
           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: '',
-            model: "gpt-4o-2024-11-20"
+              id: '978252d7-a26e-4e70-8d75-3336497abac1',
+              message: [
+                {
+                  type: "text",
+                  text: messages.replaceAll("\n", " ").replaceAll("*", "")
+                }
+              ],
+              userId: this.userid,
+              model: 'open-gpt-4.1',
+              file_ids: [],
+              sound_url: '',
+              temperature: 0.2,
+              top_p: 1,
+              max_completion_tokens: 100000,
+              // uid: _uid,
+              session_name: uuidv4(),
+            // assistant_id: "6063369f-289a-11ef-8bf4-12e77c4cb76b",
+            // message: [
+            //   {
+            //     type: "text",
+            //     text: messages.replaceAll("\n", " ").replaceAll("*", "")
+            //   }
+            // ],
+            // session_name: uuidv4(),
+            // userId: this.userid,
+            // file_ids: '',
+            // model: "gpt-4o-2024-11-20"
           };
           this.ajax
-            .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", params)
+            .post("https://appapi.cocorobo.cn/api/agentchats/ai_agent_chat", params)
             .then(response => {
-                 let data = response.data.FunctionResponse;
+                 let data = response.data;
                   this.scoList = JSON.parse(data.message)
                   this.aiscoLoading = false
 
@@ -3121,7 +3153,8 @@ ${JSON.stringify(forAllList)}
           this.org +
           "&type=2" +
           "&role=" +
-          this.role
+          this.role+
+          "&back=1"
       );
     },
     editTest(row){
@@ -3138,7 +3171,7 @@ ${JSON.stringify(forAllList)}
           this.oid +
           "&org=" +
           this.org +
-          "&type=3" +
+          "&type=2" +
           "&role=" +
           this.role +
           "&back=1"
@@ -3216,6 +3249,11 @@ ${JSON.stringify(forAllList)}
 
           let _worksData = res.data[1];
 
+          console.log("_worksData",_worksData)
+
+          if(this.peopleId){
+            _worksData = _worksData.filter(i=>i.userid === this.peopleId)
+          }
           // if(this.timeLimit){
           //   console.log("timeLimit", this.timeLimit)
           //   // 2024-12-31T16:00:00.000Z,2025-12-31T16:00:00.000Z
@@ -3650,22 +3688,21 @@ ${JSON.stringify(forAllList)}
           if(this.timeLimit){
             if(this.works[0]){
               let _data = JSON.parse(this.works[0].courseJson)
-              let _flag = false;
+              console.log("this.works",this.works)
               _data.forEach((item,index)=>{
-                if(item.type == 8 && item.json.title == "获奖时间"){
-                  _flag = true
+                if(item.type == 8){
                   let time = this.timeLimit.split(",");
                   this.tableDatePicker[index] = [new Date(time[0]),new Date(time[1])]
                 }
               })
 
-              if(!_flag){
-                let time = this.timeLimit.split(",");
-                this.submissionTimePicker =  [new Date(time[0]),new Date(time[1])];
-                this.submissionTimePickerChange()
-              }else{
+              // if(!_flag){
+              //   let time = this.timeLimit.split(",");
+              //   this.submissionTimePicker =  [new Date(time[0]),new Date(time[1])];
+              //   this.submissionTimePickerChange()
+              // }else{
                 this.tableDataPickerChange();
-              }
+              // }
               this.$forceUpdate();
             }
           }
@@ -4893,7 +4930,8 @@ ${JSON.stringify(item.array)}
 
       this.ajax.post(this.$store.state.api+"update_testCourseWorks_typeById",params).then(res=>{
         if(res.data==1){
-          this.tableWorksArray.find(i=>i.id==row.id).type = "4";
+          this.getData();
+          // this.tableWorksArray = this.tableWorksArray.filter(i=>i.id!==row.id);
           this.$message.success("表单退回成功");
         }
       }).catch(e=>{

+ 128 - 3
src/components/pages/test/examine/conpoments/personPage.vue

@@ -161,6 +161,11 @@
                   >保存</el-button
                 >
               </div>
+              <div style="margin-right:10px">
+                <el-button type="primary" size="mini" @click="exportExlec"
+                  >导出</el-button
+                >
+              </div>
             </div>
           </div>
           <div
@@ -229,7 +234,7 @@
                         <div v-else style="padding-top: 10px;">
                           <!-- {{ reverseString(k.testid.test) }} -->
                           <div
-                            v-for="(item2, index) in k.testid.test"
+                            v-for="(item2) in k.testid.test"
                             :key="item2.courseId"
                             class="orgData"
                           >
@@ -536,6 +541,124 @@ export default {
     this.getTeaList();
   },
   methods: {
+  exportExlec(){
+    let headers = [
+      ['一级指标', '二级指标', '评价方法', '分值', '自评', '自评概述', '认定', '认定概述']
+    ];
+     var XLSX = require("xlsx");
+     let data = [
+      ...headers,
+      ...this.PageBaseData.flatMap(parent => 
+        parent.children.map(child => [
+          parent.name, // 一级指标
+          child.name,  // 二级指标
+          child.evaMethod,   // 评分方法
+          child.score,   // 分值
+          child.sco1,   // 自评
+          child.selfSummary,   // 自评概述
+          child.sco2,   // 认定
+          child.cogSum   // 认定概述
+
+        ]))
+     ]
+    const wb = XLSX.utils.book_new(); //创建一个新的工作簿对象
+    // 创建一个Worksheet对象
+    let ws = XLSX.utils.aoa_to_sheet(data);
+    
+
+
+
+//  定义通用样式(包含居中)
+const commonStyle = {
+  alignment: {
+    horizontal: "center",
+    vertical: "center"
+  },
+  font: {
+    sz: 12
+  }
+};
+
+// 定义表头特殊样式
+const headerStyle = {
+  ...commonStyle,
+  fill: { fgColor: { rgb: "FFFF00" } },
+  font: { ...commonStyle.font, bold: true, sz: 14 }
+};
+
+// 应用样式到所有单元格
+for (let r = 0; r < data.length; ++r) {
+  for (let c = 0; c < data[r].length; ++c) {
+    const cellRef = XLSX.utils.encode_cell({ r, c });
+    ws[cellRef] = ws[cellRef] || {};
+    ws[cellRef].s = r === 0 ? headerStyle : commonStyle;
+  }
+}
+
+// 设置列宽
+ws['!cols'] = [
+    { wch: 20 }, // 一级指标
+    { wch: 20 }, // 二级指标
+    { wch: 30 }, // 评价方法
+    { wch: 10 }, // 分值
+    { wch: 10 }, // 自评
+    { wch: 30 }, // 自评概述
+    { wch: 10 }, // 认定
+    { wch: 30 }  // 认定概述
+];
+
+// 设置行高
+ws['!rows'] = [
+    { hpx: 30 }, // 表头行
+    { hpx: 25 }, // 其他行的默认高度
+    // 根据需要继续添加行高设置
+];
+    console.log('kk',data);
+    // 合并单元格
+  ws['!merges'] = [];
+
+
+  // 记录合并单元格的逻辑
+  let startRow = 1; // 数据开始行
+  let previousParentName = null;
+  let count = 0; // 计数连续相同的一级指标行
+
+  for (let index = 1; index < data.length; index++) {
+      const currentParentName = data[index][0]; // 当前行的一级指标
+
+      if (currentParentName === previousParentName) {
+          count++; // 继续计数
+      } else {
+          if (count > 0) { // 如果有连续的相同项
+              ws['!merges'].push({
+                  s: { r: startRow, c: 0 },
+                  e: { r: startRow + count, c: 0 }
+              });
+          }
+          // 更新开始行和计数
+          startRow = index; // 更新为当前行的开始行
+          count = 0; // 重置计数
+      }
+
+      previousParentName = currentParentName; // 更新前一个一级指标
+  }
+
+      // 检查最后一组
+      if (count > 0) {
+          ws['!merges'].push({
+              s: { r: startRow, c: 0 },
+              e: { r: startRow + count, c: 0 }
+          });
+      }
+
+
+      XLSX.utils.book_append_sheet(wb, ws, "sheet1"); //把sheet添加到workbook里,第三个参数是sheet名
+      XLSX.writeFile(wb, "教师发展.xlsx");
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
+    },
     // 禁用滚轮事件
     handleWheel(event) {
       event.preventDefault();
@@ -753,9 +876,11 @@ export default {
     remindExamine() {
       this.remDig = true;
     },
+  
     // 下载excel
     getExcel() {
       var res = this.tableData;
+      
       // console.log('导出数据',res);
       //如果value的json字段的key值和想要的headers值不一致时,可做如下更改
       //将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值
@@ -890,9 +1015,9 @@ export default {
 
       if(this.timeSortList){
         let timeValue = this.timeSortList.time
-        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${cid}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.digUserid}&timeLimit=${timeValue}&review=1`;
+        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${cid}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.digUserid}&timeLimit=${timeValue}&review=1`;
       }else{
-      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${cid}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.digUserid}&review=1`;
+      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${cid}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.digUserid}&review=1`;
 
       }
       // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;

+ 7 - 2
src/components/pages/test/examine/index.vue

@@ -1,5 +1,7 @@
 <template>
-  <div class="testExamine">
+  <div class="testExamine" :style="{padding: gotype ? '0 90px' : '10px'}">
+    <backPage style="padding: 40px 0 0;" v-if="gotype" tit="考核审核"></backPage>
+
     <div class="testTit">
       <div class="teaLis">
         <div
@@ -90,14 +92,17 @@
 <script>
 import personPage from "./conpoments/personPage.vue";
 import targetPage from "./conpoments/targetPage";
+import backPage from "../../liyuan/components/backPage.vue";
 
 export default {
   components: {
     personPage,
-    targetPage
+    targetPage,
+    backPage
   },
   data() {
     return {
+      gotype:sessionStorage.getItem('gotype'),
       aArray: [],
       bArray: [],
       timeListA:[],

+ 23 - 2
src/components/pages/testPerson/examine/index.vue

@@ -537,9 +537,24 @@ export default {
           testId: val.join(",")
         }
       ];
+      let _url = "selectExamineTestName"
+      if(this.testExamineBaseList[0].value){
+        const timeValue = JSON.parse(this.testExamineBaseList[0].value).time;
+        params[0].startTime = timeValue[0];
+        params[0].endTime = timeValue[1];
+        _url = `selectExamineTestNameFilterTime`
+      }
+      // console.log("this.timeSortList",timeSortList)
+      // if(timeSortList && timeSortList.time && timeSortList.time.length>0){
+      //   const timeValue = timeSortList.time;
+      //   params[0].startTime = timeValue[0];
+      //   params[0].endTime = timeValue[1];
+      //   _fnStr = `selectExamineTestNameFilterTime`
+      // }
+
       return new Promise(resolve => {
         this.ajax
-          .post(this.$store.state.api + "selectExamineTestName", params)
+          .post(this.$store.state.api + _url, params)
           .then(res => {
             resolve(res.data[0]);
           })
@@ -551,7 +566,13 @@ export default {
     // 查看数据来源
     lookPrize(val) {
       // return;
-      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}`;
+
+      if(this.testExamineBaseList[0].value){
+        const timeValue = JSON.parse(this.testExamineBaseList[0].value).time;
+        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}&timeLimit=${timeValue}`;
+      }else{
+        this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?userid=${this.userid}&cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}&tType=${this.pType}&examineId=${this.testExamineBaseList[0].id}`;
+      }
       // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;
       this.diaIframe = true;
     },

+ 66 - 24
src/components/pages/testStudent/view/preview.vue

@@ -5,35 +5,35 @@
         <div class="courseTop2" v-if="gotype">
           <div class="r_pub_button_retrun"  @click="retrunCourse">返回</div>
         </div>
-
+          
         <div class="courseTop" v-else :style="`justify-content: ${isN==1?'flex-end':'space-between'};`">
           <div class="stepsNav" v-if="isN !=1 && !gotype">
             <el-breadcrumb v-if="!gotype" separator-class="el-icon-arrow-right">
               <el-breadcrumb-item :to="{
-                  path:
-                    '/testPerson?userid=' +
-                    userid +
-                    '&oid=' +
-                    oid +
-                    '&org=' +
-                    org +
-                    '&role=' +
-                    role,
+    path:
+      '/testPerson?userid=' +
+      userid +
+      '&oid=' +
+      oid +
+      '&org=' +
+      org +
+      '&role=' +
+      role,
                 }" v-if="type == 3 && back!=1">个人中心</el-breadcrumb-item>
-                            <el-breadcrumb-item :to="{
-                  path:
-                    '/testStudent?userid=' +
-                    userid +
-                    '&oid=' +
-                    oid +
-                    '&org=' +
-                    org +
-                    '&role=' +
-                    role +
-                    '&isN=' +
-                    isN +
-                    '&tcid=' +
-                    tcid ,
+              <el-breadcrumb-item :to="{
+    path:
+      '/testStudent?userid=' +
+      userid +
+      '&oid=' +
+      oid +
+      '&org=' +
+      org +
+      '&role=' +
+      role +
+      '&isN=' +
+      isN +
+      '&tcid=' +
+      tcid ,
                 }" v-else v-show="back!=1">表单中心</el-breadcrumb-item>
               <el-breadcrumb-item>
                 <span style="color: rgb(15, 126, 255)">{{ title }}</span>
@@ -592,6 +592,7 @@ export default {
       this.ajax
         .post(this.$store.state.api + ((this.tid) ? "addTestWorks2" : "addTestWorks"), params)
         .then((res) => {
+          if (this.tid) this.delTestWork()
           this.$message.success('提交成功')
           if(this.back==1){
             return this.$router.back()
@@ -653,6 +654,8 @@ export default {
       this.ajax
         .post(this.$store.state.api + ((this.tid) ? "addTestWorks2" : "addTestWorks"), params)
         .then((res) => {
+          if (this.tid) this.delTestWork()
+
           this.$message.success('保存成功')
           setTimeout(() => {
             this.isloading = false
@@ -682,6 +685,45 @@ export default {
         return false
       }
     },
+    delTestWork(){
+      let params = {
+        tid: this.cid
+      };
+      console.log('params',params);
+      
+      this.ajax
+        .get(this.$store.state.api + "getTestAiSco", params)
+        .then((res) => {
+          let data = res.data[0]
+          if (!data.length) return
+          this.uploadSCo(JSON.parse(data[0].json),data[0].cueWord)
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+     // 上传评分
+    uploadSCo(val,cueWord){
+      // console.log('uploadSCo',val);
+      // 提交后删除评分
+      let scoArr = val.filter(e=> e.id != this.tid)
+
+      let params = [{
+        tid:this.cid,
+        uid:this.userid,
+        json:JSON.stringify(scoArr),
+        cw: cueWord
+      }]
+      console.log('params',params);
+       this.ajax
+        .post(this.$store.state.api + "addtestAiSco", params)
+        .then((res) => {
+          // console.log(res);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
     deleteTest(tid) {
       let _this = this;
       let params = [

+ 8 - 0
src/router/index.js

@@ -147,6 +147,7 @@ import knowledge from '@/components/pages/knowledge/index'
 import sassPlatform from '@/components/pages/sassPlatform/index'
 import classroomObservationTest from '@/components/pages/classroomObservation/test.vue'
 import CourseCon from '@/components/pages/liyuan/CourseCon'
+import testReview from "@/components/pages/test/examine";
 import aiOffice from '@/components/pages/liyuan/aiOffice'
 import schoolSafe from '@/components/pages/liyuan/schoolSafe'
 import lyStudentEva from '@/components/pages/liyuan/studentEva'
@@ -1283,6 +1284,13 @@ export default new Router({
       keepAlive: true,
       requireAuth: ""//不需要鉴权
     }
+  },{
+      path: "/testReview",
+      name: "testReview",
+      component: testReview,
+      meta: {
+        requireAuth: "" // 不需要鉴权
+      }
   }, {
     path: "/aiOffice",
     name: "aiOffice",

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio