From e735896a68d8c1742859a06d7bc1c7c1bb61f57d Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 23 一月 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