|
@@ -23,9 +23,13 @@
|
|
|
{{ k.dep.join(",") }}
|
|
|
</div>
|
|
|
<div>{{ k.score }}</div>
|
|
|
- <div></div>
|
|
|
- <div></div>
|
|
|
- <div></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;">
|
|
@@ -33,7 +37,7 @@
|
|
|
v-for="(item2, index) in k.testid.test"
|
|
|
:key="item2.courseId"
|
|
|
@click="lookPrize(item2.courseId)"
|
|
|
- class="orgData"
|
|
|
+ class="orgDataCss"
|
|
|
>
|
|
|
{{ item2.title }}:{{ item2.num }}份
|
|
|
</div>
|
|
@@ -43,7 +47,12 @@
|
|
|
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)">评分</div>
|
|
|
+ <div
|
|
|
+ class="TabBtn"
|
|
|
+ @click="lookScore(k.id, item.name, k.name)"
|
|
|
+ >
|
|
|
+ 评分
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -71,9 +80,13 @@
|
|
|
<div class="twoCon2" v-for="k in item.children" :key="k.id">
|
|
|
<div>{{ k.name }}</div>
|
|
|
<div>{{ k.score }}</div>
|
|
|
- <div></div>
|
|
|
- <div></div>
|
|
|
- <div></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;">
|
|
@@ -81,7 +94,7 @@
|
|
|
v-for="(item2, index) in k.testid.test"
|
|
|
:key="item2.courseId"
|
|
|
@click="lookPrize(item2.courseId)"
|
|
|
- class="orgData"
|
|
|
+ class="orgDataCss"
|
|
|
>
|
|
|
{{ item2.title }}:{{ item2.num }}份
|
|
|
</div>
|
|
@@ -91,7 +104,12 @@
|
|
|
style="display: flex;justify-content: space-around;padding: 0 10px;box-sizing: border-box;"
|
|
|
>
|
|
|
<!-- <div class="TabBtn" @click="lookPrize">查看</div> -->
|
|
|
- <div class="TabBtn">评分</div>
|
|
|
+ <div
|
|
|
+ class="TabBtn"
|
|
|
+ @click="lookScore(k.id, item.name, k.name)"
|
|
|
+ >
|
|
|
+ 评分
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -123,38 +141,93 @@
|
|
|
|
|
|
<!-- 点击评分 -->
|
|
|
<el-dialog
|
|
|
- title=""
|
|
|
+ :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;">
|
|
|
+ <div
|
|
|
+ style="height: 100%;padding: 25px;overflow: auto; box-sizing: border-box;padding-bottom: 100px;"
|
|
|
+ >
|
|
|
<div class="diaScoreTop">
|
|
|
<div class="diaScoreLeft">
|
|
|
- <div>自评平均分:</div>
|
|
|
- <div>认定平均分:</div>
|
|
|
- <div>存在分叉总人数:</div>
|
|
|
+ <div>自评平均分:{{ !evaScoDigSvg ? 0 : evaScoDigSvg }}</div>
|
|
|
+ <div>认定平均分:{{ !evaScoDigCog ? 0 : evaScoDigCog }}</div>
|
|
|
+ <div>存在分差总人数:{{ evaScoDigPerC }}</div>
|
|
|
</div>
|
|
|
- <div class="diaScoreRight">
|
|
|
+ <!-- <div class="diaScoreRight">
|
|
|
<el-button size="small" type="primary">保存</el-button>
|
|
|
<el-button size="small" type="primary">提交</el-button>
|
|
|
- </div>
|
|
|
+ </div> -->
|
|
|
</div>
|
|
|
- <el-table :data="tableData" style="width: 100%">
|
|
|
- <el-table-column type="index" label="序号" width="180">
|
|
|
+ <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 prop="tea" align="center" label="教研室">
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="name" label="教师姓名" width="180">
|
|
|
+ <el-table-column prop="score" align="center" label="分值">
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="tea" label="教研室"> </el-table-column>
|
|
|
- <el-table-column prop="evaScore" label="自评分数"> </el-table-column>
|
|
|
- <el-table-column prop="evaluation" label="自评概述">
|
|
|
+ <el-table-column prop="evaSca" align="center" label="自评分数">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="evaMed" align="center" label="自评概述">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div v-if="!scope.row.evaMed">/</div>
|
|
|
+ <div v-else>
|
|
|
+ {{ scope.row.evaMed }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column 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="lookPrize(item2.courseId)" -->
|
|
|
+ {{ item2.title }}:{{ item2.num }}份
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="source" label="数据来源"> </el-table-column>
|
|
|
- <el-table-column prop="cognizance" label="认定分数">
|
|
|
+ <el-table-column width="200px" align="center" label="认定分数">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div class="ScoreStep">
|
|
|
+ <input
|
|
|
+ type="number"
|
|
|
+ @blur="Submit(scope.row)"
|
|
|
+ v-model="scope.row.cogSco"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="cognizance" label="认定概述">
|
|
|
+ <el-table-column
|
|
|
+ width="200px"
|
|
|
+ align="center"
|
|
|
+ prop="cognizance"
|
|
|
+ label="认定概述"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <textarea
|
|
|
+ @blur="Submit(scope.row)"
|
|
|
+ class="tArea"
|
|
|
+ v-model.trim="scope.row.cogSummary"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</div>
|
|
@@ -176,15 +249,28 @@ export default {
|
|
|
},
|
|
|
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: "师德师风",
|
|
@@ -1153,53 +1239,13 @@ export default {
|
|
|
// ]
|
|
|
// }
|
|
|
// ],
|
|
|
- tableData: [
|
|
|
- {
|
|
|
- name: "王小虎",
|
|
|
- tea: "语文",
|
|
|
- evaScore: 5,
|
|
|
- evaluation: "优秀",
|
|
|
- source: 5,
|
|
|
- cognizance: 5
|
|
|
- },
|
|
|
- {
|
|
|
- name: "张三",
|
|
|
- tea: "语文",
|
|
|
- evaScore: 5,
|
|
|
- evaluation: "优秀",
|
|
|
- source: 5,
|
|
|
- cognizance: 5
|
|
|
- },
|
|
|
- {
|
|
|
- name: "李四",
|
|
|
- tea: "语文",
|
|
|
- evaScore: 5,
|
|
|
- evaluation: "优秀",
|
|
|
- source: 5,
|
|
|
- cognizance: 5
|
|
|
- },
|
|
|
- {
|
|
|
- name: "王五",
|
|
|
- tea: "语文",
|
|
|
- evaScore: 5,
|
|
|
- evaluation: "优秀",
|
|
|
- source: 5,
|
|
|
- cognizance: 5
|
|
|
- },
|
|
|
- {
|
|
|
- name: "金兀术",
|
|
|
- tea: "语文",
|
|
|
- evaScore: 5,
|
|
|
- evaluation: "优秀",
|
|
|
- source: 5,
|
|
|
- cognizance: 5
|
|
|
- }
|
|
|
- ]
|
|
|
+ tableData: [] //弹框数据
|
|
|
};
|
|
|
},
|
|
|
computed: {},
|
|
|
watch: {
|
|
|
pType(newVal, oldVal) {
|
|
|
+ this.allData = [];
|
|
|
this.getPageBase();
|
|
|
}
|
|
|
},
|
|
@@ -1210,6 +1256,61 @@ export default {
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
+ // 提交
|
|
|
+ Submit(val) {
|
|
|
+ console.log("Submit", val);
|
|
|
+ // if (val.cogSco != '' && val.cogSco==0) {
|
|
|
+
|
|
|
+ // }
|
|
|
+ // val.cogSco = !val.cogSco ? 0 : val.cogSco;
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ // console.log("valval", val.json);
|
|
|
+
|
|
|
+ let params = [
|
|
|
+ {
|
|
|
+ uid: this.userid,
|
|
|
+ tid: val.id,
|
|
|
+ json: JSON.stringify(val.json)
|
|
|
+ }
|
|
|
+ ];
|
|
|
+ // return console.log(params);
|
|
|
+ this.ajax
|
|
|
+ .post(this.$store.state.api + "updateExamineCogData", params)
|
|
|
+ .then(res => {
|
|
|
+ // console.log("updateExamineCogData", res);
|
|
|
+ this.CopDigSco();
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 查看评分
|
|
|
+ lookScore(val, oneName, twoName) {
|
|
|
+ this.evaScoDig = true;
|
|
|
+ this.evaOneName = oneName;
|
|
|
+ this.evaTwoName = twoName;
|
|
|
+
|
|
|
+ this.tableData = [];
|
|
|
+
|
|
|
+ // this.cogSco = "";
|
|
|
+ // this.cogSummary = "";
|
|
|
+
|
|
|
+ this.secondId = val;
|
|
|
+ this.getSecondData();
|
|
|
+ this.diaScore = true;
|
|
|
+ },
|
|
|
getSecondData() {
|
|
|
let params = {
|
|
|
oid: this.oid,
|
|
@@ -1221,13 +1322,92 @@ export default {
|
|
|
.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.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.cogSco = k.sco2;
|
|
|
+ e.cogSummary = k.cogSum;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ // console.log("data", data);
|
|
|
+
|
|
|
+ this.tableData = data;
|
|
|
+ console.log("this.tableData", this.tableData);
|
|
|
|
|
|
- console.log("selectTestExamineSecondData", res.data[0]);
|
|
|
+ // 计算评分弹框平均值等
|
|
|
+ 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;
|
|
|
+ this.evaScoDigCog = this.evaScoDigCog / this.tableData.length;
|
|
|
+ },
|
|
|
+ async handleScoData() {
|
|
|
+ for (const e of this.tableData) {
|
|
|
+ // for (const k of e.children) {
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
// 获取数据计算审核进度,自评平均分,考核平均分
|
|
|
getData() {
|
|
|
let params = {
|
|
@@ -1240,6 +1420,45 @@ export default {
|
|
|
.get(this.$store.state.api + "selectTestExamineAllData", params)
|
|
|
.then(res => {
|
|
|
console.log("selectTestExamineAllData", res.data[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;
|
|
|
+ i.sco2 = i.sco2 / this.allData.length;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ console.log("this.tableJsonCon", this.tableJsonCon);
|
|
|
+ this.tabLoad = false;
|
|
|
+
|
|
|
+ // this.tableJsonCon.forEach(e => {});
|
|
|
})
|
|
|
.catch(error => {
|
|
|
console.log(error);
|
|
@@ -1260,11 +1479,16 @@ export default {
|
|
|
.then(res => {
|
|
|
// console.log("resresresres", res.data[0]);
|
|
|
// console.log("selectTestExamineBase", res.data[0][0]);
|
|
|
+
|
|
|
+ // pum是判断审核进度的计数器
|
|
|
this.tableJsonCon = JSON.parse(res.data[0][0].json);
|
|
|
+ this.tableJsonCon.forEach(e => {
|
|
|
+ e.children.forEach(i => {
|
|
|
+ i.pum = 0;
|
|
|
+ });
|
|
|
+ });
|
|
|
this.handleData();
|
|
|
this.getData();
|
|
|
-
|
|
|
- this.tabLoad = false;
|
|
|
})
|
|
|
.catch(error => {
|
|
|
console.log(error);
|
|
@@ -1307,29 +1531,74 @@ export default {
|
|
|
},
|
|
|
// 关闭弹框
|
|
|
handleClose(done) {
|
|
|
- this.page = 1;
|
|
|
+ this.getPageBase();
|
|
|
done();
|
|
|
- },
|
|
|
- // 查看评分
|
|
|
- lookScore(val) {
|
|
|
- this.getSecondData();
|
|
|
- this.secondId = val;
|
|
|
- this.diaScore = true;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
-.orgData {
|
|
|
+.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;
|
|
|
+ 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;
|
|
|
+ justify-content: flex-start;
|
|
|
height: 60px;
|
|
|
}
|
|
|
|