|
@ -1,6 +1,40 @@ |
|
|
<template> |
|
|
<template> |
|
|
<div class="rightClass"> |
|
|
<div class="rightClass"> |
|
|
<div> |
|
|
<div> |
|
|
|
|
|
<el-row> |
|
|
|
|
|
<el-col v-for="(headerItem, headerIndex) in _.filter(tableHeader, item => item.isSearch)" :key="headerIndex" |
|
|
|
|
|
:span="4"> |
|
|
|
|
|
<div> |
|
|
|
|
|
<span>{{ headerItem.label }}:</span> |
|
|
|
|
|
<template v-if="headerItem.type === 'text'"> |
|
|
|
|
|
<el-input v-model="searchParams[headerItem.prop]" style="width: 150px;padding-right: 8px;margin:8px 0" |
|
|
|
|
|
clearable @keyup.enter="searchData()" /> |
|
|
|
|
|
</template> |
|
|
|
|
|
<template v-if="headerItem.type === 'select'"> |
|
|
|
|
|
<el-select v-model="searchParams[headerItem.prop]" size="large" |
|
|
|
|
|
style="width: 150px;padding-right: 8px;margin:8px 0" clearable @change="searchData()"> |
|
|
|
|
|
<el-option v-for="item in headerItem.tableDisplay" :key="item.value" :label="item.label" |
|
|
|
|
|
:value="item.value" /> |
|
|
|
|
|
</el-select> |
|
|
|
|
|
</template> |
|
|
|
|
|
<template v-else-if="headerItem.type === 'date'"> |
|
|
|
|
|
<el-date-picker v-model="searchParams[headerItem.prop]" type="date" |
|
|
|
|
|
:disabled="['create_at', 'update_at'].indexOf(headerItem.prop) !== -1" |
|
|
|
|
|
:placeholder="`请选择${headerItem.label}`" format="YYYY-MM-DD" value-format="YYYY-MM-DD" |
|
|
|
|
|
style="width: 150px;padding-right: 8px;margin:8px 0" size="large" clearable @change="searchData()" /> |
|
|
|
|
|
</template> |
|
|
|
|
|
</div> |
|
|
|
|
|
</el-col> |
|
|
|
|
|
<el-col :span="6"> |
|
|
|
|
|
<el-button type="primary" @click="searchData()" size="large"> |
|
|
|
|
|
<el-icon> |
|
|
|
|
|
<Search /> |
|
|
|
|
|
</el-icon> |
|
|
|
|
|
<span>搜索</span> |
|
|
|
|
|
</el-button> |
|
|
|
|
|
</el-col> |
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
|
<el-button type="primary" @click="addData"> |
|
|
<el-button type="primary" @click="addData"> |
|
|
<el-icon> |
|
|
<el-icon> |
|
|
<Plus /> |
|
|
<Plus /> |
|
@ -56,6 +90,12 @@ |
|
|
<span>设置表头</span> |
|
|
<span>设置表头</span> |
|
|
</el-button> |
|
|
</el-button> |
|
|
</el-tooltip> |
|
|
</el-tooltip> |
|
|
|
|
|
<el-button type="primary" @click="clearLocalstory"> |
|
|
|
|
|
<el-icon> |
|
|
|
|
|
<Refresh /> |
|
|
|
|
|
</el-icon> |
|
|
|
|
|
<span>清空缓存</span> |
|
|
|
|
|
</el-button> |
|
|
<!-- <div class="inputClass"> |
|
|
<!-- <div class="inputClass"> |
|
|
<el-input v-model.trim="searchParams.name" style="max-width: 600px" placeholder="请输入姓名" clearable |
|
|
<el-input v-model.trim="searchParams.name" style="max-width: 600px" placeholder="请输入姓名" clearable |
|
|
@clear="searchData" @keyup.enter="searchData"> |
|
|
@clear="searchData" @keyup.enter="searchData"> |
|
@ -69,6 +109,51 @@ |
|
|
</el-input> |
|
|
</el-input> |
|
|
</div> --> |
|
|
</div> --> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div> |
|
|
|
|
|
<el-descriptions direction="vertical" :column="5" border style="margin: 8px 0;"> |
|
|
|
|
|
<el-descriptions-item label="总人数">{{ allData.length }}</el-descriptions-item> |
|
|
|
|
|
<el-descriptions-item label="优秀人数(优秀率)"> |
|
|
|
|
|
<span style="margin: 0 8px 0 0;"> |
|
|
|
|
|
{{ _.filter(allData, { level: "优秀" }).length }} |
|
|
|
|
|
</span> |
|
|
|
|
|
<span> |
|
|
|
|
|
<el-tag size="small" style="position: relative;top: -1px;"> |
|
|
|
|
|
{{ Number(((_.filter(allData, { level: "优秀" })) / (allData.length || 1)).toFixed(2)) * 100 }}% |
|
|
|
|
|
</el-tag> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-descriptions-item> |
|
|
|
|
|
<el-descriptions-item label="良好人数(良好率)"> |
|
|
|
|
|
<span style="margin: 0 8px 0 0;"> |
|
|
|
|
|
{{ _.filter(allData, { level: "良好" }).length }} |
|
|
|
|
|
</span> |
|
|
|
|
|
<span> |
|
|
|
|
|
<el-tag size="small" style="position: relative;top: -1px;"> |
|
|
|
|
|
{{ Number(((_.filter(allData, { level: "良好" })).length / (allData.length || 1)).toFixed(2)) * 100 }}% |
|
|
|
|
|
</el-tag> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-descriptions-item> |
|
|
|
|
|
<el-descriptions-item label="及格人数(及格率)"> |
|
|
|
|
|
<span style="margin: 0 8px 0 0;"> |
|
|
|
|
|
{{ _.filter(allData, { level: "及格" }).length }} |
|
|
|
|
|
</span> |
|
|
|
|
|
<span> |
|
|
|
|
|
<el-tag size="small" style="position: relative;top: -1px;"> |
|
|
|
|
|
{{ Number(((_.filter(allData, { level: "及格" })).length / (allData.length || 1)).toFixed(2)) * 100 }}% |
|
|
|
|
|
</el-tag> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-descriptions-item> |
|
|
|
|
|
<el-descriptions-item label="不及格人数(不及格率)"> |
|
|
|
|
|
<span style="margin: 0 8px 0 0;"> |
|
|
|
|
|
{{ _.filter(allData, { level: "不及格" }).length }} |
|
|
|
|
|
</span> |
|
|
|
|
|
<span> |
|
|
|
|
|
<el-tag size="small" style="position: relative;top: -1px;"> |
|
|
|
|
|
{{ Number(((_.filter(allData, { level: "不及格" })).length / (allData.length || 1)).toFixed(2)) * 100 }}% |
|
|
|
|
|
</el-tag> |
|
|
|
|
|
</span> |
|
|
|
|
|
</el-descriptions-item> |
|
|
|
|
|
</el-descriptions> |
|
|
|
|
|
</div> |
|
|
<div> |
|
|
<div> |
|
|
<tablecomponent :tableHeader="tableHeader" :tableData="tableData" :searchParams="searchParams" |
|
|
<tablecomponent :tableHeader="tableHeader" :tableData="tableData" :searchParams="searchParams" |
|
|
:pageSizes="pageSizes" :total="total" @selectChange="selectChange" @handleCurrentChange="handleCurrentChange" |
|
|
:pageSizes="pageSizes" :total="total" @selectChange="selectChange" @handleCurrentChange="handleCurrentChange" |
|
@ -125,6 +210,7 @@ export default { |
|
|
formHeader: [], |
|
|
formHeader: [], |
|
|
exportHeader: [], |
|
|
exportHeader: [], |
|
|
tableData: [], |
|
|
tableData: [], |
|
|
|
|
|
allData: [], |
|
|
currentPage: 1, |
|
|
currentPage: 1, |
|
|
pageSize: 15, |
|
|
pageSize: 15, |
|
|
pageSizes: [15, 50, 75, 100], |
|
|
pageSizes: [15, 50, 75, 100], |
|
@ -205,7 +291,7 @@ export default { |
|
|
// 处理每行的数据 |
|
|
// 处理每行的数据 |
|
|
dealRow(row) { |
|
|
dealRow(row) { |
|
|
row["addScore"] = 0 |
|
|
row["addScore"] = 0 |
|
|
row["BMI"] = Number(Number(row.weight / (row.height * row.height / 10000)).toFixed(2)) |
|
|
row["BMI"] = Number(Number(row.weight / (row.height * row.height / 10000)).toFixed(2)) || 0 |
|
|
// let nianjicodeList = ["11", "12","13","14", "15","16","21", "22","23","31", "32","33","41","42"] |
|
|
// let nianjicodeList = ["11", "12","13","14", "15","16","21", "22","23","31", "32","33","41","42"] |
|
|
let nianjicodeList = ["11", "12", "13", "14", "15", "16", "21", "22", "23"] |
|
|
let nianjicodeList = ["11", "12", "13", "14", "15", "16", "21", "22", "23"] |
|
|
if (nianjicodeList.includes(`${row.nianjicode}`)) { |
|
|
if (nianjicodeList.includes(`${row.nianjicode}`)) { |
|
@ -214,9 +300,9 @@ export default { |
|
|
let scoreItem = {} |
|
|
let scoreItem = {} |
|
|
for (let i = 0; i < value.list.length; i++) { |
|
|
for (let i = 0; i < value.list.length; i++) { |
|
|
let item = value.list[i]; |
|
|
let item = value.list[i]; |
|
|
let rowValue = this.transTime(row[value.prop]) |
|
|
let rowValue = this.transTime(value, row[value.prop], true) |
|
|
let itemValue = this.transTime(item[`${row.nianjicode}`]) |
|
|
let itemValue = this.transTime(value, item[`${row.nianjicode}`], false) |
|
|
if (`${item.gender}` === `${row.gender}` && this.createComparator(value.fuhao)(rowValue, itemValue)) { |
|
|
if (`${item.gender}` === `${row.gender}` && `${item.gender}` === `${row.gender}` && this.createComparator(value.fuhao)(rowValue, itemValue)) { |
|
|
scoreItem = { ...item, [`${key.slice(0, key.length - 5)}_org`]: row[value.prop] } |
|
|
scoreItem = { ...item, [`${key.slice(0, key.length - 5)}_org`]: row[value.prop] } |
|
|
break |
|
|
break |
|
|
} |
|
|
} |
|
@ -265,7 +351,10 @@ export default { |
|
|
} |
|
|
} |
|
|
return row |
|
|
return row |
|
|
}, |
|
|
}, |
|
|
transTime(value) { |
|
|
transTime(item, value, isReturn) { |
|
|
|
|
|
if (item.prop === "fifty" && isReturn) { |
|
|
|
|
|
return Number(value) |
|
|
|
|
|
} |
|
|
if (typeof (value) === "number") { |
|
|
if (typeof (value) === "number") { |
|
|
return value |
|
|
return value |
|
|
} else if (typeof (value) === "string") { |
|
|
} else if (typeof (value) === "string") { |
|
@ -336,6 +425,7 @@ export default { |
|
|
// 带条件排序 |
|
|
// 带条件排序 |
|
|
allStudentList = _.cloneDeep(_.orderBy(allStudentList, [this.sortObj.prop], [_.get(this.sortObj, ["sort"], "") === 1 ? 'desc' : 'asc'])) |
|
|
allStudentList = _.cloneDeep(_.orderBy(allStudentList, [this.sortObj.prop], [_.get(this.sortObj, ["sort"], "") === 1 ? 'desc' : 'asc'])) |
|
|
} |
|
|
} |
|
|
|
|
|
this.allData = _.cloneDeep(allStudentList) |
|
|
this.total = allStudentList.length |
|
|
this.total = allStudentList.length |
|
|
this.tableData = allStudentList.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize) |
|
|
this.tableData = allStudentList.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize) |
|
|
}, |
|
|
}, |
|
@ -551,7 +641,16 @@ export default { |
|
|
// 表头设置 |
|
|
// 表头设置 |
|
|
setHeader() { |
|
|
setHeader() { |
|
|
this.setHeaderVisible = true |
|
|
this.setHeaderVisible = true |
|
|
} |
|
|
}, |
|
|
|
|
|
// 清空缓存 |
|
|
|
|
|
clearLocalstory() { |
|
|
|
|
|
// 清空缓存 |
|
|
|
|
|
localStorage.clear() |
|
|
|
|
|
ElMessage({ |
|
|
|
|
|
type: 'success', |
|
|
|
|
|
message: '清除缓存成功', |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
async mounted() { |
|
|
async mounted() { |
|
|
this.setTableHeader = [] |
|
|
this.setTableHeader = [] |
|
|