SanHQin 2 weeks ago
parent
commit
09ac63264d

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.9d5d7fb5d2e685cebf0a768d4e5ec87c.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.c046dd5e92c8da101466.js></script><script type=text/javascript src=./static/js/app.b2c7f42028502dc67c39.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.893abba0249baf0dadfbd26f854777f5.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.c046dd5e92c8da101466.js></script><script type=text/javascript src=./static/js/app.d4daf5812c62ae4bf98d.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.893abba0249baf0dadfbd26f854777f5.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.893abba0249baf0dadfbd26f854777f5.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.d4daf5812c62ae4bf98d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.d4daf5812c62ae4bf98d.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/manifest.161e82026ac2ae03ab6f.js.map


+ 1 - 1
src/components/pages/appStore/views/appManagement.vue

@@ -1354,7 +1354,7 @@ export default {
     },
     delApp(item) {
       this.$confirm(
-        `确定要取消发布《${item.name}》这个应用吗`,
+        `确定要取消发布《${item.name}》这个应用吗?`,
         `确定取消发布应用`,
         {
           confirmButtonText: "确定",

+ 87 - 59
src/components/pages/sassPlatform/index.vue

@@ -11,15 +11,16 @@
     </div>
     <div class="sp_bottom">
       <div class="sp_b_left">
-        <div class="sp_b_l_form" v-for="(item,index) in formTypeList" :key="item.index">
+        <div class="sp_b_l_form" v-for="(item,index) in navList" :key="item.navIndex">
           <span @click="item.open = !item.open">{{ item.name }}<svg :style="`transform: rotate(${item.open?'180':'0'}deg);`" t="1739262423649" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7079" width="200" height="200"><path d="M52.335 261.072c-31.269 30.397-31.269 79.722 0 110.194l403.212 391.718c31.325 30.382 82.114 30.382 113.377 0l403.197-391.718c31.325-30.466 31.325-79.793 0-110.194-31.28-30.449-82.058-30.449-113.39 0l-346.497 336.64-346.457-336.64c-31.325-30.448-82.105-30.448-113.446 0l0 0z" p-id="7080"></path></svg></span>
           <div v-show="item.open" v-if="item.children.length>0">
-            <span v-for="(item2,index2) in item.children" :key="item2.index" @click="formTypeTag=item2.index" :class="{formActive:item2.index==formTypeTag}">{{ item2.name }}</span>
+            <span v-for="(item2,index2) in item.children" :key="item2.navIndex" @click="changeNavIndex(item2.navIndex,item2)" :class="{formActive:item2.navIndex==navIndex}">{{ item2.name }}</span>
           </div>
         </div>
       </div>
       <div class="sp_b_right">
-        <tableView/>
+        <tableView v-if="navType == 'formManage' && navShowCardObj.id" :typeId="navShowCardObj.id" :typeList="navShowCardObj.typeList"/>
+        <examine v-if="navType == 'annualAssessment'"/>
       </div>
     </div>
   </div>
@@ -27,69 +28,89 @@
 
 <script>
 import tableView from './view/tableView.vue';
+import examine from './view/examine/index'
 export default {
   components:{
-    tableView
+    tableView,
+    examine
   },
   data(){
     return{
       tagIndex:0,
-      formTypeList:[
-        {
-          index:"0",
-          name:"教师管理",
-          open:false,
-          children:[{
-            index:'0-0',
-            type:"form",
-            name:"表单管理",
-          },{
-            index:'0-1',
-            type:"card",
-            name:"年度考核",
-          },{
-            index:'0-2',
-            type:"card",
-            name:"考核数据可视化",
-          }]
-        },
-        {
-          index:"1",
-          name:"校园安全",
-          open:false,
-          children:[{
-            index:'1-0',
-            type:"form",
-            name:"表单管理",
-          }]
-        },
-        {
-          index:"2",
-          name:"成绩管理",
-          open:false,
-          children:[{
-            index:'2-0',
-            type:"form",
-            name:"表单管理",
-          }]
-        },
-        {
-          index:"3",
-          name:"后勤管理",
-          open:false,
-          children:[{
-            index:'3-0',
-            type:"form",
-            name:"表单管理",
-          }]
-        },
-      ],
-      formTypeTag:'',
+      navList:[ ],
+      navIndex:'0-0',
+      navType:"",
+    }
+  },
+  computed:{
+    navShowCardObj(){
+      let _result = {
+        id:"",
+        typeList:[],
+      }
+
+      if(this.navType == 'formManage'){
+        let _indexList = this.navIndex.split("-");
+        let _data = this.navList[parseInt(_indexList[0])];
+        _result.id = _data.id;
+        _result.typeList = _data.typeList;
+      }
+
+      return _result;
     }
   },
   methods: {
-
+    getNavType() {
+      return new Promise((resolve)=>{
+        let params = {
+        oid: "",//this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestType", params)
+        .then(res => {
+          let _data = res.data[0];
+          let _type1 = _data.filter(i => i.pid == "");
+          _type1.forEach((i,index) => {
+            let _typeList = [];
+            _typeList = _data.filter(i2 => i2.pid == i.id);
+
+            let _children = [{name:"表单管理",type:"formManage",typeId:i.id,navIndex:`${index}-0`}]
+            i.open = false;
+
+            if(i.id=='e18d88b3-e828-11ef-b508-005056924926'){
+              _children.push(...[
+                {name:"年度考核",type:"annualAssessment",navIndex:`${index}-1`},
+                {name:"考核数据可视化",type:"evaluationDataVisualization",navIndex:`${index}-2`},
+                ]
+              )
+              i.open = true;
+            }
+            i.children = _children;
+            i.typeList = _typeList;
+            i.navIndex = `${index}`
+          });
+
+          this.navList = _type1;
+          resolve()
+        })
+        .catch(err => {
+          console.log(err);
+        });
+      })
+    },
+    changeNavIndex(newIndex,item){
+      this.navIndex = newIndex;
+      this.navType = item.type
+    }
   },
+  mounted(){
+    this.getNavType().then(_=>{
+      if(this.navList.length>0){
+        let _data = this.navList[0].children[0];
+        this.changeNavIndex(_data.navIndex,_data)
+      }
+    });
+  }
 }
 </script>
 
@@ -104,7 +125,7 @@ export default {
 
 .sp_header{
   width: 100%;
-  height: 100px;
+  height: 70px;
   display: flex;
   align-items: center;
   justify-content: center;
@@ -148,7 +169,7 @@ export default {
 
 .sp_bottom{
   width: 100%;
-  height: calc(100% - 100px);
+  height: calc(100% - 70px);
   display: flex;
 }
 
@@ -177,12 +198,17 @@ export default {
   padding: 0 30px;
   cursor: pointer;
   transition: .3s;
+  font-size: 18px;
 }
 
 .sp_b_l_form>span:hover{
   color: #1684FC;
 }
 
+.sp_b_l_form>span:hover>svg{
+  fill: #1684FC;
+}
+
 .sp_b_l_form>span>svg{
   width: 15px;
   height: 15px;
@@ -202,9 +228,10 @@ export default {
   align-items: center;
   justify-content: space-between;
   box-sizing: border-box;
-  padding: 0 40px;
+  padding: 0 45px;
   cursor: pointer;
   transition: .3s;
+  font-size: 18px;
 }
 
 .sp_b_l_form>div>span:hover{
@@ -218,6 +245,7 @@ export default {
 .sp_b_right{
   flex: 1;
   height: 100%;
+  overflow: auto;
 }
 
 

+ 1343 - 0
src/components/pages/sassPlatform/view/examine/conpoments/personPage.vue

@@ -0,0 +1,1343 @@
+<template>
+  <div>
+    <div class="personPage">
+      <div
+        style="width: 100%;display: flex;justify-content: flex-end;align-items: center;"
+      >
+        <!-- <el-select v-model="teas" multiple placeholder="请选择">
+          <el-option
+            v-for="item in TeaList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          >
+          </el-option>
+        </el-select> -->
+        <!-- <div style="margin-left: 10px;">
+          <el-button type="primary" @click="remindExamine" size="mini"
+            >提醒</el-button
+          >
+        </div> -->
+      </div>
+      <el-table
+        :data="tableData"
+        class="scoTab"
+        v-loading="tabLoading"
+        style="width: 100%"
+      >
+        <el-table-column type="index" align="center" label="序号" width="180">
+        </el-table-column>
+        <el-table-column prop="username" align="center" label="教师姓名">
+        </el-table-column>
+        <el-table-column
+          prop="tea"
+          show-overflow-tooltip
+          :filters="TeachingOptions"
+          :filter-method="filterTea"
+          align="center"
+          label="教研室"
+          width="180"
+        >
+        </el-table-column>
+        <el-table-column
+          :filters="[
+            { text: '已完成', value: '已完成' },
+            { text: '未完成', value: '未完成' }
+          ]"
+          :filter-method="filterExa"
+          :filter-multiple="false"
+          prop="state"
+          align="center"
+          label="考核进度"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.step == scope.row.allStep">√</div>
+            <div v-else>{{ scope.row.step }}/{{ scope.row.allStep }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="evaSca"
+          :sortable="true"
+          :sort-method="sortEvaMethod"
+          align="center"
+          label="自评总分"
+        >
+        </el-table-column>
+        <el-table-column align="center" label="一级指标评分" >
+          <template slot-scope="scope">
+            <div class= "scoreBox" v-for="item, index in scope.row.json" :key="index">
+              <el-tooltip :content="item.name" placement="top" effect="dark">
+                <span>{{ item.name }}</span>
+              </el-tooltip>
+               :<span>{{ scoreChildren(item.children) }}</span>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="cogSco"
+          :sortable="true"
+          :sort-method="sortCogMethod"
+          align="center"
+          label="考核总分"
+        >
+        </el-table-column>
+        <el-table-column align="center" label="操作">
+          <template slot-scope="scope">
+            <div style="display: flex;justify-content: center;">
+              <div class="TabBtn" @click="lookScore(scope.row)">评分</div>
+              <div class="TabBtn" @click="withdraw(scope.row.id)">退回</div>
+              <div class="TabBtn" @click="recordBtn(scope.row.id)">记录</div>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <!-- 点击评分 -->
+    <el-dialog
+      title=""
+      :visible.sync="diaSco"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div v-loading="digLoading" class="testPersonExamine">
+        <div class="testTit">
+          <div class="teaLis">
+            <div
+              class="teal"
+              @click="cutPage(2)"
+              :class="[digType == 2 ? 'Tbor' : '']"
+            >
+              专任教师
+            </div>
+            <div
+              class="teal"
+              @click="cutPage(1)"
+              :class="[digType == 1 ? 'Tbor' : '']"
+            >
+              班主任考核
+            </div>
+          </div>
+        </div>
+        <div class="digTop">
+          <div
+            style="width: 230px;display: flex;justify-content: space-between;align-items: center;margin-left: 15px;"
+          >
+            <div class="digUsernameCss">{{ digUsername }}</div>
+            <div
+              v-if="tableData.length > 0"
+              style="display: flex;justify-content: space-between;width: 150px;"
+            >
+              <div>
+                <el-button type="primary" size="mini" @click="upTea"
+                  >上一个</el-button
+                >
+              </div>
+              <div>
+                <el-button type="primary" size="mini" @click="nextTea"
+                  >下一个</el-button
+                >
+              </div>
+            </div>
+          </div>
+          <div
+            style="width: 650px;display: flex;justify-content: space-between;margin-left: 6px;"
+          >
+            <div style="display: flex;">
+              <span>教研室:</span
+              ><el-tooltip
+                class="item"
+                effect="dark"
+                :content="disTeaClass"
+                placement="top"
+              >
+                <div
+                  style="width: 100px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"
+                >
+                  {{ disTeaClass }}
+                </div>
+              </el-tooltip>
+            </div>
+            <div>审核进度:{{ computedStep }}/{{ twoTarget }}</div>
+            <div>自评分数:{{ DigSelfSco }}</div>
+            <div>考核分数:{{ computedSco }}</div>
+          </div>
+        </div>
+        <div style="height:100%;overflow: auto;padding-bottom: 80px;">
+          <div class="sBox_table">
+            <div class="table_title">
+              <div style="width: 150px;">一级指标</div>
+              <div style="width: 160px;">二级指标</div>
+              <div style="width: 160px;">评价方法</div>
+              <div style="width: 110px;">分值</div>
+              <div style="width: 110px;">自评</div>
+              <div style="flex: 1;">自评概述</div>
+              <div style="width: 250px;">数据来源</div>
+              <div style="width: 110px;">认定</div>
+              <div style="flex: 1;">认定概述</div>
+            </div>
+            <div
+              style="height: 100%;overflow: auto;overflow-x: hidden;border-left: 1px #ccc solid;"
+            >
+              <div
+                class="table_Content"
+                v-for="item in PageBaseData"
+                :key="item.id"
+              >
+                <div class="twoCol">
+                  <div class="ColTit">{{ item.name }}</div>
+                  <div class="ColCon">
+                    <div class="twoCon" v-for="k in item.children" :key="k.id">
+                      <div>{{ k.name }}</div>
+                      <div style="padding: 10px;box-sizing: border-box;">
+                        {{ k.evaMethod }}
+                      </div>
+                      <div>{{ k.score }}</div>
+                      <div>
+                        {{ k.sco1 }}
+                      </div>
+                      <div>
+                        <div class="tArea">
+                          {{ k.selfSummary }}
+                        </div>
+                      </div>
+                      <div>
+                        <div v-if="!k.testid.test.length">/</div>
+                        <div v-else style="padding-top: 10px;">
+                          <!-- {{ reverseString(k.testid.test) }} -->
+                          <div
+                            v-for="(item2, index) in k.testid.test"
+                            :key="item2.courseId"
+                            class="orgData"
+                          >
+                            <div @click="lookUserPrize(item2.courseId)">
+                              {{ item2.title }}:{{ item2.num }}份
+                            </div>
+                          </div>
+                        </div>
+                      </div>
+                      <div style="display: flex;justify-content: center;">
+                        <div v-if="tableData.length > 0" class="ScoreStep">
+                          <el-input
+                            :style="{
+                              color: k.sco1 == k.sco2 ? '#000' : 'red'
+                            }"
+                            @blur="
+                              saveTab(
+                                k.id,
+                                k.sco2 > k.score
+                                  ? (k.sco2 = k.score)
+                                  : '' || k.sco2 < 0
+                                  ? (k.sco2 = '')
+                                  : ''
+                              )
+                            "
+                            v-model.number="k.sco2"
+                            v-stopMousewheel
+                          ></el-input>
+                        </div>
+                      </div>
+                      <div style="display: flex;justify-content: center;">
+                        <textarea
+                          v-if="tableData.length > 0"
+                          @blur="saveTab(k.id)"
+                          v-model.trim="k.cogSum"
+                        />
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- 查看数据来源 -->
+    <el-dialog
+      title=""
+      :visible.sync="diaIframe"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose2"
+      class="dialog_diy"
+    >
+      <div style="height: 100%;">
+        <iframe
+          ref="viframe"
+          style="width: 100%; height: 99%; border: none"
+          :src="ifmUrl"
+        ></iframe>
+      </div>
+    </el-dialog>
+
+    <!-- 提醒弹框 -->
+    <shareBox
+      :remDig.sync="remDig"
+      :pType="pType"
+      :TeaList="TeaList"
+    ></shareBox>
+
+    <el-dialog
+      title="评分记录"
+      :visible.sync="recordVisible"
+      class="recordDig"
+      :before-close="recordHandleClose"
+    >
+      <div>
+        <el-table border height="500px" :data="RecordList" style="width: 100%">
+          <el-table-column align="center" type="index" label="序号" width="80">
+          </el-table-column>
+          <el-table-column
+            align="center"
+            show-overflow-tooltip
+            prop="username"
+            label="教师姓名"
+          >
+          </el-table-column>
+          <el-table-column align="center" prop="dateTime" label="评分时间">
+          </el-table-column>
+        </el-table>
+      </div>
+    </el-dialog>
+
+    <!-- <el-dialog
+      title="提醒"
+      :visible.sync="remDig"
+      :append-to-body="true"
+      width="600"
+      :before-close="handleClose3"
+      class="dialog_remDig"
+    >
+      <div v-loading="digLoading" style="height: 100%;padding: 15px;">
+        <div class="remFlex" style="align-items: center;">
+          <div class="remFlexTit">填写范围:</div>
+          <el-select v-model="teas" multiple placeholder="请选择">
+            <el-option
+              v-for="item in TeaList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+              @change="remindExamine"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="remFlex">
+          <div class="remFlexTit">需提交人数:</div>
+          <div>{{ remindNum }}</div>
+        </div>
+        <div class="remFlex">
+          <div class="remFlexTit">未完成人数:</div>
+          <div>{{ remindList.length }}</div>
+        </div>
+        <div class="remFlex">
+          <div class="remFlexTit">需提交人数:</div>
+          <div class="remFlex" style="flex-wrap: wrap;">
+            <div
+              v-for="(item, index) in remindList"
+              :key="index"
+              style="margin-right: 2px;"
+            >
+              {{ item }},
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-dialog> -->
+  </div>
+</template>
+
+<script>
+import shareBox from "./shareBox/index";
+export default {
+  directives: {
+    stopMousewheel: {
+      inserted: function(el) {
+        const ele = el.tagName === 'INPUT' ? el : el.querySelector('input');
+        ele.addEventListener("mousewheel", () => {
+          ele.blur();
+        });
+      }
+    }
+  },
+  props: {
+    pType: {
+      //2专任教师 1班主任
+      type: Number,
+      default: 0
+    },
+    teacherName: {
+      type: String,
+      default: ""
+    }
+  },
+  components: {
+    shareBox
+  },
+  data() {
+    return {
+      digType: 2,
+      diaSco: false,
+      diaIframe: false,
+      recordVisible: false,
+      RecordList: [],
+      ifmUrl: false,
+      PageBaseData: [],
+      digUserid: "", //用户id
+      digTid: "", //表单id
+      cutTeaNum: 0, //第几位教师
+      disTeaClass: "", //教研室
+      digLoading: false,
+      DigSelfSco: 0,
+      digUsername: "",
+      twoTarget: 0,
+      computedScoData: 0,
+      computedStepData: 0,
+      computedCogSCoData: 0,
+      TeaList: [],
+      tabLoading: false,
+      userid: this.$route.query.userid, //用户id
+      oid: this.$route.query.oid, //学校id
+      org: this.$route.query.org, //组织id
+      tableData: [],
+      TeachingOptions: [],
+      PageBaseDataTwo: [],
+      remDig: false
+    };
+  },
+  watch: {
+    pType(newVal, oldVal) {
+      this.getData();
+    },
+    digType(newVal, oldVal) {
+      this.getDataDig();
+    }
+  },
+  computed: {
+    computedSco() {
+      this.computedScoData = 0; // 初始化一个局部变量来存储累加结果
+
+      // 定义一个函数来执行累加操作
+      const accumulateSco = () => {
+        if (this.PageBaseData) {
+          // 确保 this.PageBaseData 存在
+          this.PageBaseData.forEach(e => {
+            // 假设 e.children 是一个可以迭代的数组或类似结构
+            e.children.forEach(i => {
+              if (!!i.sco2) {
+                this.computedScoData += i.sco2 * 1;
+              }
+            });
+          });
+          this.computedScoData = this.computedScoData.toFixed(2);
+        }
+        return this.computedScoData; // 返回累加结果
+      };
+
+      // 立即调用函数并返回结果
+      return accumulateSco();
+    },
+
+    computedStep() {
+      this.computedStepData = 0; // 初始化一个局部变量来存储累加结果
+
+      // 定义一个函数来执行累加操作
+      const accumulateSco2 = () => {
+        if (this.PageBaseData) {
+          this.PageBaseData.forEach(e => {
+            e.children.forEach(i => {
+              if (!!i.sco2) {
+                this.computedStepData++;
+              }
+            });
+          });
+        }
+        return this.computedStepData; // 返回累加结果
+      };
+
+      // 立即调用函数并返回结果
+      return accumulateSco2();
+    },
+
+    scoreChildren() {
+      return function(children){
+        let score = 0;
+        children.forEach(item => {
+          if (item.sco2 && parseFloat(item.sco2) > 0) {
+            score += parseFloat(item.sco2);
+          }
+        });
+        return score;
+      }
+    },
+  },
+  mounted() {
+    this.getData();
+    this.getTeaList();
+  },
+  methods: {
+    // 禁用滚轮事件
+    handleWheel(event) {
+      event.preventDefault();
+    },
+    // 获取页面数据
+    getData() {
+      this.tabLoading = true;
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        type: this.pType,
+        tname: this.teacherName
+      };
+      // console.log(params);
+      this.ajax
+        .get(this.$store.state.api + "selectTestExaminePersonData", params)
+        .then(res => {
+          let data = res.data[0];
+
+          data.forEach(e => {
+            e.json = JSON.parse(e.json);
+          });
+
+          data.forEach(e => {
+            e.evaSca = 0;
+            e.cogSco = 0;
+            e.step = 0;
+            e.allStep = 0;
+
+            e.json.forEach(i => {
+              i.children.forEach(k => {
+                e.evaSca = e.evaSca + k.sco1 * 1;
+                e.cogSco = e.cogSco + k.sco2 * 1;
+                e.allStep++;
+                if (!!k.sco2 * 1) {
+                  e.step++;
+                }
+              });
+            });
+          });
+
+          data.forEach(e => {
+            if (e.step == e.allStep) {
+              e.state = "已完成";
+            } else {
+              e.state = "未完成";
+            }
+            if (!e.tea) {
+              e.tea = "";
+            }
+            e.evaSca = e.evaSca.toFixed(2);
+            e.cogSco = e.cogSco.toFixed(2);
+          });
+          this.tableData = data;
+          this.tabLoading = false;
+        })
+        .catch(error => {
+          this.tabLoading = false;
+          console.log(error);
+        });
+    },
+    // 点击评分
+    lookScore(val) {
+      this.digLoading = true;
+      // console.log("valvalvalval", val);
+      // 重置自评分,二级指标个数
+      this.DigSelfSco = 0;
+      this.twoTarget = 0;
+
+      this.digType = this.pType;
+
+      this.digTid = val.id;
+      this.diaSco = true;
+      this.digUserid = val.userid;
+      this.disTeaClass = val.tea;
+      this.cutPerson();
+      this.getPageBase();
+    },
+    // 获取教研室
+    getTeaList() {
+      let params = {
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTeacherOfficeBySchool", params)
+        .then(res => {
+          // return console.log("this.TeachingOptions", res.data[0]);
+          let data = res.data[0];
+          let dataCopy = [];
+
+          data.forEach(e => {
+            if(e.parentid == '6'){
+              let a = {};
+              a.value = e.name;
+              a.text = e.name;
+              dataCopy.push(a);
+            }
+          });
+          data.forEach(e => {
+            if(e.parentid == '6'){
+              let a = {};
+              a.id = e.id;
+              a.name = e.name;
+              this.TeaList.push(a);
+            }
+          });
+
+          this.TeachingOptions = dataCopy;
+          // console.log("this.TeachingOptions", this.TeachingOptions);
+        })
+        .catch(err => {
+          console.error(err);
+        });
+    },
+    // 撤回
+    withdraw(id) {
+      let params = [
+        {
+          tid: id
+        }
+      ];
+
+      this.$confirm("是否确认退回?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: " info"
+      })
+        .then(() => {
+          this.ajax
+            .post(this.$store.state.api + "updateExamineState", params)
+            .then(res => {
+              this.getData();
+            })
+            .catch(error => {
+              console.log(error);
+            });
+        })
+        .catch(() => {
+          // this.$message({
+          //   type: "info",
+          //   message: "已取消退回"
+          // });
+        });
+    },
+    recordBtn(val) {
+      this.RecordList = [];
+      this.recordVisible = true;
+      this.getRecordData(val);
+    },
+    // 查看记录
+    getRecordData(val) {
+      let params = {
+        tid: val,
+        type: this.pType
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectExamineOperateRecord", params)
+        .then(res => {
+          // console.log(res.data[0]);
+          this.RecordList = res.data[0];
+        })
+        .catch(err => {
+          console.error(err);
+        });
+    },
+    recordHandleClose(done) {
+      done();
+    },
+    // 提醒
+    remindExamine() {
+      this.remDig = true;
+    },
+    // 下载excel
+    getExcel() {
+      var res = this.tableData;
+      // console.log('导出数据',res);
+      //如果value的json字段的key值和想要的headers值不一致时,可做如下更改
+      //将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值
+      var array = [];
+      for (var i = 0; i < res.length; i++) {
+        var _json = {};
+        _json["教师姓名"] = res[i].username;
+        _json["教师账号"] = res[i].eName;
+        _json["所属教研室"] = res[i].tea;
+        _json["考核进度"] = `${res[i].step}/${res[i].allStep}`;
+        _json["自评分数"] = res[i].evaSca;
+        _json["考核分数"] = res[i].cogSco;
+        array.push(_json);
+      }
+
+      var XLSX = require("xlsx");
+      const workbook = XLSX.utils.book_new(); //创建一个新的工作簿对象
+      let ws = XLSX.utils.json_to_sheet(array); //将json对象数组转化成工作表
+      ws["!cols"] = [
+        //设置每一列的宽度
+        { wch: 20 },
+        { wch: 30 },
+        { wch: 30 },
+        { wch: 30 },
+        { wch: 30 },
+        { wch: 30 }
+      ];
+
+      XLSX.utils.book_append_sheet(workbook, ws, "sheet1"); //把sheet添加到workbook里,第三个参数是sheet名
+      XLSX.writeFile(workbook, "教师发展.xlsx");
+      // const wopts = { bookType: "xlsx", bookSST: false, type: "array" };//写入的样式bookType:输出的文件类型,type:输出的数据类型,bookSST: 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
+      // const wbout = XLSX.write(workbook, wopts);// 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该API
+      // FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }), `${title} demo.xlsx`);//保存文件
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
+    },
+    // 按照数字大小排序 方法-
+    sortCogMethod(before, after) {
+      return Number(before.cogSco) - Number(after.cogSco);
+    },
+    sortEvaMethod(before, after) {
+      return Number(before.evaSca) - Number(after.evaSca);
+    },
+    // 教研室筛选
+    filterTea(value, row, column) {
+      // console.log(value, row, column);
+      const property = column["property"];
+      return row[property].includes(value);
+    },
+    // 是否完成筛选
+    filterExa(value, row, column) {
+      // console.log(value, row, column);
+      const property = column["property"];
+      return row[property] == value;
+    },
+    // ----------------
+
+    // 保存修改
+    saveTab(id) {
+      let a = { sco2: 0, cogSum: "" };
+      let b = { sco2: 0, cogSum: "" };
+      this.PageBaseData.forEach(e => {
+        e.children.forEach(i => {
+          if (i.id == id) {
+            a.sco2 = i.sco2;
+            a.cogSum = i.cogSum;
+          }
+        });
+      });
+
+      this.PageBaseDataTwo.forEach(e => {
+        e.children.forEach(i => {
+          if (i.id == id) {
+            b.sco2 = i.sco2;
+            b.cogSum = i.cogSum;
+          }
+        });
+      });
+
+      console.log(a, b, id);
+      if (
+        a.sco2 == b.sco2 &&
+        JSON.stringify(a.cogSum) === JSON.stringify(b.cogSum)
+      )
+        return;
+
+      let PageBaseDataCopy = JSON.parse(JSON.stringify(this.PageBaseData));
+
+      for (const e of PageBaseDataCopy) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = k.testid.test.map(item => item.courseId);
+          }
+        }
+      }
+
+      let params = [
+        {
+          uid: this.userid,
+          tid: this.digTid,
+          typ: this.pType,
+          // json: JSON.stringify(PageBaseDataCopy)
+          json: JSON.stringify(PageBaseDataCopy),
+          rjson: JSON.stringify({
+            rjson: PageBaseDataCopy,
+            text: `按人员,进行修改`
+          })
+        }
+      ];
+      // return console.log(params);
+      this.ajax
+        .post(this.$store.state.api + "updateExamineCogDataCopy", params)
+        .then(res => {
+          // console.log("updateExamineCogDataCopy", res);
+          // this.CopDigSco();
+          this.getDigData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 查看数据来源
+    lookUserPrize(cid) {
+      // return console.log(val);
+      if (this.tableData.length <= 0)
+        return this.$message.error("暂无人员提交");
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}`;
+
+      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}`;
+      // 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;
+    },
+    // 弹框方法切换专任,班主任
+    cutPage(e) {
+      this.digType = e;
+      this.digLoading = true;
+
+      // this.getDataDig();
+    },
+    // 弹框内班主任与专任教师切换,刷新tableData数据
+    getDataDig() {
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        type: this.digType
+      };
+      // console.log(params);
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineSecondData", params)
+        .then(res => {
+          let data = res.data[0];
+          this.tableData = data;
+
+          // 这一步是为了获取弹窗表单第一个人,如果为空的话就清空数据
+          if (this.tableData.length > 0) {
+            this.DigSelfSco = 0; //弹框自评分
+            this.twoTarget = 0; //二级指标个数
+            this.digTid = this.tableData[0].id; //表单id
+            // this.diaSco = true;
+            this.digUserid = this.tableData[0].userid; //弹框tableData数组中第一个数据userid
+            this.disTeaClass = this.tableData[0].tea; //弹框tableData数组中第一个数据教研室
+            // 判断所处数组第几位,方便后面上下切换
+            this.cutPerson();
+            // 获取基础模版,重新开始渲染数据
+            this.getPageBase();
+          } else {
+            // 切换后tableData里没有数据的话将,自评分什么的清空
+            this.getPageBase2();
+          }
+
+          // console.log("this.tableData", this.tableData);
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 弹框切换上一个教师
+    upTea() {
+      if (this.cutTeaNum <= 0) return this.$message.error("已经是第一个了");
+      this.digLoading = true;
+
+      this.cutTeaNum--;
+      this.digUsername = this.tableData[this.cutTeaNum].username;
+      this.disTeaClass = this.tableData[this.cutTeaNum].tea;
+      this.digUserid = this.tableData[this.cutTeaNum].userid;
+      this.digTid = this.tableData[this.cutTeaNum].id;
+
+      this.getPageBase();
+    },
+    // 弹框切换下一个教师
+    nextTea() {
+      // console.log("this.tableData", this.tableData);
+      if (this.cutTeaNum + 1 >= this.tableData.length)
+        return this.$message.error("已经是最后一个了");
+      this.digLoading = true;
+
+      this.cutTeaNum++;
+      this.digUsername = this.tableData[this.cutTeaNum].username;
+      this.disTeaClass = this.tableData[this.cutTeaNum].tea;
+      this.digUserid = this.tableData[this.cutTeaNum].userid;
+      this.digTid = this.tableData[this.cutTeaNum].id;
+
+      this.getPageBase();
+    },
+    // 弹框专任与班主任切换数据为空时,将表单清空
+    getPageBase2() {
+      let params = {
+        typ: this.digType,
+        org: this.org,
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase", params)
+        .then(res => {
+          // console.log("selectTestExamineBase", res.data[0][0]);
+          this.DigSelfSco = 0;
+          this.twoTarget = 0;
+          this.digTid = "";
+          this.digUserid = "";
+          this.disTeaClass = "";
+          this.digUsername = "暂无提交";
+
+          this.PageBaseData = JSON.parse(res.data[0][0].json);
+          // 处理数据来源
+          this.handleData();
+          this.digLoading = false;
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 弹框获取页面基础ui信息
+    getPageBase() {
+      let params = {
+        typ: this.digType,
+        org: this.org,
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase", params)
+        .then(res => {
+          // console.log("selectTestExamineBase", res.data[0][0]);
+
+          this.PageBaseData = JSON.parse(res.data[0][0].json);
+          this.PageBaseDataTwo = JSON.parse(res.data[0][0].json);
+          // 处理数据来源
+          this.handleData();
+          // 先获取基础模板,然后再获取用户又没有填写过,填写过就开始循环赋值给基础模板,最后提交基础模板
+          this.getDigData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 弹框获取页面渲染数据
+    getDigData() {
+      let params = {
+        uid: this.digUserid,
+        type: this.digType
+      };
+      this.ajax
+        .get(this.$store.state.api + "getTestExamineByUserId", params)
+        .then(res => {
+          console.log("getTestExamineByUserId", res);
+
+          if (res.data[0].length > 0) {
+            let val = JSON.parse(res.data[0][0].json);
+
+            this.PageBaseData.forEach(e => {
+              val.forEach(i => {
+                if (e.id == i.id) {
+                  e.children.forEach(a => {
+                    i.children.forEach(b => {
+                      if (a.id == b.id) {
+                        a.sco1 = b.sco1;
+                        a.sco2 = b.sco2;
+                        a.cogSum = b.cogSum;
+                        a.selfSummary = b.selfSummary;
+                      }
+                    });
+                  });
+                }
+              });
+            });
+            this.PageBaseDataTwo = val;
+            // 弹框计算自评分数,与二级指标个数
+            this.getTwoRigData();
+          } else {
+            // 清空自评分数,与二级指标个数
+            this.DigSelfSco = 0;
+            this.twoTarget = 0;
+          }
+          this.digLoading = false;
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 弹框计算自评分数,与二级指标个数
+    getTwoRigData() {
+      this.DigSelfSco = 0;
+      this.twoTarget = 0;
+
+      // 计算自评分数,与二级指标个数
+      this.PageBaseData.forEach(e => {
+        e.children.forEach(i => {
+          this.DigSelfSco += i.sco1 * 1;
+          this.twoTarget++;
+        });
+      });
+      this.DigSelfSco = this.DigSelfSco.toFixed(2);
+    },
+
+    // 获取用户列表位置,以及用户名称
+    cutPerson() {
+      this.tableData.forEach((e, index) => {
+        if (e.userid == this.digUserid) {
+          this.cutTeaNum = index;
+          this.digUsername = e.username;
+        }
+      });
+    },
+    // 评分关闭弹框
+    handleClose(done) {
+      this.getData();
+      done();
+    },
+    // 数据来源关闭弹框
+    handleClose2(done) {
+      this.digLoading = true;
+      this.getPageBase();
+      done();
+    },
+    // handleClose3(done) {
+    //   done();
+    // },
+    // 处理数据来源
+    async handleData() {
+      for (const e of this.PageBaseData) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = await this.computedTest(k.testid.test);
+          }
+        }
+      }
+    },
+    // 处理数据来源
+    computedTest(val) {
+      let params = [
+        {
+          uid: this.digUserid,
+          testId: val.join(",")
+        }
+      ];
+      return new Promise(resolve => {
+        this.ajax
+          .post(this.$store.state.api + "selectExamineTestName", params)
+          .then(res => {
+            resolve(res.data[0]);
+          })
+          .catch(error => {
+            console.log(error);
+          });
+      });
+    }
+  }
+};
+</script>
+<style scoped>
+.personPage >>> .el-table tr {
+  height: 70px;
+}
+.digUsernameCss {
+  width: 70px;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+.recordDig >>> .el-dialog {
+  height: 600px;
+  width: 500px !important;
+}
+.remFlex {
+  display: flex;
+  justify-content: flex-start;
+  margin-bottom: 20px;
+}
+.remFlexTit {
+  width: 80px;
+  flex-shrink: 0;
+}
+.digTop {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin: 15px 0;
+}
+.TabBtn {
+  cursor: pointer;
+  color: #528df6;
+  margin: 0 10px;
+}
+.dialog_remDig >>> .el-dialog {
+  height: 700px;
+  margin: 0 auto !important;
+  margin-top: 20px !important;
+  overflow: hidden;
+  min-width: 800px !important;
+}
+
+.dialog_remDig >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 15px 20px;
+}
+.dialog_diy >>> .el-dialog {
+  height: 95%;
+  margin: 0 auto !important;
+  margin-top: 20px !important;
+  overflow: hidden;
+  min-width: 800px !important;
+}
+
+.dialog_diy >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 25px 20px;
+}
+
+.dialog_diy >>> .el-dialog__body {
+  height: calc(100% - 50px);
+  box-sizing: border-box;
+  padding: 0px;
+}
+
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 19px;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fafafa;
+}
+.ScoreStep {
+  height: 100%;
+  width: 100%;
+}
+.ScoreStep > input {
+  height: 100% !important;
+  outline-style: none;
+  padding: 5px;
+  width: 100%;
+  text-align: center;
+  box-sizing: border-box;
+  border-radius: 4px;
+  border: none !important;
+  /* border: 1px solid #dcdfe6 !important; */
+}
+
+.ScoreStep >>> .el-input-number {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input__inner {
+  height: 100%;
+  padding-left: 15px;
+  border: none;
+  padding-right: 15px;
+}
+.testPersonExamine {
+  width: 100%;
+  min-width: calc(50px * 10);
+  height: 100%;
+  padding: 10px;
+  display: flex;
+  flex-direction: column;
+  /* overflow: auto; */
+  box-sizing: border-box;
+  background-color: #fff;
+}
+.tArea {
+  width: 100%;
+  height: 100%;
+  padding: 5px;
+  box-sizing: border-box;
+  display: block !important;
+  text-align: left;
+}
+.testPersonExamine > .testTit {
+  height: 100px;
+  display: flex;
+  padding: 15px 0;
+  justify-content: space-between;
+  align-items: center;
+}
+.teaLis {
+  display: flex;
+}
+.teal {
+  padding: 10px 20px;
+  cursor: pointer;
+}
+.Tbor {
+  border-bottom: 2px rgba(54, 129, 252, 1) solid;
+  font-weight: 600;
+}
+.testCon {
+  box-sizing: border-box;
+  padding: 20px;
+}
+
+.orgData {
+  cursor: pointer;
+  color: #528df6;
+  margin-bottom: 10px;
+}
+.sBox_table {
+  width: 100%;
+  min-width: 1500px;
+  height: 100%;
+  margin: 0 auto;
+  /* min-width: 1520px; */
+  font-size: 14px;
+}
+
+.table_title {
+  width: calc(100% - 6px);
+  /* min-width: calc(100px * 9); */
+  height: 50px;
+  background: #e0eafb;
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+/* 取消[type='number']的input的上下箭头 */
+input::-webkit-inner-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input::-webkit-outer-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+.table_title > div {
+  /* width: calc(100% / 9); */
+  /* min-width: 110px; */
+  text-align: center;
+  box-sizing: border-box;
+
+  height: 100%;
+  line-height: 50px;
+  border-right: 1px solid #d5d8df;
+}
+
+.table_title > div:last-child {
+  border: none;
+}
+
+.table_Content {
+  width: 100%;
+  min-width: calc(100px * 9);
+  /* border: 1px solid #d5d8df; */
+  border: none;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  text-align: center;
+  align-items: center;
+}
+
+.twoCol {
+  width: 100%;
+  display: flex;
+}
+
+.ColTit {
+  width: 150px !important;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-bottom: 1px #ccc solid;
+}
+
+.twoCon {
+  display: flex;
+}
+
+.twoCon > div > input {
+  border: none;
+  width: 100%;
+  height: 100%;
+  outline-style: none;
+  text-align: center;
+}
+.twoCon {
+  display: flex;
+  width: 100%;
+}
+.twoCon > div > textarea {
+  border: none;
+  width: 100%;
+  height: 100%;
+  resize: none;
+  box-sizing: border-box;
+  padding: 5px;
+  outline-style: none;
+}
+.twoCon > div {
+  /* width: 10%; */
+  /* min-width: 110px; */
+  min-height: 50px;
+  /* line-height: 50px; */
+  display: flex;
+  box-sizing: border-box;
+
+  justify-content: center;
+  align-items: center;
+  border-left: 1px #ccc solid;
+  border-bottom: 1px #ccc solid;
+}
+.twoCon > div:nth-child(1) {
+  width: 160px !important;
+}
+.twoCon > div:nth-child(2) {
+  width: 160px !important;
+}
+.twoCon > div:nth-child(3) {
+  width: 110px !important;
+}
+.twoCon > div:nth-child(4) {
+  width: 110px !important;
+}
+.twoCon > div:nth-child(5) {
+  flex: 1;
+}
+.twoCon > div:nth-child(6) {
+  width: 250px !important;
+}
+.twoCon > div:nth-child(7) {
+  width: 110px !important;
+}
+.twoCon > div:nth-child(8) {
+  flex: 1;
+}
+
+.ColCon {
+  flex: 1;
+}
+
+.scoreBox{
+  display: flex;
+  align-items: center;
+}
+
+.scoreBox > span:nth-child(1){
+  max-width: 100px;
+  width: 100px;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  text-align: right;
+}
+
+.scoreBox > span:nth-child(2){
+  margin-left: 10px;
+}
+
+</style>

+ 427 - 0
src/components/pages/sassPlatform/view/examine/conpoments/shareBox/index.vue

@@ -0,0 +1,427 @@
+<template>
+  <el-dialog
+    title="提醒"
+    :visible.sync="remDig"
+    :append-to-body="true"
+    width="560px"
+    :before-close="handleClose"
+    class="dialog_diy"
+  >
+    <div class="share_box">
+      <div class="info_box" ref="info">
+        <!-- <div class="info">
+          <span>表单范围:</span>
+          <span>{{ reversedMessage }}</span>
+        </div> -->
+        <div class="info">
+          <span>填写范围:</span>
+          <el-select
+            v-model="teas"
+            @change="getData"
+            multiple
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in TeaList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <!-- <div class="info" v-if="testJson && testJson.overtime">
+          <span>截止时间:</span>
+          <span>{{ testJson.overtime }}</span>
+        </div> -->
+        <div class="info">
+          <span>需提交人数:</span>
+          <span>{{ remindNum }}</span>
+        </div>
+        <div class="info">
+          <span>未完成人数:</span>
+          <span v-html="remindList.length"></span>
+        </div>
+        <div class="info">
+          <span>未完成名单:</span>
+          <span>{{
+            remindList.length > 20
+              ? isSuo
+                ? remindList.slice(0, 20).join(",") + "..."
+                : remindList.join(",")
+              : remindList.join(",")
+          }}</span>
+          <span
+            class="more"
+            v-if="remindList.length > 20"
+            @click="isSuo = !isSuo"
+            >{{ isSuo ? "查看更多" : "收起" }}</span
+          >
+        </div>
+      </div>
+
+      <div class="btn_box">
+        <button class="c_pub_button_confirm tag-read2" @click="getExcelTab">
+          导出
+        </button>
+        <button
+          class="c_pub_button_confirm tag-read2"
+          @click="copy2"
+          :data-clipboard-text="copyText2"
+        >
+          复制信息
+        </button>
+      </div>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import Clipboard from "clipboard";
+export default {
+  props: {
+    remDig: {
+      type: Boolean,
+      default: false
+    },
+    pType: {
+      type: Number
+    },
+    TeaList: {
+      type: Array
+    },
+    testJson: {
+      type: Object
+    },
+    TeachingValue: {
+      type: String
+    },
+    TeachName: {
+      type: Array
+    }
+  },
+  data() {
+    return {
+      origin: "",
+      copyText: "",
+      copyText2: "",
+      noCount: 0,
+      pname: [],
+      isSuo: true,
+      excelData: [],
+      remindNum: 0,
+      remindList: [],
+      remindName: [],
+      oid: this.$route.query.oid, //学校id
+      org: this.$route.query.org, //组织id
+      teas: []
+    };
+  },
+  computed: {
+    reversedMessage() {
+      if (this.TeachingValue == "") {
+        return this.testJson.juriP ? this.testJson.juriP : "所有人";
+      } else {
+        return this.TeachName ? this.TeachName[0].name : "所有人";
+      }
+    }
+  },
+  methods: {
+    handleClose(done) {
+      this.close();
+      done();
+    },
+    close() {
+      this.teas = [];
+      this.$emit("update:remDig", false);
+    },
+
+    copy2() {
+      this.copyText2 = `填写范围:${
+        this.teas ? this.remindName.join(",") : "所有人"
+      }\n${"需提交人数:" +
+        this.remindNum +
+        "\n"}${"未完成人数:" + this.remindList.length + "\n"}${
+        this.remindList.length
+          ? "未完成名单:" + this.remindList.join(",") + "\n"
+          : ""
+      }`;
+      var clipboard = new Clipboard(".tag-read2");
+      clipboard.on("success", e => {
+        this.$message.success("复制成功");
+        console.log("复制成功");
+        clipboard.destroy(); // 释放内存
+      });
+      clipboard.on("error", e => {
+        console.log("不支持复制,该浏览器不支持自动复制");
+        clipboard.destroy(); // 释放内存
+      });
+    },
+    getData() {
+      this.remindList = [];
+      this.remindName = [];
+
+      this.remindNum = 0;
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        tea: this.teas.join(","),
+        ptype: this.pType
+      };
+
+      this.ajax
+        .get(this.$store.state.api + "selectExamineTeaRemind", params)
+        .then(res => {
+          let data = res.data[0];
+          this.excelData = JSON.parse(JSON.stringify(data));
+          this.remindNum = data.length > 0 ? data[0].num : 0;
+          data.forEach(e => {
+            this.remindList.push(e.username);
+          });
+          //   this.digLoading = false;
+
+          if (this.teas.length > 0) {
+            this.teas.forEach(e => {
+              this.TeaList.forEach(k => {
+                if (e == k.id) {
+                  this.remindName.push(k.name);
+                }
+              });
+            });
+          }
+
+          console.log("selectExamineTeaRemind", this.remindName);
+        })
+        .catch(err => {
+          console.error(err);
+        });
+
+      //     let params = {
+      //         id: this.testJson.courseId,
+      //         tea: this.TeachingValue
+      //     };
+      //     this.ajax
+      //         .get(this.$store.state.api + "getTestWorkShareCopy", params)
+      //         .then((res) => {
+      //             console.log('res.datares.datares.datares.datares.datares.data',res.data);
+      //             let parray = res.data[0]
+      //             let is = res.data[1]
+      //             this.noCount = parray.length - is.length
+      //             let isA = []
+      //             for(var i=0;i<is.length;i++){
+      //                 isA.push(is[i].userid)
+      //             }
+      //             let pname = []
+      //             for(var i=0;i<parray.length;i++){
+      //                 if(isA.indexOf(parray[i].userid) == -1){
+      //                     pname.push(parray[i].username)
+      //                 }
+      //             }
+      //             this.pname = pname
+      //         })
+      //         .catch((err) => {
+      //             console.error(err);
+      //         });
+    },
+    getExcelTab() {
+      var res = this.excelData;
+      // console.log('导出数据',res);
+      //如果value的json字段的key值和想要的headers值不一致时,可做如下更改
+      //将和下面的Object.fromEntries结合,将json字段的key值改变为要求的excel的header值
+      var array = [];
+      for (var i = 0; i < res.length; i++) {
+        var _json = {};
+        _json["教师姓名"] = res[i].username;
+        _json["教师账号"] = res[i].eName;
+        _json["所属教研室"] = res[i].tea;
+        array.push(_json);
+      }
+
+      var XLSX = require("xlsx");
+      const workbook = XLSX.utils.book_new(); //创建一个新的工作簿对象
+      let ws = XLSX.utils.json_to_sheet(array); //将json对象数组转化成工作表
+      ws["!cols"] = [
+        //设置每一列的宽度
+        { wch: 30 },
+        { wch: 30 },
+        { wch: 30 }
+      ];
+
+      XLSX.utils.book_append_sheet(workbook, ws, "sheet1"); //把sheet添加到workbook里,第三个参数是sheet名
+      XLSX.writeFile(workbook, "未完成名单.xlsx");
+      // const wopts = { bookType: "xlsx", bookSST: false, type: "array" };//写入的样式bookType:输出的文件类型,type:输出的数据类型,bookSST: 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
+      // const wbout = XLSX.write(workbook, wopts);// 浏览器端和node共有的API,实际上node可以直接使用xlsx.writeFile来写入文件,但是浏览器没有该API
+      // FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }), `${title} demo.xlsx`);//保存文件
+      this.$message({
+        message: "导出成功",
+        type: "success"
+      });
+    }
+  },
+  watch: {
+    remDig(newValue, oldValue) {
+      if (newValue) {
+        this.isSuo = true;
+        this.getData();
+      }
+    }
+  }
+  // mounted(){
+  //     console.log(top.origin);
+  // },
+};
+</script>
+
+<style scoped>
+.dialog_diy >>> .el-dialog {
+  height: 70% !important;
+  min-width: 650px !important;
+  margin-top: 10% !important;
+  /* height: 100%; */
+  /* margin: 0 auto !important; */
+}
+
+/* .dialog_diy >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 25px 20px;
+} */
+.dialog_diy >>> .el-dialog__header {
+  background: #fff !important;
+  padding: 15px 20px;
+}
+
+.dialog_diy >>> .el-dialog__body {
+  height: calc(100% - 124px);
+  box-sizing: border-box;
+  padding: 0px;
+}
+
+.dialog_diy >>> .el-dialog__title {
+  color: #000;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 19px;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #000;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #000;
+}
+
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fff;
+}
+
+.share_box {
+  width: 100%;
+  height: 100%;
+  padding: 20px 15px;
+  box-sizing: border-box;
+}
+
+.info_box {
+  margin: 0 0 20px;
+}
+
+.info_box > .info {
+  line-height: 18px;
+}
+
+.info_box > .info > span:nth-child(1) {
+  color: #00000099;
+}
+
+.info_box > .info > span:nth-child(2) {
+  color: #000000;
+}
+
+.info_box > .info + .info {
+  margin-top: 10px;
+}
+
+.url_box {
+  margin-bottom: 20px;
+}
+
+.qrcode_box {
+  margin-bottom: 20px;
+}
+
+.url_box > .url {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  border: 1px solid #e7e7e7;
+  border-radius: 4px;
+  height: 35px;
+  padding: 0 7px;
+  box-sizing: border-box;
+}
+
+.url_box > .url > span {
+  font-size: 16px;
+  color: #000000;
+}
+
+.url_box > .url > span:nth-child(1) {
+  width: 100%;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.url_box > .url > span:nth-child(2) {
+  margin-left: auto;
+  border-left: 1px solid #e7e7e7;
+  padding-left: 7px;
+  cursor: pointer;
+  min-width: fit-content;
+}
+
+.url_box > .title,
+.qrcode_box > .title {
+  font-size: 16px;
+  font-weight: 700;
+  margin-bottom: 10px;
+}
+
+.qrcode_box > .qrcode {
+  padding: 7px;
+  border: 1px solid #e7e7e7;
+  width: fit-content;
+  border-radius: 4px;
+  display: flex;
+  align-items: flex-end;
+}
+
+.qrcode_box > .qrcode > span:nth-child(1) {
+  width: 100px;
+  display: block;
+  height: 100px;
+}
+
+.qrcode_box > .qrcode > span:nth-child(2) {
+  background: #f0f2f5;
+  padding: 7px 15px;
+  font-size: 16px;
+  border-radius: 4px;
+  cursor: pointer;
+  color: #000;
+  margin-left: 7px;
+}
+
+.btn_box {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.more {
+  cursor: pointer;
+  color: #0061ff;
+}
+</style>

+ 2116 - 0
src/components/pages/sassPlatform/view/examine/conpoments/targetPage.vue

@@ -0,0 +1,2116 @@
+<template>
+  <div>
+    <div v-if="pType == 2" v-loading="tabLoad">
+      <div class="sBox_table">
+        <div class="table_title">
+          <div>一级指标</div>
+          <div>二级指标</div>
+          <div>负责部门</div>
+          <div>分值</div>
+          <div>审核进度</div>
+          <div>自评平均分</div>
+          <div>考核平均分</div>
+          <div>数据来源</div>
+          <div>操作</div>
+        </div>
+        <div class="table_Content" v-for="item in tableJsonCon" :key="item.id">
+          <div class="twoCol">
+            <div class="ColTit">{{ item.name }}</div>
+            <div class="ColCon">
+              <div class="twoCon" v-for="k in item.children" :key="k.id">
+                <div>{{ k.name }}</div>
+                <div>
+                  {{ k.dep.join(",") }}
+                </div>
+                <div>{{ k.score }}</div>
+                <div>
+                  <div v-if="allData.length">
+                    {{ k.pum }}/{{ allData.length }}
+                  </div>
+                </div>
+                <div>{{ k.sco1 }}</div>
+                <div>{{ k.sco2 }}</div>
+                <div>
+                  <div v-if="!k.testid.test.length">/</div>
+                  <div v-else style="padding-top: 10px;">
+                    <div
+                      v-for="(item2, index) in k.testid.test"
+                      :key="item2.courseId"
+                      @click="lookPrize(item2.courseId)"
+                      class="orgDataCss"
+                    >
+                      {{ item2.title }}:{{ item2.num }}份
+                    </div>
+                  </div>
+                </div>
+                <div
+                  style="display: flex;justify-content: space-around;padding: 0 10px;box-sizing: border-box;"
+                >
+                  <!-- <div class="TabBtn" @click="lookPrize">查看</div> -->
+                  <div
+                    class="TabBtn"
+                    @click="lookScore(k.id, item.name, k.name)"
+                  >
+                    评分
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <div v-if="pType == 1" v-loading="tabLoad">
+      <div class="sBox_table">
+        <div class="table_title2">
+          <div>一级指标</div>
+          <div>二级指标</div>
+          <div>分值</div>
+          <div>审核进度</div>
+          <div>自评平均分</div>
+          <div>考核平均分</div>
+          <div>数据来源</div>
+          <div>操作</div>
+        </div>
+        <div class="table_Content2" v-for="item in tableJsonCon" :key="item.id">
+          <div class="twoCol">
+            <div class="ColTit2">{{ item.name }}</div>
+            <div class="ColCon">
+              <div class="twoCon2" v-for="k in item.children" :key="k.id">
+                <div>{{ k.name }}</div>
+                <div>{{ k.score }}</div>
+                <div>
+                  <div v-if="allData.length">
+                    {{ k.pum }}/{{ allData.length }}
+                  </div>
+                </div>
+                <div>{{ k.sco1 }}</div>
+                <div>{{ k.sco2 }}</div>
+                <div>
+                  <div v-if="!k.testid.test.length">/</div>
+                  <div v-else style="padding-top: 10px;">
+                    <div
+                      v-for="(item2, index) in k.testid.test"
+                      :key="item2.courseId"
+                      @click="lookPrize(item2.courseId)"
+                      class="orgDataCss"
+                    >
+                      {{ item2.title }}:{{ item2.num }}份
+                    </div>
+                  </div>
+                </div>
+                <div
+                  style="display: flex;justify-content: space-around;padding: 0 10px;box-sizing: border-box;"
+                >
+                  <!-- <div class="TabBtn" @click="lookPrize">查看</div> -->
+                  <div
+                    class="TabBtn"
+                    @click="lookScore(k.id, item.name, k.name)"
+                  >
+                    评分
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- 点击查看数据来源 -->
+    <el-dialog
+      title=""
+      :visible.sync="diaIframe"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose2"
+      class="dialog_diy"
+    >
+      <div style="height: 100%;">
+        <iframe
+          ref="viframe"
+          style="width: 100%; height: 99%; border: none"
+          :src="ifmUrl"
+        ></iframe>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="diaIframe = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+
+    <!-- 点击评分 -->
+    <el-dialog
+      :title="evaOneName + ':' + evaTwoName"
+      :visible.sync="diaScore"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose"
+      class="dialog_diy"
+      v-loading="evaScoDig"
+    >
+      <div
+        style="height: 100%;padding: 25px;overflow: auto; box-sizing: border-box;padding-bottom: 100px;"
+      >
+        <div class="diaScoreTop">
+          <div class="diaScoreLeft">
+            <div>自评平均分:{{ !evaScoDigSvg ? 0 : evaScoDigSvg }}</div>
+            <div>认定平均分:{{ !evaScoDigCog ? 0 : evaScoDigCog }}</div>
+            <div>存在分差总人数:{{ evaScoDigPerC }}</div>
+          </div>
+          <div class="diaScoreRight">
+            <el-button size="small" @click="allSubmit" type="primary"
+              >保存</el-button
+            >
+          </div>
+        </div>
+        <el-table class="scoTab" :data="tableData" style="width: 100%">
+          <el-table-column type="index" align="center" label="序号" width="180">
+          </el-table-column>
+          <el-table-column
+            prop="username"
+            align="center"
+            label="教师姓名"
+            width="180"
+          >
+          </el-table-column>
+          <el-table-column
+            :show-overflow-tooltip="true"
+            prop="tea"
+            :filters="TeachingOptions"
+            :filter-method="filterTea"
+            align="center"
+            label="教研室"
+          >
+          </el-table-column>
+          <el-table-column prop="score" align="center" label="分值">
+          </el-table-column>
+          <el-table-column
+            :sortable="true"
+            :sort-method="sortEvaMethod"
+            prop="evaSca"
+            align="center"
+            label="自评分数"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="evaMed"
+            :show-overflow-tooltip="true"
+            align="center"
+            label="自评概述"
+          >
+            <template slot-scope="scope">
+              <div v-if="!scope.row.evaMed">/</div>
+              <div
+                v-else
+                style="white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"
+              >
+                {{ scope.row.evaMed }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column width="300px" align="center" label="数据来源">
+            <template slot-scope="scope">
+              <div v-if="!scope.row.orgData.length">/</div>
+              <div v-else style="padding-top: 10px;">
+                <div
+                  v-for="(item2, index) in scope.row.orgData"
+                  :key="item2.courseId"
+                  class="orgDataCss"
+                >
+                  <div @click="lookUserPrize(scope.row, item2.courseId)">
+                    <!-- @click="lookPrize(item2.courseId)" -->
+                    {{ item2.title }}:{{ item2.num }}份
+                  </div>
+                </div>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            :sortable="true"
+            :sort-method="sortCogMethod"
+            prop="cogSco"
+            width="200px"
+            align="center"
+            label="认定分数"
+          >
+            <template slot-scope="scope">
+              <div class="ScoreStep">
+                <el-input
+                  v-if="scope.row.judge == 1"
+                  style=" color
+                :#A7AAB2;"
+                  @blur="Submit(scope.row)"
+                  v-model.number="scope.row.cogSco"
+                  v-stopMousewheel
+                ></el-input>
+                <el-input
+                  v-else
+                  :style="{
+                    color: scope.row.cogSco == scope.row.evaSca ? '#000' : 'red'
+                  }"
+                  @blur="Submit(scope.row)"
+                  v-model.number="scope.row.cogSco"
+                  v-stopMousewheel
+                ></el-input>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            width="200px"
+            align="center"
+            prop="cognizance"
+            label="认定概述"
+          >
+            <template slot-scope="scope">
+              <textarea
+                @blur="Submit2(scope.row)"
+                class="tArea"
+                v-model.trim="scope.row.cogSummary"
+              />
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+// import Vue from 'vue';
+export default {
+  directives: {
+    stopMousewheel: {
+      inserted: function(el) {
+        const ele = el.tagName === "INPUT" ? el : el.querySelector("input");
+        ele.addEventListener("mousewheel", () => {
+          ele.blur();
+        });
+      }
+    }
+  },
+  props: {
+    pType: {
+      //2专任教师 1班主任
+      type: Number,
+      default: 0
+    }
+  },
+  data() {
+    return {
+      evaScoDig: false,
+      evaScoDigSvg: 0,
+      evaScoDigCog: 0,
+      evaScoDigPerC: 0,
+
+      diaIframe: false, //数据来源弹框
+      diaScore: false, //查看分数弹框
+      ifmUrl: "", //数据来源地址
+      tabLoad: false, //表格加载状态
+      secondId: "", //查看评分二级id
+      // cogSco: "", // 评分弹框认定分数
+      // cogSummary: "", // 评分弹框认定概述
+
+      evaOneName: "", //评分一级指标
+      evaTwoName: "", //评分二级指标
+
+      userid: this.$route.query.userid, //用户id
+      oid: this.$route.query.oid, //学校id
+      org: this.$route.query.org, //组织id
+      allData: [], //获取全部提交的表单
+      // 基础页面数据
+      tableJsonCon: [
+        // {
+        //   id: "q",
+        //   name: "师德师风",
+        //   children: [
+        //     {
+        //       id: "1q",
+        //       sco1: "", //自评分
+        //       evaStandard: "不乱收费,不从事有偿家教,不收受家长贿赂。", //评价标准
+        //       evaMethod: "参考同行、学生、家长师德考核问卷结果", //评价方法
+        //       sco2: "", //认定分
+        //       score: 4, //分值
+        //       cogSum: "",
+        //       cueWordType: 0, //认定概述
+        //       name: "廉洁从教", //二级指标名字
+        //       dep: ["行政事务中心"], // 部门
+        //       selfSummary: "", // 自评概述
+        //       type: 1, // 判断蓝色二级指标,暂定为一
+        //       testid: {
+        //         //数据来源
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "2q",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "认真负责,做好本职工作。上班时间无打游戏、炒股、刷小视频等与教学工作无关的行为。", //评价标准
+        //       evaMethod: "参考同行、学生、家长师德考核问卷结果", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "爱岗敬业",
+        //       dep: ["行政事务中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "3q",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "尊重、关心学生,学生、家长评价高。不体罚和变相体罚学生,在岗期间无有效投诉。", //评价标准
+        //       evaMethod: "参考同行、学生、家长师德考核问卷结果", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "热爱学生",
+        //       dep: ["行政事务中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "4q",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "履行岗位安全职责,不空堂不缺课,请假、外出学习做好工作交接,做好值周工作,无安全责任事故。", //评价标准
+        //       evaMethod: "参考值周行政巡查反馈结果", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "安全教学",
+        //       dep: ["行政事务中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "5q",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "严于律己,服从学校正常工作安排,同事之间相互支持,友好协调。", //评价标准
+        //       evaMethod: "参考师德考核同行评价结果", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "团结协作",
+        //       dep: ["行政事务中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "1a",
+        //   name: "考勤情况",
+        //   children: [
+        //     {
+        //       id: "1a",
+        //       sco1: "", //自评分
+        //       evaStandard: "按时到岗,严格遵守请销假制度等工作纪律。", //评价标准
+        //       evaMethod: "参考学年抽查情况(行政事务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "日常考勤",
+        //       dep: ["行政事务中心"],
+        //       score: 2,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "2a",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "例会、升旗、全校性大型活动等按时参加,不迟到不缺席,线上会议实名入会并全程打开摄像头参会。", //评价标准
+        //       evaMethod: "参考学年会议活动签到考勤情况(行政事务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "会议活动考勤",
+        //       dep: ["行政事务中心"],
+        //       score: 2,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "b",
+        //   name: "常规教学(备、教、改、考、评、辅)",
+        //   children: [
+        //     {
+        //       id: "1b",
+        //       sco1: "", //自评分
+        //       evaStandard: "按学校备课要求完成备课工作,及时提交教案。", //评价标准
+        //       evaMethod:
+        //         "数量足2分;结构完整2分;有反思、个性化设计2分(科组评选30%为6分)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "备课",
+        //       dep: ["教学服务中心"],
+        //       score: 6,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "2b",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "先备课再上课,教学准备充分;遵守学校教学规范,教学秩序良好;教学方法新效果好。", //评价标准
+        //       evaMethod:
+        //         "准备2分;秩序好2分;方法效果好2分(教学服务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "上课",
+        //       dep: ["教学服务中心"],
+        //       score: 6,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "3b",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "学生作业量适中、书写规范;教师批改及时、认真、正确;学生错题及时订正。", //评价标准
+        //       evaMethod:
+        //         "量适中规范2分;全批全改2 分;督促订正2 分(科组评选30%为6分)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "批改作业",
+        //       dep: ["教学服务中心"],
+        //       score: 6,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "4b",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "按学校要求,期末测试并录入系统,有批改讲评。(一、二年级组织精心组织期末游园活动,让学生在游戏中接受评价,在评价中成长)", //评价标准
+        //       evaMethod: "跟进度测试2分,全部有批改讲评4分(科组评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "学科测试",
+        //       dep: ["教学服务中心"],
+        //       score: 6,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "5b",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "期初、期末按时完成并提交:计划、总结、教案、评语、听课记录、会议记录等资料。", //评价标准
+        //       evaMethod:
+        //         "迟交、少交一项扣1分,扣完6分为止。(教学服务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "资料提交",
+        //       dep: ["教学服务中心"],
+        //       score: 6,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: [
+        //           "1b6f078b-b673-11ee-b534-005056b86db5",
+        //           "5eac308d-b66d-11ee-b534-005056b86db5"
+        //         ]
+        //       }
+        //     },
+        //     {
+        //       id: "6b",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "每学期教师听课12节,科组长和行政15节、主管教学的行政20节,听课后积极参与评课。", //评价标准
+        //       evaMethod: "数量足2分;有评课2分;记录完整1分(科组评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "听课评课",
+        //       dep: ["教学服务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "7b",
+        //       sco1: "", //自评分
+        //       evaStandard: "综合评测上学期期末测试与本学期期中测试结果", //评价标准
+        //       evaMethod:
+        //         "平均分、优秀率、及格率均与年级平均值比:平均分+-5分,优秀率+-10%,及格率+-10%,都符合以上条件得4分。平均分>5分,优秀率>10%,及格率>10%,符合其中1个及以上得5分。同时教几个班的,自选一个班计算。(教学服务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "教学质量",
+        //       dep: ["教学服务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "c",
+        //   name: "科研工作",
+        //   children: [
+        //     {
+        //       id: "1c",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "每学年至少上一节校级公开课(40岁以上的教师可选择给教师做讲座)", //评价标准
+        //       evaMethod:
+        //         "纳入期初计划、科组及全校观摩,提交教案、PPT(教学服务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "研讨课",
+        //       dep: ["教学服务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["e9e6dc5a-89d1-11ee-b98c-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "2c",
+        //       sco1: "", //自评分
+        //       evaStandard: "完成本学年的继续教育学时", //评价标准
+        //       evaMethod:
+        //         "按要求完成全年学时,没完成不计分。(教师发展中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "继续教育",
+        //       dep: ["教师发展中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "3c",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "积极参加校(区)教研活动、汇报交流、读书沙龙等,不无故缺勤。服从安排,积极完成科组临时性任务。", //评价标准
+        //       evaMethod:
+        //         "准时,不无故缺席科组会。出席率超80%、70%、60%的分别计3、2、1分 (科组评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "科组活动",
+        //       dep: ["教学服务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "d",
+        //   name: "教学成果加分",
+        //   children: [
+        //     {
+        //       id: "1d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "根据学科特点开展特色活动,如英语节,艺术节,科技节、体育节、数学文化周、读书分享等。", //评价标准
+        //       evaMethod: "特色活动中承担指导、评价、布展等工作。(科组评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "学科特色活动",
+        //       dep: ["教学服务中心"],
+        //       score: 2,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "2d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "承担省、市、区、学校对外公开课、线上课资源开发、接待课、培训讲座任务。", //评价标准
+        //       evaMethod:
+        //         "国、省、市、区、校级公开课每节(次)加5、4、3、2、1分(教学服务中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "对外公开课、接待课、培训讲座",
+        //       dep: ["教学服务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["9547874d-2fb3-11ef-bf55-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "3d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "主持或参与教育教学课题研究并结题;指导学生课题并结题。以结题证书为准,一个课题只加1次分。", //评价标准
+        //       evaMethod:
+        //         "主持国家、省、市、区、校级立项课题分别加5、4、3、2、1分,参与课题相应加分减半;指导学生课题等同于主持课题,相应加分参看主持课题加分。(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "课题研究",
+        //       dep: ["教师发展中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["73546fa2-2f67-11ef-bf55-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "4d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "评为省、市、区、校名师工作室主持人、学员、成员,以挂牌为准,1个工作室只加1次分。", //评价标准
+        //       evaMethod:
+        //         "省、市、区、校名师工作室主持人分别加4、3、2、1分;学员、成员分减半。(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "名师工作室",
+        //       dep: ["教师发展中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "5d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "公开发表论文等学术成果、教育网站发表学术文章或公开交流、主题发言等。公开发表需有期刊号或书号,(《深圳教育科研》等同市级期刊、《光明教育》等同区级期刊);教育网站或公开交流、主题发言等,网站、公众号、交流等分数减半。", //评价标准
+        //       evaMethod:
+        //         "国家级:2.5分/篇 省级:2分/篇市  级:1.5分/篇 区级:1分/篇校  级:0.5分/篇(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "老师发表学术成果",
+        //       dep: ["教师发展中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["218ae830-2f6c-11ef-bf55-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "6d",
+        //       sco1: "", //自评分
+        //       evaStandard: "指导学生发表论文、公众号文章等。", //评价标准
+        //       evaMethod:
+        //         "期刊、报纸上发表1分/篇,公众号、网络平台减半,封顶5分。(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "指导学生发表学术成果",
+        //       dep: ["教师发展中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["ad02ca32-2f6c-11ef-bf55-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "7d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "(1)获得国家级、省级、市级、区级人民政府及教育主管部门、校级的竞赛奖项,同一成果同时获得几个奖项,以最高奖项为准;设特等奖、一、二、三等奖和优秀奖、若组织方没有设几等奖,则获第一、二名等同于一等奖,三、四名等同于二等奖,后面名次等同于三等奖。(2)获得非人民政府计分及各级教育主管部门外的竞赛奖项,加分标准如下:(同一成果同时获得几个奖项,以最高奖项为准)(只设一、二、三等奖)", //评价标准
+        //       evaMethod:
+        //         "国家级、省级、市级、区级、校级的加分依次是:一:5分、4.5分、4分、3.5分、3分 二:4分、3.5分、3分、2.5分 、2分三:3分、2.5分 、2分、1.5分、1分四:2分、1.5分、1分、0.5分、0.2五:1分、0.5分、0.2分(教师发展中心评定)国家级:2.5    2分   1.5分   省  级:2分   1.5分  1分    市  级:1.5分 1分    0.5分   区  级:1分   0.5分  0.2分(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "教师获奖",
+        //       dep: ["教师发展中心", "教学服务中心", "课程与创新中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: [
+        //           "d47a6ab6-8a75-11ee-b98c-005056b86db5",
+        //           "729dbb8e-292e-11ef-bee5-005056b86db5"
+        //         ]
+        //       }
+        //     },
+        //     {
+        //       id: "8d",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "指导学生获得国家级、省级、市级、区级人民政府及教育主管部门、校级的竞赛奖项,同一成果同时获得几个奖项,以最高奖项为准;设特等奖、一、二、三等奖和优秀奖、若组织方没有设几等奖,则获第一、二名等同于一等奖,三、四名等同于二等奖,后面名次等同于三等奖。", //评价标准
+        //       evaMethod:
+        //         "国家级、省级、市级、区级、校级的加分依次是:一:5分、4.5分、4分、3.5分、3分 二:4分、3.5分、3分、2.5分 、2分三:3分、2.5分 、2分、1.5分、1分四:2分、1.5分、1分、0.5分、0.2五:1分、0.5分、0.2分(教师发展中心评定)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "指导学生获奖",
+        //       dep: ["教师发展中心", "教学服务中心", "课程与创新中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["06870865-2fb1-11ef-bf55-005056b86db5"]
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "e",
+        //   name: "特色工作加分",
+        //   children: [
+        //     {
+        //       id: "1e",
+        //       sco1: "", //自评分
+        //       evaStandard: "按时按量完成社团工作,并积极开发特色校本课程。", //评价标准
+        //       evaMethod:
+        //         "按规定完成社团工作,无违纪违规现象:3分被评为校级“优秀社团”,或承办、作为主要成员参与区级及以上活动展示:2分(课程与创新中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "社团课程",
+        //       dep: ["课程与创新中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     },
+        //     {
+        //       id: "2e",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "承担学校教育教学通讯工作,撰写的新闻稿在校园网、校报、微信公众号、光明信息、光明教育等媒体上发表。", //评价标准
+        //       evaMethod:
+        //         "校级、区级、市级1篇分别加0.2、0.5分、1分,如为合作撰稿单篇分值需折算(排版与撰稿同分,审核折半计算,党建融媒中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "新闻通讯",
+        //       dep: ["党建融媒中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["e65b399b-304a-11ef-b873-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "3e",
+        //       sco1: "", //自评分
+        //       evaStandard: "校园文化、设施设备、宣传布置等相关工作。", //评价标准
+        //       evaMethod: "承担一次加0.5分(课程与创新中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "校园文化",
+        //       dep: ["课程与创新中心"],
+        //       score: 2,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["500f1ca5-3047-11ef-b873-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "4e",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "积极参与义教、抗疫、捐物、献血等社区志愿活动和合唱、朗诵等党建比赛或活动。", //评价标准
+        //       evaMethod:
+        //         "自主申报志愿活动且核实参加一次记0.5分,参与党建比赛或活动组织一次记2分(党建融媒中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "党务建设",
+        //       dep: ["党建融媒中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["c6efea26-304b-11ef-b873-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "5e",
+        //       sco1: "", //自评分
+        //       evaStandard: "设计和开展项目式学习", //评价标准
+        //       evaMethod:
+        //         "设计项目式学习课程至少1次,记1分(需提供课程设计单);开展项目式学习活动至少1次,记3分(需提供过程性材料)。(课程与创新中心评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "项目式学习",
+        //       dep: ["课程与创新中心"],
+        //       score: 4,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["04087db9-3048-11ef-b873-005056b86db5"]
+        //       }
+        //     },
+        //     {
+        //       id: "6e",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "参与学校开展的特色项目工作,如信息化赋能课例研究、游戏识字用书编写等。", //评价标准
+        //       evaMethod:
+        //         "参与至少1项特色项目,按时按量完成项目相关工作,表现积极,记3分。(由学校教学部门评价)", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 1,
+        //       name: "学校特色项目",
+        //       dep: ["教学服务中心", "教师发展中心", "课程与创新中心"],
+        //       score: 3,
+        //       selfSummary: "",
+        //       type: 1,
+        //       testid: {
+        //         type: 1,
+        //         test: ["23f351d6-304a-11ef-b873-005056b86db5"]
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "f",
+        //   name: "科组评价",
+        //   children: [
+        //     {
+        //       id: "1f",
+        //       sco1: "", //自评分
+        //       evaStandard: "科组长综合考量师德师风、教学成效等维度进行打分。", //评价标准
+        //       evaMethod: "优秀:5 良好:4 合格:3 不合格:1", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "学科组长打分",
+        //       dep: ["行政事务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 2,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // },
+        // {
+        //   id: "g",
+        //   name: "行政巡查",
+        //   children: [
+        //     {
+        //       id: "1g",
+        //       sco1: "", //自评分
+        //       evaStandard:
+        //         "行政随机抽查,综合考量师德师风、教学成效等维度进行打分,取所有行政的平均值。", //评价标准
+        //       evaMethod: "优秀:5 良好:4 合格:3 不合格:1", //评价方法
+        //       sco2: "",
+        //       cogSum: "",
+        //       cueWordType: 0,
+        //       name: "随机巡查",
+        //       dep: ["行政事务中心"],
+        //       score: 5,
+        //       selfSummary: "",
+        //       type: 2,
+        //       testid: {
+        //         type: 1,
+        //         test: []
+        //       }
+        //     }
+        //   ]
+        // }
+      ],
+      // TeaTabJson: [
+      //   {
+      //     id: "sa",
+      //     name: "班级建设",
+      //     children: [
+      //       {
+      //         id: "sa1",
+      //         name: "德育资料",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "各学期班主任工作计划和总结(内容、目标包含心理健康教育相关内容)、升旗任务资料、班主任工作手册(纸质)", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: [
+      //             "59a4bfa7-cfcc-11ee-b534-005056b86db5",
+      //             "7b5bb13c-cfd1-11ee-b534-005056b86db5",
+      //             "e827e6e1-2d3c-11ef-80ee-005056b86db5"
+      //           ]
+      //         }
+      //       },
+      //       {
+      //         id: "sa2",
+      //         name: "班级文化",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "每学期班级板报内容突出主题,版面清晰、美观,按时完成;班容班貌评比地面整洁、物品摆放整齐有序", //评价标准
+      //         evaMethod: "学校考评", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: [""]
+      //         }
+      //       },
+      //       {
+      //         id: "sa3",
+      //         name: "制度建设",
+      //         score: 5,
+      //         sco1: "", //自评分
+      //         evaStandard: "建立建全班级公约、班级奖励制度、家校工作计划等", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["662ef7ef-d05a-11ee-b534-005056b86db5"]
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     id: "sc",
+      //     name: "常规活动",
+      //     children: [
+      //       {
+      //         id: "sc1",
+      //         name: "一日常规",
+      //         score: 20,
+      //         sco1: "", //自评分
+      //         evaStandard: "学校常规内容星级班级评比", //评价标准
+      //         evaMethod: "学校考评", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       },
+      //       {
+      //         id: "sc2",
+      //         name: "班队会",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "每学期定期开展班队会课教育活动。期末上交班会活动记录表、教案、PPT、照片等材料。班会主题包括但不限于:安全教育、爱国主义教育、生命教育、心理健康教育、劳动教育等主题", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["31c114c7-cfd2-11ee-b534-005056b86db5"]
+      //         }
+      //       },
+      //       {
+      //         id: "sc3",
+      //         name: "家校联系",
+      //         score: 15,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "每学期定期召开家长会、多种渠道开展家访、电访等家校联系工作,提供线上和约访记录100%,上门家访记录30%", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["5b836702-cfd2-11ee-b534-005056b86db5"]
+      //         }
+      //       },
+      //       {
+      //         id: "sc4",
+      //         name: "德育工作会议",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "按时参加德育工作会议(包含市级、区级、校级、年级),按要求签到、认真做好会议记录", //评价标准
+      //         evaMethod: "学校考评", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     id: "sd",
+      //     name: "师德师风",
+      //     children: [
+      //       {
+      //         id: "sd1",
+      //         name: "无乱收费现象",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard: "有偿补习、家教等造成学生、家长不满或乱收费行为", //评价标准
+      //         evaMethod: "学校考评", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       },
+      //       {
+      //         id: "sd2",
+      //         name: "体罚和变相体罚",
+      //         score: 10,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "体罚和变相体罚造成学生、家长不满被投诉、举报,经查情况属实的一票否决", //评价标准
+      //         evaMethod: "学校考评", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     id: "se",
+      //     name: "奖励项目",
+      //     children: [
+      //       {
+      //         id: "se1",
+      //         name: "德育获奖",
+      //         score: 8,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "(1)班级学生参加德育类各项比赛。集体获奖按国省市区校等级:国家级:特等奖8分,一等奖7分,二等奖6分,三等奖5分省级:特等奖7分,一等奖6分,二等奖5分,三等奖4分市级:特等奖6分,一等奖5分,二等奖4分,三等奖3分区级:特等奖5分,一等奖4分,二等奖3分,三等奖2分校级:一等奖3分,二等奖2分,三等奖1分(2)班级学生个人获奖按省市区校3、2、1、0.5加分(超5人按5人算)(3)班主任个人参加德育类各项比赛。获奖按国省市区校等级国家级:特等奖8分,一等奖7分,二等奖6分,三等奖5分省级:特等奖7分,一等奖6分,二等奖5分,三等奖4分市级:特等奖6分,一等奖5分,二等奖4分,三等奖3分区级:特等奖5分,一等奖4分,二等奖3分,三等奖2分校级:一等奖3分,二等奖2分,三等奖1分(4)班主任、学生集体或个人获得少先队方面奖项(荣誉)按省市区等级5、3、1加分", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 1,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["a5d2c7f9-d05a-11ee-b534-005056b86db5"]
+      //         }
+      //       },
+      //       {
+      //         id: "se2",
+      //         name: "特色活动",
+      //         score: 5,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "每学期组织开展富有班级特色实践活动2-3次(包括班级值周任务、升旗任务)或班级管理经典案例;(此项视完成的情况、质量、成效进行评分)", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 1,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["180b321b-cfd3-11ee-b534-005056b86db5"]
+      //         }
+      //       },
+      //       {
+      //         id: "se3",
+      //         name: "示范作用",
+      //         score: 4,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "积极承担市、区、校级班队会观摩示范课、培训讲座、说课等大型德育展示活动4、3、2加分。积极申报市级、区级、校级班主任工作室,开展有针对性的活动4、3、2加分", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 1,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["e345d506-b692-11ee-b534-005056b86db5"]
+      //         }
+      //       },
+      //       {
+      //         id: "se4",
+      //         name: "教育科研",
+      //         score: 5,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "班主任工作论文、案例,发表或获奖(参考学校评分标准)", //评价标准
+      //         evaMethod: "查看资料", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 1,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 1,
+      //         testid: {
+      //           type: 1,
+      //           test: ["5cf7e36e-b693-11ee-b534-005056b86db5"]
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     id: "sf",
+      //     name: "级组评价",
+      //     children: [
+      //       {
+      //         id: "sf1",
+      //         name: "年级组长打分",
+      //         score: 5,
+      //         sco1: "", //自评分
+      //         evaStandard: "级组长综合考量师德师风、教学成效等维度进行打分。", //评价标准
+      //         evaMethod: "优秀:5良好:4合格:3不合格:1", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 2,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       }
+      //     ]
+      //   },
+      //   {
+      //     id: "sg",
+      //     name: "行政巡查",
+      //     children: [
+      //       {
+      //         id: "sg1",
+      //         name: "随机巡查",
+      //         score: 5,
+      //         sco1: "", //自评分
+      //         evaStandard:
+      //           "行政随机抽查,综合考量师德师风、班级管理等维度进行打分,取所有行政的平均值。", //评价标准
+      //         evaMethod: "优秀:5良好:4合格:3不合格:1", //评价方法
+      //         sco2: "",
+      //         cogSum: "",
+      //         cueWordType: 0,
+      //         selfSummary: "",
+      //         dep: [],
+      //         type: 2,
+      //         testid: {
+      //           type: 1,
+      //           test: []
+      //         }
+      //       }
+      //     ]
+      //   }
+      // ],
+      tableData: [], //弹框数据
+      TeachingOptions: []
+    };
+  },
+  computed: {},
+  watch: {
+    pType(newVal, oldVal) {
+      this.allData = [];
+      this.getPageBase();
+    }
+  },
+  mounted() {
+    this.getPageBase();
+    this.getTeaList();
+    // console.log(JSON.stringify(this.TeaTabJson));
+    // console.log(JSON.stringify(this.tableJsonCon));
+  },
+
+  methods: {
+    // 禁用滚轮事件
+    handleWheel(event) {
+      event.preventDefault();
+    },
+    // 获取教研室
+    getTeaList() {
+      let params = {
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTeacherOfficeBySchool", params)
+        .then(res => {
+          // return console.log("this.TeachingOptions", res.data[0]);
+          let data = res.data[0];
+          let dataCopy = [];
+
+          data.forEach(e => {
+            if(e.parentid == '6'){
+              let a = {};
+              a.value = e.name;
+              a.text = e.name;
+              dataCopy.push(a);
+            }
+          });
+
+          this.TeachingOptions = dataCopy;
+          // console.log("this.TeachingOptions", this.TeachingOptions);
+        })
+        .catch(err => {
+          this.isLoading = false;
+          console.error(err);
+        });
+    },
+    // 获取基础页面数据
+    getPageBase() {
+      this.tabLoad = true;
+      let params = {
+        typ: this.pType,
+        org: this.org,
+        oid: this.oid
+      };
+      // console.log(params);
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase", params)
+        .then(res => {
+          this.tableJsonCon = JSON.parse(res.data[0][0].json);
+
+          this.handleData();
+          this.getData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 获取首页数据计算审核进度,自评平均分,考核平均分
+    getData() {
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        type: this.pType
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineAllData", params)
+        .then(res => {
+          // pum是判断审核进度的计数器
+          this.tableJsonCon.forEach(e => {
+            e.children.forEach(i => {
+              i.pum = 0;
+            });
+          });
+
+          if (!res.data[0].length) return (this.tabLoad = false);
+
+          this.allData = res.data[0];
+          let data = res.data[0];
+          // 转json
+          data.forEach(e => {
+            e.json = JSON.parse(e.json);
+          });
+          console.log("data", data);
+
+          this.tableJsonCon.forEach(a => {
+            data.forEach(b => {
+              b.json.forEach(c => {
+                if (a.id == c.id) {
+                  a.children.forEach((d, index) => {
+                    if (d.id == c.children[index].id) {
+                      // console.log('c.children[index].sco1',c.children[index].sco1);
+                      d.sco1 = d.sco1 * 1 + c.children[index].sco1 * 1;
+                      d.sco2 = d.sco2 * 1 + c.children[index].sco2 * 1;
+                      if (!!c.children[index].sco2 * 1) {
+                        d.pum++;
+                      }
+                    }
+                  });
+                }
+              });
+            });
+          });
+
+          this.tableJsonCon.forEach(e => {
+            e.children.forEach(i => {
+              i.sco1 = (i.sco1 / this.allData.length).toFixed(2);
+              i.sco2 = (i.sco2 / this.allData.length).toFixed(2);
+            });
+          });
+          this.tabLoad = false;
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    async handleData() {
+      for (const e of this.tableJsonCon) {
+        for (const k of e.children) {
+          if (k.testid.test.length > 0) {
+            k.testid.test = await this.computedTest(k.testid.test);
+          }
+        }
+      }
+    },
+    computedTest(val) {
+      let params = [
+        {
+          uid: "",
+          testId: val.join(",")
+        }
+      ];
+      return new Promise(resolve => {
+        this.ajax
+          .post(this.$store.state.api + "selectExamineTestName", params)
+          .then(res => {
+            // console.log("resresresres", res.data[0]);
+            // console.log(res.data[0]);
+            resolve(res.data[0]);
+          })
+          .catch(error => {
+            console.log(error);
+          });
+      });
+    },
+
+    // 查看数据来源
+    lookPrize(val) {
+      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0`;
+      // 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;
+    },
+    // ----------------------------首页操作与弹框操作分界线
+
+    // 按照数字大小排序 方法-
+    sortCogMethod(before, after) {
+      return Number(before.cogSco) - Number(after.cogSco);
+    },
+    sortEvaMethod(before, after) {
+      return Number(before.evaSca) - Number(after.evaSca);
+    },
+    // 教研室筛选
+    filterTea(value, row, column) {
+      console.log(value, row, column);
+      const property = column["property"];
+      return row[property].includes(value);
+    },
+    // 查看评分
+    lookScore(val, oneName, twoName) {
+      this.evaScoDig = true;
+      this.evaOneName = oneName;
+      this.evaTwoName = twoName;
+
+      this.tableData = [];
+
+      this.secondId = val;
+      this.getSecondData();
+      this.diaScore = true;
+    },
+
+    // 弹框获取这个学校所有的提交表单
+    getSecondData() {
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        type: this.pType
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineSecondData", params)
+        .then(res => {
+          let data = res.data[0];
+          data.forEach(e => {
+            e.json = JSON.parse(e.json);
+          });
+          // console.log("selectTestExamineSecondData", data);
+
+          data.forEach(e => {
+            e.evaSca = ""; //自评分数
+            e.evaMed = ""; //自评概述
+            e.orgData = []; //数据来源
+            e.cogSco = ""; //认定分数
+            e.cogSummary = ""; //认定概述
+            e.score = 0; //分值
+            e.judge = 0; //是否填充为默认分数 1:默认等于自评分
+            if (!e.tea) {
+              e.tea = "";
+            }
+            e.json.forEach(i => {
+              i.children.forEach(k => {
+                if (k.id == this.secondId) {
+                  e.evaSca = k.sco1;
+                  e.evaMed = k.selfSummary;
+                  e.orgData = k.testid.test;
+                  e.score = k.score;
+                  e.cogSummary = k.cogSum;
+                  if (!!k.sco2) {
+                    e.cogSco = k.sco2;
+                  } else {
+                    e.cogSco = k.sco1;
+                    e.judge = 1;
+                  }
+                }
+              });
+            });
+          });
+
+          this.tableData = data;
+
+          // 计算评分弹框平均值等
+          this.CopDigSco();
+
+          // 获取数据来源
+          this.handleScoData();
+          this.evaScoDig = false;
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    // 弹框计算评分弹框平均值等
+    CopDigSco() {
+      this.evaScoDigSvg = 0; //自评平均
+      this.evaScoDigCog = 0; //认定平均
+      this.evaScoDigPerC = 0; //存在分差人数
+      this.tableData.forEach(e => {
+        this.evaScoDigSvg += e.evaSca * 1;
+        this.evaScoDigCog += e.cogSco * 1;
+        if (e.evaSca * 1 != e.cogSco * 1) {
+          this.evaScoDigPerC++;
+        }
+      });
+
+      this.evaScoDigSvg = (this.evaScoDigSvg / this.tableData.length).toFixed(
+        2
+      );
+      this.evaScoDigCog = (this.evaScoDigCog / this.tableData.length).toFixed(
+        2
+      );
+    },
+
+    // 弹框中处理数据来源
+    async handleScoData() {
+      for (const e of this.tableData) {
+        if (e.orgData.length > 0) {
+          e.orgData = await this.computedScoTest(e.orgData, e.userid);
+        }
+      }
+    },
+    computedScoTest(val, uid) {
+      let params = [
+        {
+          uid: uid,
+          testId: val.join(",")
+        }
+      ];
+      return new Promise(resolve => {
+        this.ajax
+          .post(this.$store.state.api + "selectExamineTestName", params)
+          .then(res => {
+            console.log("selectExamineTestName", res.data[0]);
+            resolve(res.data[0]);
+          })
+          .catch(error => {
+            console.log(error);
+          });
+      });
+    },
+
+    // 弹框查看数据来源
+    lookUserPrize(val, cid) {
+      // return console.log(val);
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}`;
+
+      this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${cid}&oid=${val.organizeid}&org=${val.org}&type=2&role=0&peopleId=${val.userid}`;
+      // 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;
+    },
+
+    //分数提交与概述提交不一个函数是因为:
+    // 认定分数默认等于自评分数,管理员点击到评分才会提交默认分数,点击概述则不会提交分数
+
+    // 分数提交
+    Submit(val) {
+      console.log("valvalvalvla", val);
+      //#region
+      // 修改了将页面上的分数也改变颜色,(方式改变,无用了)
+      // this.tableData.forEach(e => {
+      //   if (e.id == val.id) {
+      //     e.judge = 0;
+      //   }
+      // });
+      //#endregion
+
+      if (val.cogSco > val.score) {
+        val.cogSco = val.score;
+      } else if (val.cogSco < 0) {
+        val.cogSco = "";
+        this.$message.error("评分不能为负数");
+      }
+
+      // 用来判断修改分数是否等于原先分数,如果相等就不提交
+      let judgeSubmit = 0;
+
+      val.json.forEach(e => {
+        if (judgeSubmit == 1) return;
+        e.children.forEach(i => {
+          if (i.id == this.secondId) {
+            if (i.sco2 == val.cogSco) {
+              judgeSubmit = 1;
+            }
+          }
+        });
+      });
+
+      if (judgeSubmit == 1) return;
+
+      let recordTit = "";
+      val.json.forEach(e => {
+        e.children.forEach(i => {
+          if (i.id == this.secondId) {
+            recordTit = i.name;
+            i.sco2 = val.cogSco;
+            i.cogSum = val.cogSummary;
+          }
+        });
+      });
+
+      let params = [
+        {
+          uid: this.userid,
+          tid: val.id,
+          typ: this.pType,
+          json: JSON.stringify(val.json),
+          rjson: JSON.stringify({
+            rjson: val.json,
+            text: `按指标,修改了${recordTit}分数`
+          })
+        }
+      ];
+      // return console.log(params);
+      this.ajax
+        .post(this.$store.state.api + "updateExamineCogDataCopy", params)
+        .then(res => {
+          this.getSecondData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+
+    // 概述提交
+    Submit2(val) {
+      // 用来判断修改分数是否等于原先分数,如果相等就不提交
+      let judgeSubmit = 0;
+
+      val.json.forEach(e => {
+        if (judgeSubmit == 1) return;
+        e.children.forEach(i => {
+          if (i.id == this.secondId) {
+            if (i.cogSum == val.cogSummary) {
+              judgeSubmit = 1;
+            }
+          }
+        });
+      });
+
+      if (judgeSubmit == 1) return;
+
+      let recordTit = "";
+
+      val.json.forEach(e => {
+        e.children.forEach(i => {
+          if (i.id == this.secondId) {
+            recordTit = i.name;
+            i.cogSum = val.cogSummary;
+          }
+        });
+      });
+
+      let params = [
+        {
+          uid: this.userid, //修改人id
+          tid: val.id,
+          typ: this.pType,
+          json: JSON.stringify(val.json),
+          rjson: JSON.stringify({
+            rjson: val.json,
+            text: `按指标,修改了${recordTit}概述`
+          })
+        }
+      ];
+      // return console.log(params);
+      this.ajax
+        .post(this.$store.state.api + "updateExamineCogDataCopy", params)
+        .then(res => {
+          this.getSecondData();
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+
+    // 一键保存:将默认分数什么一键提交
+    async allSubmit() {
+      this.$confirm("确认保存?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: " info"
+      })
+        .then(() => {
+          this.evaScoDig = true;
+          this.handleAllSubmit();
+        })
+        .catch(() => {
+          this.handleData();
+
+          this.$message({
+            type: "info",
+            message: "已取消保存"
+          });
+        });
+    },
+    // 处理一键保存
+    async handleAllSubmit() {
+      for (const e of this.tableData) {
+        if (e.judge == 1) {
+          await this.computedAllSubmit(e);
+        }
+      }
+      this.getSecondData(); // 循环结束后执行getSecondData函数
+      this.$message.success("已保存");
+    },
+    computedAllSubmit(val) {
+      if (val.cogSco > val.score) {
+        val.cogSco = val.score;
+      }
+
+      val.json.forEach(e => {
+        e.children.forEach(i => {
+          if (i.id == this.secondId) {
+            i.sco2 = val.cogSco;
+            i.cogSum = val.cogSummary;
+          }
+        });
+      });
+
+      let params = [
+        {
+          uid: this.userid,
+          tid: val.id,
+          typ: this.pType,
+          json: JSON.stringify(val.json),
+          rjson: JSON.stringify({
+            rjson: val.json,
+            text: `按指标,进行了一键保存`
+          })
+        }
+      ];
+      // return console.log(params);
+
+      return new Promise(resolve => {
+        this.ajax
+          .post(this.$store.state.api + "updateExamineCogDataCopy", params)
+          .then(res => {
+            resolve(res);
+          })
+          .catch(error => {
+            console.log(error);
+          });
+      });
+    },
+
+    // 关闭评分弹框
+    handleClose(done) {
+      this.getPageBase();
+      done();
+    },
+    // 关闭数据来源弹框
+    handleClose2(done) {
+      this.evaScoDig = true;
+      this.getSecondData();
+      done();
+    }
+  }
+};
+</script>
+
+<style scoped>
+.orgDataCss {
+  cursor: pointer;
+  margin-bottom: 10px;
+  color: #528df6;
+}
+/* 取消[type='number']的input的上下箭头 */
+input::-webkit-inner-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input::-webkit-outer-spin-button {
+  -webkit-appearance: none !important;
+}
+
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+
+.tArea {
+  box-sizing: border-box;
+  padding: 5px;
+  /* border: none; */
+  min-height: 50px;
+  width: 100%;
+  height: 100%;
+  resize: none;
+  outline-style: none;
+  border-radius: 4px;
+  border: 1px solid #dcdfe6 !important;
+}
+.scoTab >>> .cell {
+  line-height: normal;
+}
+
+.ScoreStep {
+  height: 50px;
+}
+.ScoreStep > input {
+  height: 100% !important;
+  outline-style: none;
+  padding: 5px;
+  box-sizing: border-box;
+  border-radius: 4px;
+  text-align: center;
+  border: 1px solid #dcdfe6 !important;
+}
+
+.ScoreStep >>> .el-input-number {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input {
+  height: 100% !important;
+}
+.ScoreStep >>> .el-input__inner {
+  height: 100%;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.diaScoreTop {
+  display: flex;
+  justify-content: space-between;
+  height: 60px;
+}
+
+.diaScoreLeft {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.diaScoreLeft > div {
+  margin-right: 30px;
+}
+
+.diaScoreRight {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.TabBtn {
+  cursor: pointer;
+  color: #528df6;
+}
+
+.sBox_table {
+  width: 100%;
+  min-width: calc(150px * 7);
+  margin: 0 auto;
+  /* min-width: 1520px; */
+  font-size: 14px;
+  border-left: 1px #ccc solid;
+  border-right: 1px #ccc solid;
+}
+
+.table_title {
+  width: 100%;
+  min-width: calc(150px * 9);
+  height: 50px;
+  background: #e0eafb;
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+
+.table_title > div {
+  width: calc(100% / 9);
+  min-width: 150px;
+  text-align: center;
+  height: 100%;
+  line-height: 50px;
+  border-right: 1px solid #d5d8df;
+}
+
+.table_title2 {
+  width: 100%;
+  min-width: calc(150px * 8);
+  height: 50px;
+  background: #e0eafb;
+  border: 1px solid #d5d8df;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+}
+.table_title2 > div {
+  width: calc(100% / 8);
+  min-width: 150px;
+  text-align: center;
+  height: 100%;
+  line-height: 50px;
+  border-right: 1px solid #d5d8df;
+}
+
+.table_title > div:last-child {
+  border: none;
+}
+
+.table_Content {
+  width: 100%;
+  min-width: calc(150px * 9);
+  /* border: 1px solid #d5d8df; */
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  text-align: center;
+  align-items: center;
+}
+.table_Content2 {
+  width: 100%;
+  min-width: calc(150px * 8);
+  /* border: 1px solid #d5d8df; */
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  text-align: center;
+  align-items: center;
+}
+
+.twoCol {
+  width: 100%;
+  display: flex;
+}
+
+.ColTit {
+  width: calc(100% / 9);
+  min-width: 150px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-bottom: 1px #ccc solid;
+}
+.ColTit2 {
+  width: calc(100% / 8);
+  min-width: 150px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-bottom: 1px #ccc solid;
+}
+.twoCon {
+  display: flex;
+}
+
+.twoCon > div {
+  width: calc(100% / 8);
+  min-width: 150px;
+  min-height: 50px;
+  /* line-height: 50px; */
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-left: 1px #ccc solid;
+  border-bottom: 1px #ccc solid;
+}
+.twoCon2 {
+  display: flex;
+}
+.twoCon2 > div {
+  width: calc(100% / 7);
+  min-width: 150px;
+  min-height: 50px;
+  /* line-height: 50px; */
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-left: 1px #ccc solid;
+  border-bottom: 1px #ccc solid;
+}
+
+.ColCon {
+  flex: 1;
+}
+
+.dialog_diy >>> .el-dialog {
+  height: 95%;
+  margin: 0 auto !important;
+  margin-top: 20px !important;
+  overflow: hidden;
+}
+
+.dialog_diy >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 25px 20px;
+}
+
+.dialog_diy >>> .el-dialog__body {
+  height: calc(100% - 50px);
+  box-sizing: border-box;
+  padding: 0px;
+}
+
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 19px;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fafafa;
+}
+</style>

+ 189 - 0
src/components/pages/sassPlatform/view/examine/index.vue

@@ -0,0 +1,189 @@
+<template>
+  <div class="testExamine">
+    <div class="testTit">
+      <div class="teaLis">
+        <div
+          class="teal"
+          v-if="bArray.length"
+          @click="cutPage(2)"
+          :class="[pType == 2 ? 'Tbor' : '']"
+        >
+          专任教师
+        </div>
+        <div
+          class="teal"
+          v-if="aArray.length"
+          @click="cutPage(1)"
+          :class="[pType == 1 ? 'Tbor' : '']"
+        >
+          班主任
+        </div>
+      </div>
+      <div class="operate">
+        <el-input
+          v-if="cutTable == 1"
+          v-model="teacherName"
+          @change="selectTeaName"
+          placeholder="请输入教师姓名"
+        ></el-input>
+        <div style="margin: 0 20px;">
+          <el-select v-model="cutTable" placeholder="请选择">
+            <el-option
+              v-for="item in cutTabOpts"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div
+          v-if="cutTable == 1"
+          class="remindBtn"
+          style="margin-right: 20px;"
+          @click="excelBtn"
+        >
+          导出
+        </div>
+        <div v-if="cutTable == 1" class="remindBtn" @click="personBtn">
+          提醒
+        </div>
+      </div>
+    </div>
+    <div class="testCon">
+      <targetPage :pType="pType" v-if="cutTable == 0"></targetPage>
+      <personPage
+        ref="child"
+        :pType="pType"
+        :teacherName="teacherName"
+        v-if="cutTable == 1"
+      ></personPage>
+    </div>
+  </div>
+</template>
+
+<script>
+import personPage from "./conpoments/personPage.vue";
+import targetPage from "./conpoments/targetPage";
+
+export default {
+  components: {
+    personPage,
+    targetPage
+  },
+  data() {
+    return {
+      aArray: [],
+      bArray: [],
+      oid: this.$route.query.oid,
+      org: this.$route.query.org,
+      pType: 2,
+      cutTable: 0,
+      teacherName: "",
+      cutTabOpts: [
+        {
+          value: 0,
+          label: "按指标"
+        },
+        {
+          value: 1,
+          label: "按人员"
+        }
+      ]
+    };
+  },
+  mounted () {
+      this.getPageBase2(1)
+      this.getPageBase2(2)
+  },
+  methods: {
+    getPageBase2(type) {
+      let params = {
+        typ: type,
+        org: this.org,
+        oid: this.oid
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineBase", params)
+        .then(res => {
+          console.log('1111111111111111111111', res.data);
+          
+          if(type == 1){
+            this.aArray = res.data[0];
+          }else {
+            this.bArray = res.data[0];
+            if(!this.bArray.length){
+              this.pType = 1
+            }
+          }
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
+    cutPage(e) {
+      this.pType = e;
+    },
+    selectTeaName() {
+      this.$refs.child.getData();
+    },
+    excelBtn() {
+      this.$refs.child.getExcel();
+    },
+    personBtn() {
+      this.$refs.child.remindExamine();
+    }
+  }
+};
+</script>
+
+<style scoped>
+.testExamine {
+  width: 100%;
+  /* min-width: calc(150px * 10); */
+  min-height: 100%;
+  padding: 10px;
+  overflow: auto;
+  box-sizing: border-box;
+  background-color: #fff;
+}
+.testExamine > .testTit {
+  height: 70px;
+  display: flex;
+  box-sizing: border-box;
+  padding: 0 20px;
+  justify-content: space-between;
+  align-items: center;
+}
+.teaLis {
+  display: flex;
+}
+.teal {
+  padding: 10px 20px;
+  cursor: pointer;
+}
+.Tbor {
+  border-bottom: 2px rgba(54, 129, 252, 1) solid;
+  font-weight: 600;
+}
+.testCon {
+  box-sizing: border-box;
+  padding: 20px;
+}
+.operate {
+  display: flex;
+}
+.operate >>> .el-input {
+  width: 200px !important;
+}
+.operate > .remindBtn {
+  background: #409eff;
+  padding: 10px 15px;
+  box-sizing: border-box;
+  width: 90px;
+  text-align: center;
+  border-radius: 4px;
+  cursor: pointer;
+  color: #fff;
+}
+</style>

+ 145 - 26
src/components/pages/sassPlatform/view/tableView.vue

@@ -2,10 +2,10 @@
   <div class="tableView">
     <div class="tv_header">
       <div class="tv_h_left">
-        <span :class="{ tagActive: tagIndex == 0 }" @click="tagIndex = 0"
+        <span :class="{ tagActive: tagIndex == 0 }" @click="changeTagIndex(0)"
           >按表单查看</span
         >
-        <span :class="{ tagActive: tagIndex == 1 }" @click="tagIndex = 1"
+        <span :class="{ tagActive: tagIndex == 1 }" @click="changeTagIndex(1)"
           >按人员查看</span
         >
       </div>
@@ -26,34 +26,33 @@
     </div>
     <div class="tv_bottom">
       <el-table
-        v-show="tagIndex == 0"
+        v-if="tagIndex == 0"
         :data="showTableData"
         border
         style="width: 100%"
+        v-loading="tableLoading"
       >
         <el-table-column type="index" width="80" label="序号"></el-table-column>
+        <el-table-column prop="title" width="400" label="表单名称">
+        </el-table-column>
+        <el-table-column prop="typeN" width="200" label="所属栏目">
+        </el-table-column>
         <el-table-column
-          type="title"
-          width="400"
-          label="表单名称"
-        ></el-table-column>
-        <el-table-column
-          type="type"
-          width="200"
-          label="所属栏目"
-        ></el-table-column>
-        <el-table-column
-          type="creator"
+          prop="uname"
           width="150"
           label="创建人"
         ></el-table-column>
         <el-table-column
-          type="status"
+          prop="look"
           width="150"
           label="表单状态"
-        ></el-table-column>
+        >
+        <template slot-scope="scope">
+          <span>{{ getLook(scope.row) }}</span>
+        </template>
+      </el-table-column>
         <el-table-column
-          type="num"
+          prop="worksCount"
           width="150"
           label="提交数量"
         ></el-table-column>
@@ -68,35 +67,36 @@
         </el-table-column>
       </el-table>
       <el-table
-        v-show="tagIndex == 1"
+        v-if="tagIndex == 1"
         :data="showTableData"
         border
         style="width: 100%"
+        v-loading="tableLoading"
       >
         <el-table-column type="index" width="80" label="序号"></el-table-column>
-        <el-table-column type="name" width="200" label="姓名"></el-table-column>
+        <el-table-column prop="name" width="200" label="姓名"></el-table-column>
         <el-table-column
-          type="subject"
+          prop="subject"
           width="200"
           label="学科"
         ></el-table-column>
         <el-table-column
-          type="class"
+          prop="class"
           width="200"
           label="年级"
         ></el-table-column>
         <el-table-column
-          type="teachingAge"
+          prop="teachingAge"
           width="200"
           label="教龄"
         ></el-table-column>
         <el-table-column
-          type="submitted"
+          prop="submitted"
           width="200"
           label="已提交数量"
         ></el-table-column>
         <el-table-column
-          type="completed"
+          prop="completed"
           width="200"
           label="已完成表单"
         ></el-table-column>
@@ -112,14 +112,133 @@
 
 <script>
 export default {
+  props: {
+    typeId: {
+      type: String,
+      default: ""
+    },
+    typeList: {
+      type: Array,
+      default: () => []
+    }
+  },
   data() {
     return {
       tableData: [],
-      tableData2: [],
       tagIndex: 0,
       searchValue: "",
-      showTableData: []
+      showTableData: [],
+      userId: this.$route.query.userid,
+      oid: this.$route.query.oid,
+      org: this.$route.query.org,
+      tableLoading: false
     };
+  },
+  computed: {
+    typeString() {
+      let _result = "";
+      _result = this.typeList.map(i => i.id);
+      _result.push(this.typeId);
+      _result = _result.join(",");
+      return _result;
+    },
+    getLook() {
+      return function(item) {
+        let content = "";
+        if (item.look == "1" || item.look == "") {
+          content = "未发布";
+        }
+        let now = new Date().getTime();
+        let isTime = item.over_at && new Date(item.over_at).getTime();
+        if (
+          item.over_at &&
+          item.look == "2" &&
+          now > isTime &&
+          ((item.isUserCount > 0 && item.isUserCount > item.worksPerson) ||
+            item.isUserCount == 0)
+        ) {
+          content = "逾期";
+        }
+
+        if (
+          ((item.over_at && item.look == "2" && isTime > now) ||
+            (!item.over_at && item.look == "2")) &&
+          ((item.isUserCount == 0 && item.worksPerson > 0) ||
+            (item.isUserCount > 0 &&
+              0 < item.worksPerson &&
+              item.worksPerson < item.isUserCount))
+        ) {
+          content = "进行中";
+        }
+
+        if (
+          ((item.over_at && item.look == "2" && isTime > now) ||
+            (!item.over_at && item.look == "2")) &&
+          item.worksPerson == 0
+        ) {
+          content = "未进行";
+        }
+
+        if (
+          item.look == "2" &&
+          item.isUserCount > 0 && item.isUserCount <= item.worksPerson
+        ) {
+          content = "已完成";
+        }
+        return content;
+      };
+    }
+  },
+  watch: {
+    typeId() {
+      this.getData();
+    }
+  },
+  methods: {
+    getData() {
+      this.tableData = [];
+      this.showTableData = [];
+      if (this.tagIndex == 0) {
+        this.getFormData();
+      } else if (this.tagIndex == 1) {
+      }
+    },
+    getFormData() {
+      let params = {
+        uid: this.userId,
+        type: 0,
+        oid: this.oid,
+        org: this.org,
+        typeId: this.typeString,
+        textValue: this.searchValue
+      };
+      // 4:所有人
+      // 2:他人
+      // 0:我的
+      this.tableLoading = true;
+      this.ajax
+        .get(this.$store.state.api + "selectTesttCourse_sass", params)
+        .then(res => {
+          let _data = res.data[0];
+          if (_data.length > 0) {
+            this.tableData = _data;
+            this.showTableData = this.tableData;
+          }
+          this.tableLoading = false;
+        })
+        .catch(e => {
+          console.log(e);
+          this.tableLoading = false;
+        });
+    },
+    changeTagIndex(newTag) {
+      this.tagIndex = newTag;
+      this.searchValue = "";
+      this.getData();
+    }
+  },
+  mounted() {
+    this.getData();
   }
 };
 </script>

+ 12 - 1
src/components/pages/test/add/edit/check/number.vue

@@ -31,7 +31,7 @@
           <div class="detail" v-if="checkJson.detail" v-html="checkJson.detail"
               style="color: #00000066;margin-top: 5px;"></div>
           <div class="choices">
-            <el-input-number :controls="false" v-model="checkJson.answer2" :precision="numberTypePrecision" :placeholder="numberTypePlaceholder[checkJson.type]"></el-input-number>
+            <el-input style="width: 250px;" @change="handleInput" v-model="inputValue" :placeholder="numberTypePlaceholder[checkJson.type]"></el-input>
             <span v-if="checkJson.type=='4'">%</span>
               <!-- <textarea  :readonly="checktype == 2" rows="2" v-autoHeight="68" class="binfo_input binfo_textarea" cols v-model="checkJson.answer"
                   placeholder=""></textarea> -->
@@ -75,6 +75,7 @@ export default {
             "3":"请输入数字并保留两位小数",
             "4":"请输入百分比"
           },
+          inputValue: '',      // 原始输入内容
       }
   },
   watch: {
@@ -114,6 +115,16 @@ export default {
       depthCopy(s) {
           return JSON.parse(JSON.stringify(s));
       },
+      handleInput(value){
+        const num = parseFloat(value);
+        if(isNaN(num)){
+          this.inputValue = "";
+          this.$message.error("仅支持输入文字")
+        }else{
+          this.checkJson.answer2 = num.toFixed(this.numberTypePrecision);
+          this.inputValue = num.toFixed(this.numberTypePrecision);
+        }
+      },
   },
   mounted() {
       this.checkJson = this.cJson ? this.depthCopy(this.cJson) : undefined

+ 4 - 4
src/components/pages/testPerson/examine/index.vue

@@ -45,11 +45,11 @@
         <div class="table_title">
           <div style="width: 110px;">一级指标</div>
           <div style="width: 140px;">二级指标</div>
-          <div style="width: 140px;">评价方法</div>
+          <div style="width: 700px;">评价方法</div>
           <div style="width: 100px;">分值</div>
           <div style="width: 100px;">自评</div>
           <div style="flex: 1;">自评概述</div>
-          <div style="flex: 1;">数据来源</div>
+          <div style="flex: 0.5;">数据来源</div>
           <!-- <div style="width: 100px;">认定</div>
           <div style="flex: 1;">认定概述</div> -->
         </div>
@@ -763,7 +763,7 @@ input[type="number"] {
   width: 140px !important;
 }
 .twoCon > div:nth-child(2) {
-  width: 140px !important;
+  width: 700px !important;
 }
 .twoCon > div:nth-child(3) {
   width: 100px !important;
@@ -775,7 +775,7 @@ input[type="number"] {
   flex: 1;
 }
 .twoCon > div:nth-child(6) {
-  flex: 1;
+  flex: 0.5;
 }
 .twoCon > div:nth-child(7) {
   width: 100px !important;

+ 1 - 1
src/components/pages/testPerson/test/index.vue

@@ -609,7 +609,7 @@ export default {
     },
     getNavType() {
       let params = {
-        oid: this.oid
+        oid: "",//this.oid
       };
       this.ajax
         .get(this.$store.state.api + "selectTestType", params)

+ 14 - 1
src/components/pages/testStudent/view/component/number.vue

@@ -31,7 +31,7 @@
           <div class="detail" v-if="checkJson.detail" v-html="checkJson.detail"
               style="color: #00000066;margin-top: 5px;"></div>
           <div class="choices">
-            <el-input-number :controls="false" v-model="checkJson.answer2" :precision="numberTypePrecision" :placeholder="numberTypePlaceholder[checkJson.type]"></el-input-number>
+            <el-input style="width: 250px;" @change="handleInput" v-model="inputValue" :placeholder="numberTypePlaceholder[checkJson.type]"></el-input>
             <span v-if="checkJson.type=='4'">%</span>
               <!-- <textarea  :readonly="checktype == 2" rows="2" v-autoHeight="68" class="binfo_input binfo_textarea" cols v-model="checkJson.answer"
                   placeholder=""></textarea> -->
@@ -75,6 +75,7 @@ export default {
             "3":"请输入数字并保留两位小数",
             "4":"请输入百分比"
           },
+          inputValue:"",
       }
   },
   watch: {
@@ -114,14 +115,26 @@ export default {
       depthCopy(s) {
           return JSON.parse(JSON.stringify(s));
       },
+      handleInput(value){
+        const num = parseFloat(value);
+        if(isNaN(num)){
+          this.inputValue = "";
+          this.$message.error("仅支持输入文字")
+        }else{
+          this.checkJson.answer2 = num.toFixed(this.numberTypePrecision);
+          this.inputValue = num.toFixed(this.numberTypePrecision);
+        }
+      },
   },
   mounted() {
       this.checkJson = this.cJson ? this.depthCopy(this.cJson) : undefined
       if(this.checkJson.answer2){
           setTimeout(() => {
               this.checkJson.answer2 += "*0*%*";
+
               setTimeout(() => {
                   this.checkJson.answer2 = this.checkJson.answer2.replaceAll("*0*%*", "");
+                  this.inputValue = this.checkJson.answer2
               }, 0);
           }, 100);
       }

Some files were not shown because too many files changed in this diff