Files
zhxg_pc/src/views/stuCQS/good-class/stu.vue
2025-10-15 23:27:41 +08:00

566 lines
19 KiB
Vue

<template>
<div class="app-container">
<el-button icon="el-icon-edit" size="mini" type="success" plain @click="applyVClick">点我申请</el-button>
<el-table v-loading="loading" :data="tableData">
<el-table-column label="#" align="center" prop="id" />
<el-table-column label="学号" align="center" prop="stuNo" />
<el-table-column label="申请人" align="center" prop="stuName" />
<el-table-column label="班级" align="center" prop="className" />
<el-table-column label="学年" align="center" prop="stuYearName" />
<el-table-column label="辅导员姓名" align="center" prop="fdyName" />
<el-table-column label="提交时间" align="center" prop="applyTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.applyTime) }}</span>
</template>
</el-table-column>
<el-table-column label="学生人数" align="center" prop="classCount" />
<el-table-column label="申请状态" align="center" width="120px">
<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" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="lookVClick(scope.row)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="cancelVClick(scope.row)"
v-if="scope.row.applyStatus == '1'">取消申请</el-button>
<el-button v-if="scope.row.applyStatus == '10'" type="text" size="mini" icon="el-icon-refresh"
@click="refreshVClick(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="applyV" width="700px" append-to-body>
<el-form label-width="120px" size="mini">
<el-form-item label="学年">
<el-select v-model="applyForm.stuYearId" class="addForm-input">
<el-option v-for="(v, i) in year_list" :key="i" :label="v.stuYearName" :value="v.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="班级">
<el-input readonly v-model="applyForm.className"></el-input>
</el-form-item>
<el-form-item label="辅导员">
<el-input readonly v-model="applyForm.fdyName"></el-input>
</el-form-item>
<el-form-item label="班级人数">
<el-input type="number" v-model="applyForm.classCount"></el-input>
</el-form-item>
<el-form-item label="身份证号">
<el-input v-model="applyForm.idCard"></el-input>
</el-form-item>
<el-form-item label="农行卡号">
<el-input v-model="applyForm.bankCard"></el-input>
</el-form-item>
<el-form-item label="开户行">
<el-input v-model="applyForm.bankAddr"></el-input>
</el-form-item>
<el-form-item label="所获奖励">
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 20 }" v-model="applyForm.goodHis"></el-input>
</el-form-item>
<el-form-item label="主要事迹">
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 20 }" v-model="applyForm.mainHis"></el-input>
</el-form-item>
<el-form-item label="佐证材料">
<Affix @input="handleAffix" v-model="applyForm.testimonyMaterials"></Affix>
</el-form-item>
<el-form-item label=" ">
<el-button @click="doApply">申请</el-button>
</el-form-item>
</el-form>
</el-dialog>
<el-dialog title="查看" :visible.sync="lookV" width="70rem">
<el-steps :active="getStep(lookForm)">
<el-step title="学生提交申请" description=""></el-step>
<el-step title="辅导员审核" :status="isEmpty(lookForm.fdyCmt) ? 'wait' : getStepStatus(lookForm.fdyCmt)">
<template slot="description">
<div>
{{ isEmpty(lookForm.fdyNoName) ? '' : lookForm.fdyNoName }}
</div>
<div>
{{ isEmpty(lookForm.fdyCmt) ? '' : lookForm.fdyCmt }}
</div>
<div>
{{ isEmpty(lookForm.fdyTime) ? '' : lookForm.fdyTime }}
</div>
</template>
</el-step>
<el-step title="学院审核" :status="isEmpty(lookForm.xwCmt) ? 'wait' : getStepStatus(lookForm.xwCmt)">
<template slot="description">
<div>
{{ isEmpty(lookForm.xwNoName) ? '' : lookForm.xwNoName }}
</div>
<div>
{{ isEmpty(lookForm.xwCmt) ? '' : lookForm.xwCmt }}
</div>
<div>
{{ isEmpty(lookForm.xwTime) ? '' : lookForm.xwTime }}
</div>
</template>
</el-step>
<el-step title="学工审核" :status="isEmpty(lookForm.jwcCmt) ? 'wait' : getStepStatus(lookForm.jwcCmt)">
<template slot="description">
<div>
{{ isEmpty(lookForm.xgNoName) ? '' : lookForm.xgNoName }}
</div>
<div>
{{ isEmpty(lookForm.jwcCmt) ? '' : lookForm.jwcCmt }}
</div>
<div>
{{ isEmpty(lookForm.xgTime) ? '' : lookForm.xgTime }}
</div>
</template>
</el-step>
</el-steps>
<hr />
<el-form label-width="120px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item class="look-form-item" label="申请人">
<el-input readonly v-model="lookForm.stuName"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="班级">
<el-input readonly v-model="lookForm.className"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="辅导员">
<el-input readonly v-model="lookForm.fdyName"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="班级人数">
<el-input readonly v-model="lookForm.classCount"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="身份证号">
<el-input readonly v-model="lookForm.idCard"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="农行卡号">
<el-input readonly v-model="lookForm.bankCard"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="开户行">
<el-input readonly v-model="lookForm.bankAddr"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="所获奖励">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.goodHis"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="主要事迹">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.mainHis"></el-input>
</el-form-item>
<el-form-item class="look-form-item" label="佐证材料">
<Affix @input="handleAffix" v-model="lookForm.testimonyMaterials"></Affix>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="!isEmpty(lookForm.isSendMoney)" class="look-form-item" label="是否转账">
<el-input readonly v-model="lookForm.isSendMoney"></el-input>
</el-form-item>
<el-form-item v-if="!isEmpty(lookForm.sendMoneyTime)" class="look-form-item" label="转账时间">
<el-input readonly v-model="lookForm.sendMoneyTime"></el-input>
</el-form-item>
<el-form-item v-if="!isEmpty(lookForm.remark)" class="look-form-item" label="备注">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.remark"></el-input>
</el-form-item>
<el-form-item v-if="!isEmpty(lookForm.fdyCmt)" class="look-form-item" label="辅导员意见">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.fdyCmt"></el-input>
</el-form-item>
<el-form-item v-if="!isEmpty(lookForm.xwCmt)" class="look-form-item" label="学院意见">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.xwCmt"></el-input>
</el-form-item>
<el-form-item v-if="!isEmpty(lookForm.jwcCmt)" class="look-form-item" label="学工意见">
<el-input readonly type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="lookForm.jwcCmt"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-dialog>
<el-dialog title="重新提交" :visible.sync="refreshV" width="70rem">
<el-form label-width="120px" size="mini">
<el-row>
<el-col :span="24">
<el-form-item label="学年">
<el-select v-model="refreshForm.stuYearId" class="addForm-input">
<el-option v-for="(v, i) in year_list" :key="i" :label="v.stuYearName" :value="v.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="班级">
<el-input readonly v-model="refreshForm.className"></el-input>
</el-form-item>
<el-form-item label="辅导员">
<el-input readonly v-model="refreshForm.fdyName"></el-input>
</el-form-item>
<el-form-item label="班级人数">
<el-input type="number" v-model="refreshForm.classCount"></el-input>
</el-form-item>
<el-form-item label="身份证号">
<el-input v-model="refreshForm.idCard"></el-input>
</el-form-item>
<el-form-item label="农行卡号">
<el-input v-model="refreshForm.bankCard"></el-input>
</el-form-item>
<el-form-item label="开户行">
<el-input v-model="refreshForm.bankAddr"></el-input>
</el-form-item>
<el-form-item label="所获奖励">
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="refreshForm.goodHis"></el-input>
</el-form-item>
<el-form-item label="主要事迹">
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 20 }"
v-model="refreshForm.mainHis"></el-input>
</el-form-item>
<el-form-item label="佐证材料">
<Affix @input="handleAffix" v-model="applyForm.testimonyMaterials"></Affix>
</el-form-item>
<el-form-item label="">
<el-button type="primary" size="mini" @click="reApply">提交申请</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { fullLoading, isEmpty } from '@/api/helpFunc'
import { alipayVali } from '@/api/helpFunc/bank'
import { cancelApply, doApply, getOwnClass, listStu, reApply } from '@/api/stuCQS/good-class/newClassGoodApply'
import { listAllYear as listYear } from '@/api/stuCQS/basedata/year'
import { getOwnInfo } from '@/api/stuCQS/basedata/student'
export default {
name: 'good-class-stu',
dicts: ['audius_detail_type'],
data() {
return {
isEmpty,
queryParams: {
pageNum: 1,
pageSize: 10,
},
total: 0,
loading: false,
tableData: [],
lookV: false,
lookForm: {},
refreshForm: {},
applyV: false,
refreshV: false,
applyForm: {
className: '',
classCount: '',
fdyName: '',
goodHis: '',
mainHis: '',
bankCard: '',
bankAddr: '',
},
year_list: [],
}
},
created() {
this.getList()
this.listStuYear()
},
methods: {
getStepStatus(data) {
if ((data.includes('同意') && !data.includes('不同意')) || data.includes('通过') || (data.includes('符合') && !data.includes('不符合'))) {
return 'success';
} else {
return 'error';
}
},
getStep(data) {
if (!isEmpty(data.jwcCmt)) {
return 4;
} else if (!isEmpty(data.xwCmt)) {
return 3;
} else if (!isEmpty(data.fdyCmt)) {
return 2;
} else {
return 1;
}
},
async reApply() {
let sdata = { ...this.refreshForm };
if (isEmpty(sdata.stuYearId)) {
this.$message.info("请选择学年");
return;
}
if (isEmpty(sdata.className)) {
this.$message.info("请填写班级");
return;
}
if (isEmpty(sdata.fdyName)) {
this.$message.info("请填写辅导员");
return;
}
if (isEmpty(sdata.classCount)) {
this.$message.info("请填写班级人数");
return;
}
if (isEmpty(sdata.idCard)) {
this.$message.info("请填写身份证号");
return;
}
if (isEmpty(sdata.bankCard)) {
this.$message.info("请填写农行卡号");
return;
}
if (isEmpty(sdata.bankAddr)) {
this.$message.info("请填写开户行");
return;
}
if (isEmpty(sdata.goodHis)) {
this.$message.info("请填写获奖记录");
return;
}
if (isEmpty(sdata.mainHis)) {
this.$message.info("请填写主要事迹");
return;
}
if (sdata.mainHis.length < 100) {
this.$message.info("主要事迹字数需要100字以上");
return;
}
let card = sdata.bankCard;
let boolCard = await alipayVali(card);
if (boolCard.validated == false) {
this.$message.info("请输入正确的银行卡号");
return;
}
if (boolCard.bank != "ABC") {
this.$message.info("请输入正确的中国农业银行银行卡号");
return;
}
this.fullLoading = true;
sdata.applyId = sdata.id;
let res = await reApply(sdata);
this.fullLoading = false;
if (res.code == 200) {
this.refreshV = false;
this.resetAddForm();
this.$message.success(res.msg);
this.getList();
}
},
refreshVClick(v) {
this.refreshForm = { ...v };
this.refreshV = true;
},
lookVClick(val) {
this.lookForm = { ...val }
this.lookV = true
},
cancelVClick(val) {
if (val != null) {
let id = val.id
if (!isEmpty(id)) {
this.$prompt('清输入取消理由', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^.+$/,
inputErrorMessage: '不能为空',
})
.then(async ({ value }) => {
let sdata = {
id: id,
reason: value,
}
let loading = fullLoading(this)
let res = await cancelApply(sdata)
loading.close()
if (res.code == 200) {
this.$message.success(res.msg)
this.getList()
}
})
.catch((ex) => {
this.$message({
type: 'info',
message: '取消输入',
})
console.log(ex)
})
}
}
},
async listStuYear() {
let res = await listYear()
if (res.code == 200) {
this.year_list = [...res.data]
}
},
async doApply() {
let sdata = { ...this.applyForm }
if (isEmpty(sdata.stuYearId)) {
this.$message.info('请选择学年')
return
}
if (isEmpty(sdata.classCount)) {
this.$message.info('请输入班级人数')
return
}
if (isEmpty(sdata.bankCard)) {
this.$message.info('请输入农行卡')
return
}
if (isEmpty(sdata.bankAddr)) {
this.$message.info('请输入开户行')
return
}
if (isEmpty(sdata.goodHis)) {
this.$message.info('请输入所获奖励')
return
}
if (isEmpty(sdata.mainHis)) {
this.$message.info('请输入主要事迹')
return
}
if (sdata.mainHis.length < 100) {
this.$message.info('主要事迹字数需要100字以上')
return
}
let card = sdata.bankCard
let loading = fullLoading(this)
let boolCard = await alipayVali(card)
loading.close()
if (boolCard.validated == false) {
this.$message.info('请输入正确的银行卡号')
return
}
if (boolCard.bank != 'ABC') {
this.$message.info('请输入正确的中国农业银行银行卡号')
return
}
loading = fullLoading(this)
let res = await doApply(sdata)
loading.close()
if (res.code == 200) {
this.applyV = false
this.$message.success(res.msg)
this.getList()
}
},
async getList() {
this.loading = true
let res = await listStu(this.queryParams)
this.loading = false
if (res.code == 200) {
this.tableData = [...res.rows]
this.total = res.total
}
},
async applyVClick() {
let bool = false
bool = await this.getOwnInfo()
if (bool) {
await this.getOwnClass()
this.applyV = true
}
},
async getOwnClass() {
let loading = fullLoading(this)
let res = await getOwnClass()
loading.close()
if (res.code == 200) {
let data = { ...res.data }
this.applyForm.className = data.className
this.applyForm.classCount = data.classCount
this.applyForm.fdyName = data.fdyName
}
},
async getOwnInfo() {
let bool = false
let loading = fullLoading(this)
let res = await getOwnInfo()
loading.close()
if (res.code == 200) {
let data = { ...res.data }
if (isEmpty(data.xhk) || isEmpty(data.bankAddr) || isEmpty(data.idCard)) {
this.$alert('您的信息未完善', '请完善信息', {
confirmButtonText: '点我前往完善',
callback: (action) => {
this.$router.push('/basedata/stuOwnInfo/edit')
},
})
return false
}
this.applyForm.idCard = data.idCard
this.applyForm.bankCard = data.xhk
this.applyForm.bankAddr = data.bankAddr
bool = true
}
return bool
},
handleAffix(affixId) {
this.applyForm.testimonyMaterials = affixId
},
},
}
</script>
<style scoped>
.look-form-item {
margin-bottom: 1px;
}
</style>