Files
zhxg_pc/src/views/stuCQS/lake/jwc.vue

730 lines
28 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div v-loading.fullscreen.lock="fullLoading" class="app-container">
<el-form ref="queryForm" :model="queryParams" size="mini" :inline="true" label-width="68px">
<el-form-item label="学院" prop="deptId">
<el-select v-model="queryParams.deptId" size="mini" placeholder="学院" clearable
@change="changeSearchDept"
>
<el-option v-for="(v, i) in dept_list" :key="i" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
<el-form-item label="专业" prop="majorId">
<el-select v-model="queryParams.majorId" placeholder="请先选择学院再选择专业" filterable
clearable @change="changeSearchMajor"
>
<el-option v-for="(v, i) in search_major_list" :key="i" :label="v.majorName" :value="v.majorId" />
</el-select>
</el-form-item>
<el-form-item label="班级" prop="classId">
<el-select v-model="queryParams.classId" placeholder="请先选择专业再选择班级" filterable clearable>
<el-option v-for="(v, i) in search_class_list" :key="i" :label="v.className" :value="v.classId" />
</el-select>
</el-form-item>
<el-form-item label="学号" prop="stuNo">
<el-input v-model="queryParams.stuNo" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="学生姓名" prop="stuName">
<el-input v-model="queryParams.stuName" placeholder="请输入学生姓名" clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="奖项" prop="code">
<el-select v-model="queryParams.code">
<el-option v-for="(v, i) in search_type_list" :key="i" clearable :value="v.typeCode"
:label="v.typeName"
/>
</el-select>
</el-form-item>
<el-form-item label=" ">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-button icon="el-icon-edit" type="success" size="mini" @click="manyVClick">一键审核通过</el-button>
<el-table v-loading="loading" :data="table_data" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="奖项" prop="typeName" align="center" />
<el-table-column label="学生" prop="stuName" align="center" />
<el-table-column label="学号" prop="stuNo" align="center" />
<el-table-column label="学院" prop="deptName" align="center" />
<el-table-column label="专业" prop="majorName" align="center" />
<el-table-column label="班级" prop="className" align="center" />
<el-table-column label="申请时间" prop="applyTime" align="center">
<template slot-scope="scope">
{{ dayjs(scope.row.applyTime).format("YYYY-MM-DD HH:mm:ss") }}
</template>
</el-table-column>
<el-table-column label="申请状态" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.audius_detail_type" :value="scope.row.applyStatus" />
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text" size="mini" icon="el-icon-view"
@click="auditVClick(scope.row)"
>审核</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList"
/>
<el-dialog title="申请" :visible.sync="auditV" fullscreen :append-to-body="true">
<el-steps :active="getStep(auditForm)">
<el-step title="学生提交申请" description="" />
<el-step title="辅导员审核"
:status="isEmpty(auditForm.fdyComment) ? 'wait' : getStepStatus(auditForm.fdyComment)"
>
<template slot="description">
<div>
{{ isEmpty(auditForm.fdyNoName) ? '' : auditForm.fdyNoName }}
</div>
<div>
{{ isEmpty(auditForm.fdyComment) ? '' : auditForm.fdyComment }}
</div>
<div>
{{ isEmpty(auditForm.fdyTime) ? '' : auditForm.fdyTime }}
</div>
</template>
</el-step>
<el-step title="学院审核"
:status="isEmpty(auditForm.xwComment) ? 'wait' : getStepStatus(auditForm.xwComment)"
>
<template slot="description">
<div>
{{ isEmpty(auditForm.xwNoName) ? '' : auditForm.xwNoName }}
</div>
<div>
{{ isEmpty(auditForm.xwComment) ? '' : auditForm.xwComment }}
</div>
<div>
{{ isEmpty(auditForm.xwTime) ? '' : auditForm.xwTime }}
</div>
</template>
</el-step>
<el-step title="学工审核"
:status="isEmpty(auditForm.jwcComment) ? 'wait' : getStepStatus(auditForm.jwcComment)"
>
<template slot="description">
<div>
{{ isEmpty(auditForm.xgNoName) ? '' : auditForm.xgNoName }}
</div>
<div>
{{ isEmpty(auditForm.jwcComment) ? '' : auditForm.jwcComment }}
</div>
<div>
{{ isEmpty(auditForm.xgTime) ? '' : auditForm.xgTime }}
</div>
</template>
</el-step>
</el-steps>
<hr>
<el-form class="detail" label-width="160px">
<el-row>
<div style="display: flex;">
<el-col :span="12" style="margin-right: 50px;">
<el-form-item label="班级">
<el-input v-model="auditForm.className" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="auditForm.stuName" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="政治面貌">
<el-input v-model="auditForm.zzmm" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<!-- <el-form-item v-if="!isEmpty(auditForm.youthPercent)" label="青年大学习学习率">
<el-input readonly size="mini" class="auditForm-input"
v-model="auditForm.youthPercent"></el-input>
</el-form-item> -->
<el-form-item v-if="!isEmpty(auditForm.classtwoSure)" label="第二课堂学分认定">
<el-input v-model="auditForm.classtwoSure" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="职务">
<el-input v-model="auditForm.classPost" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item v-if="!isEmpty(auditForm.bankCard)" label="中国农业银行银行卡号">
<el-input v-model="auditForm.bankCard" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item v-if="!isEmpty(auditForm.bankAddr)" label="开户行">
<el-input v-model="auditForm.bankAddr" readonly size="mini"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="获奖情况">
<el-input v-model="auditForm.goodHis" readonly type="textarea"
:maxlength="1000" :autosize="{ minRows: 10, maxRows: 10 }"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="主要事迹">
<el-input v-model="auditForm.mainHis" readonly type="textarea"
:maxlength="1000" :autosize="{ minRows: 10, maxRows: 10 }"
class="auditForm-input"
/>
</el-form-item>
<el-form-item label="您的审核意见">
<el-row>
<el-col :span="12">
<el-select v-model="doForm.applyStatus" placeholder="请选择审核意见"
style="width: 200px;" size="mini" @change="changeAuditStatus"
>
<el-option v-for="(v, i) in status_list" :key="i" :label="v.label"
:value="v.value"
/>
</el-select>
</el-col>
<el-col :span="12">
<el-button type="success" size="mini" @click="doAudit">提交审核</el-button>
</el-col>
</el-row>
<el-input v-model="doForm.jwcComment" placeholder="请输入审核意见" type="textarea"
:maxlength="1000" :autosize="{ minRows: 10, maxRows: 10 }"
class="auditForm-input"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<div>
<el-row>
<el-col :span="4">
<span style="font-weight: bolder;">该生申请奖项:</span>
</el-col>
<el-col :span="8">
<span style="color: red; font-weight: bolder;">
{{ auditForm.typeName }}
</span>
</el-col>
<el-col :span="6">
<el-button type="primary" size="mini"
@click="lookNeedV = true;"
>查看评优要求</el-button>
</el-col>
</el-row>
</div>
<el-drawer :modal="false" size="50%" title="评优要求" :visible.sync="lookNeedV" direction="ltr"
:append-to-body="true"
>
<div class="sign">
<ul>
<li>
申请要求:综合素质优秀学年综合测评班级排名前30%学习成绩优良无不及格补考重修科目体能成绩合格等
</li>
<li>
学业之星:
<ol>
<li>学业成绩名列前茅学年平均学分绩在专业排名前5%获得校级及以上先进个人项目表彰</li>
<li>专业领域成果突出在与专业相关的知识竞赛技能竞赛中获奖优先推荐发表过专业论文者</li>
</ol>
</li>
<li>
技能之星:
<ol>
<li>技能或创新创业比赛成绩优异积极参加技能训练技能比赛或创新创业类比赛在省部级及以上举办的技能类创新创业类比赛中获得三等奖及以上或在市厅级举办的技能类创新创业类比赛中获得二等奖及以上或在校级组织的技能类创新创业类比赛中获得一等奖及以上
</li>
<li>专业技能成绩优良在本专业技能考核中成绩突出学年平均学分绩在专业排名前30%</li>
<li>专业技能突出取得与专业相关的资格资质证书专利排名前五或者在专业技能某个方面特别突出者优先考虑</li>
</ol>
</li>
<li>
励志之星:
<ol>
<li>在评选学年中被认定为家庭经济困难学生自立自强热爱生活吃苦耐劳勇于拼搏乐观向上有突出的励志事迹能够激励他人影响他人在同学中认可度高
</li>
<li>在专业学习勤工俭学社会实践科技创新励志感恩创新创业公益服务等方面取得突出成绩</li>
<li>学业成绩优良学年平均学分绩在专业排名前30%获得校级及以上先进个人项目表彰</li>
</ol>
</li>
<li>
才艺之星:
<ol>
<li>才艺成绩突出在校内外各类文体赛事中如体育美术音乐舞蹈戏剧摄影摄像写作演讲辩论等成绩突出
</li>
<li>学业成绩优良学年平均学分绩在专业排名前30%</li>
</ol>
</li>
<li>
服务之星:
<ol>
<li>积极主动为师生服务在团委学生会易班社团协会班级等组织中担任主要学生干部认真履行职责且获得过校级及以上优秀学生干部称号
</li>
<li>积极参与社会服务积极做好社会服务工作在校级及以上大型活动中发挥重要作用受到主办单位的嘉奖或认可服务成效显著</li>
<li>学业成绩优良学年平均学分绩在专业排名前30%</li>
</ol>
</li>
<li>
<span style="text-decoration: underline;color: lightskyblue;cursor: pointer;"
@click="lookMore"
>查看更多</span>
</li>
</ul>
</div>
</el-drawer>
<el-table :data="score_list">
<el-table-column label="学年" prop="stuYearName" align="center" />
<el-table-column label="平均学分绩" prop="stuScore" align="center" />
<el-table-column label="综合素质总成绩" prop="cphScore" align="center" />
<el-table-column label="体测成绩" prop="sportScore" align="center" />
<el-table-column label="平均学分绩专业排名" align="center">
<template slot-scope="scope">
{{ scope.row.stuMajorRank + '/' + scope.row.majorCount }}
</template>
</el-table-column>
<el-table-column label="综合素质总成绩班级排名" align="center">
<template slot-scope="scope">
{{ scope.row.cphClassRank + '/' + scope.row.classCount }}
</template>
</el-table-column>
<el-table-column label="平均学分绩专业排名百分比" align="center">
<template slot-scope="scope">
{{ Math.round(scope.row.stuMajorRank / scope.row.majorCount * 10000) / 100 + "%"
}}
</template>
</el-table-column>
<el-table-column label="学年综合素质测评班级排名百分比" align="center">
<template slot-scope="scope">
{{ Math.round(scope.row.cphClassRank / scope.row.classCount * 10000) / 100 + "%"
}}
</template>
</el-table-column>
</el-table>
<el-table :data="count_list">
<el-table-column label="学年" prop="stuYearName" align="center" />
<el-table-column label="课程总门数" prop="courseCount" align="center" />
<el-table-column label="通过门数" prop="passCount" align="center" />
<el-table-column label="未通过门数" prop="unpassCount" align="center" />
</el-table>
<el-row>
<el-col v-for="(v, i) in course_list" :key="i" :span="12">
<el-table :header-row-style="{ padding: '0' }" :data="v.value"
:row-style="{ height: '0' }" :cell-style="{ padding: '0' }"
>
<el-table-column :label="v.name" align="center">
<el-table-column label="课程" prop="courseName" align="center" />
<el-table-column label="成绩" prop="courseScore" align="center" />
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-col>
</div>
</el-row>
</el-form>
</el-dialog>
<el-dialog :visible.sync="lookMoreV" :append-to-body="true">
<MoreDetail />
</el-dialog>
<el-dialog title="一键审核通过" :visible.sync="manyV" :append-to-body="true">
<el-input v-model="manyForm.common" type="textarea" placeholder="请输入审核意见" />
<el-button type="primary" @click="doMany">一键审核通过</el-button>
</el-dialog>
</div>
</template>
<script>
import { getDeptName } from '@/api/system/dept'
import { listMajors } from '@/api/stuCQS/basedata/majors'
import { listClass } from '@/api/stuCQS/basedata/class'
import { listAllYear as listYear } from '@/api/stuCQS/basedata/year'
import { listSelect } from '@/api/stuCQS/lake/type'
import { listJwc, jwcAudit, manyAudit } from '@/api/stuCQS/lake/apply'
import {
listStuScoreClassRank,listStuScoreClassRankByTag ,listStuYearCourseScore, countStuPass, countStuIam, applyStatus
} from '@/api/stuCQS/good/audit'
import lodash from 'lodash'
import { isEmpty, groupBy } from '@/api/helpFunc'
import MoreDetail from '@/views/stuCQS/lake/MoreDetail.vue'
import dayjs from 'dayjs'
export default {
name: 'Lakefdy',
dicts: ['audius_detail_type'],
components: {
MoreDetail
},
data() {
return {
dayjs,
applyStatus,
search_type_list: [],
isEmpty,
fullLoading: false,
loading: false,
table_data: [],
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
code: null,
status: null,
stuNo: '',
stuName: ''
},
auditV: false,
auditForm: {},
material_list: [],
score_list: [],
myScoreV: false,
course_list: [],
courseParams: {
pageNum: 1,
pageSize: 10
},
courseTotal: 0,
course_loading: false,
count_list: [],
iamV: false,
iam_count: [],
doForm: {
id: null,
applyStatus: null,
jwcComment: '经过审核,同意该生申请。'
},
exportForm: {
typeName: null,
classId: null,
stuYearId: null
},
class_list: [],
year_list: [],
lookNeedV: false,
lookMoreV: false,
search_major_list: [],
search_class_list: [],
dept_list: [],
manyV: false,
applyIds: [],
manyForm: {
applyIds: [],
common: '经过审核,同意该生申请。'
},
status_list: [
{
label: '通过',
value: 6
},
{
label: '驳回(学生可以重新提交)',
value: 10
},
{
label: '拒绝(学生不可以再提交)',
value: 11
}
]
}
},
created() {
this.listSelect()
this.listDept()
this.listAllStuYear()
this.getList()
},
methods: {
getStepStatus(data) {
if ((data.includes('同意') && !data.includes('不同意')) || data.includes('通过') || (data.includes('符合') && !data.includes('不符合'))) {
return 'success'
} else {
return 'error'
}
},
getStep(data) {
if (!isEmpty(data.finalComment)) {
return 4
} else if (!isEmpty(data.xwComment)) {
return 3
} else if (!isEmpty(data.fdyComment)) {
return 2
} else {
return 1
}
},
changeAuditStatus(v) {
switch (v) {
case 6:
this.doForm.jwcComment = '经过审核,同意该生申请。'
break
case 10:
this.doForm.jwcComment = '填写有误,请重新提交。'
break
case 11:
this.doForm.jwcComment = '拒绝申请。'
break
default:
this.doForm.jwcComment = '同意申请。'
break
}
},
async doMany() {
let sdata = lodash.cloneDeep(this.manyForm)
if (isEmpty(sdata.common)) {
this.$message.info('请输入审核意见')
return
}
this.fullLoading = true
let res = await manyAudit(sdata)
this.fullLoading = false
if (res.code == 200) {
this.$message.success(res.msg)
this.getList()
this.manyV = false
}
},
handleSelectionChange(selection) {
console.log(selection)
this.applyIds = selection.map(item => item.id)
},
manyVClick() {
if (this.applyIds.length == 0) {
this.$message.info('请选择学生')
return
}
this.manyForm.applyIds = this.applyIds
this.manyV = true
},
async listDept() {
let res = await getDeptName()
this.dept_list = [...res.data]
},
async changeSearchDept() {
let sdata = {
collegeId: this.queryParams.deptId,
pageNum: 1,
pageSize: 100
}
let res = await listMajors(sdata)
this.search_major_list = [...res.rows]
},
async changeSearchMajor() {
let sdata = {
pageNum: 1,
pageSize: 100,
majorId: this.queryParams.majorId
}
let res = await listClass(sdata)
if (res.code == 200) {
this.search_class_list = [...res.rows]
}
},
async listSelect() {
let res = await listSelect()
if (res.code == 200) {
this.search_type_list = [...res.data]
}
},
lookMore() {
this.lookMoreV = true
window.open('http://zhxg.gxsdxy.cn/file/jhzx2023.pdf')
},
async listAllStuYear() {
let res = await listYear()
if (res.code == 200) {
this.year_list = [...res.data]
}
},
async listOwnClass() {
let res = await listOwnClass()
if (res.code == 200) {
this.class_list = [...res.data]
}
},
async getList() {
this.loading = true
let res = await listJwc(this.queryParams)
this.loading = false
if (res.code == 200) {
this.table_data = [...res.rows]
this.total = res.total
}
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm('queryForm')
this.handleQuery()
},
async auditVClick(v) {
this.auditForm = { ...v }
this.auditV = true
this.myScoreVClick()
},
async countStuIam() {
let stuNo = this.auditForm.stuNo
let res = await countStuIam(stuNo)
if (res.code == 200) {
this.iam_count = res.data
}
},
async countStuPass() {
let stuNo = this.auditForm.stuNo
let res = await countStuPass(stuNo)
if (res.code == 200) {
this.count_list = [...res.data]
}
},
async listStuYearCourseScore() {
let stuNo = this.auditForm.stuNo
this.course_loading = true
let res = await listStuYearCourseScore(stuNo, this.courseParams)
this.course_loading = false
if (res.code == 200) {
let groupdata = groupBy([...res.rows], x => {
return x.termName
})
let temp = []
for (let i in groupdata) {
let needAddTemp = {}
needAddTemp.name = i.replace(/\"/g, '')
needAddTemp.value = groupdata[i]
temp.push(needAddTemp)
}
this.course_list = [...temp]
this.courseTotal = res.total
}
},
async listStuScoreClassRank() {
let stuNo = this.auditForm.stuNo
/* let res = await listStuScoreClassRank(stuNo) */
/* 此处使用硬编码,请根据实际情况修改。
当前功能是获取'静湖之星---JHZX'标签对应学年的成绩排名信息。
涉及到学年标签字典module_tag需要在字典管理中查询对应的信息。
如果在字典管理更改了 学年标签 的信息,此处也要进行相应修改。
---尽量避免学年标签字典的更改!!!! */
const yearTag = 'JHZX'
let res = await listStuScoreClassRankByTag(stuNo,yearTag)
if (res.code == 200) {
this.score_list = lodash.cloneDeep(res.data)
}
},
iamVClick() {
this.countStuIam()
this.countStuPass()
this.listStuScoreClassRank()
this.listStuYearCourseScore()
this.iamV = true
},
myScoreVClick() {
this.countStuPass()
this.listStuScoreClassRank()
this.listStuYearCourseScore()
this.myScoreV = true
},
async doAudit() {
let sdata = { ...this.doForm }
if (isEmpty(sdata.applyStatus)) {
this.$message.info('请选择是否通过')
return
}
if (isEmpty(sdata.jwcComment)) {
this.$message.info('请填写审核意见')
return
}
sdata.id = parseInt(this.auditForm.id)
this.fullLoading = true
let res = await jwcAudit(sdata)
this.fullLoading = false
if (res.code == 200) {
this.getList()
this.auditForm = {}
this.doForm = {
id: null,
applyStatus: null,
jwcComment: '同意申请'
}
this.auditV = false
this.$message.success(res.msg)
}
}
}
}
</script>
<style lang="scss" scoped>
.addForm-input {
width: 400px;
}
.detail {
.el-form-item {
margin-bottom: 0px;
}
}
.sign {
width: 100%;
border: 1px solid rgb(163, 211, 255);
font-size: small;
margin-bottom: 10px;
border-radius: 2px;
}
</style>