<template>
  <div class="pb_content" style="width: 100%">
    <div
      class="pb_head"
      style="
        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
        justify-content: space-between;
        align-items: center;
      "
    >
      <div>
        <span>评分管理</span>
      </div>
      <div @click="goTo('/eventCenter?steps=' + '1')" class="clear">返回</div>
    </div>
    <div class="touTop" v-if="CourseType.length > 0">
      <div class="touLeft">
        <div class="sTop">
          <div>
            <div
              class="all_choose"
              v-for="(item, index) in CourseType[0]"
              :key="index"
            >
              <span>{{ item.name }}</span>
              <el-select
                v-model="courseTypeId[item.id]"
                placeholder="请选择"
                @change="search"
              >
                <el-option label="全部" value="1">全部</el-option>
                <el-option
                  v-for="item1 in CourseTypeJson[item.id]"
                  :key="item1.id"
                  :label="item1.name"
                  :value="item1.id"
                >
                </el-option>
              </el-select>
            </div>
          </div>
          <div @click="clear" class="clear">重置</div>
        </div>
        <div class="aName">
          <div class="search" @click="search">
            <img src="../../../assets/icon/search.png" alt="" />
          </div>
          <el-input
            v-model="anliName"
            auto-complete="off"
            placeholder="请输入案例名称"
          ></el-input>
          <!-- @input="search" -->
        </div>
      </div>
      <!-- 导出所有评分数据 -->
      <!-- <el-button
        v-show="false"
        type="primary"
        size="small"
        @click="exportAllScore"
        style="margin-right: 10px"
        >导出Excel</el-button
      > -->
      <!-- 导出个人评分数据 -->
      <!-- <el-button
        v-show="false"
        type="primary"
        size="small"
        @click="exportScoreByUid"
        style="margin-right: 10px"
        >导出Excel</el-button
      > -->
    </div>
    <div v-if="isNoTableData" class="isNoMessage">
      <img src="../../../assets/icon/isNoMessage.png" alt />
    </div>
    <div
      class="pb_content_body"
      style="margin: 0 auto"
      v-if="tableData.length > 0"
    >
      <div class="student_table">
        <el-table
          ref="table"
          :data="tableData"
          border
          :height="tableHeight"
          :fit="true"
          v-loading="isLoading"
          style="width: 100%"
					@sort-change="ownScoreSort"
          :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
          :row-class-name="tableRowClassName"
					:default-sort = "{prop: 'ownScore', order: 'descending'}"
        >
          <el-table-column label="序号" min-width="5" align="center">
            <template slot-scope="scope">
              <div>
                {{ (page - 1) * 10 + scope.$index + 1 }}
              </div>
            </template>
          </el-table-column>
          <el-table-column
            label="创建人"
            min-width="5"
            align="center"
            v-if="false"
          >
            <template slot-scope="scope">
              <div class="userImg">
                <div>
                  {{ scope.row.uname }}
                </div>
              </div>
            </template>
          </el-table-column>
          <el-table-column label="项目案例" min-width="20" align="center">
            <template slot-scope="scope">
              <div>
                {{ scope.row.info.title ? scope.row.info.title : "暂无名称" }}
              </div>
            </template>
          </el-table-column>
					<el-table-column
            label="案例分类"
            min-width="20"
            align="center"
            v-if="tType == 2"
          >
            <template slot-scope="scope">
              <div>{{ scope.row.typename ? scope.row.typename : "-" }}</div>
            </template>
          </el-table-column>
				
    			  <el-table-column
          	  label="我的评分"
          	  min-width="10"
          	  align="center"
							prop="ownScore"
							sortable="custom"
          	  v-if="tType == 2"
          	>
						<template slot="header">
							<div style="display: flex;float: left;align-items: center;position: relative;">
								<el-tooltip effect="light" :content="`一等90分以上 占比${ratingData.one[1]}%，二等75-89 占比${ratingData.two[1]}%，三等60-74 占比${ratingData.three[1]}%`" placement="top">
									<div style="position:relative;left:15px;top:5px;">我的评分</div>
								</el-tooltip>
							</div>
						</template>
          	  <template slot-scope="scope">
          	    <div>{{ scope.row.ownScore ? scope.row.ownScore : "-" }}</div>
          	  </template>
          	</el-table-column>
    			
          
          <el-table-column
            label="所属单位"
            min-width="10"
            align="center"
            v-if="tType == 0"
          >
            <template slot-scope="scope">
              <div>
                {{ scope.row.school ? scope.row.school : "暂无单位" }}
              </div>
            </template>
          </el-table-column>
          <el-table-column
            label="评委姓名/分数"
            min-width="10"
            align="center"
            v-if="tType == 0"
          >
            <template slot-scope="scope">
              <div
                v-for="(item, index) in scope.row.scoreList"
                :key="index"
                v-if="scope.row.scoreList.length > 0"
              >
                {{ item.name + "/" + item.score }}
              </div>
              <div v-else>"-"</div>
            </template>
          </el-table-column>
          <!-- <el-table-column
            label="评委姓名/分数"
            min-width="10"
            align="center"
            v-if="tType == 0"
          >
            <template slot-scope="scope">
              <div>
                {{
                  scope.row.secondPw
                    ? scope.row.secondPw.name + "/" + scope.row.secondPw.score
                    : "-"
                }}
              </div>
            </template>
          </el-table-column> -->
          <el-table-column
            label="平均得分"
            min-width="10"
            align="center"
						sortable="custom"
            v-if="tType == 0"
          >
					<template slot="header">
							<div style="display: flex;float: left;align-items: center;position: relative;">
								<el-tooltip effect="light" :content="`一等90分以上 占比${ratingDataAdmin.one[1]}%，二等75-89 占比${ratingDataAdmin.two[1]}%，三等60-74 占比${ratingDataAdmin.three[1]}%`" placement="top">
									<div style="position:relative;left:40px;top:5px;">平均得分</div>
								</el-tooltip>
							</div>
						</template>
            <template slot-scope="scope">
              <div>{{ scope.row.sum ? scope.row.sum : "-" }}</div>
            </template>
          </el-table-column>
          
          <!-- <el-table-column
            label="所获奖项"
            min-width="10"
            align="center"
            v-if="tType == 2"
          >
            <template slot-scope="scope">
              <div>
                {{
                  scope.row.award == 1
                    ? "特等奖"
                    : scope.row.award == 2
                    ? "一等奖"
                    : scope.row.award == 3
                    ? "二等奖"
                    : scope.row.award == 4
                    ? "三等奖"
                    : scope.row.award == 5
                    ? "四等奖"
                    : "-"
                }}
              </div>
            </template>
          </el-table-column> -->
          <el-table-column
            label="时间"
            min-width="10"
            align="center"
            v-if="tType == 2"
          >
            <template slot-scope="scope">
              <div>{{ scope.row.scoreTime ? scope.row.scoreTime : "-" }}</div>
            </template>
          </el-table-column>
          <el-table-column label="操作" min-width="20">
            <template slot-scope="scope">
              <div class="tableButton">
                <div
                  v-if="tType == 0"
                  @click="
                    goTo(
                      '/anliDetail?aid=' +
                        scope.row.id +
                        '&userid=' +
                        userid +
                        '&oid=' +
                        oid +
                        '&org=' +
                        org +
                        '&tType=' +
                        tType
                    )
                  "
                >
                  查看
                </div>
                <!-- <div @click="openScore(scope.row, 1)">立即评分</div> -->
                <div
                  v-if="tType == 2"
                  @click="
                    goTo(
                      '/anliDetail?aid=' +
                        scope.row.id +
                        '&userid=' +
                        userid +
                        '&oid=' +
                        oid +
                        '&org=' +
                        org +
                        '&tType=' +
                        tType
                    )
                  "
                >
                  立即评分
                </div>
                <!-- <div @click="openScore(scope.row, 2)">推荐</div> -->
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="student_page">
        <el-pagination
          background
          layout="prev, pager, next"
          :page-size="10"
          :total="total"
          v-if="page && tableData.length"
          style="padding-bottom: 20px"
          @current-change="handleCurrentChange"
        >
        </el-pagination>
				<div class="rating_information" v-if="tType=='2'">
					<div class="ri-card" style="background-color: #E2F0D9;">90分以上：{{ratingData.one[0]}}个 {{ratingData.one[1]}}%</div>
					<div class="ri-card" style="background-color: #E2F0D9;">89-75分：{{ratingData.two[0]}}个 {{ratingData.two[1]}}%</div>
					<div class="ri-card" style="background-color: #FCE4D6 ;">74-60分以上：{{ratingData.three[0]}}个 {{ratingData.three[1]}}%</div>
					<div class="ri-card" style="background-color: #E7E6E6;">未评分：{{ratingData.four[0]}}个 {{ratingData.four[1]}}%</div>
				</div>
				<div class="rating_information" v-if="tType=='0'">
					<div class="ri-card" style="background-color: #E2F0D9;">90分以上：{{ratingDataAdmin.one[0]}}个 {{ratingDataAdmin.one[1]}}%</div>
					<div class="ri-card" style="background-color: #E2F0D9;">89-75分：{{ratingDataAdmin.two[0]}}个 {{ratingDataAdmin.two[1]}}%</div>
					<div class="ri-card" style="background-color: #FCE4D6 ;">74-60分以上：{{ratingDataAdmin.three[0]}}个 {{ratingDataAdmin.three[1]}}%</div>
					<div class="ri-card" style="background-color: #E7E6E6;">未评分：{{ratingDataAdmin.four[0]}}个 {{ratingDataAdmin.four[1]}}%</div>
				</div>
      </div>
    </div>
    <el-dialog
      title="评分"
      :visible.sync="dialogVisibleScore"
      :append-to-body="true"
      width="25%"
      height="80%"
      :before-close="handleClose"
      class="dialog_diy customWidth1"
    >
      <div class="scoreBox" v-for="(s, sIndex) in scoreDetail" :key="sIndex">
        <div class="scoreCss">
          <div class="scoreTitle">
            <div><img src="../../../assets/avatar.png" alt="" /></div>
            <div>{{ s.uname }}</div>
          </div>
          <div class="anliTitle">
            <div>案例名称</div>
            <div>{{ s.title }}</div>
          </div>
          <div class="anliBrief">
            <div>案例简介</div>
            <div style="width: 650px; height: 150px; overflow: auto">
              {{ s.detail }}
            </div>
          </div>
          <div class="anliScore">
            <div>请选择评分</div>
            <div>
              <div class="scoreDiv">
                <div>项目式学习</div>
                <div>
                  <el-input
                    placeholder="输入分数"
                    v-model="s.scoreAll.first"
                    @change="isNumber($event, 1)"
                  ></el-input>
                </div>
              </div>
              <div class="scoreDiv">
                <div>项目成果</div>
                <div>
                  <el-input
                    placeholder="输入分数"
                    v-model="s.scoreAll.second"
                    @change="isNumber($event, 2)"
                  ></el-input>
                </div>
              </div>
              <div class="scoreDiv">
                <div>项目评价</div>
                <div>
                  <el-input
                    placeholder="输入分数"
                    v-model="s.scoreAll.third"
                    @change="isNumber($event, 3)"
                  ></el-input>
                </div>
              </div>
              <!-- <div class="scoreDiv">
                <div>评审维度4</div>
                <div>
                  <el-input
                    placeholder="输入分数"
                    v-model="s.scoreAll.fourth"
                    @change="isNumber($event, 4)"
                  ></el-input>
                </div>
              </div>
              <div class="scoreDiv">
                <div>评审维度5</div>
                <div>
                  <el-input
                    placeholder="输入分数"
                    v-model="s.scoreAll.fivth"
                    @change="isNumber($event, 5)"
                  ></el-input>
                </div>
              </div> -->
            </div>
          </div>
          <div class="anliContent">
            <textarea
              :rows="5"
              class="tAreaCss"
              placeholder="请输入评语。"
              v-model="s.scoreAll.content"
            ></textarea>
          </div>
          <div class="addScore" @click="addScore">进行评分</div>
        </div>
      </div>
    </el-dialog>
    <el-dialog
      title="推荐省级评奖"
      :visible.sync="dialogVisibleRecommend"
      :append-to-body="true"
      width="25%"
      height="80%"
      :before-close="handleClose"
      class="dialog_diy customWidth1"
    >
      <div v-for="(r, rIndex) in scoreDetail" :key="rIndex">
        <div class="reTitle">
          <div>案例名称</div>
          <div>{{ r.title }}</div>
        </div>
        <div class="reDetail">
          <div>案例简介</div>
          <div>{{ r.detail }}</div>
        </div>
        <div class="reScore">
          <div>当前得分</div>
          <div>
            <span>{{ r.sumScore }}</span
            >分
          </div>
        </div>
        <div class="reBottom">
          <div>提示:点击确定提交，即可推送到市级进行评奖</div>
          <div @click="dialogVisibleRecommend = false">取消</div>
          <div @click="addRecommend">确定提交</div>
        </div>
      </div>
    </el-dialog>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userid: this.$route.query.userid
        ? this.$route.query.userid
        : this.$cookies.get("teacherInfo").userid,
      oid: this.$route.query.oid
        ? this.$route.query.oid
        : this.$cookies.get("teacherInfo").oid,
      org: this.$route.query.org
        ? this.$route.query.org
        : this.$cookies.get("teacherInfo").org,
      tType: this.$route.query.type
        ? this.$route.query.type
        : this.$cookies.get("teacherInfo").type,
      page: 1,
      total: 0,
      // anliType: "",
      tableHeight: "100%",
      isLoading: false,
      CourseType: [],
      CourseTypeJson: {},
      courseTypeId: {},
      courseTypeSon: [],
      anliName: "",
      anliBox: "",
      tableData: [],
			scoreListData:[],
			allScoreList:[],
			scoreFn:2,// 0 默认 1 升序  2 降序
      reviewer: "",
      reviewerBox: [],
      checkboxList: [],
      checkboxIdList: [],
      isNoTableData: false,
      isIndeterminate: false,
      checkAll: false,
      dialogVisibleScore: false,
      dialogVisibleRecommend: false,
      scoreDetail: [
        {
          id: "",
          uname: "",
          title: "",
          detail: "",
          scoreAll: {
            first: "",
            second: "",
            third: "",
            // fourth: "",
            // fivth: "",
            content: "",
          },
          sumScore: 0,
        },
      ],
      reCid: "",
    };
  },
	computed: {
	  ratingData(){
			const myScore = this.allScoreList.filter(i=>i.scorer===this.userid)
			
			let one = [0,0];
			let two = [0,0];
			let three = [0,0];
			let four = [0,0];

			myScore.forEach(i=>{
				let score = JSON.parse(i.score);
				let total = (score.first + score.second + score.third)/3;
				if(total>=90){
					one[0]++;
				}else if(total>=75 && total<=89){
					two[0]++;
				}else if(total>=60 && total<=74){
					three[0]++;
				}
			})

			four[0] = this.total-myScore.length;

			one[1] = (one[0]/this.total).toFixed(4)*100
			two[1] = (two[0]/this.total).toFixed(4)*100
			three[1] = (three[0]/this.total).toFixed(4)*100
			four[1] = (four[0]/this.total).toFixed(4)*100
			
			return {one:one,two:two,three:three,four:four}
		},
		ratingDataAdmin(){
			const score = this.scoreListData;

			let one = [0,0];
			let two = [0,0];
			let three = [0,0];
			let four = [0,0];

			score.forEach(i=>{
				let sum = i.sum;
				if(sum===0){
					four[0]++
				}
				if(parseFloat(sum)>=90){
					one[0]++
				}else if(parseFloat(sum)>=75 && parseFloat(sum)<=89){
					two[0]++;
				}else if(parseFloat(sum)>=60 && parseFloat(sum)<=74){
					three[0]++;
				}
			})

			one[1] = (one[0]/this.total).toFixed(4)*100
			two[1] = (two[0]/this.total).toFixed(4)*100
			three[1] = (three[0]/this.total).toFixed(4)*100
			four[1] = (four[0]/this.total).toFixed(4)*100
			
			return {one:one,two:two,three:three,four:four}
		}
	},
  mounted() {
    this.$nextTick(function () {
      this.tableHeight =
        window.innerHeight - this.$refs.table.$el.offsetTop - 200;
      if (this.tableHeight <= 530) {
        this.tableHeight = 530;
      }
      // 监听窗口大小变化
      let self = this;
      window.onresize = function () {
        self.tableHeight =
          window.innerHeight - self.$refs.table.$el.offsetTop - 200;
        if (self.tableHeight <= 530) {
          self.tableHeight = 530;
        }
      };
    });
  },
  methods: {
    tableRowClassName({ row, rowIndex }) {
      if ((rowIndex + 1) % 2 === 0) {
        return "even_row";
      } else {
        return "";
      }
    },
    handleCurrentChange(val) {
      this.page = val;
      this.getAnliList(this.reCid);
    },
    search() {
      this.page = 1;
      this.getAnliList(this.reCid);

    },
    goTo(path) {
      this.$router.push(path);
    },
    isNumber(e, t) {
      if (e.includes(".")) {
        this.$message.error("暂时不支持小数点评分");
      }
      let value = /^\d+$/.test(e);
      // let value = e.replace(/[^d]/g, ""); // 只能输入数字
      if (value == true) {
        if (e < 0) {
          this.$message.error("请输入大于0的数值");
          if (t == 1) {
            this.scoreDetail[0].scoreAll.first = "";
          } else if (t == 2) {
            this.scoreDetail[0].scoreAll.second = "";
          } else {
            this.scoreDetail[0].scoreAll.third = "";
          }
          //  else if (t == 4) {
          //   this.scoreDetail[0].scoreAll.fourth = "";
          // } else {
          //   this.scoreDetail[0].scoreAll.fivth = "";
          // }
          return;
        } else if (e > 100) {
          this.$message.error("数值不能大于100");
          if (t == 1) {
            this.scoreDetail[0].scoreAll.first = "";
          } else if (t == 2) {
            this.scoreDetail[0].scoreAll.second = "";
          } else {
            this.scoreDetail[0].scoreAll.third = "";
          }
          //  else if (t == 4) {
          //   this.scoreDetail[0].scoreAll.fourth = "";
          // } else {
          //   this.scoreDetail[0].scoreAll.fivth = "";
          // }
          return;
        }
      } else {
        if (t == 1) {
          this.scoreDetail[0].scoreAll.first = "";
        } else if (t == 2) {
          this.scoreDetail[0].scoreAll.second = "";
        } else {
          this.scoreDetail[0].scoreAll.third = "";
        }
        //  else if (t == 4) {
        //   this.scoreDetail[0].scoreAll.fourth = "";
        // } else {
        //   this.scoreDetail[0].scoreAll.fivth = "";
        // }
        this.$message.error("请输入数字");
        return;
      }

      // value = value.replace(/^0+(d)/, "$1"); // 第一位0开头，0后面为数字，则过滤掉，取后面的数字
      // value = value.replace(/(d{15})d*/, "$1"); // 最多保留15位整数
      // this.height = value;
    },
    handleClose(done) {
      done();
    },
    clear() {
      for (var i = 0; i < this.CourseType[0].length; i++) {
        this.courseTypeId[this.CourseType[0][i].id] = "";
      }
      this.anliBox = "";
      this.getAnliList(this.reCid);
    },
    getAnliList(rc) {
      this.isLoading = true;
      var typeE = [];
      var typea, typeb, typec, typed;
      for (var i = 0; i < this.CourseType[0].length; i++) {
        if (this.courseTypeId[this.CourseType[0][i].id] == "1") {
          // typeE.push(this.CourseType[0][i].id);
          typeE = [];
        } else if (this.courseTypeId[this.CourseType[0][i].id] != "") {
          typeE.push(this.CourseType[0][i].id);
          if (this.CourseType[0][i].name == "类型") {
            typea = this.courseTypeId[this.CourseType[0][i].id];
          } else if (this.CourseType[0][i].name == "学科") {
            typeb = this.courseTypeId[this.CourseType[0][i].id];
          }
          this.courseTypeSon.push(this.courseTypeId[this.CourseType[0][i].id]);
        }
      }
      let params = {
        typea: typea != undefined ? typea : "",
        typeb: typeb != undefined ? typeb : "",
        typec: typec != undefined ? typec : "",
        typed: typed != undefined ? typed : "",
        typeE: typeE.join(","),
        cn: this.anliBox == "" ? 0 : this.anliBox,
        cid: rc ? rc : "",
        title: this.anliName,
      };
      this.ajax
        .get(this.$store.state.api + "selectPointAll", params)
        .then((res) => {


          this.total = res.data[0].length > 0 ? res.data[0].length : 0;
          var scoreList = res.data[0];
					this.scoreListData = scoreList;
          for (var i = 0; i < scoreList.length; i++) {
            scoreList[i].info = JSON.parse(scoreList[i].info);
            if (scoreList[i].score != null) {
              var point = JSON.parse(scoreList[i].score);
              var a = parseInt(point.first);
              var b = parseInt(point.second);
              var c = parseInt(point.third);
              var sumScore = Math.round((a + b + c) / 3);
              scoreList[i].sum = sumScore;
            }
          }
          
					// 降序
					// scoreList.sort((item1, item2) => item2.sum - item1.sum);
					// 升序
					// scoreList.sort((item1, item2) => item1.sum - item2.sum);
					
					
          // const start = (this.page - 1) * 10;
          // const end = start + 10;
          // let pageData = scoreList.slice(start, end);
          this.selectPwScore(scoreList);
          this.isLoading = false;
        })
        .catch((err) => {
          console.error(err);
        });
    },
    selectPwScore(p) {
      this.ajax
        .get(this.$store.state.api + "selectAllScore")
        .then((res) => {
          var scoreList = res.data[0];
					this.allScoreList = scoreList;
          for (var j = 0; j < p.length; j++) {
            let sum = 0;
            let isScore = 0;
            p[j].scoreList = [];
            for (var i = 0; i < scoreList.length; i++) {
              if (p[j].id == scoreList[i].rid) {
                var point = JSON.parse(scoreList[i].score);
                var a = parseInt(point.first);
                var b = parseInt(point.second);
                var c = parseInt(point.third);
                var sumScore = Math.round((a + b + c) / 3);
                sum += sumScore;
                isScore++;
                if (scoreList[i].scorer == this.userid) {
                  if (!p[j].ownScore) {
                    p[j].ownScore = sumScore;
                  }
                }
                p[j].scoreList.push({
                  name: scoreList[i].scoreName,
                  score: sumScore,
                });
                //  else {
                //   if (!p[j].secondPw) {
                //     p[j].secondPw = {
                //       score: sumScore,
                //       name: scoreList[i].scoreName,
                //     };
                //   }
                // }
              }
            }
            p[j].sum = isScore == 0 ? 0 : (sum / isScore).toFixed(2);
          }

					if(this.scoreFn===1){//升序
						// 升序
						p.sort((a, b) => {
						    let aScore = a.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?a.ownScore:a.sum===0?Number.MAX_VALUE: parseFloat(a.sum) : Number.MAX_VALUE;
						    let bScore = b.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?b.ownScore:b.sum===0?Number.MAX_VALUE: parseFloat(b.sum) : Number.MAX_VALUE;
						    return aScore - bScore;
						})
					}else if(this.scoreFn===2){//降序
						//降序
						p.sort((a, b) => {
						    let aScore = a.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?a.ownScore:a.sum===0?-1: parseFloat(a.sum) : -1;
						    let bScore = b.hasOwnProperty(this.tType==2?'ownScore':'sum') ? this.tType=='2'?b.ownScore:b.sum===0?-1: parseFloat(b.sum) : -1;
						    return bScore - aScore;
						});
					}

					sessionStorage.setItem("allScoreList",JSON.stringify(p.map(i=>i.id)))

					const start = (this.page - 1) * 10;
          const end = start + 10;
          let result = p.slice(start, end);
          this.tableData = result;
          this.$forceUpdate();
        })
        .catch((err) => {
          console.error(err);
        });
    },
    selectType(rc) {
      this.ajax
        .get(this.$store.state.api + "selectMatTypeYT")
        .then((res) => {
          this.CourseType = res.data;
          for (var i = 0; i < res.data[0].length; i++) {
            for (var j = 0; j < res.data[1].length; j++) {
              if (res.data[0][i].id == res.data[1][j].pid) {
                if (!this.CourseTypeJson[res.data[0][i].id]) {
                  this.CourseTypeJson[res.data[0][i].id] = [];
                }
                this.CourseTypeJson[res.data[0][i].id].push(res.data[1][j]);
              }
            }
          }
          if (rc) {
            this.getAnliList(rc);
          } else {
            this.getAnliList();
          }
        })
        .catch((err) => {
          console.error(err);
        });
    },
    getAdmin() {
      let params = {
        uid: this.userid,
        cn: "",
        page: this.page,
      };
      this.ajax
        .get(this.$store.state.api + "selectReviewer", params)
        .then((res) => {
          this.reviewerBox = res.data[0];
        })
        .catch((err) => {
          console.error(err);
        });
    },
    getReviewerOrAdmin() {
      if (this.tType == 6) {
        this.getUser();
      } else {
        this.selectType();
      }
    },
    getUser() {
      let params = {
        uid: this.userid,
      };
      this.ajax
        .get(this.$store.state.api + "selectCaseUser", params)
        .then((res) => {
          if (res.data[0].length > 0) {
            var reCid = res.data[0][0].aBox;
            this.reCid = reCid;
            this.selectType(reCid);
          } else {
            this.isNoTableData = true;
          }
        })
        .catch((err) => {
          console.error(err);
        });
    },
    openScore(a, t) {
      this.scoreDetail[0].id = a.id;
      this.scoreDetail[0].title = a.info.title;
      this.scoreDetail[0].detail = a.info.courseText;
      this.scoreDetail[0].uname = a.uname;
      this.getScore(a.id, t);
    },
    getScore(id, t) {
      let params = {
        rid: id,
        suser: this.userid,
      };
      this.ajax
        .get(this.$store.state.api + "selectScore", params)
        .then((res) => {
          if (res.data[0].length > 0) {
            this.scoreDetail[0].scoreAll = JSON.parse(res.data[0][0].score);
            var a = parseInt(this.scoreDetail[0].scoreAll.first);
            var b = parseInt(this.scoreDetail[0].scoreAll.second);
            var c = parseInt(this.scoreDetail[0].scoreAll.third);
            // var d = parseInt(this.scoreDetail[0].scoreAll.fourth);
            // var e = parseInt(this.scoreDetail[0].scoreAll.fivth);
            // this.scoreDetail[0].sumScore = Math.round((a + b + c + d + e) / 5);
            this.scoreDetail[0].sumScore = Math.round((a + b + c) / 3);
          } else {
            this.scoreDetail[0].scoreAll = {
              first: "",
              second: "",
              third: "",
              // fourth: "",
              // fivth: "",
              content: "",
            };
            this.scoreDetail[0].sumScore = 0;
          }
          if (t == 1) {
            this.dialogVisibleScore = true;
          } else {
            this.dialogVisibleRecommend = true;
          }
        })
        .catch((err) => {
          console.error(err);
        });
    },
    addScore() {
      if (this.scoreDetail[0].scoreAll.first == "") {
        this.$message.error("请将信息填写完整");
        return;
      } else if (this.scoreDetail[0].scoreAll.second == "") {
        this.$message.error("请将信息填写完整");
        return;
      } else if (this.scoreDetail[0].scoreAll.third == "") {
        this.$message.error("请将信息填写完整");
        return;
      }
      //  else if (this.scoreDetail[0].scoreAll.fourth == "") {
      //   this.$message.error("请将信息填写完整");
      //   return;
      // } else if (this.scoreDetail[0].scoreAll.fivth == "") {
      //   this.$message.error("请将信息填写完整");
      //   return;
      // }
      let params = [
        {
          rid: this.scoreDetail[0].id,
          suser: this.userid,
          s: JSON.stringify(this.scoreDetail[0].scoreAll),
        },
      ];
      this.ajax
        .post(this.$store.state.api + "addScore", params)
        .then((res) => {
          this.$message({
            message: "评分成功",
            type: "success",
          });
          this.scoreDetail = [
            {
              id: "",
              uname: "",
              title: "",
              detail: "",
              scoreAll: {
                first: "",
                second: "",
                third: "",
                // fourth: "",
                // fivth: "",
                content: "",
              },
              sumScore: 0,
            },
          ];
          this.dialogVisibleScore = false;
          this.getReviewerOrAdmin();
        })
        .catch((err) => {
          console.error(err);
        });
    },
    addRecommend() {
      if (this.scoreDetail[0].sumScore == 0) {
        this.$message.error("还未评审，不可推荐");
        return;
      }
      let params = {
        id: this.scoreDetail[0].id,
        rec: 2,
      };
      this.ajax
        .get(this.$store.state.api + "updateRaceRec", params)
        .then((res) => {
          this.$message({
            message: "推荐成功",
            type: "success",
          });
          this.dialogVisibleRecommend = false;
        })
        .catch((err) => {
          console.error(err);
        });
    },
    // lookDetail(aid) {
    //   window.open(
    //     window.origin +
    //       "/#/anliDetail?aid=" +
    //       aid +
    //       "&userid=" +
    //       this.$store.state.userInfo.userid +
    //       "&oid=" +
    //       this.$store.state.userInfo.oid +
    //       "&tType=" +
    //       this.$store.state.userInfo.type
    //   );
    // },
    exportAllScore() {
      this.ajax
        .get(this.$store.state.api + "selectAllScore")
        .then((res) => {
          var scoreList = res.data[0];
          // 将score值转换为对象
          for (var i = 0; i < scoreList.length; i++) {
            scoreList[i].score = JSON.parse(scoreList[i].score);
          }
          // 根据rid进行分组
          var grouped = scoreList.reduce(function (acc, cur) {
            if (!acc[cur.rid]) {
              acc[cur.rid] = [];
            }
            acc[cur.rid].push(cur.score);
            return acc;
          }, {});

          // 计算每组的first、second和third的平均值，并将结果存储在新的数组b中
          var b = Object.keys(grouped).map(function (key) {
            var scores = grouped[key];
            var firstPw = Math.round(
              (parseInt(scores[0].first) +
                parseInt(scores[0].second) +
                parseInt(scores[0].third)) /
                3
            );
            var secondPw = Math.round(
              (parseInt(scores[1].first) +
                parseInt(scores[1].second) +
                parseInt(scores[1].third)) /
                3
            );
            var sum = ((firstPw + secondPw) / 2).toFixed(2);
            return { rid: key, firstPw: firstPw, secondPw: secondPw, sum: sum };
          });

          for (var i = 0; i < b.length; i++) {
            for (var j = 0; j < scoreList.length; j++) {
              if (scoreList[j].rid == b[i].rid) {
                if (!b[i].title) {
                  b[i].title = JSON.parse(scoreList[j].info).title;
                }
              }
            }
          }
          this.exportExcel(b);
        })
        .catch((err) => {
          this.isLoading = false;
          console.error(err);
        });
    },
    exportScoreByUid() {
      this.ajax
        .get(this.$store.state.api + "selectAllScore")
        .then((res) => {
          var scoreList = res.data[0];
          let params = {
            uid: this.userid,
          };
          this.ajax
            .get(this.$store.state.api + "selectScoreByUid", params)
            .then((res) => {
              var scoreListByuid = res.data[0];
              for (var i = 0; i < scoreList.length; i++) {
                for (var j = 0; j < scoreListByuid.length; j++) {
                  if (scoreList[i].rid == scoreListByuid[j].rid) {
                    if (scoreList[i].scorer == scoreListByuid[j].scorer) {
                      var point = JSON.parse(scoreListByuid[j].score);
                      var a = parseInt(point.first);
                      var b = parseInt(point.second);
                      var c = parseInt(point.third);
                      var sumScore = Math.round((a + b + c) / 3);
                      scoreListByuid[j].firstPw = sumScore;
                    } else {
                      var point = JSON.parse(scoreList[i].score);
                      var a = parseInt(point.first);
                      var b = parseInt(point.second);
                      var c = parseInt(point.third);
                      var sumScore = Math.round((a + b + c) / 3);
                      scoreListByuid[j].secondPw = sumScore;
                    }
                  }
                  if (scoreListByuid[j].firstPw && scoreListByuid[j].secondPw) {
                    scoreListByuid[j].sum = (
                      (scoreListByuid[j].firstPw + scoreListByuid[j].secondPw) /
                      2
                    ).toFixed(2);
                    scoreListByuid[j].title = JSON.parse(
                      scoreListByuid[j].info
                    ).title;
                  }
                }
              }
              this.exportExcel(scoreListByuid);
            })
            .catch((err) => {
              console.error(err);
            });
        })
        .catch((err) => {
          this.isLoading = false;
          console.error(err);
        });
    },

    exportExcel(t) {
      var res = t;
      //如果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].title;
        _json["评审1"] = res[i].firstPw;
        _json["评审2"] = res[i].secondPw;
        _json["平均分"] = res[i].sum;
        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: 50 },
      //   { wch: 50 },
      //   { wch: 50 },
      // ];
      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",
      });
    },
		// 我的评分排序
		ownScoreSort(row,column){
			if(row.order==="descending"){
				this.scoreFn=2
			}else if(row.order==="ascending"){
				this.scoreFn=1
			}else{
				this.scoreFn=2
			}
			this.search()
		}
  },
  created() {
    // this.getAnliList();
    this.getAdmin();
    // this.selectType();
    this.getReviewerOrAdmin();
  },
};
</script>

<style scoped>
.el-popover {
  min-width: 80px;
  text-align: center;
}
</style>

<style scoped>
.dialog_diy1 >>> .el-dialog__header,
.dialog_diy >>> .el-dialog__header {
  background: #3d67bd !important;
  padding: 15px 20px;
}
.dialog_diy1 >>> .el-dialog__header {
  text-align: center;
}
.dialog_diy1 >>> .el-dialog__title,
.dialog_diy >>> .el-dialog__title {
  color: #fff;
}

.dialog_diy1 >>> .el-dialog__headerbtn,
.dialog_diy >>> .el-dialog__headerbtn {
  top: 19px;
}

.dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close,
.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
  color: #fff;
}

.dialog_diy1 >>> .el-dialog__headerbtn .el-dialog__close:hover,
.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
  color: #fff;
}

.dialog_diy1 >>> .el-dialog__body,
.dialog_diy1 >>> .el-dialog__footer,
.dialog_diy >>> .el-dialog__body,
.dialog_diy >>> .el-dialog__footer {
  background: #fafafa;
}

.disUoloadSty >>> .el-upload--picture-card {
  display: none;
  /* 上传按钮隐藏 */
}

.tou {
  border-bottom: 1px solid #c9c9c9;
  height: 50px;
  font-size: 30px;
}

.touTop {
  margin: 15px auto;
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: space-between;
  width: 94%;
}
.touLeft {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: baseline;
  justify-content: space-between;
  width: 100%;
}
.sTop > div:nth-child(1) {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
}

.sTop > div > div {
  margin: 0 10px 0 0;
  display: flex;
  flex-direction: row;
  align-items: center;
}

.sTop > div > div {
  margin-right: 10px;
}

.touRight > div:nth-child(2) > .el-button {
  background: #2268bd;
  color: #fff;
}

.student_page {
  width: 100%;
  margin: 20px auto 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
}

.rating_information{
	flex: 1;
	height: 100%;
	margin-left: 20px;
	display: flex;
	margin-bottom: 20px;
}

.ri-card{
	width: auto;
	font-size: 14px;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 5px 10px;
	white-space: nowrap;
	margin-right: 20px;
	border-radius: 5px;
}

.anliBox {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: flex-start;
  margin: 25px auto 0;
  width: 95%;
  height: 570px;
}

.anLi {
  width: 280px;
  margin: 0 20px 10px 0;
  box-shadow: 3px 1px 15px 3px #f0f0f2;
}

.anliImg {
  width: 100%;
  height: 170px;
}

.anliImg > img {
  width: 100%;
  height: 100%;
}

.anliBot {
  background: #fff;
  border: 1px solid #f5f5f5;
  padding: 5px 0 10px 0;
  box-sizing: border-box;
}

.detailBox {
  padding: 0 0 0 10px;
  box-sizing: border-box;
}

.detailBox > div:nth-child(1) {
  font-size: 20px;
  width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-word;
}

.detailBox > div:nth-child(2) {
  color: #999;
  margin-top: 5px;
  font-size: 14px;
}

.anliButton {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: center;
  padding: 10px 0 0 0;
}

.anliButton > div {
  margin-right: 5px;
}

.anliButton > div > .el-button {
  background: #409efe;
  color: #fff;
  width: 80px;
  border-radius: 5px;
}

.customWidth >>> .el-dialog {
  min-width: 500px !important;
}
.customWidth1 >>> .el-dialog {
  min-width: 800px !important;
}

.people {
  border: 1px solid rgb(229 229 229);
  height: 495px;
  border-radius: 5px;
  width: 100%;
  overflow: auto;
  background: #fff;
  box-shadow: 0px 0px 10px 8px #ededed;
}

.people::-webkit-scrollbar {
  /*滚动条整体样式*/
  width: 6px;
  /*高宽分别对应横竖滚动条的尺寸*/
  height: 6px;
}

/*定义滚动条轨道 内阴影+圆角*/
.people::-webkit-scrollbar-track {
  border-radius: 10px;
  background-color: #eee;
}

/*定义滑块 内阴影+圆角*/
.people::-webkit-scrollbar-thumb {
  border-radius: 10px;
  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
  background-color: rgba(0, 0, 0, 0.1);
}

.people_top {
  display: flex;
  width: 100%;
  flex-direction: column;
  padding: 10px 25px 10px;
  box-sizing: border-box;
  border-bottom: 1px solid #f4f4f7;
}

.people_top_right {
  height: 40px;
  margin-bottom: 10px;
}

.people_search {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
}

.people_search > div:nth-child(1) {
  font-size: 20px;
  margin-right: 10px;
}

.t_j_box {
  display: flex;
}

.t_j_box span:nth-child(1) {
  width: 15%;
  overflow: hidden;
  margin-right: 10px;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.t_j_box span:nth-child(2) {
  width: 300px;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-right: 10px;
}

.t_j_box span:nth-child(3) {
  width: calc(55% - 20px);
  overflow: hidden;
  text-overflow: ellipsis;
}

.people_name {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  align-items: flex-start;
  padding: 15px 0 0 15px;
}

.people_name >>> .el-checkbox {
  margin-bottom: 10px;
}
.all_choose > span {
  margin-right: 10px;
}
.clear {
  width: 70px;
  height: 35px;
  background: #2268bc;
  color: #fff;
  text-align: center;
  border-radius: 5px;
  line-height: 35px;
  cursor: pointer;
  font-size: 16px;
}
.anliCss {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
}
.anliCss > div:nth-child(1) {
  margin-right: 10px;
}
.scoreBox {
  background: #fff;
}
.scoreCss {
  padding: 10px;
}
.scoreTitle {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
}
.scoreTitle > div:nth-child(1) {
  width: 50px;
}
.scoreTitle > div:nth-child(1) > img {
  width: 100%;
  height: 100%;
}
.scoreTitle > div:nth-child(2) {
  margin-left: 15px;
}
.anliTitle,
.anliBrief,
.anliScore {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: flex-start;
  padding: 10px 0 10px 0;
  font-size: 18px;
}
.anliTitle > div:nth-child(1),
.anliBrief > div:nth-child(1) {
  min-width: 75px;
  width: 75px;
}
.anliTitle > div:nth-child(2),
.anliBrief > div:nth-child(2) {
  font-size: 17px;
  margin-left: 35px;
  color: #b0b0b0;
}
.anliScore > div:nth-child(2) {
  margin: -13px 0 0 20px;
}
.scoreDiv {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  padding: 10px 0;
}
.scoreDiv > div:nth-child(1) {
  min-width: 90px;
  width: 90px;
}
.scoreDiv > div:nth-child(2) {
  margin-left: 10px;
}
.scoreDiv > div:nth-child(2) >>> .el-input__inner {
  border-radius: 15px;
  background: #fafafa;
  height: 30px;
  font-size: 16px;
}
.anliContent {
  width: 80%;
  margin: 0 auto;
  border-top: 2px solid #ededed;
  padding: 10px 0 0 0;
}
.tAreaCss {
  resize: none;
  width: 100%;
  text-indent: 10px;
  border: 1px solid #e6e6e8;
  background: #fafafa;
}
.tAreaCss:focus-visible {
  outline: none !important;
}
.addScore {
  width: 75%;
  margin: 10px auto;
  background: #409efe;
  color: #fff;
  height: 35px;
  text-align: center;
  line-height: 35px;
  border-radius: 5px;
  cursor: pointer;
}
.reTitle {
  font-size: 18px;
}
.reTitle > div:nth-child(2) {
  width: 99%;
  border: 1px solid #dbdbdb;
  font-size: 16px;
  height: 35px;
  line-height: 35px;
  text-indent: 10px;
  border-radius: 5px;
  margin: 10px 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-word;
}
.reDetail,
.reScore {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: flex-start;
  padding: 10px 0 10px 0;
  font-size: 18px;
}
.reDetail > div:nth-child(2) {
  font-size: 17px;
  margin-left: 10px;
  color: #b0b0b0;
  width: 650px;
  height: 150px;
  overflow: auto;
}
.reScore > div:nth-child(2) {
  font-size: 35px;
  margin-left: 20px;
}
.reScore > div:nth-child(2) > span {
  color: #6188d5;
}
.reBottom {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-end;
}
.reBottom > div:nth-child(2) {
  border: 1px solid #d7d7d9;
  width: 70px;
  height: 35px;
  text-align: center;
  line-height: 35px;
  border-radius: 5px;
  margin: 0 10px 0 20px;
  cursor: pointer;
}
.reBottom > div:nth-child(3) {
  background: #409efe;
  color: #fff;
  height: 35px;
  line-height: 35px;
  width: 85px;
  text-align: center;
  border-radius: 5px;
  cursor: pointer;
}
.tableButton {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  color: #43a0f5;
}
.tableButton > div {
  margin-right: 10px;
  cursor: pointer;
}

.isNoMessage {
  width: 20%;
  margin: 10% auto 0;
}

.isNoMessage > img {
  width: 100%;
  height: 100%;
}

.aName >>> .el-input__inner {
  width: 300px;
}

.sTop {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: center;
  align-items: center;
}

.aName {
  position: relative;
}

.search {
  width: 25px;
  position: absolute;
  top: 7px;
  right: 10px;
  z-index: 9;
  cursor: pointer;
}

.search > img {
  width: 100%;
  height: 100%;
}
</style>