From e735896a68d8c1742859a06d7bc1c7c1bb61f57d Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Thu, 23 Jan 2025 14:08:52 +0800
Subject: [PATCH] 新增页面
---
src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue | 379 +++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 331 insertions(+), 48 deletions(-)
diff --git a/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue b/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
index be72ce4..82cd217 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
+++ b/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
@@ -2,73 +2,73 @@
<div>
<el-dialog :visible.sync="dialogVisible" width="800px" append-to-body class="stu">
<div class="infoTitle">
- <div>批次名称:XXXXX</div>
- <div style="margin-left: 35px">管辖行政区划:XXXxxxx</div>
+ <div>批次名称:<span>{{stuInfo.batchName}}</span></div>
+ <div style="margin-left: 35px">所属区划:<span>{{stuInfo.districtName}}</span></div>
</div>
<div class="infoTitle">
- <div>考试点名称:XXXXX</div>
+ <div>组织架构:<span>{{stuInfo.deptName}}</span></div>
</div>
- <el-form :model="form" ref="ruleForm" label-width="125px">
+ <el-form :model="stuInfo" label-width="125px">
<el-row :gutter="24">
- <el-col :span="8">
- <el-form-item label="缴费周期:" prop="timeRange">
- <span>xxxx</span>
+ <el-col :span="12">
+ <el-form-item label="缴费周期:">
+ <span><span>{{stuInfo.year}}</span></span>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="缴费类型:" prop="timeRange">
- <span>xxxx</span>
+ <el-form-item label="缴费类型:">
+ <span>{{stuInfo.payType == 1?'初训理论':stuInfo.payType == 2?'初训实操':stuInfo.payType == 3?'初训理论与实操':stuInfo.payType == 4?'复训理论':''}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
- <el-col :span="8">
- <el-form-item label="理论类别:" prop="timeRange">
- <span>xxxx</span>
+ <el-col :span="12" v-if="stuInfo.payType === 1 || stuInfo.payType === 3 || stuInfo.payType === 4">
+ <el-form-item label="理论类别:">
+ <span>{{stuInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 1).subjectName}}</span>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="实操类别:" prop="timeRange">
- <span>xxxx</span>
+ <el-col :span="12" v-if="stuInfo.payType === 2 || stuInfo.payType === 3">
+ <el-form-item label="实操类别:">
+ <span>{{stuInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 2).subjectName}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="单人应缴:" prop="timeRange">
- <span>xxxx</span>
+ <span>{{stuInfo.amount}}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总计应缴费:" prop="timeRange">
- <span>xxxx</span>
+ <span>{{ stuInfo.totalCountFee }}元</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="已完成缴费:" prop="timeRange">
- <span>xxxx</span>
+ <span>{{stuInfo.payCountFee}}元</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="剩余未缴费:" prop="timeRange">
- <span>xxxx</span>
+ <span>{{stuInfo.unPayCountFee}}元</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="当前总计应缴:" prop="timeRange">
- <span>xxxx人</span>
+ <span>{{stuInfo.totalCount}}人</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="已完成缴费:" prop="timeRange">
- <span>xxxx人</span>
+ <span>{{stuInfo.payCount}}人</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="当前未完成缴费:" prop="timeRange">
- <span>xxxx人</span>
+ <span>{{stuInfo.unPayCount}}人</span>
</el-form-item>
</el-col>
</el-row>
@@ -77,16 +77,40 @@
<!-- 表格-->
<div style="margin: 20px 15px;display: flex">
<el-button size="small" type="primary" @click="handleAddStu('add',{})">添加学员</el-button>
- <el-button size="small" type="primary" >批量导入</el-button>
+ <el-button size="small" type="primary" @click="importDialog = true">批量导入</el-button>
</div>
<el-table v-loading="loading" :data="stuList">
<el-table-column label="序号" align="center" type="index" />
- <el-table-column label="姓名" align="center" prop="createTime" />
- <el-table-column label="身份证号" align="center" prop="batchName" />
- <el-table-column label="手机号" align="center" prop="batchName" />
- <el-table-column label="性别" align="center" prop="batchName" />
- <el-table-column label="财政缴款码" align="center" prop="batchName" />
- <el-table-column label="是否已缴" align="center" prop="batchName" />
+ <el-table-column label="姓名" align="center" prop="name" />
+ <el-table-column label="身份证号" align="center" prop="idCard" />
+ <el-table-column label="手机号" align="center" prop="phone" />
+ <el-table-column label="性别" align="center" prop="sex">
+ <template #default="scope">
+ {{scope.row.sex == 0?'男':scope.row.sex == 1?'女':'未知'}}
+ </template>
+ </el-table-column>
+ <el-table-column label="财政缴款码" align="center" prop="payCode">
+ <template #default="scope">
+ {{scope.row.payCode?scope.row.payCode:'--'}}
+ </template>
+ </el-table-column>
+ <el-table-column label="是否已缴" align="center" prop="payStatus">
+ <template #default="scope">
+ {{scope.row.payStatus == 0?'未缴':scope.row.payStatus == 1?'已缴':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="类别" align="center" prop="payType">
+ <template #default="scope">
+ {{scope.row.payType == 1?'个人':scope.row.payType == 2?'集体':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center">
+ <template #default="scope">
+ <el-button size="mini" type="text" v-if="scope.row.payStatus == 1" style="color: #1890ff">查看票据</el-button>
+ <el-button size="mini" type="text" style="color: #1890ff" @click="handleAddStu('edit',scope.row)">修改</el-button>
+ <el-button size="mini" type="text" style="color:lightcoral" @click="handleDelete(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
</el-table>
<pagination
v-show="total>0"
@@ -96,49 +120,306 @@
@pagination="getStuList"
/>
</el-dialog>
- <add-stu-dialog ref="addStuDialogRef" @getList = "getStuList"></add-stu-dialog>
+ <el-dialog
+ :title="dialogStatus==='add'?'新增':'编辑'"
+ :visible.sync="addDialog"
+ :modal-append-to-body="false"
+ :close-on-click-modal="false"
+ width="450px"
+ :before-close="handleClose"
+ >
+ <el-form ref="dataForm" :model="dataForm" :rules="addRules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="姓名:" prop="name">
+ <el-input v-model.trim="dataForm.name"/>
+ </el-form-item>
+ <el-form-item label="性别:" prop="sex">
+ <el-radio-group v-model="dataForm.sex">
+ <el-radio :label="0">男</el-radio>
+ <el-radio :label="1">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="身份证号:" prop="idCard">
+ <el-input v-model.trim="dataForm.idCard"/>
+ </el-form-item>
+ <el-form-item label="手机号:" prop="phone">
+ <el-input v-model.trim="dataForm.phone"/>
+ </el-form-item>
+ </el-form>
+ <el-alert
+ :closable="false"
+ title="提示:请务必填写准确,将用于个人缴费查询。"
+ type="warning">
+ </el-alert>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取 消</el-button>
+ <el-button type="primary" @click="onSubmit">确 定</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog
+ :visible.sync="importDialog"
+ append-to-body
+ title="批量导入"
+ :close-on-click-modal="false"
+ >
+ <el-form
+ ref="importForm"
+ label-position="right"
+ label-width="120px"
+ style="margin-left:50px;width:500px;"
+ element-loading-text="导入中..."
+ >
+ <el-form-item label="导入文件:">
+ <el-upload
+ :action="uploadUrl"
+ :on-error="onError"
+ :on-success="onSuccess"
+ :auto-upload="false"
+ accept=".xlsx,.xls"
+ :on-preview="handlePreview"
+ :on-remove="handleRemove"
+ :before-remove="beforeRemove"
+ :before-upload="picSize"
+ ref="upload"
+ :limit="1"
+ :data={nonCoalPayId:id}
+ :headers="header"
+ :on-exceed="handleExceed"
+ :file-list="fileList">
+ <el-button size="small" type="primary">点击上传</el-button>
+ <div slot="tip" class="el-upload__tip">只能上传excel(.xlsx、.xls后缀)文件,且不超过2M</div>
+ </el-upload>
+ </el-form-item>
+ <el-form-item label="excel参考模板:">
+ <el-button type="text" @click="viewHandle">下载模板</el-button>
+ </el-form-item>
+ </el-form>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="importDialog = false">取消</el-button>
+ <el-button type="primary" @click="importHandle()">导入</el-button>
+ </div>
+ </el-dialog>
</div>
</template>
<script>
-import addStuDialog from './addStuDialog.vue'
+
+import {verifyIdCard, verifySimplePhone} from "@/utils/validate";
+import {
+ addNonCoalStu, delNonCalStu, delNonCoalPay,
+ editNonCoalStu,
+ getNonCoalPayStudents,
+ getPayTypeInfo
+} from "@/api/specialOperationsPay/notCoalPay";
+import exampleFile from '@/assets/studentInfo.xlsx'
+import {getToken} from "@/utils/auth";
export default {
name: 'addStu',
- components: {
- addStuDialog
- },
+ components: {},
data() {
+ let validatePhone = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入手机号'))
+ }else{
+ if(!verifySimplePhone(value)){
+ callback(new Error('手机号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
+ let verifyId = (rule, value, callback)=>{
+ if(value === ''){
+ callback(new Error('请输入身份证号'))
+ }else{
+ if(!verifyIdCard(value)){
+ callback(new Error('身份证号格式有误'))
+ }else{
+ callback()
+ }
+ }
+ }
return {
open: false,
id: null,
dialogVisible: false,
+ importDialog: false,
loading: false,
+ stuInfo: {},
stuList: [],
- form: {
- id: null,
- staffId: null,
- timeRange: [],
- startTime: '',
- endTime: '',
- unit: ''
+ fileList: [],
+ uploadUrl: process.env.VUE_APP_BASE_API + '/pay/nonCoalPay/stuImportData',
+ header: {
+ Authorization: "Bearer " + getToken()
},
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
},
+ addDialog: false,
+ dialogStatus: '',
+ dataForm: {},
+ addRules: {
+ name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
+ idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ sex: [{ required: true, message: '请选择性别', trigger: 'blur' }]
+ }
};
},
methods: {
- openDialog(val) {
+ openDialog(id) {
+ this.getStuList(id)
+ this.id = id
this.dialogVisible = true;
},
- getStuList () {
-
+ getStuList(id) {
+ getNonCoalPayStudents(id).then(res=>{
+ if(res.code == 200){
+ this.stuInfo = res.data
+ this.stuList = res.data.nonCoalPayStudentList
+ }
+ })
},
handleAddStu(type,data){
- this.$refs.addStuDialogRef.openDialog(type, data);
- }
+ this.addDialog = true
+ this.resetDataForm()
+ if(type == 'add'){
+ this.dataForm.nonCoalPayId = this.id
+ }else{
+ const {id,nonCoalPayId,name,idCard,sex,phone} = data
+ this.dataForm = {id,nonCoalPayId,name,idCard,sex,phone}
+ }
+ console.log(this.dataForm,'form')
+ this.dialogStatus = type
+ },
+
+ viewHandle() {
+ const link = document.createElement('a')
+ link.href = exampleFile
+ link.target = '_blank'
+ link.download = '学员批量导入模版.xlsx'
+ link.click()
+ },
+
+ handleRemove(file, fileList) {
+ console.log(file, fileList);
+ },
+ handlePreview(file) {
+ console.log(file);
+ },
+ handleExceed(files, fileList) {
+ this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+ },
+ picSize(rawFile){
+ if(rawFile.size / 1024 / 1024 > 2){
+ this.$message({
+ type: 'warning',
+ message: '文件大小不能超过2M'
+ });
+ return false
+ }
+ },
+ async importHandle(){
+ const t = this
+ await t.$refs.upload.submit()
+ t.importDialog = false
+ setTimeout(()=>{
+ t.getStuList(this.stuInfo.id)
+ t.fileList = []
+ t.$refs.upload.clearFiles()
+ },800)
+ },
+
+ onError(){
+ console.log("文件上传失败")
+ },
+
+ onSuccess(res, file, fileList){
+ if(res.code == 200){
+ this.$message({
+ type:'success',
+ message: res.msg
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ },
+
+ beforeRemove(file, fileList) {
+ return this.$confirm(`确定移除 ${ file.name }?`);
+ },
+
+ handleClose() {
+ this.addDialog = false
+ },
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.dialogStatus == 'add'){
+ const res = await addNonCoalStu(this.dataForm)
+ if(res.code == 200) {
+ this.getStuList(this.id)
+ this.addDialog = false
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ const res = await editNonCoalStu(this.dataForm)
+ if(res.code == 200) {
+ this.getStuList(this.id)
+ this.addDialog = false
+ this.$message({
+ type:'success',
+ message: '修改成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }
+ })
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delNonCalStu(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getStuList(this.id)
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ },
+ resetDataForm() {
+ this.dataForm = {
+ }
+ },
}
}
@@ -153,8 +434,10 @@
margin-bottom:10px;
margin-left: 40px;
display: flex;
- font-weight: 800;
- font-size: 16px
+ font-size: 16px;
+ span{
+ font-weight: bolder;
+ }
}
}
--
Gitblit v1.9.2