Merge remote-tracking branch 'origin/dev'

This commit is contained in:
纪寒 2022-08-15 10:20:51 +08:00
commit 642fde5cbb
14 changed files with 3219 additions and 48 deletions

View File

@ -40,7 +40,8 @@
"axios": "0.24.0", "axios": "0.24.0",
"clipboard": "2.0.8", "clipboard": "2.0.8",
"core-js": "3.19.1", "core-js": "3.19.1",
"echarts": "4.9.0", "cs-ruler": "^2.1.5",
"echarts": "^4.9.0",
"element-ui": "2.15.8", "element-ui": "2.15.8",
"file-saver": "2.0.5", "file-saver": "2.0.5",
"fuse.js": "6.4.3", "fuse.js": "6.4.3",

View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
// 体制分析
export function synthesize(query) {
return request({
url: '/physique/analysis/synthesize',
method: 'get',
params: query
})
}

27
src/api/system/quality.js Normal file
View File

@ -0,0 +1,27 @@
import request from '@/utils/request'
//查询用户权限
export function getRoleInfo() {
return request({
url: 'common/getRoleInfo',
method: 'get'
})
}
// 查询身体素质
export function testBodyScoreInfo(query) {
return request({
url: 'system/testBodyScoreInfo/listBody',
method: 'get',
params: query
})
}
//批次编号
export function testScoreBatch(query) {
return request({
url: '/system/testScoreBatch/list',
method: 'get',
params: query
})
}

10
src/api/system/shape.js Normal file
View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
//查询用户身体形态
export function analysis(query) {
return request({
url: '/body/shape/analysis',
method: 'get',
params: query
})
}

BIN
src/icons/笑脸.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
src/icons/金牌.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
src/icons/金牌2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -73,14 +73,14 @@ DictData.install()
*/ */
Vue.use(Element, { Vue.use(Element, {
size: Cookies.get('size') || 'medium' // set element-ui default size size: Cookies.get('size') || 'medium' // set element-ui default size
}) })
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({
el: '#app', el: '#app',
router, router,
store, store,
render: h => h(App) render: h => h(App)
}) })

View File

@ -0,0 +1,897 @@
<template>
<div class="app-container">
<el-form
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="90px"
>
<el-form-item label="所属幼儿园" prop="categoryName">
<el-button
@click="kindergartenshow = true"
v-if="kindergartenName == '请选择幼儿园'"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
>{{ kindergartenName }}</el-button
>
<el-button
@click="kindergartenshow = true"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ kindergartenName }}</el-button
>
</el-form-item>
<el-form-item label="所属班级" prop="categoryName" label-width="70px">
<el-button
@click="classshowclick"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
v-if="className == '请选择班级'"
>{{ className }}</el-button
>
<el-button
@click="classshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ className }}</el-button
>
</el-form-item>
<el-form-item label="学生" prop="categoryName" label-width="45px">
<el-button
@click="studentshowclick"
v-if="studentname == '请选择学生'"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
>{{ studentname }}</el-button
>
<el-button
@click="studentshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ studentname }}</el-button
>
</el-form-item>
<el-form-item label="批次成绩" prop="categoryName" label-width="70px">
<el-button
@click="batchCodeshowclick"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
v-if="batchCodeName == '请选择批次'"
>{{ batchCodeName }}</el-button
>
<el-button
@click="batchCodeshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ batchCodeName }}</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<!-- // -->
<el-dialog
width="500px"
title="选择批次"
:visible.sync="batchCodeshow"
append-to-body
style="margin-top: 20px"
:before-close="batchCodecancel"
>
<el-table :data="testScorelist" align="center" style="margin-top: 0px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
v-if="batchCodeId == scope.row.id"
circle
@click="batchCodeclick(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="batchCodeclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="batchCode"
label="批次编号"
width="190"
align="center"
/>
<el-table-column
property="batchName"
label="批次名称"
width="190"
align="center"
/>
</el-table>
<pagination
v-show="total4 > 0"
:total="total4"
:page.sync="testqueryParams.pageNum"
:limit.sync="testqueryParams.pageSize"
@pagination="testScore"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="850px"
title="选择学生"
:visible.sync="studentshow"
append-to-body
style="margin-top: 70px"
:before-close="studentcancel"
>
<el-table :data="studentInfoList" align="center" style="margin-top: 10px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
circle
v-if="studentId == scope.row.id"
@click="studentclick(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="studentclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="className"
label="班级名称"
width="190"
align="center"
/>
<el-table-column
property="studentName"
label="学生姓名"
width="190"
align="center"
/>
<el-table-column
property="studentName"
label="性别"
width="190"
align="center"
>
<template slot-scope="scope">
{{ scope.row.studentSex == "MALE" ? "男" : "女" }}
</template>
</el-table-column>
<el-table-column
property="homeAddress"
label="住址"
width="190"
align="center"
/>
</el-table>
<pagination
v-show="total3 > 0"
:total="total3"
:page.sync="studentqueryParams.pageNum"
:limit.sync="studentqueryParams.pageSize"
@pagination="studentlist"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="850px"
title="选择所属幼儿园"
:visible.sync="kindergartenshow"
append-to-body
:before-close="kindergartencancel"
>
<el-table :data="kindergartenList">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 15px; height: 15px"
circle
@click="kindergartenNameclick(scope.row)"
v-if="kindergartenId == scope.row.id"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="kindergartenNameclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="kindergartenName"
label="幼儿园名字"
width="150"
align="center"
>
</el-table-column>
<el-table-column
property="kindergartenAddress"
label="幼儿园地址"
width="150"
align="center"
>
</el-table-column>
<el-table-column
label="幼儿园所在组织"
align="center"
prop="organizeName"
width="150"
>
</el-table-column>
<el-table-column
property="contacts"
label="联系人"
width="150"
align="center"
>
</el-table-column>
<el-table-column
property="phone"
label="联系电话"
width="150"
align="center"
>
</el-table-column>
</el-table>
<pagination
v-show="total1 > 0"
:total="total1"
:page.sync="kqueryParams.pageNum"
:limit.sync="kqueryParams.pageSize"
@pagination="getList"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="1000px"
title="选择所属班级"
:visible.sync="classshow"
append-to-body
:before-close="classcancel"
>
<el-table :data="classinfoList" align="center" style="margin-top: 10px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
circle
@click="classclick(scope.row)"
v-if="classId == scope.row.id"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="classclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="kindergartenName"
label="幼儿园名称"
width="190"
align="center"
/>
<el-table-column
property="className"
label="班级名称"
width="180"
align="center"
>
</el-table-column>
<el-table-column
property="classType"
label="班级类型"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.classType == dictValue1 ? "大班" : "" }}
{{ scope.row.classType == dictValue2 ? "中班" : "" }}
{{ scope.row.classType == dictValue3 ? "小班" : "" }}
{{ scope.row.classType == dictValue4 ? "毕业" : "" }}
</template>
</el-table-column>
<el-table-column
property="classTeacher"
label="班主任姓名"
width="180"
align="center"
>
</el-table-column>
<el-table-column
property="phone"
label="联系电话"
width="190"
align="center"
>
</el-table-column>
</el-table>
<pagination
v-show="total2 > 0"
:total="total2"
:page.sync="classqueryParams.pageNum"
:limit.sync="classqueryParams.pageSize"
@pagination="classinfo"
/>
</el-dialog>
<el-row v-show="itemshow">
<el-col :span="24" class="card-box">
<el-card>
<div slot="header" style="text-align: center; margin-bottom: 10px">
<span>学生基本信息</span>
</div>
<div
class="el-table--enable-row-hover el-table--medium"
style="
margin-top: 10px;
padding-bottom: 20px;
border-bottom: 1px solid #f0f0f0;
"
>
<div
style="
display: flex;
justify-content: space-around;
text-align: center;
"
>
<div class="cell" style="width: 20%">
姓名:{{ sythesizestudent.studentName }}
</div>
<div class="cell" style="width: 20%">
性别:{{ sythesizestudent.studentSex == "MALE" ? "男" : "女" }}
</div>
<div class="cell" style="width: 20%">
年龄:{{ sythesizestudent.studentAge }}
</div>
<div class="cell" style="width: 20%">
民族:{{ sythesizestudent.nationName }}
</div>
<div class="cell" style="width: 20%">
ID:{{ sythesizestudent.studentNumber }}
</div>
</div>
<div style="display: flex; margin-top: 20px">
<div class="cell" style="width: 60%; margin-left: 7.7%">
所属幼儿园:{{ sythesizestudent.kindergartenName }}
</div>
<div class="cell">班级:{{ sythesizestudent.className }}</div>
</div>
<div style="margin-top: 20px; margin-left: 7.7%">
<div class="cell">
地址:{{ sythesizestudent.kindergartenAddress }}
</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="24" class="card-box">
<el-card style="margin-top: 40px">
<div
class="el-table--enable-row-hover el-table--medium"
style="margin: 20px auto; height: 40px; text-align: center"
>
<div style="display: inline-block">
<span
style="
position: relative;
display: inline-block;
width: 80px;
text-align: center;
"
v-for="(item, index) in sythesizestudent.firstItemCategoryList"
:key="index"
>
<span :style="index == 0 ? '' : 'margin-right:20px'">{{
index == 0 ? null : "+"
}}</span>
<span>
{{ item.categoryScore }}
</span>
<span
:style="index != 0 ? 'left:18px' : ''"
style="position: absolute; left: 0px; top: 20px; width: 80px"
>{{ item.categoryName }}</span
>
</span>
</div>
<div style="display: inline-block; position: relative">
<span style="margin: 0 20px">= </span>
<span>{{ sythesizestudent.totalCategoryScore }}</span>
<span
style="
display: inline-block;
position: absolute;
top: 20px;
width: 80px;
left: 29px;
"
>(综合得分)</span
>
</div>
</div>
<div style="text-align: center; font-size: 25px; margin-top: 30px">
获取徽章
</div>
<div
style="
display: flex;
text-align: center;
justify-content: space-around;
margin-top: 20px;
"
>
<span
v-for="(item, index) in sythesizestudent.categoryNameList"
:key="index"
>
<img
style="width: 80px; height: 80px"
src="@/icons/金牌2.png"
alt=""
/>
<div style="margin-top: 10px">{{ item }}</div>
</span>
</div>
</el-card>
</el-col>
<el-col :span="24" class="card-box" style="margin-top: 40px">
<el-card>
<div slot="header" style="text-align: center">
<span>综合体质分析图</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<div
ref="chart"
id="chart"
style="width: 1000px; height: 600px; margin: 0 auto"
></div>
</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="20" v-if="itemshow2">
<el-col :span="24" :offset="0">
<el-card>
<div slot="header" style="text-align: center">
<img style="width: 40px" src="@/icons/笑脸.png" alt="" />
<div><!-- card title -->该学生此批次暂没成绩</div>
</div>
<!-- card body -->
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import * as echarts from "echarts";
import {
listKindergartenInfo,
tKindergartenInfo,
} from "@/api/system/kindergartenInfo";
import { listStudentInfo } from "@/api/system/studentInfo";
import { listClassinfo } from "@/api/system/classinfo";
import { getRoleInfo, testScoreBatch } from "@/api/system/quality";
import { synthesize } from "@/api/system/comprehensive";
export default {
name: "comprehensive",
data() {
return {
itemshow: false,
itemshow2: false,
total1: 0,
total2: 0,
total3: 0,
total4: 0,
//
kindergartenshow: false,
classshow: false,
studentshow: false,
batchCodeshow: false,
//
dictValue1: "",
dictValue2: "",
dictValue3: "",
dictValue4: "",
ClassType: "class_type",
//
showSearch: true,
//
form: {},
//
studentqueryParams: {
pageNum: 1,
pageSize: 10,
classId: "",
nationDictId: null,
studentName: null,
studentSex: null,
studentNumber: null,
birthDate: null,
cardNumber: null,
onceName: null,
homeAddress: null,
},
//
classqueryParams: {
pageNum: 1,
pageSize: 10,
kindergartenId: "",
className: null,
classType: null,
},
//
kqueryParams: {
pageNum: 1,
pageSize: 10,
organizeId: null,
kindergartenName: null,
kindergartenAddress: null,
kindergartenType: null,
phone: null,
contacts: null,
},
//list
kindergartenList: [],
//
kindergartenName: "请选择幼儿园",
//ID
kindergartenId: "",
//list
classinfoList: [],
//
className: "请选择班级",
//ID
classId: "",
//list
studentInfoList: [],
//
studentname: "请选择学生",
//ID
studentId: "",
//
batchCodeName: "请选择批次",
//ID
batchCodeId: "",
//list
testScorelist: [],
//
sythesizestudent: [],
//
synthesizelist: {
studentId: "",
batchCode: "",
// studentId: "10",
// batchCode: "PC202208030005",
},
//
testqueryParams: {
pageNum: 1,
pageSize: 10,
},
};
},
created() {
this.getList();
this.class();
// this.synthesizeinfo();
},
methods: {
//
synthesizeinfo() {
synthesize(this.synthesizelist).then((res) => {
if (res.data == [] || !res.data) {
this.itemshow2 = true;
this.itemshow = false;
} else {
this.sythesizestudent = res.data;
console.log(this.sythesizestudent);
let seriesData = [];
let yindicator = [];
res.data.physiqueCategoryList.forEach((el) => {
// console.log(el.categoryScore);
seriesData.push(el.categoryScore);
yindicator.push({
name: el.categoryName + " " + "(" + el.levelName + "" + ")",
max: el.maxScore,
});
});
console.log(seriesData, yindicator);
var myChart = echarts.init(document.getElementById("chart"));
let option = {
//
color: "blue",
radar: {
name: {
show: true,
color: "black",
},
center: ["50%", "50%"],
//
indicator: yindicator,
shape: "polygon", //, circle:,polygon:()
},
series: [
{
type: "radar",
label: {
show: true,
color: "blue", //
},
areaStyle: {}, //
data: [
{
name: "成绩区域",
value: seriesData,
},
],
areaStyle: {
color: new echarts.graphic.RadialGradient(0.1, 0.6, 1, [
{
color: "rgba(50, 50, 255, 0.1)",
offset: 0,
},
{
color: "rgba(50, 50, 200, 0.9)",
offset: 1,
},
]),
},
},
],
};
//
myChart.setOption(option);
this.itemshow2 = false;
this.itemshow = true;
}
// var myChart = echarts.init(document.getElementById("chart"));
// var option;
// option = {
// color: ["#f6da22", "#bbe2e8", "#6cacde"],
// legend: {
// data: ["Allocated Budget", "Actual Spending"],
// },
// radar: {
// indicator: yindicator,
// color: "#fff",
// },
// series: [
// {
// name: "Budget vs spending",
// type: "radar",
// data: [
// {
// value: seriesData,
// name: "",
// areaStyle: {
// color: new echarts.graphic.RadialGradient(0.1, 0.6, 1, [
// {
// color: "rgba(255, 145, 124, 0.1)",
// offset: 0,
// },
// {
// color: "rgba(255, 145, 124, 0.9)",
// offset: 1,
// },
// ]),
// },
// },
// ],
// },
// ],
// };
// option && myChart.setOption(option);
// option = {
// legend: {
// top: "bottom",
// },
// toolbox: {
// show: true,
// feature: {
// mark: { show: true },
// dataView: { show: true, readOnly: false },
// restore: { show: true },
// saveAsImage: { show: true },
// },
// },
// series: [
// {
// name: "Nightingale Chart",
// type: "pie",
// radius: '50%',
// center: ["50%", "50%"],
// roseType: "area",
// itemStyle: {
// normal: {
// color: function (colors) {
// var colorList = [
// "#91cd77",
// "#5470c6",
// "#fc8251",
// "#ef6567",
// "#f9c956",
// "#75bedc",
// "#FCEF03",
// "#E12BE4",
// "#0070C0",
// ];
// return colorList[colors.dataIndex];
// },
// },
// },
// data: seriesData,
// },
// ],
// };
// option && myChart.setOption(option);
});
},
//
studentshowclick() {
if (this.studentqueryParams.classId == "") {
this.$message.error("请先选择班级");
} else {
this.studentshow = true;
this.studentlist();
}
},
//
batchCodeshowclick() {
if (this.synthesizelist.studentId == "") {
this.$message.error("请先选择学生");
} else {
this.testScore();
this.batchCodeshow = true;
}
},
//
batchCodeclick(row) {
this.batchCodeName = row.batchName;
this.batchCodeId = row.id;
this.synthesizelist.batchCode = row.batchCode;
this.batchCodeshow = false;
this.synthesizeinfo();
},
//
testScore() {
testScoreBatch(this.testqueryParams).then((res) => {
this.testScorelist = res.rows;
this.total4 = res.total;
});
},
//
studentclick(row) {
this.studentname = row.studentName;
this.studentId = row.id;
this.studentshow = false;
this.synthesizelist.studentId = row.id;
},
//
studentlist() {
listStudentInfo(this.studentqueryParams).then((res) => {
this.studentInfoList = res.rows;
this.total3 = res.total;
// console.log(this.studentInfoList);
});
},
//
classshowclick() {
if (this.classqueryParams.kindergartenId == "") {
this.$message.error("请先选择幼儿园");
} else {
this.classshow = true;
this.classinfo();
}
// console.log(this.classqueryParams);
},
//
batchCodecancel() {
this.batchCodeshow = false;
},
//
studentcancel() {
this.studentshow = false;
},
//
kindergartencancel() {
this.kindergartenshow = false;
},
//
classcancel() {
this.classshow = false;
},
//
classclick(row) {
// console.log(row);
this.className = row.className;
this.classId = row.id;
this.studentqueryParams.classId = row.id;
this.classshow = false;
},
//
kindergartenNameclick(row) {
this.classqueryParams.kindergartenId = row.id;
this.kindergartenName = row.kindergartenName;
this.kindergartenId = row.id;
this.kindergartenshow = false;
// this.synthesizeinfo();
},
//
class() {
tKindergartenInfo(this.ClassType).then((res) => {
this.dictValue1 = res.data[0].dictValue;
this.dictValue2 = res.data[1].dictValue;
this.dictValue3 = res.data[2].dictValue;
this.dictValue4 = res.data[3].dictValue;
});
},
//list
classinfo() {
listClassinfo(this.classqueryParams).then((response) => {
this.classinfoList = response.rows;
this.total2 = response.total;
// console.log(this.classinfoList);
});
},
getList() {
//
getRoleInfo().then((res) => {
console.log(res);
});
//list
listKindergartenInfo(this.kqueryParams).then((response) => {
this.kindergartenList = response.rows;
this.total1 = response.total;
// console.log(this.kindergartenList);
});
},
//
reset() {
this.form = {};
this.resetForm("form");
},
},
};
</script>

View File

@ -298,34 +298,30 @@ export default {
components: { Treeselect }, components: { Treeselect },
data() { data() {
let testItemLevelList = (rule, value, callback) => { let testItemLevelList = (rule, value, callback) => {
console.log(value); let min = value.map((e) => {
return e.levelMinScore;
}).toString();
let max = value.map((e) => {
return e.levelMaxScore;
}).toString();
console.log(min, max);
if (Number(max) < Number(min)) {
console.log(min,max);
callback(new Error("最高分必须大于最低分,请重新填写!"));
}
if ( if (
value.map((e) => { value.map((e) => {
return e.levelName; return e.levelName;
}) == "" }) == ""
) { ) {
callback(); callback();
} else if ( } else if (min == "") {
value.map((e) => {
return e.levelMinScore;
}) == ""
) {
callback(); callback();
} else if ( } else if (max == "") {
value.map((e) => {
return e.levelMaxScore;
}) == ""
) {
callback(); callback();
} else if (
value.map((e) => {
return e.levelMaxScore;
}) <=
value.map((e) => {
return e.levelMinScore;
})
) {
callback(new Error("级别最高分必须大于最低分,请重新填写!"));
} else { } else {
callback(); callback();
} }

View File

@ -0,0 +1,924 @@
<template>
<div class="app-container">
<el-form
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="90px"
>
<el-form-item label="所属幼儿园" prop="categoryName">
<el-button
@click="kindergartenshow = true"
v-if="kindergartenName == '请选择幼儿园'"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
>{{ kindergartenName }}</el-button
>
<el-button
@click="kindergartenshow = true"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ kindergartenName }}</el-button
>
</el-form-item>
<el-form-item label="所属班级" prop="categoryName" label-width="70px">
<el-button
@click="classshowclick"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
v-if="className == '请选择班级'"
>{{ className }}</el-button
>
<el-button
@click="classshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ className }}</el-button
>
</el-form-item>
<el-form-item label="学生" prop="categoryName" label-width="45px">
<el-button
@click="studentshowclick"
v-if="studentname == '请选择学生'"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
>{{ studentname }}</el-button
>
<el-button
@click="studentshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ studentname }}</el-button
>
</el-form-item>
<el-form-item label="批次成绩" prop="categoryName" label-width="70px">
<el-button
@click="batchCodeshowclick"
style="width: 250px; text-align: left; height: 32px; color: #c0c4cc"
v-if="batchCodeName == '请选择批次'"
>{{ batchCodeName }}</el-button
>
<el-button
@click="batchCodeshowclick"
style="width: 250px; text-align: left; height: 32px"
v-else
>{{ batchCodeName }}</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<!-- // -->
<el-dialog
width="500px"
title="选择批次"
:visible.sync="batchCodeshow"
append-to-body
style="margin-top: 20px"
:before-close="batchCodecancel"
>
<el-table :data="testScorelist" align="center" style="margin-top: 0px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
v-if="batchCodeId == scope.row.id"
circle
@click="batchCodeclick(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="batchCodeclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="batchCode"
label="批次编号"
width="190"
align="center"
/>
<el-table-column
property="batchName"
label="批次名称"
width="190"
align="center"
/>
</el-table>
<pagination
v-show="total4 > 0"
:total="total4"
:page.sync="testqueryParams.pageNum"
:limit.sync="testqueryParams.pageSize"
@pagination="testScore"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="850px"
title="选择学生"
:visible.sync="studentshow"
append-to-body
style="margin-top: 70px"
:before-close="studentcancel"
>
<el-table :data="studentInfoList" align="center" style="margin-top: 10px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
circle
v-if="studentId == scope.row.id"
@click="studentclick(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="studentclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="className"
label="班级名称"
width="190"
align="center"
/>
<el-table-column
property="studentName"
label="学生姓名"
width="190"
align="center"
/>
<el-table-column
property="studentName"
label="性别"
width="190"
align="center"
>
<template slot-scope="scope">
{{ scope.row.studentSex == "MALE" ? "男" : "女" }}
</template>
</el-table-column>
<el-table-column
property="homeAddress"
label="住址"
width="190"
align="center"
/>
</el-table>
<pagination
v-show="total3 > 0"
:total="total3"
:page.sync="studentqueryParams.pageNum"
:limit.sync="studentqueryParams.pageSize"
@pagination="studentlist"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="850px"
title="选择所属幼儿园"
:visible.sync="kindergartenshow"
append-to-body
:before-close="kindergartencancel"
>
<el-table :data="kindergartenList">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 15px; height: 15px"
circle
@click="kindergartenNameclick(scope.row)"
v-if="kindergartenId == scope.row.id"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="kindergartenNameclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="kindergartenName"
label="幼儿园名字"
width="150"
align="center"
>
</el-table-column>
<el-table-column
property="kindergartenAddress"
label="幼儿园地址"
width="150"
align="center"
>
</el-table-column>
<el-table-column
label="幼儿园所在组织"
align="center"
prop="organizeName"
width="150"
>
</el-table-column>
<el-table-column
property="contacts"
label="联系人"
width="150"
align="center"
>
</el-table-column>
<el-table-column
property="phone"
label="联系电话"
width="150"
align="center"
>
</el-table-column>
</el-table>
<pagination
v-show="total1 > 0"
:total="total1"
:page.sync="kqueryParams.pageNum"
:limit.sync="kqueryParams.pageSize"
@pagination="getList"
/>
</el-dialog>
<!-- // -->
<el-dialog
width="1000px"
title="选择所属班级"
:visible.sync="classshow"
append-to-body
:before-close="classcancel"
>
<el-table :data="classinfoList" align="center" style="margin-top: 10px">
<el-table-column label="请选择" width="70" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 20px; height: 20px"
circle
@click="classclick(scope.row)"
v-if="classId == scope.row.id"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="classclick(scope.row)"
></el-button>
</template>
</el-table-column>
<el-table-column
property="kindergartenName"
label="幼儿园名称"
width="190"
align="center"
/>
<el-table-column
property="className"
label="班级名称"
width="180"
align="center"
>
</el-table-column>
<el-table-column
property="classType"
label="班级类型"
width="160"
align="center"
>
<template slot-scope="scope">
{{ scope.row.classType == dictValue1 ? "大班" : "" }}
{{ scope.row.classType == dictValue2 ? "中班" : "" }}
{{ scope.row.classType == dictValue3 ? "小班" : "" }}
{{ scope.row.classType == dictValue4 ? "毕业" : "" }}
</template>
</el-table-column>
<el-table-column
property="classTeacher"
label="班主任姓名"
width="180"
align="center"
>
</el-table-column>
<el-table-column
property="phone"
label="联系电话"
width="190"
align="center"
>
</el-table-column>
</el-table>
<pagination
v-show="total2 > 0"
:total="total2"
:page.sync="classqueryParams.pageNum"
:limit.sync="classqueryParams.pageSize"
@pagination="classinfo"
/>
</el-dialog>
<el-card
v-show="itemshow"
class="box-card"
style="width: 95%; margin: 0 auto"
>
<div slot="header" style="text-align: center; margin-bottom: 30px">
身体素质测试
</div>
<el-row style="text-align: center">
<el-col
:span="5"
style="
height: 60px;
line-height: 60px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
"
>身体素质测试</el-col
>
<el-col
:span="5"
style="
height: 60px;
line-height: 60px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
"
>测量值</el-col
>
<el-col
:span="9"
style="
height: 60px;
line-height: 60px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
"
>成绩</el-col
>
<el-col
:span="5"
style="
height: 60px;
line-height: 60px;
border-bottom: 1px solid #ededed;
"
>综合评价</el-col
>
</el-row>
<el-row
style="text-align: center"
v-for="(item, index) in studentscorelist"
:key="index"
>
<el-col
:span="5"
style="
height: 100px;
line-height: 100px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
"
>
{{ item.itemName }}
</el-col>
<el-col
:span="5"
style="
height: 100px;
line-height: 100px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
"
>
{{ item.itemScore ? item.itemScore : "" }}
{{ item.scoreDictValue ? item.scoreDictValue : "" }}
{{ item.measureUnit }}
</el-col>
<el-col
v-if="item.itemScore"
:span="9"
style="
height: 100px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
position: relative;
"
>
<span style="position: absolute; left: 5%; top: 10px"
>{{
item.measureUnit == "s" || item.measureUnit == "h" ? "时间" : ""
}}{{
item.measureUnit == "cm" || item.measureUnit == "m" ? "距离" : ""
}}({{ item.measureUnit }})</span
>
<span
style="
margin-top: 20px;
float: left;
margin-left: 6%;
margin-top: 14%;
"
>评价</span
>
<div
style="
width: 70%;
margin: 0 auto;
margin-top: 10px;
margin-left: 20%;
position: relative;
"
>
<div
style="position: absolute; top: 1px; left: 79%; line-height: 20px"
>
{{
((((item.maxScore - item.minScore) / item.minScore) *
item.minScore) /
5) *
4 +
item.minScore
}}
</div>
<div
style="
position: absolute;
top: 20px;
left: 80%;
width: 1px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
style="position: absolute; top: 1px; left: 59%; line-height: 20px"
>
{{
((((item.maxScore - item.minScore) / item.minScore) *
item.minScore) /
5) *
3 +
item.minScore
}}
</div>
<div
style="
position: absolute;
top: 20px;
left: 60%;
width: 1px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
style="position: absolute; top: 1px; left: 39%; line-height: 20px"
>
{{
((((item.maxScore - item.minScore) / item.minScore) *
item.minScore) /
5) *
2 +
item.minScore
}}
</div>
<div
style="
position: absolute;
top: 20px;
left: 40%;
width: 1px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
style="position: absolute; top: 1px; left: 19%; line-height: 20px"
>
{{
((((item.maxScore - item.minScore) / item.minScore) *
item.minScore) /
5) *
1 +
item.minScore
}}
</div>
<div
style="
position: absolute;
top: 20px;
left: 20%;
width: 1px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
style="position: absolute; top: 1px; left: -1%; line-height: 20px"
>
{{ item.minScore == null ? 0 : item.minScore }}
</div>
<div
style="
position: absolute;
top: 20px;
left: 0%;
width: 1px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
style="
position: absolute;
top: 1px;
right: -1%;
line-height: 20px;
"
>
{{ item.maxScore == null ? 100 : item.maxScore }}
</div>
<div
style="
position: absolute;
top: 20px;
right: 0%;
width: 2px;
height: 15px;
background: #a2a4a1;
"
></div>
<div
class="cz2"
:style="{
width:
((item.itemScore - item.minScore) /
(item.maxScore - item.minScore)) *
100 +
'%',
}"
></div>
</div>
<div style="position: absolute; left: 30%; top: 72%">
{{ item.leveName }}
</div>
</el-col>
<el-col
v-else
:span="9"
style="
height: 100px;
border-right: 1px solid #ededed;
border-bottom: 1px solid #ededed;
position: relative;
"
>
<span
style="
margin-top: 20px;
float: left;
margin-left: 10%;
margin-top: 7%;
"
>成绩评价</span
>
<div style="position: absolute; left: 48%; top: 40%">
{{ item.leveName }}
</div>
</el-col>
<el-col
:span="5"
style="
height: 100px;
line-height: 100px;
border-bottom: 1px solid #ededed;
"
>{{ item.syntheticalAssess }}</el-col
>
</el-row>
</el-card>
<el-row :gutter="20" v-if="itemshow2">
<el-col :span="24" :offset="0">
<el-card>
<div slot="header" style="text-align: center">
<img style="width: 40px" src="@/icons/笑脸.png" alt="" />
<div><!-- card title -->该学生此批次暂没数据</div>
</div>
<!-- card body -->
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import {
listKindergartenInfo,
tKindergartenInfo,
} from "@/api/system/kindergartenInfo";
import { listStudentInfo } from "@/api/system/studentInfo";
import { listClassinfo } from "@/api/system/classinfo";
import {
getRoleInfo,
testBodyScoreInfo,
testScoreBatch,
} from "@/api/system/quality";
export default {
name: "quality",
components: {},
data() {
return {
itemshow: false,
itemshow2: false,
total1: 0,
total2: 0,
total3: 0,
total4: 0,
//
kindergartenshow: false,
classshow: false,
studentshow: false,
batchCodeshow: false,
//
dictValue1: "",
dictValue2: "",
dictValue3: "",
dictValue4: "",
ClassType: "class_type",
//
showSearch: true,
//
form: {},
//
studentqueryParams: {
pageNum: 1,
pageSize: 10,
classId: "",
nationDictId: null,
studentName: null,
studentSex: null,
studentNumber: null,
birthDate: null,
cardNumber: null,
onceName: null,
homeAddress: null,
},
//
classqueryParams: {
pageNum: 1,
pageSize: 10,
kindergartenId: "",
className: null,
classType: null,
},
//
kqueryParams: {
pageNum: 1,
pageSize: 10,
organizeId: null,
kindergartenName: null,
kindergartenAddress: null,
kindergartenType: null,
phone: null,
contacts: null,
},
//list
kindergartenList: [],
//
kindergartenName: "请选择幼儿园",
//ID
kindergartenId: "",
//list
classinfoList: [],
//
className: "请选择班级",
//ID
classId: "",
//list
studentInfoList: [],
//
studentname: "请选择学生",
//ID
studentId: "",
//
batchCodeName: "请选择批次",
//ID
batchCodeId: "",
//list
testScorelist: [],
//
studentscorelist: [],
//
studentscore: {
pageNum: 1,
pageSize: 10,
studentId: "",
batchCode: "",
// studentId: "14",
// batchCode: "PC202208030005",
// studentId: "9",
// batchCode: "PC202208030004",
},
//
testqueryParams: {
pageNum: 1,
pageSize: 10,
},
};
},
created() {
this.getList();
this.class();
// this.studenttext();
},
methods: {
//
studenttext() {
testBodyScoreInfo(this.studentscore).then((res) => {
// res.rows[3].levelMaxScore = 19.5;
// res.rows[3].levelMinScore = 4.5;
// res.rows[3].itemScore = 7.5;
if (!res.rows || res.rows == "" || res.rows == []) {
this.itemshow2 = true;
this.itemshow = false;
} else {
this.studentscorelist = res.rows;
console.log(this.studentscorelist);
}
});
},
//
studentshowclick() {
if (this.studentqueryParams.classId == "") {
this.$message.error("请先选择班级");
} else {
this.studentshow = true;
this.studentlist();
}
},
//
batchCodeshowclick() {
if (this.studentscore.studentId == "") {
this.$message.error("请先选择学生");
} else {
this.testScore();
this.batchCodeshow = true;
}
},
//
batchCodeclick(row) {
this.batchCodeName = row.batchName;
this.batchCodeId = row.id;
this.studentscore.batchCode = row.batchCode;
this.batchCodeshow = false;
this.studenttext();
},
//
testScore() {
testScoreBatch(this.testqueryParams).then((res) => {
this.testScorelist = res.rows;
this.total4 = res.total;
});
},
//
studentclick(row) {
this.studentname = row.studentName;
this.studentId = row.id;
this.studentshow = false;
this.studentscore.studentId = row.id;
},
//
studentlist() {
listStudentInfo(this.studentqueryParams).then((res) => {
this.studentInfoList = res.rows;
this.total3 = res.total;
// console.log(this.studentInfoList);
});
},
//
classshowclick() {
if (this.classqueryParams.kindergartenId == "") {
this.$message.error("请先选择幼儿园");
} else {
this.classshow = true;
this.classinfo();
}
// console.log(this.classqueryParams);
},
//
batchCodecancel() {
this.batchCodeshow = false;
},
//
studentcancel() {
this.studentshow = false;
},
//
kindergartencancel() {
this.kindergartenshow = false;
},
//
classcancel() {
this.classshow = false;
},
//
classclick(row) {
// console.log(row);
this.className = row.className;
this.classId = row.id;
this.studentqueryParams.classId = row.id;
this.classshow = false;
},
//
kindergartenNameclick(row) {
this.classqueryParams.kindergartenId = row.id;
this.kindergartenName = row.kindergartenName;
this.kindergartenId = row.id;
this.kindergartenshow = false;
},
//
class() {
tKindergartenInfo(this.ClassType).then((res) => {
this.dictValue1 = res.data[0].dictValue;
this.dictValue2 = res.data[1].dictValue;
this.dictValue3 = res.data[2].dictValue;
this.dictValue4 = res.data[3].dictValue;
});
},
//list
classinfo() {
listClassinfo(this.classqueryParams).then((response) => {
this.classinfoList = response.rows;
this.total2 = response.total;
// console.log(this.classinfoList);
});
},
getList() {
//
getRoleInfo().then((res) => {
console.log(res);
});
//list
listKindergartenInfo(this.kqueryParams).then((response) => {
this.kindergartenList = response.rows;
this.total1 = response.total;
// console.log(this.kindergartenList);
});
},
//
reset() {
this.form = {};
this.resetForm("form");
},
},
};
</script>
<style scoped='scss'>
::v-deep .el-card__header {
border: none;
}
.cz2 {
background: #db6b6f;
height: 5px;
align-items: center;
line-height: 30px;
position: absolute;
top: 40px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -123,7 +123,6 @@
label="所属批次编号" label="所属批次编号"
align="center" align="center"
prop="batchCode" prop="batchCode"
/> />
<el-table-column label="测试成绩" align="center" prop="itemScore"> <el-table-column label="测试成绩" align="center" prop="itemScore">
<template slot-scope="scope"> <template slot-scope="scope">
@ -1225,8 +1224,6 @@ export default {
{ required: true, message: "请输入测试成绩", trigger: "blur" }, { required: true, message: "请输入测试成绩", trigger: "blur" },
], ],
// itemScores: [ // itemScores: [
// { required: true, message: "", trigger: "blur" }, // { required: true, message: "", trigger: "blur" },
// ], // ],
@ -1235,7 +1232,6 @@ export default {
{ required: true, message: "综合评价不能为空", trigger: "blur" }, { required: true, message: "综合评价不能为空", trigger: "blur" },
] ]
}, },
}; };
}, },
created() { created() {
@ -1504,10 +1500,13 @@ export default {
// this.stname = row.studentName; // this.stname = row.studentName;
// this.testname=row.itemName; // this.testname=row.itemName;
// this.itemNumbername = row.batchCode; // this.itemNumbername = row.batchCode;
if(response.data.itemScore==''||response.data.itemScore==null){ if (response.data.itemScore == "" || response.data.itemScore == null) {
response.data.dictvalue='text'; response.data.dictvalue = "text";
}else if(response.data.scoreDictValue==''||response.data.scoreDictValue==null){ } else if (
response.data.dictvalue='number'; response.data.scoreDictValue == "" ||
response.data.scoreDictValue == null
) {
response.data.dictvalue = "number";
} }
this.form = response.data; this.form = response.data;
// this.form = response.className; // this.form = response.className;
@ -1519,7 +1518,6 @@ export default {
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
console.log("wwwwww")
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.id != null) { if (this.form.id != null) {
@ -1533,6 +1531,14 @@ export default {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
this.xmname = "请选择所属班级";
this.stname = "请选择学生姓名";
this.testname = "请选择测试项目名称";
this.itemNumbername = "请选择批次编号";
this.itemId2 = "";
this.itemId3 = "";
this.itemId4 = "";
this.itemId5 = "";
}); });
} }
} }
@ -1542,7 +1548,7 @@ export default {
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal this.$modal
.confirm('是否确认删除个人成绩录入管理编号为"' + ids + '"的数据项?') .confirm("是否确认删除个人成绩的数据项?")
.then(function () { .then(function () {
return delTestItemScore(ids); return delTestItemScore(ids);
}) })

View File

@ -356,7 +356,7 @@
placeholder="请输入级别描述" placeholder="请输入级别描述"
/> />
</el-form-item> </el-form-item>
<el-form-item label="项目概述" prop="remark"> <el-form-item label="测试目的" prop="remark">
<el-input <el-input
v-model="form.remark" v-model="form.remark"
placeholder="请输入项目概述" placeholder="请输入项目概述"
@ -436,6 +436,23 @@ export default {
name: "TestItems", name: "TestItems",
data() { data() {
let itemLevelList = (rule, value, callback) => { let itemLevelList = (rule, value, callback) => {
let min = value
.map((e) => {
return e.levelMinScore;
})
.toString();
let max = value
.map((e) => {
return e.levelMaxScore;
})
.toString();
console.log(min, max);
if (Number(max) < Number(min)) {
console.log(min, max);
callback(new Error("最高分必须大于最低分,请重新填写!"));
}
if ( if (
value.map((e) => { value.map((e) => {
return e.levelName; return e.levelName;
@ -454,15 +471,6 @@ export default {
}) == "" }) == ""
) { ) {
callback(); callback();
} else if (
value.map((e) => {
return e.levelMaxScore;
}) <=
value.map((e) => {
return e.levelMinScore;
})
) {
callback(new Error("级别最高分必须大于最低分,请重新填写!"));
} else { } else {
callback(); callback();
} }
@ -486,6 +494,24 @@ export default {
} }
}; };
const validateVin = (rule, value, callback) => {
const containAlpha = /[a-zA-Z]/; //
const containLowerCase = /[a-z]/; //
value = value.slice(0, 1);
console.log(value);
if (!value) {
callback(new Error("不能为空"));
} else if (!containAlpha.test(value)) {
callback(new Error("第一个必须为字母"));
} else if (containLowerCase.test(value)) {
callback(new Error("英文必须大写"));
} else {
callback();
}
};
return { return {
// //
itemResultType: "item_result_type", itemResultType: "item_result_type",
@ -599,6 +625,11 @@ export default {
], ],
itemCode: [ itemCode: [
{ required: true, message: "项目编号不能为空", trigger: "blur" }, { required: true, message: "项目编号不能为空", trigger: "blur" },
{
required: true,
validator: validateVin,
trigger: "blur",
},
], ],
itemName: [ itemName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" }, { required: true, message: "项目名称不能为空", trigger: "blur" },
@ -763,7 +794,7 @@ export default {
handleDelete(row) { handleDelete(row) {
const ids = row.id || this.ids; const ids = row.id || this.ids;
this.$modal this.$modal
.confirm('是否确认该测试项目信息吗?') .confirm("是否确认该测试项目信息吗?")
.then(function () { .then(function () {
return delTestItems(ids); return delTestItems(ids);
}) })