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/coalPay/components/batchPay.vue | 46
src/views/specialOperationsPay/coalPay/index.vue | 237 +++
src/views/specialOperationsPay/notCoalPay/components/addDialog.vue | 203 ++-
src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue | 379 +++++
src/permission.js | 2
src/views/specialOperationsPay/coalWorkType/components/detailDialog.vue | 138 ++
vue.config.js | 18
src/views/system/dept/index.vue | 39
src/views/specialOperationsPay/notCoalWorkType/components/detailDialog.vue | 199 +++
src/views/specialOperationsPay/notCoalPay/components/batchPay.vue | 46
src/api/specialOperationsPay/coalPay.js | 143 ++
src/api/specialOperationsPay/notCoalPay.js | 122 ++
src/views/specialOperationsPay/coalPay/components/addDialog.vue | 293 ++++
src/router/index.js | 10
src/utils/request.js | 5
src/assets/studentInfo.xlsx | 0
src/views/system/user/index.vue | 42
src/views/specialOperationsPay/coalPay/components/studentDialog.vue | 453 +++++++
src/views/specialOperationsPay/singlePage/index.vue | 477 +++++++
src/views/specialOperationsPay/coalWorkType/index.vue | 251 ++++
src/views/specialOperationsPay/notCoalWorkType/index.vue | 226 +++
src/views/specialOperationsPay/notCoalPay/index.vue | 245 ++-
package.json | 1
src/assets/images/noData.png | 0
24 files changed, 3,277 insertions(+), 298 deletions(-)
diff --git a/package.json b/package.json
index 49d9615..66bd619 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
"dayjs": "^1.11.12",
"echarts": "5.4.0",
"element-ui": "2.15.13",
+ "file-loader": "^6.2.0",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
diff --git a/src/api/specialOperationsPay/coalPay.js b/src/api/specialOperationsPay/coalPay.js
new file mode 100644
index 0000000..b7be4c3
--- /dev/null
+++ b/src/api/specialOperationsPay/coalPay.js
@@ -0,0 +1,143 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getCoalPayCategory(data) {
+ return request({
+ url: '/pay/coalCategory/list',
+ method: 'post',
+ data: data
+ })
+}
+
+// 新增数据
+export function addCoalPayCategory(data) {
+ return request({
+ url: '/pay/coalCategory/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function updateCoalPayCategory(data) {
+ return request({
+ url: '/pay/coalCategory/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delCoalPayCategory(data) {
+ return request({
+ url: '/pay/coalCategory/delete',
+ method: 'post',
+ data: data
+ })
+}
+
+// 缴费列表
+export function getCoalPayList(data) {
+ return request({
+ url: '/pay/coalPay/list',
+ method: 'post',
+ data: data
+ })
+}
+
+export function addCoalPay(data) {
+ return request({
+ url: '/pay/coalPay/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editCoalPay(data) {
+ return request({
+ url: '/pay/coalPay/update',
+ method: 'post',
+ data: data
+ })
+}
+
+export function delCoalPay(data) {
+ return request({
+ url: '/pay/coalPay/delete',
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateCoalPayType(data) {
+ return request({
+ url: '/pay/coalPay/updateType',
+ method: 'post',
+ data: data
+ })
+}
+
+// 学员列表
+export function getCoalPayStudentList(id) {
+ return request({
+ url: '/pay/coalPayStudent/studentList/' + id,
+ method: 'get',
+ })
+}
+
+export function addCoalPayStu(data) {
+ return request({
+ url: '/pay/coalPayStudent/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editCoalPayStu(data) {
+ return request({
+ url: '/pay/coalPayStudent/update',
+ method: 'post',
+ data: data
+ })
+}
+
+export function delCoalPayStu(data) {
+ return request({
+ url: '/pay/coalPayStudent/delete',
+ method: 'post',
+ data: data
+ })
+}
+
+// 查询开票信息
+export function getTicketList(data) {
+ return request({
+ url: '/pay/coalCategory/ticketList',
+ method: 'post',
+ data: data
+ })
+}
+
+export function addTicket(data) {
+ return request({
+ url: '/pay/coalCategory/saveTicket',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editTicket(data) {
+ return request({
+ url: '/pay/coalCategory/updateTicket',
+ method: 'post',
+ data: data
+ })
+}
+
+export function findStudent(query) {
+ return request({
+ url: '/pay/coalPay/findStudent',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/src/api/specialOperationsPay/notCoalPay.js b/src/api/specialOperationsPay/notCoalPay.js
new file mode 100644
index 0000000..2f258a6
--- /dev/null
+++ b/src/api/specialOperationsPay/notCoalPay.js
@@ -0,0 +1,122 @@
+import request from '@/utils/request'
+
+// 数据分页
+export function getNotCoalPayCategory(query) {
+ return request({
+ url: '/pay/nonCoalCategory/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 新增数据
+export function addNotCoalPayCategory(data) {
+ return request({
+ url: '/pay/nonCoalCategory/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改数据
+export function updateNotCoalPayCategory(data) {
+ return request({
+ url: '/pay/nonCoalCategory/edit',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除数据
+export function delNotCoalPayCategory(ids) {
+ return request({
+ url: '/pay/nonCoalCategory/' + ids,
+ method: 'delete'
+ })
+}
+
+// 查询缴费
+export function getNonCoalPayList(query) {
+ return request({
+ url: '/pay/nonCoalPay/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 新增缴费
+export function addNonCoalPay(data) {
+ return request({
+ url: '/pay/nonCoalPay/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改缴费类型
+export function editPayTypeInfo(query) {
+ return request({
+ url: '/pay/nonCoalPay/editPayTypeStatus',
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取详情
+export function getPayTypeInfo(id) {
+ return request({
+ url: '/pay/nonCoalPay/getInfo/' + id,
+ method: 'get'
+ })
+}
+
+// 删除数据
+export function delNonCoalPay(ids) {
+ return request({
+ url: '/pay/nonCoalPay/' + ids,
+ method: 'delete'
+ })
+}
+
+// 获取学员
+export function getNonCoalPayStudents(id) {
+ return request({
+ url: '/pay/nonCoalPay/getNonCoalPayStudentByPayId/' + id,
+ method: 'get'
+ })
+}
+
+// 新增学员
+export function addNonCoalStu(data) {
+ return request({
+ url: '/pay/nonCoalPay/addNonCoalStu',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改学员
+export function editNonCoalStu(data) {
+ return request({
+ url: '/pay/nonCoalPay/editNonCoalStu',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除学员
+export function delNonCalStu(ids) {
+ return request({
+ url: '/pay/nonCoalPay/delNonCalStu/' + ids,
+ method: 'delete'
+ })
+}
+
+// 查询
+export function nonCoalSelectH5(data) {
+ return request({
+ url: '/pay/nonCoalPay/nonCoalSelectH5',
+ method: 'get',
+ params: data
+ })
+}
diff --git a/src/assets/images/noData.png b/src/assets/images/noData.png
new file mode 100644
index 0000000..5397f9c
--- /dev/null
+++ b/src/assets/images/noData.png
Binary files differ
diff --git a/src/assets/studentInfo.xlsx b/src/assets/studentInfo.xlsx
new file mode 100644
index 0000000..dd1c715
--- /dev/null
+++ b/src/assets/studentInfo.xlsx
Binary files differ
diff --git a/src/permission.js b/src/permission.js
index 0aed761..1ff76dc 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -8,7 +8,7 @@
NProgress.configure({ showSpinner: false })
-const whiteList = ['/login', '/register']
+const whiteList = ['/login', '/register','/singlePage']
router.beforeEach((to, from, next) => {
NProgress.start()
diff --git a/src/router/index.js b/src/router/index.js
index 1733f35..31e1ae3 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -61,6 +61,16 @@
component: () => import('@/views/error/401'),
hidden: true
},
+ {
+ path: '/cert',
+ component: () => import('@/views/onlineEducation/classCertManage/index'),
+ hidden: true
+ },
+ {
+ path: '/singlePage',
+ component: () => import('@/views/specialOperationsPay/singlePage/index'),
+ hidden: true
+ },
// {
// path: '',
// component: Layout,
diff --git a/src/utils/request.js b/src/utils/request.js
index 8deb81f..358efa1 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -92,9 +92,8 @@
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
isRelogin.show = false;
store.dispatch('LogOut').then(() => {
- // location.href = '/index';
- let indexUrl = this.$store.state.permission.indexPage
- location.href = indexUrl;
+ // let indexUrl = this.$store.state.permission.indexPage
+ location.href = '/index';
})
}).catch(() => {
isRelogin.show = false;
diff --git a/src/views/specialOperationsPay/coalPay/components/addDialog.vue b/src/views/specialOperationsPay/coalPay/components/addDialog.vue
new file mode 100644
index 0000000..0a84bc2
--- /dev/null
+++ b/src/views/specialOperationsPay/coalPay/components/addDialog.vue
@@ -0,0 +1,293 @@
+<template>
+ <el-dialog
+ :title="dialogStatus==='add'?'新增':'编辑'"
+ :visible.sync="dialogVisible"
+ :modal-append-to-body="false"
+ :close-on-click-modal="false"
+ width="700px"
+ :before-close="handleClose"
+ >
+ <div class="infoTitle">
+ <div>组织架构名称:<span style="font-weight: bolder">{{deptName}}</span></div>
+<!-- <div style="margin-left: 15px">管辖行政区划:<span style="font-weight: bolder">{{districtName}}</span></div>-->
+ </div>
+ <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="批次名称:" prop="batchName">
+ <el-input v-model.trim="dataForm.batchName"/>
+ </el-form-item>
+<!-- <el-form-item label="所属区划:" prop="districtCode">-->
+<!-- <el-select v-model="dataForm.districtCode" placeholder="行政区划" @change="getNewCategoryList">-->
+<!-- <el-option-->
+<!-- v-for="item in areaList"-->
+<!-- :key="item.id"-->
+<!-- :label="item.name"-->
+<!-- :value="item.code">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item label="考试点:" prop="deptId">-->
+<!-- <el-select v-model="dataForm.deptId" size="small" placeholder="请选择考试点">-->
+<!-- <el-option-->
+<!-- v-for="item in examList"-->
+<!-- :key="item.siteId"-->
+<!-- :label="item.siteName"-->
+<!-- :value="item.siteId">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+ <el-form-item label="所属缴费周期:" prop="year">
+ <div style="display: flex">
+ <el-date-picker
+ v-model="dataForm.year"
+ type="year"
+ value-format="yyyy"
+ placeholder="选择年">
+ </el-date-picker>
+ <el-select v-model="dataForm.quarter" placeholder="请选择季度" style="width: 150px;margin-left: 5px" clearable>
+ <el-option
+ v-for="item in quarterList"
+ :key="item.id"
+ :label="item.label"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </div>
+ </el-form-item>
+ <el-form-item label="缴费类型:" prop="payType">
+ <el-radio-group v-model="dataForm.payType" @change="changeRadio" v-removeAriaHidden>
+ <el-radio
+ v-for="item in payTypeList"
+ :key="item.id"
+ :label="item.id"
+ >{{item.label}}</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item v-if="dataForm.payType === 1 || dataForm.payType === 3 || dataForm.payType === 4" label="理论类别:" prop="dealId">
+ <el-select v-model="dataForm.dealId" placeholder="请选择" style="width: 100%" clearable>
+ <el-option
+ v-for="item in dealList"
+ :key="item.id"
+ :label="item.subjectName"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="dataForm.payType === 2 || dataForm.payType === 3" label="实操类别:" prop="operateId">
+ <el-select v-model="dataForm.operateId" placeholder="请选择" style="width: 100%" clearable>
+ <el-option
+ v-for="item in operationList"
+ :key="item.id"
+ :label="item.subjectName"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取 消</el-button>
+ <el-button type="primary" @click="onSubmit">确 定</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script >
+import { addPlat, updatePlat } from '@/api/onlineEducation/plat'
+import {addNonCoalPay, getNotCoalPayCategory} from "@/api/specialOperationsPay/notCoalPay";
+import store from "@/store";
+import {addCoalPay, getCoalPayCategory} from "@/api/specialOperationsPay/coalPay";
+
+export default {
+ name: 'addUser',
+ components: {
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ dialogStatus: '',
+ deptName: '',
+ districtName: '',
+ rules: {
+ batchName: [{ required: true, message: '请输入批次名称', trigger: 'blur' }],
+ year: [{ required: true, message: '请选择缴费周期', trigger: 'blur' }],
+ quarter: [{ required: true, message: '请选择缴费周期', trigger: 'blur' }],
+ payType: [{ required: true, message: '请选择季度', trigger: 'blur' }],
+ operateId: [{ required: true, message: '请选择实操类别', trigger: 'blur' }],
+ dealId: [{ required: true, message: '请选择理论类别', trigger: 'blur' }],
+ },
+ dataForm: {},
+ areaList: [],
+ examList: [],
+ quarterList: [
+ {
+ id: 1,
+ label: '第一季度'
+ },
+ {
+ id: 2,
+ label: '第二季度'
+ },
+ {
+ id: 3,
+ label: '第三季度'
+ },
+ {
+ id: 4,
+ label: '第四季度'
+ },
+ ],
+ payTypeList: [
+ {
+ id: 1,
+ label: '初训理论'
+ },
+ {
+ id: 2,
+ label: '初训实操'
+ },
+ {
+ id: 3,
+ label: '初训理论与实操'
+ },
+ {
+ id: 4,
+ label: '复训理论'
+ },
+ ],
+ dealList: [],
+ operationList: []
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (type, data, areaList, examList) {
+ const userInfo = store.getters && store.getters.userInfo
+ this.deptName = userInfo.dept.deptName
+ this.districtName = userInfo.district.districtName
+ this.resetDataForm(userInfo)
+ this.areaList = areaList
+ this.examList = examList
+ this.dialogVisible = true
+ this.dialogStatus = type
+ if(this.dialogStatus == 'edit') {
+ this.dataForm = data;
+ }
+ this.$nextTick(() => {
+ this.$refs['dataForm'].clearValidate()
+ })
+ },
+ getCateGoryList(type) {
+ getCoalPayCategory({categoryType: type,pageNum: 1, pageSize: 999}).then((res) => {
+ if (res.code == 200) {
+ if(type == 1){
+ this.dealList = res.rows
+ }else{
+ this.operationList = res.rows
+ }
+ }
+ })
+ },
+
+ // getNewCategoryList(val){
+ // if(this.dataForm.payType){
+ // this.changeRadio(this.dataForm.payType)
+ // }
+ // },
+
+ changeRadio(val){
+ if(val ==3){
+ this.getCateGoryList(1)
+ this.getCateGoryList(2)
+ }else if(val == 1 || val == 4){
+ this.getCateGoryList(1)
+ }else{
+ this.getCateGoryList(2)
+ }
+ this.dataForm.dealId = null
+ this.dataForm.operateId = null
+ },
+ handleClose() {
+ this.dialogVisible = false;
+ this.$emit("getList");
+ },
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.dialogStatus == 'add'){
+ if(this.dataForm.payType == 3){
+ this.dataForm.coalPayCategoryies = [this.transFormObj(this.dealList.find(i=>i.id == this.dataForm.dealId)),this.transFormObj(this.operationList.find(i=>i.id == this.dataForm.operateId))]
+ }else if(this.dataForm.payType == 1 || this.dataForm.payType == 4){
+ this.dataForm.coalPayCategoryies = [this.transFormObj(this.dealList.find(i=>i.id == this.dataForm.dealId))]
+ }else{
+ this.dataForm.coalPayCategoryies = [this.transFormObj(this.operationList.find(i=>i.id == this.dataForm.operateId))]
+ }
+ this.dataForm.amount = this.dataForm.coalPayCategoryies.map(i=>i.categoryAmount).reduce((acc, current) => acc + current, 0)
+ this.dataForm.coalPayCategoryies = this.dataForm.coalPayCategoryies.map(({categoryType,coalCategoryId})=>{return {categoryType,coalCategoryId}})
+ console.log(this.dataForm.coalPayCategoryies)
+ const {dealId, operateId,payPersonType,...data} = this.dataForm
+ const res = await addCoalPay(data);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ // const res = await updatePlat(this.dataForm);
+ // if(res.code == 200) {
+ // this.$emit("getList");
+ // this.dialogVisible = false;
+ // this.$message({
+ // type:'success',
+ // message: '编辑成功'
+ // })
+ // }else{
+ // this.$message({
+ // type:'warning',
+ // message: res.msg
+ // })
+ // }
+ }
+ }
+ })
+
+ },
+
+ transFormObj(obj){
+ return {
+ categoryAmount: obj.amount,
+ categoryType: obj.categoryType,
+ coalCategoryId: obj.id
+ }
+ },
+
+ resetDataForm(info) {
+ this.dataForm = {
+ payPersonType: 1,
+ deptId: info.dept.deptId,
+ dealId: null,
+ operateId: null
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+.infoTitle{
+ margin-top:-10px;
+ margin-bottom:20px;
+ display: flex;
+ justify-content: space-around;
+ font-size: 16px
+}
+
+</style>
diff --git a/src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue b/src/views/specialOperationsPay/coalPay/components/batchPay.vue
similarity index 68%
rename from src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue
rename to src/views/specialOperationsPay/coalPay/components/batchPay.vue
index f597722..902132b 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue
+++ b/src/views/specialOperationsPay/coalPay/components/batchPay.vue
@@ -1,6 +1,6 @@
<template>
<el-dialog
- :title="dialogStatus==='add'?'新增':'编辑'"
+ title="批量缴费"
:visible.sync="dialogVisible"
:modal-append-to-body="false"
:close-on-click-modal="false"
@@ -8,28 +8,18 @@
:before-close="handleClose"
>
<el-form ref="dataForm" :model="dataForm" :rules="rules" 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-form-item label="缴款人类型:" prop="type">
+ <el-radio-group v-model="dataForm.type">
+ <el-radio label="0">团体</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item label="身份证号:" prop="idCard">
- <el-input v-model.trim="dataForm.idCard"/>
+ <el-form-item label="缴款单位名称:" prop="name">
+ <el-input v-model.trim="dataForm.name"/>
</el-form-item>
- <el-form-item label="手机号:" prop="phone">
- <el-input v-model.trim="dataForm.phone"/>
+ <el-form-item label="缴款单位证件号:" prop="cardNo">
+ <el-input v-model.trim="dataForm.cardNo"/>
</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>
@@ -42,30 +32,16 @@
import { verifySimplePhone } from '@/utils/validate'
export default {
- name: 'addUser',
+ name: 'batchPay',
components: {
},
data() {
- let validatePhone = (rule, value, callback)=>{
- if(value === ''){
- callback(new Error('请输入手机号'))
- }else{
- if(!verifySimplePhone(value)){
- callback(new Error('手机号格式有误'))
- }else{
- callback()
- }
- }
- }
return {
dialogVisible: false,
dialogStatus: '',
-
rules: {
- name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
- idCard: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
- phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
- sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
+ name: [{ required: true, message: '请输入单位名称', trigger: 'blur' }],
+ cardNo: [{ required: true, message: '请输入单位证件号', trigger: 'blur' }]
},
dataForm: {},
diff --git a/src/views/specialOperationsPay/coalPay/components/studentDialog.vue b/src/views/specialOperationsPay/coalPay/components/studentDialog.vue
new file mode 100644
index 0000000..ca01afb
--- /dev/null
+++ b/src/views/specialOperationsPay/coalPay/components/studentDialog.vue
@@ -0,0 +1,453 @@
+<template>
+ <div>
+ <el-dialog :visible.sync="dialogVisible" width="800px" append-to-body class="stu">
+ <div class="infoTitle">
+ <div>批次名称:<span>{{stuInfo.batchName}}</span></div>
+<!-- <div style="margin-left: 35px">所属区划:<span>{{stuInfo.districtName}}</span></div>-->
+ </div>
+ <div class="infoTitle">
+ <div>组织架构:<span>{{stuInfo.deptName}}</span></div>
+ </div>
+ <el-form :model="stuInfo" label-width="125px">
+ <el-row :gutter="24">
+ <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="缴费类型:">
+ <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="12" v-if="stuInfo.payType === 1 || stuInfo.payType === 3 || stuInfo.payType === 4">
+ <el-form-item label="理论类别:">
+ <span>{{stuInfo.coalCategoryList.find(i=>i.categoryType == 1).subjectName}}</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="stuInfo.payType === 2 || stuInfo.payType === 3">
+ <el-form-item label="实操类别:">
+ <span>{{stuInfo.coalCategoryList.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>{{stuInfo.amount}}</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="总计应缴费:" prop="timeRange">
+ <span>{{ stuInfo.totalCountFee }}元</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="已完成缴费:" prop="timeRange">
+ <span>{{stuInfo.payCountFee}}元</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="剩余未缴费:" prop="timeRange">
+ <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>{{stuInfo.totalCount}}人</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="已完成缴费:" prop="timeRange">
+ <span>{{stuInfo.payCount}}人</span>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item label="当前未完成缴费:" prop="timeRange">
+ <span>{{stuInfo.unPayCount}}人</span>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+
+ <!-- 表格-->
+ <div style="margin: 20px 15px;display: flex">
+ <el-button size="small" type="primary" @click="handleAddStu('add',{})">添加学员</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="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"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getStuList"
+ />
+ </el-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"
+ :auto-upload="false"
+ :on-error="onError"
+ :on-success="onSuccess"
+ accept=".xlsx,.xls"
+ :on-preview="handlePreview"
+ :on-remove="handleRemove"
+ :before-remove="beforeRemove"
+ :before-upload="picSize"
+ ref="upload"
+ :limit="1"
+ :data={coalPayId:stuInfo.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 {verifyIdCard, verifySimplePhone} from "@/utils/validate";
+import {addCoalPayStu, delCoalPayStu, editCoalPayStu, getCoalPayStudentList} from "@/api/specialOperationsPay/coalPay";
+import exampleFile from '@/assets/studentInfo.xlsx'
+import {getToken} from "@/utils/auth";
+export default {
+ name: 'addStu',
+ 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: [],
+ fileList: [],
+ uploadUrl: process.env.VUE_APP_BASE_API + '/pay/coalPayStudent/import',
+ 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' }]
+ },
+ exampleFile
+ };
+ },
+ methods: {
+ openDialog(val) {
+ this.stuInfo = val
+ this.getStuList(this.stuInfo.id)
+ this.dialogVisible = true;
+ },
+
+ getStuList(id) {
+ getCoalPayStudentList(id).then(res=>{
+ if(res.code == 200){
+ this.stuList = res.rows
+ this.total = res.total
+ this.stuInfo.totalCountFee = this.stuInfo.amount * this.total
+ this.stuInfo.totalCount = this.total
+ if(this.total == 0){
+ this.stuInfo.payCount = 0
+ this.stuInfo.payCountFee = 0
+ }else{
+ this.stuInfo.payCount = this.stuList.filter(i=>i.payStatus == 1).length
+ this.stuInfo.payCountFee = this.stuInfo.payCount * this.stuInfo.amount
+ }
+ this.stuInfo.unPayCount = this.stuInfo.totalCount - this.stuInfo.payCount
+ this.stuInfo.unPayCountFee = this.stuInfo.totalCountFee - this.stuInfo.payCountFee
+ }
+ })
+ },
+
+ handleAddStu(type,data){
+ this.addDialog = true
+ this.resetDataForm()
+ if(type == 'add'){
+ this.dataForm.coalPayId = this.stuInfo.id
+ }else{
+ const {id,coalPayId,name,idCard,sex,phone} = data
+ this.dataForm = {id,coalPayId,name,idCard,sex,phone}
+ }
+ 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){
+ console.log(rawFile,'file')
+ 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 addCoalPayStu(this.dataForm)
+ if(res.code == 200) {
+ this.getStuList(this.stuInfo.id)
+ this.addDialog = false
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ const res = await editCoalPayStu(this.dataForm)
+ if(res.code == 200) {
+ this.getStuList(this.stuInfo.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 delCoalPayStu([row.id])
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getStuList(this.stuInfo.id)
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ },
+ resetDataForm() {
+ this.dataForm = {
+ }
+ },
+ }
+}
+
+</script>
+
+<style scoped lang="scss">
+.stu{
+ ::v-deep .el-form-item {
+ margin-bottom: 5px;
+ }
+ .infoTitle{
+ margin-bottom:10px;
+ margin-left: 40px;
+ display: flex;
+ font-size: 16px;
+ span{
+ font-weight: bolder;
+ }
+ }
+
+}
+
+</style>
diff --git a/src/views/specialOperationsPay/coalPay/index.vue b/src/views/specialOperationsPay/coalPay/index.vue
new file mode 100644
index 0000000..bcf75cb
--- /dev/null
+++ b/src/views/specialOperationsPay/coalPay/index.vue
@@ -0,0 +1,237 @@
+<template>
+ <div class="app-container">
+ <div>
+ <el-button
+ size="medium"
+ style="margin-bottom: 10px;background-color: #0FC7F0;color: white"
+ @click="handleAdd('add',{})"
+ v-if="isAhthority"
+ >录入批次
+ </el-button>
+ <el-date-picker
+ style="margin-left: 30px;width: 300px"
+ size="small"
+ v-model="dateValue"
+ @change="changeDate"
+ type="daterange"
+ format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期">
+ </el-date-picker>
+ <el-cascader v-model="queryParams.deptId" size="small" style="margin-left: 15px" :options="deptOptions" placeholder="组织架构" :props="{ expandTrigger: 'hover',checkStrictly: true,emitPath: false,value: 'id' }"></el-cascader>
+ <el-button
+ size="small"
+ type="primary"
+ style="margin-bottom: 10px;margin-left: 20px"
+ @click="handleQuery()"
+ >查询
+ </el-button>
+ <el-button
+ size="small"
+ type="primary"
+ style="margin-bottom: 10px"
+ @click="resetQuery()"
+ >重置
+ </el-button>
+ </div>
+ <el-table v-loading="loading" :data="payList" style="margin-top: 10px">
+ <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="deptName"/>
+<!-- <el-table-column label="所属地州" align="center" prop="districtName"/>-->
+ <el-table-column label="缴费类型" align="center" prop="payType">
+ <template #default="scope">
+ {{scope.row.payType == 1?'初训理论':scope.row.payType == 2?'初训实操':scope.row.payType == 3?'初训理论与实操':scope.row.payType == 4?'复训理论':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="单人(元)" align="center" prop="amount"/>
+ <el-table-column label="人数" align="center">
+ <template #default="scope">
+ <span>{{scope.row.havePayNum}}</span>/{{scope.row.totalNum}}
+ </template>
+ </el-table-column>
+ <el-table-column label="学员个人缴费" align="center" prop="batchName">
+ <template #default="scope">
+ <span v-if="scope.row.payPersonType == 1">已开启</span>
+ <span v-if="scope.row.payPersonType == 2" style="color:red">已关闭</span>
+ <el-button type="text" style="color:lightcoral" @click="updatePayType(scope.row)" v-if="scope.row.payPersonType == 1">关闭</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px">
+ <template #default="scope">
+ <el-button v-if="isAhthority" size="mini" type="text" style="color: #1890ff" @click="handleViewStu(scope.row)">学员管理</el-button>
+<!-- <el-button v-if="isAhthority" size="mini" type="text" style="color: #1890ff" @click="handleBatchPay(scope.row,'')">批量缴费</el-button>-->
+ <el-button v-if="isAhthority" size="mini" type="text" style="color:lightcoral" @click="handleDelete(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"
+ />
+ <add-dialog ref="addDialogRef" @getList="getList"></add-dialog>
+ <stu-dialog ref="stuDialogRef" @getList="getList"></stu-dialog>
+ <batch-pay ref="batchPayRef" @getList="getList"></batch-pay>
+ </div>
+</template>
+
+<script>
+
+import addDialog from './components/addDialog.vue'
+import stuDialog from './components/studentDialog.vue'
+import batchPay from "./components/batchPay.vue"
+import {getExamPage} from "@/api/coalMine/placeManage/exam";
+import {getAreaList} from "@/api/coalMine/placeManage/train";
+import {delCoalPay, getCoalPayList, updateCoalPayType} from "@/api/specialOperationsPay/coalPay";
+import store from "@/store";
+import {deptTreeSelect} from "@/api/system/user";
+
+export default {
+ name: "nCoalPay",
+ dicts: [],
+ components: {addDialog, stuDialog, batchPay},
+ data() {
+ return {
+ isDark: true,
+ loading: false,
+ single: true,
+ multiple: true,
+ showSearch: true,
+ addForm: false,
+ total: 0,
+ areaList: [],
+ deptOptions: [],
+ dateValue: [],
+ payList: [],
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ deptId: '',
+ minDate: '',
+ maxDate: ''
+ },
+ isAhthority: false
+ };
+ },
+ created() {
+ this.getDistrict()
+ this.getList()
+ this.getDeptList()
+ const roles = store.getters && store.getters.roles
+ if (roles.includes('admin') || roles.includes('mkexam') || roles.includes('feimeiexam') ) {
+ this.isAhthority = true
+ } else {
+ this.isAhthority = false
+ }
+ },
+ methods: {
+ getList() {
+ this.queryParams.minDate = this.dateValue[0]?this.dateValue[0] + ' 00:00:00':''
+ this.queryParams.maxDate = this.dateValue[1]?this.dateValue[1] + ' 23:59:59':''
+ getCoalPayList( this.queryParams).then((res) => {
+ if (res.code == 200) {
+ this.payList = res.rows
+ this.total = res.total
+ }
+ })
+ },
+
+ getDeptList() {
+ deptTreeSelect().then(response => {
+ this.deptOptions = response.data
+ })
+ },
+
+ openUrl(url) {
+ window.open(url, '_blank')
+ },
+ //行政区划
+ async getDistrict() {
+ const res = await getAreaList()
+ if (res.code == 200) {
+ this.areaList = res.data
+ }
+ },
+
+ changeDate(val) {
+ console.log('val', val)
+ },
+ handleAdd(type, data) {
+ this.$refs.addDialogRef.openDialog(type, data, this.areaList,this.deptOptions);
+ },
+ handleViewStu(val) {
+ this.$refs.stuDialogRef.openDialog(val)
+ },
+ handleBatchPay(val) {
+ this.$refs.batchPayRef.openDialog(val);
+ },
+ handleQuery() {
+ this.getList();
+ },
+ resetQuery() {
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ deptId: '',
+ minDate: '',
+ maxDate: ''
+ }
+ this.dateValue = []
+ this.getList()
+ },
+ updatePayType(row){
+ this.$confirm('一旦关闭则无法重新开启个人缴费,必须批量缴完剩余所有学员。是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await updateCoalPayType({coalPayId: row.id,payPersonType: 2})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ },
+
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delCoalPay([row.id])
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ }
+ }
+};
+</script>
diff --git a/src/views/specialOperationsPay/coalWorkType/components/detailDialog.vue b/src/views/specialOperationsPay/coalWorkType/components/detailDialog.vue
new file mode 100644
index 0000000..671eeb2
--- /dev/null
+++ b/src/views/specialOperationsPay/coalWorkType/components/detailDialog.vue
@@ -0,0 +1,138 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="dialogVisible"
+ :modal-append-to-body="false"
+ :close-on-click-modal="false"
+ width="450px"
+ :before-close="handleClose"
+ >
+ <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="类别:" prop="categoryType">
+ <el-radio-group v-model="dataForm.categoryType">
+ <el-radio :label="1">理论</el-radio>
+ <el-radio :label="2">实操</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="科目名称:" prop="subjectName">
+ <el-input v-model.trim="dataForm.subjectName"/>
+ </el-form-item>
+ <el-form-item label="金额:" prop="amount">
+ <el-input v-model.trim.number="dataForm.amount">
+ <template #append>元</template>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="业务代码:" prop="businessCode">
+ <el-input v-model.trim="dataForm.businessCode"/>
+ </el-form-item>
+ <el-form-item label="描述:" prop="describe">
+ <el-input v-model.trim="dataForm.describe"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取 消</el-button>
+ <el-button type="primary" @click="onSubmit">确 定</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script >
+import { addPlat, updatePlat } from '@/api/onlineEducation/plat'
+import { verifySimplePhone } from '@/utils/validate'
+import {addCoalPayCategory, updateCoalPayCategory} from "@/api/specialOperationsPay/coalPay";
+
+export default {
+ name: 'detailDialog',
+ components: {
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ title: '',
+ rules: {
+ categoryType: [{ required: true, message: '请选择类别', trigger: 'blur' }],
+ subjectName: [{ required: true, message: '请输入科目名称', trigger: 'blur' }],
+ amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
+ },
+ dataForm: {},
+
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (type, data) {
+ this.resetDataForm()
+ this.dialogVisible = true
+ this.title = type == 'add'?'新增':'编辑'
+ if(this.title == '编辑') {
+ const {id,categoryType,subjectName,amount,describe} = data
+ this.dataForm = {id,categoryType,subjectName,amount,describe}
+ }
+ this.$nextTick(() => {
+ this.$refs['dataForm'].clearValidate()
+ })
+ },
+ handleClose() {
+ this.dialogVisible = false;
+ this.$emit("getList");
+ },
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.title == '新增'){
+ console.log("this.dataForm",this.dataForm)
+ const res = await addCoalPayCategory(this.dataForm);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ const res = await updateCoalPayCategory(this.dataForm);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '编辑成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }
+ })
+
+ },
+ resetDataForm() {
+ this.dataForm = {
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+.infoTitle{
+ margin-top:-10px;
+ margin-bottom:20px;
+ display: flex;
+ justify-content: space-around;
+ font-weight: 800;
+ font-size: 16px
+}
+
+</style>
diff --git a/src/views/specialOperationsPay/coalWorkType/index.vue b/src/views/specialOperationsPay/coalWorkType/index.vue
new file mode 100644
index 0000000..c266023
--- /dev/null
+++ b/src/views/specialOperationsPay/coalWorkType/index.vue
@@ -0,0 +1,251 @@
+<template>
+ <div class="app-container">
+ <div>
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ @click="handleView('add')"
+ v-hasPermi="['system:experts:add']"
+ >新增</el-button>
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ @click="openTicket()"
+ v-hasPermi="['system:experts:add']"
+ >开票信息维护</el-button>
+ <el-radio-group v-model="queryParams.categoryType" style="margin-left: 10px;" @change="changeStatus">
+ <el-radio-button>全部</el-radio-button>
+ <el-radio-button :label="1">理论</el-radio-button>
+ <el-radio-button :label="2">实操</el-radio-button>
+ </el-radio-group>
+ </div>
+
+ <el-table v-loading="loading" :data="dataList" style="margin-top: 20px" :row-class-name="tableAddClass">
+ <el-table-column label="类别" align="center" prop="categoryType">
+ <template #default="scope">
+ {{scope.row.categoryType == 1?'理论':scope.row.categoryType == 2?'实操':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="科目名称" align="center" prop="subjectName" :show-overflow-tooltip="true" />
+ <el-table-column label="金额(元)" align="center" prop="amount" />
+ <el-table-column label="业务代码" align="center" prop="businessCode" />
+ <el-table-column label="描述" align="center" prop="describe" />
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <template #default="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleView('edit',scope.row)"
+ >编辑</el-button>
+ <el-button
+ size="mini"
+ type="text"
+ style="color: #f56c6c"
+ icon="el-icon-delete"
+ @click="handleDelete(scope.row)"
+ v-hasPermi="['system:experts:remove']"
+ >删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-dialog
+ title="开票信息"
+ :visible.sync="ticketDialog"
+ :modal-append-to-body="false"
+ :close-on-click-modal="false"
+ width="50%"
+ >
+ <el-form ref="dataForm" :model="ticketForm" :rules="ticketRules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="开票单位名称:" prop="ticketCompanyName">
+ <el-input v-model.trim="ticketForm.ticketCompanyName"/>
+ </el-form-item>
+ <el-form-item label="开票单位社会信用代码:" prop="ticketCompanyCode">
+ <el-input v-model.trim="ticketForm.ticketCompanyCode"/>
+ </el-form-item>
+ <el-form-item label="开票人:" prop="drawer">
+ <el-input v-model.trim="ticketForm.drawer"/>
+ </el-form-item>
+ <el-form-item label="复核人:" prop="check">
+ <el-input v-model.trim="ticketForm.check"/>
+ </el-form-item>
+ <el-form-item label="单位编码:" prop="companyCode">
+ <el-input v-model.trim="ticketForm.companyCode"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="ticketDialog = false">取 消</el-button>
+ <el-button type="primary" @click="onSubmit">确 定</el-button>
+ </span>
+ </el-dialog>
+ <pagination
+ v-show="total>0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="getList"
+ />
+ <detail-dialog ref="detailDialogRef" @getList = "getList"></detail-dialog>
+ </div>
+</template>
+
+<script>
+import detailDialog from './components/detailDialog.vue'
+import {
+ addCoalPayStu, addTicket,
+ delCoalPayCategory,
+ editCoalPayStu, editTicket,
+ getCoalPayCategory,
+ getTicketList
+} from '@/api/specialOperationsPay/coalPay'
+import Cookies from 'js-cookie'
+import {delNotCoalPayCategory} from "@/api/specialOperationsPay/notCoalPay";
+export default {
+ name: "coalWorkType",
+ dicts: [],
+ components: { detailDialog},
+ data() {
+ return {
+ loading: false,
+ single: true,
+ multiple: true,
+ showSearch: true,
+ addForm: false,
+ total: 0,
+ expertTypes: [],
+ dataList: [],
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ categoryType: null,
+ },
+ ticketDialog: false,
+ ticketForm: {},
+ ticketRules:{
+ ticketCompanyName: [{ required: true, message: '请输入开票单位名称', trigger: 'blur' }],
+ ticketCompanyCode: [{ required: true, message: '请输入开票单位社会信用代码', trigger: 'blur' }],
+ drawer:[{ required: true, message: '请输入开票人', trigger: 'blur' }],
+ check: [{ required: true, message: '请输入复核人', trigger: 'blur' }],
+ companyCode: [{ required: true, message: '请输入单位编码', trigger: 'blur' }]
+ },
+ ticketStatus: ''
+ };
+ },
+ created() {
+ this.getList();
+ },
+ methods: {
+ getList(){
+ this.loading = true;
+ getCoalPayCategory(this.queryParams).then((res) => {
+ if (res.code == 200) {
+ this.dataList = res.rows
+ this.total = res.total
+ this.loading = false
+ }
+ })
+ },
+ changeStatus(val) {
+ this.getList()
+ },
+ tableAddClass({ row, rowIndex }) {
+ if (row.difference < row.duration) {
+ return "tr-red";
+ }
+ return "";
+ },
+ async openTicket(){
+ const res = await getTicketList()
+ if(res.code == 200){
+ if(res.data){
+ this.ticketForm = res.data
+ this.ticketStatus = 'edit'
+ }else{
+ this.ticketForm = {}
+ this.ticketStatus = 'add'
+ }
+ }
+ this.ticketDialog = true
+ },
+
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.ticketStatus == 'add'){
+ const res = await addTicket(this.ticketForm)
+ if(res.code == 200) {
+ this.getList()
+ this.ticketDialog = false
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ const res = await editTicket(this.ticketForm)
+ if(res.code == 200) {
+ this.getList()
+ this.ticketDialog = false
+ this.$message({
+ type:'success',
+ message: '修改成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }
+ })
+ },
+
+ handleQuery(){
+
+ },
+ resetQuery(){
+
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delCoalPayCategory([row.id])
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ },
+ handleView(type,data){
+ this.$refs.detailDialogRef.openDialog(type,data);
+ }
+ }
+};
+</script>
+
+<style scoped>
+.app-container /deep/ .el-table .tr-red {
+ color: red !important;
+}
+</style>
diff --git a/src/views/specialOperationsPay/notCoalPay/components/addDialog.vue b/src/views/specialOperationsPay/notCoalPay/components/addDialog.vue
index f9e33fe..1ba49ec 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/addDialog.vue
+++ b/src/views/specialOperationsPay/notCoalPay/components/addDialog.vue
@@ -8,58 +8,76 @@
:before-close="handleClose"
>
<div class="infoTitle">
- <div>考试点名称:XXXXX</div>
- <div style="margin-left: 15px">管辖行政区划:XXXxxxx</div>
+ <div>组织架构名称:<span style="font-weight: bolder">{{deptName}}</span></div>
+ <div style="margin-left: 15px">管辖行政区划:<span style="font-weight: bolder">{{districtName}}</span></div>
</div>
<el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
<el-form-item label="批次名称:" prop="batchName">
<el-input v-model.trim="dataForm.batchName"/>
</el-form-item>
+<!-- <el-form-item label="所属区划:" prop="districtCode">-->
+<!-- <el-select v-model="dataForm.districtCode" placeholder="行政区划" @change="getNewCategoryList">-->
+<!-- <el-option-->
+<!-- v-for="item in areaList"-->
+<!-- :key="item.id"-->
+<!-- :label="item.name"-->
+<!-- :value="item.code">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item label="考试点:" prop="deptId">-->
+<!-- <el-select v-model="dataForm.deptId" size="small" placeholder="请选择考试点">-->
+<!-- <el-option-->
+<!-- v-for="item in examList"-->
+<!-- :key="item.siteId"-->
+<!-- :label="item.siteName"-->
+<!-- :value="item.siteId">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
<el-form-item label="所属缴费周期:" prop="year">
<div style="display: flex">
- <el-select v-model="dataForm.year" placeholder="请选择年份" style="width: 150px" clearable>
- <el-option
- v-for="item in yearList"
- :key="item.id"
- :label="item.label"
- :value="item.label">
- </el-option>
- </el-select>
+ <el-date-picker
+ v-model="dataForm.year"
+ type="year"
+ value-format="yyyy"
+ placeholder="选择年">
+ </el-date-picker>
<el-select v-model="dataForm.quarter" placeholder="请选择季度" style="width: 150px;margin-left: 5px" clearable>
<el-option
v-for="item in quarterList"
:key="item.id"
:label="item.label"
- :value="item.label">
+ :value="item.id">
</el-option>
</el-select>
</div>
</el-form-item>
- <el-form-item label="缴费类型:" prop="type">
- <el-radio-group v-model="dataForm.type" @change="changeRadio" v-removeAriaHidden>
+ <el-form-item label="缴费类型:" prop="payType">
+ <el-radio-group v-model="dataForm.payType" @change="changeRadio" v-removeAriaHidden>
<el-radio
- v-for="item in payType"
+ v-for="item in payTypeList"
:key="item.id"
:label="item.id"
>{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item v-if="dataForm.type === 1 || dataForm.type === 3 || dataForm.type === 4 " label="理论类别:" prop="deal" style="margin-left: 85px">
- <el-select v-model="dataForm.deal" placeholder="请选择" style="width: 84%" clearable>
+ <el-form-item v-if="dataForm.payType === 1 || dataForm.payType === 3 || dataForm.payType === 4" label="理论类别:" prop="dealId">
+ <el-select v-model="dataForm.dealId" placeholder="请选择" style="width: 100%" clearable>
<el-option
v-for="item in dealList"
:key="item.id"
- :label="item.label"
+ :label="item.subjectName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
- <el-form-item v-if="dataForm.type === 2 || dataForm.type === 3" label="实操类别:" prop="operation" style="margin-left: 85px">
- <el-select v-model="dataForm.operation" placeholder="请选择" style="width: 84%" clearable>
+ <el-form-item v-if="dataForm.payType === 2 || dataForm.payType === 3" label="实操类别:" prop="operateId">
+ <el-select v-model="dataForm.operateId" placeholder="请选择" style="width: 100%" clearable>
<el-option
v-for="item in operationList"
:key="item.id"
- :label="item.label"
+ :label="item.subjectName"
:value="item.id">
</el-option>
</el-select>
@@ -74,6 +92,8 @@
<script >
import { addPlat, updatePlat } from '@/api/onlineEducation/plat'
+import {addNonCoalPay, getNotCoalPayCategory} from "@/api/specialOperationsPay/notCoalPay";
+import store from "@/store";
export default {
name: 'addUser',
@@ -83,45 +103,19 @@
return {
dialogVisible: false,
dialogStatus: '',
-
+ deptName: '',
+ districtName: '',
rules: {
batchName: [{ required: true, message: '请输入批次名称', trigger: 'blur' }],
year: [{ required: true, message: '请选择缴费周期', trigger: 'blur' }],
- type: [{ required: true, message: '请选择缴费类型', trigger: 'blur' }],
- operation: [{ required: true, message: '请选择实操类别', trigger: 'blur' }],
- deal: [{ required: true, message: '请选择理论类别', trigger: 'blur' }],
+ quarter: [{ required: true, message: '请选择缴费周期', trigger: 'blur' }],
+ payType: [{ required: true, message: '请选择季度', trigger: 'blur' }],
+ operateId: [{ required: true, message: '请选择实操类别', trigger: 'blur' }],
+ dealId: [{ required: true, message: '请选择理论类别', trigger: 'blur' }],
},
dataForm: {},
- yearList: [
- {
- id: 0,
- label: '2024年'
- },
- {
- id: 1,
- label: '2025年'
- },
- {
- id: 2,
- label: '2026年'
- },
- {
- id: 3,
- label: '2027年'
- },
- {
- id: 4,
- label: '2028年'
- },
- {
- id: 5,
- label: '2029年'
- },
- {
- id: 6,
- label: '2030年'
- },
- ],
+ areaList: [],
+ examList: [],
quarterList: [
{
id: 1,
@@ -140,7 +134,7 @@
label: '第四季度'
},
],
- payType: [
+ payTypeList: [
{
id: 1,
label: '初训理论'
@@ -166,10 +160,15 @@
},
methods: {
- openDialog (type, data) {
- this.resetDataForm();
- this.dialogVisible = true;
- this.dialogStatus = type;
+ openDialog (type, data, areaList, examList) {
+ const userInfo = store.getters && store.getters.userInfo
+ this.deptName = userInfo.dept.deptName
+ this.districtName = userInfo.district.districtName
+ this.resetDataForm(userInfo)
+ this.areaList = areaList
+ this.examList = examList
+ this.dialogVisible = true
+ this.dialogStatus = type
if(this.dialogStatus == 'edit') {
this.dataForm = data;
}
@@ -177,10 +176,35 @@
this.$refs['dataForm'].clearValidate()
})
},
+ getCateGoryList(type) {
+ getNotCoalPayCategory({categoryType: type,districtCode: this.dataForm.districtCode?this.dataForm.districtCode:''}).then((res) => {
+ if (res.code == 200) {
+ if(type == 1){
+ this.dealList = res.rows
+ }else{
+ this.operationList = res.rows
+ }
+ }
+ })
+ },
+
+ // getNewCategoryList(val){
+ // if(this.dataForm.payType){
+ // this.changeRadio(this.dataForm.payType)
+ // }
+ // },
+
changeRadio(val){
- console.log('val',val)
- this.dataForm.deal = null
- this.dataForm.operation = null
+ if(val ==3){
+ this.getCateGoryList(1)
+ this.getCateGoryList(2)
+ }else if(val == 1 || val == 4){
+ this.getCateGoryList(1)
+ }else{
+ this.getCateGoryList(2)
+ }
+ this.dataForm.dealId = null
+ this.dataForm.operateId = null
},
handleClose() {
this.dialogVisible = false;
@@ -190,21 +214,29 @@
this.$refs["dataForm"].validate( async valid => {
if (valid) {
if(this.dialogStatus == 'add'){
- console.log("this.dataForm",this.dataForm)
- // const res = await addPlat(this.dataForm);
- // if(res.code == 200) {
- // this.$emit("getList");
- // this.dialogVisible = false;
- // this.$message({
- // type:'success',
- // message: '新增成功'
- // })
- // }else{
- // this.$message({
- // type:'warning',
- // message: res.msg
- // })
- // }
+ if(this.dataForm.payType == 3){
+ this.dataForm.nonCoalPayCategoryList = [this.transFormObj(this.dealList.find(i=>i.id == this.dataForm.dealId)),this.transFormObj(this.operationList.find(i=>i.id == this.dataForm.operateId))]
+ }else if(this.dataForm.payType == 1 || this.dataForm.payType == 4){
+ this.dataForm.nonCoalPayCategoryList = [this.transFormObj(this.dealList.find(i=>i.id == this.dataForm.dealId))]
+ }else{
+ this.dataForm.nonCoalPayCategoryList = [this.transFormObj(this.operationList.find(i=>i.id == this.dataForm.operateId))]
+ }
+ this.dataForm.amount = this.dataForm.nonCoalPayCategoryList.map(i=>i.categoryAmount).reduce((acc, current) => acc + current, 0)
+ const {dealId, operateId, ...data} = this.dataForm
+ const res = await addNonCoalPay(data);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
}else {
// const res = await updatePlat(this.dataForm);
// if(res.code == 200) {
@@ -225,8 +257,22 @@
})
},
- resetDataForm() {
+
+ transFormObj(obj){
+ return {
+ categoryAmount: obj.amount,
+ categoryType: obj.categoryType,
+ categoryId: obj.id
+ }
+ },
+
+ resetDataForm(info) {
this.dataForm = {
+ payPersonType: 1,
+ districtCode: info.district.districtCode,
+ deptId: info.dept.deptId,
+ dealId: null,
+ operateId: null
}
},
}
@@ -239,7 +285,6 @@
margin-bottom:20px;
display: flex;
justify-content: space-around;
- font-weight: 800;
font-size: 16px
}
diff --git a/src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue b/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
similarity index 68%
copy from src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue
copy to src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
index f597722..902132b 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/addStuDialog.vue
+++ b/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
@@ -1,6 +1,6 @@
<template>
<el-dialog
- :title="dialogStatus==='add'?'新增':'编辑'"
+ title="批量缴费"
:visible.sync="dialogVisible"
:modal-append-to-body="false"
:close-on-click-modal="false"
@@ -8,28 +8,18 @@
:before-close="handleClose"
>
<el-form ref="dataForm" :model="dataForm" :rules="rules" 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-form-item label="缴款人类型:" prop="type">
+ <el-radio-group v-model="dataForm.type">
+ <el-radio label="0">团体</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item label="身份证号:" prop="idCard">
- <el-input v-model.trim="dataForm.idCard"/>
+ <el-form-item label="缴款单位名称:" prop="name">
+ <el-input v-model.trim="dataForm.name"/>
</el-form-item>
- <el-form-item label="手机号:" prop="phone">
- <el-input v-model.trim="dataForm.phone"/>
+ <el-form-item label="缴款单位证件号:" prop="cardNo">
+ <el-input v-model.trim="dataForm.cardNo"/>
</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>
@@ -42,30 +32,16 @@
import { verifySimplePhone } from '@/utils/validate'
export default {
- name: 'addUser',
+ name: 'batchPay',
components: {
},
data() {
- let validatePhone = (rule, value, callback)=>{
- if(value === ''){
- callback(new Error('请输入手机号'))
- }else{
- if(!verifySimplePhone(value)){
- callback(new Error('手机号格式有误'))
- }else{
- callback()
- }
- }
- }
return {
dialogVisible: false,
dialogStatus: '',
-
rules: {
- name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
- idCard: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
- phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
- sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
+ name: [{ required: true, message: '请输入单位名称', trigger: 'blur' }],
+ cardNo: [{ required: true, message: '请输入单位证件号', trigger: 'blur' }]
},
dataForm: {},
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;
+ }
}
}
diff --git a/src/views/specialOperationsPay/notCoalPay/index.vue b/src/views/specialOperationsPay/notCoalPay/index.vue
index 5500d37..fc8b607 100644
--- a/src/views/specialOperationsPay/notCoalPay/index.vue
+++ b/src/views/specialOperationsPay/notCoalPay/index.vue
@@ -5,7 +5,9 @@
size="medium"
style="margin-bottom: 10px;background-color: #0FC7F0;color: white"
@click="handleAdd('add',{})"
- >录入批次</el-button>
+ v-if="isAhthority"
+ >录入批次
+ </el-button>
<el-date-picker
style="margin-left: 30px;width: 300px"
size="small"
@@ -18,49 +20,68 @@
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
- <el-select v-model="queryParams.institutionId" size="small" style="margin-left: 15px;" placeholder="请选择行政区划">
+ <el-select v-model="queryParams.districtCode" size="small" style="margin-left: 15px;margin-right: 15px" placeholder="行政区划">
<el-option
- v-for="item in districtList"
+ v-for="item in areaList"
:key="item.id"
- :label="item.institutionalName"
- :value="item.id">
+ :label="item.name"
+ :value="item.code">
</el-option>
</el-select>
- <el-select v-model="queryParams.institutionId" size="small" style="margin-left: 15px;" placeholder="请选择考试点">
- <el-option
- v-for="item in examList"
- :key="item.id"
- :label="item.institutionalName"
- :value="item.id">
- </el-option>
- </el-select>
+<!-- <el-select v-model="queryParams.deptId" size="small" style="margin-left: 15px;" placeholder="请选择考试点">-->
+<!-- <el-option-->
+<!-- v-for="item in examList"-->
+<!-- :key="item.siteId"-->
+<!-- :label="item.siteName"-->
+<!-- :value="item.siteId">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- <treeselect v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择组织架构" />-->
+ <el-cascader v-model="queryParams.deptId" size="small" :options="deptOptions" placeholder="组织架构" :props="{ expandTrigger: 'hover',checkStrictly: true,emitPath: false,value: 'id' }"></el-cascader>
<el-button
size="small"
type="primary"
style="margin-bottom: 10px;margin-left: 20px"
@click="handleQuery()"
- >查询</el-button>
+ >查询
+ </el-button>
<el-button
size="small"
type="primary"
style="margin-bottom: 10px"
@click="resetQuery()"
- >重置</el-button>
+ >重置
+ </el-button>
</div>
- <el-table v-loading="loading" :data="expertList" style="margin-top: 10px">
- <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="batchName" />
+ <el-table v-loading="loading" :data="payList" style="margin-top: 10px">
+ <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="deptName"/>
+ <el-table-column label="所属地州" align="center" prop="districtName"/>
+ <el-table-column label="缴费类型" align="center" prop="payType">
+ <template #default="scope">
+ {{scope.row.payType == 1?'初训理论':scope.row.payType == 2?'初训实操':scope.row.payType == 3?'初训理论与实操':scope.row.payType == 4?'复训理论':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="单人(元)" align="center" prop="amount"/>
+ <el-table-column label="人数" align="center">
+ <template #default="scope">
+ <span>{{scope.row.havePayNum}}</span>/{{scope.row.totalNum}}
+ </template>
+ </el-table-column>
+ <el-table-column label="学员个人缴费" align="center" prop="batchName">
+ <template #default="scope">
+ <span v-if="scope.row.payPersonType == 1">已开启</span>
+ <span v-if="scope.row.payPersonType == 2" style="color:red">已关闭</span>
+ <el-button type="text" style="color:lightcoral" @click="updatePayType(scope.row)" v-if="scope.row.payPersonType == 1">关闭</el-button>
+ </template>
+ </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px">
- <template #default="scope" >
- <el-button size="mini" type="text" style="color: #1890ff" @click="handleViewStu(scope.row)">学员管理</el-button>
- <el-button size="mini" type="text" style="color: #1890ff" @click="handleViewCourse(scope.row,'')">批量缴费</el-button>
- <el-button size="mini" type="text" style="color:lightcoral" @click="handleViewCourse(scope.row,'')">删除</el-button>
+ <template #default="scope">
+ <el-button v-if="isAhthority" size="mini" type="text" style="color: #1890ff" @click="handleViewStu(scope.row)">学员管理</el-button>
+<!-- <el-button v-if="isAhthority" size="mini" type="text" style="color: #1890ff" @click="handleBatchPay(scope.row,'')">批量缴费</el-button>-->
+ <el-button v-if="isAhthority" size="mini" type="text" style="color:lightcoral" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -71,108 +92,170 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
- <add-dialog ref="addDialogRef" @getList = "getList"></add-dialog>
- <stu-dialog ref="stuDialogRef" @getList = "getList"></stu-dialog>
+ <add-dialog ref="addDialogRef" @getList="getList"></add-dialog>
+ <stu-dialog ref="stuDialogRef" @getList="getList"></stu-dialog>
+ <batch-pay ref="batchPayRef" @getList="getList"></batch-pay>
</div>
</template>
<script>
-import { delJobRegist } from '@/api/coalMine/jobRegist'
-import { listPlat, listPlatSelect } from '@/api/onlineEducation/plat'
-import { listCourse } from '@/api/onlineEducation/course'
+import {delJobRegist} from '@/api/coalMine/jobRegist'
+import {listPlat, listPlatSelect} from '@/api/onlineEducation/plat'
+import {listCourse} from '@/api/onlineEducation/course'
import addDialog from './components/addDialog.vue'
import stuDialog from './components/studentDialog.vue'
+import batchPay from "./components/batchPay.vue"
+import {getExamPage} from "@/api/coalMine/placeManage/exam";
+import {getAreaList} from "@/api/coalMine/placeManage/train";
+import {delNonCoalPay, editPayTypeInfo, getNonCoalPayList} from "@/api/specialOperationsPay/notCoalPay";
+import store from "@/store";
+import {deptTreeSelect} from "@/api/system/user";
+
export default {
- name: "nPeopleManage",
+ name: "nCoalPay",
dicts: [],
- components: { addDialog,stuDialog },
+ components: {addDialog, stuDialog, batchPay},
data() {
return {
- isDark:true,
+ isDark: true,
loading: false,
single: true,
multiple: true,
showSearch: true,
addForm: false,
total: 0,
- districtList: [],
- examList: [],
+ areaList: [],
+ deptOptions: [],
dateValue: [],
- expertList: [],
+ payList: [],
queryParams: {
pageNum: 1,
pageSize: 10,
- institutionId: ''
+ districtCode: '',
+ deptId: '',
+ params: {
+ startTime: '',
+ endTime: ''
+ }
},
+ isAhthority: false
};
},
created() {
- this.getDistrict();
- this.getList();
- this.getExam();
+ this.getDistrict()
+ this.getList()
+ this.getDeptList()
+ const roles = store.getters && store.getters.roles
+ if (roles.includes('admin') || roles.includes('mkexam') || roles.includes('feimeiexam') ) {
+ this.isAhthority = true
+ } else {
+ this.isAhthority = false
+ }
},
methods: {
- getList(){
+ getList() {
this.loading = true;
- this.expertList = [
- {
- id: 1,
-
- }
- ]
- this.total = 1
+ this.loading = false;
+ this.queryParams.params.startTime = this.dateValue[0]?this.dateValue[0]:''
+ this.queryParams.params.endTime = this.dateValue[1]?this.dateValue[1]:''
+ getNonCoalPayList( this.queryParams).then((res) => {
+ if (res.code == 200) {
+ this.payList = res.rows
+ this.total = res.total
this.loading = false;
- // this.loading = true;
- // listCourse( this.queryParams).then((res) => {
- // if (res.code == 200) {
- // this.expertList = res.rows.map(item => {
- // return {
- // ...item,
- // courseNum: item.outline ? item.outline.length : '',
- // }
- // })
- // this.total = res.total
- // this.loading = false;
- // }
- // })
+ }
+ })
},
+
+ getDeptList() {
+ deptTreeSelect().then(response => {
+ this.deptOptions = response.data
+ })
+ },
+
openUrl(url) {
- window.open(url,'_blank')
+ window.open(url, '_blank')
},
//行政区划
- getDistrict() {
+ async getDistrict() {
+ const res = await getAreaList()
+ if (res.code == 200) {
+ this.areaList = res.data
+ }
+ },
+ changeDate(val) {
+ console.log('val', val)
},
- //考试点
- getExam() {
-
+ handleAdd(type, data) {
+ this.$refs.addDialogRef.openDialog(type, data, this.areaList,this.deptOptions);
},
- changeDate(val){
- console.log('val',val)
+ handleViewStu(val) {
+ this.$refs.stuDialogRef.openDialog(val.id);
},
- handleAdd(type,data) {
- this.$refs.addDialogRef.openDialog(type, data);
+ handleBatchPay(val) {
+ this.$refs.batchPayRef.openDialog(val);
},
- handleViewStu(val){
- this.$refs.stuDialogRef.openDialog(val);
- },
- handleQuery(){
+ handleQuery() {
this.getList();
},
- resetQuery(){
+ resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
- institutionId: ''
+ districtCode: '',
+ deptId: '',
+ params: {
+ startTime: '',
+ endTime: ''
+ }
}
+ this.dateValue = []
this.getList();
},
- check(val){
- this.$confirm('此操作将审核该条数据, 是否继续?', '提示', {
+ updatePayType(row){
+ this.$confirm('一旦关闭则无法重新开启个人缴费,必须批量缴完剩余所有学员。是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
+ const res = await editPayTypeInfo({id: row.id,payPersonType: 2})
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ },
+
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delNonCoalPay(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
}).catch(() => {
});
diff --git a/src/views/specialOperationsPay/notCoalWorkType/components/detailDialog.vue b/src/views/specialOperationsPay/notCoalWorkType/components/detailDialog.vue
new file mode 100644
index 0000000..fb6eb2e
--- /dev/null
+++ b/src/views/specialOperationsPay/notCoalWorkType/components/detailDialog.vue
@@ -0,0 +1,199 @@
+<template>
+ <el-dialog
+ :title="title"
+ :visible.sync="dialogVisible"
+ :modal-append-to-body="false"
+ :close-on-click-modal="false"
+ width="50%"
+ :before-close="handleClose"
+ >
+ <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中...">
+ <el-form-item label="所属区划:" prop="districtCode">
+ <el-select v-model="dataForm.districtCode" style="margin-left: 15px" placeholder="行政区划">
+ <el-option
+ v-for="item in areaList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.code">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="类别:" prop="categoryType">
+ <el-radio-group v-model="dataForm.categoryType">
+ <el-radio :label="1">理论</el-radio>
+ <el-radio :label="2">实操</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="科目名称:" prop="subjectName">
+ <el-input v-model.trim="dataForm.subjectName"/>
+ </el-form-item>
+ <el-form-item label="资格类型:" prop="operateTypeId">
+ <el-cascader
+ v-model="dataForm.operateTypeId"
+ :options="typeList"
+ style="width: 100%"
+ :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath: false}"></el-cascader>
+ </el-form-item>
+ <el-form-item label="金额:" prop="amount">
+ <el-input v-model.trim.number="dataForm.amount">
+ <template #append>元</template>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="业务代码:" prop="businessCode">
+ <el-input v-model.trim="dataForm.businessCode"/>
+ </el-form-item>
+ <el-form-item label="单位编码:" prop="companyCode">
+ <el-input v-model.trim="dataForm.companyCode"/>
+ </el-form-item>
+ <el-form-item label="开票人:" prop="drawer">
+ <el-input v-model.trim="dataForm.drawer"/>
+ </el-form-item>
+ <el-form-item label="复核人:" prop="reviewer">
+ <el-input v-model.trim="dataForm.reviewer"/>
+ </el-form-item>
+ <el-form-item label="开票单位社会信用代码:" prop="invoicingCompanyCode">
+ <el-input v-model.trim="dataForm.invoicingCompanyCode"/>
+ </el-form-item>
+ <el-form-item label="描述:" prop="describe">
+ <el-input v-model.trim="dataForm.describe"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="handleClose">取 消</el-button>
+ <el-button type="primary" @click="onSubmit">确 定</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script >
+import { addPlat, updatePlat } from '@/api/onlineEducation/plat'
+import { verifySimplePhone } from '@/utils/validate'
+import {getAreaList} from "@/api/coalMine/placeManage/train";
+import {getOperatePage} from "@/api/coalMine/operateType";
+import {addNotCoalPayCategory, getNotCoalPayCategory, updateNotCoalPayCategory} from "@/api/specialOperationsPay/notCoalPay";
+
+export default {
+ name: 'detailDialog',
+ components: {
+ },
+ data() {
+ return {
+ dialogVisible: false,
+ title: '',
+ areaList: [],
+ typeList: [],
+ rules: {
+ districtCode: [{ required: true, message: '请选择所属区划', trigger: 'blur' }],
+ categoryType: [{ required: true, message: '请选择类别', trigger: 'blur' }],
+ subjectName: [{ required: true, message: '请输入科目名称', trigger: 'blur' }],
+ operateTypeId: [{ required: true, message: '请选择资格类型', trigger: 'blur' }],
+ amount: [{ required: true, message: '请输入金额', trigger: 'blur' }],
+ businessCode: [{ required: true, message: '请输入业务代码', trigger: 'blur' }],
+ companyCode: [{ required: true, message: '请输入单位编码', trigger: 'blur' }],
+ drawer: [{ required: true, message: '请输入开票人', trigger: 'blur' }],
+ reviewer: [{ required: true, message: '请输入复核人', trigger: 'blur' }],
+ invoicingCompanyCode: [{ required: true, message: '请输入开票单位社会信用代码', trigger: 'blur' }]
+ },
+ dataForm: {},
+
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ openDialog (type, data) {
+ this.getArea()
+ this.getTypeList()
+ this.resetDataForm()
+ this.dialogVisible = true
+ this.title = type == 'add'?'新增':'编辑'
+ if(this.title == '编辑') {
+ console.log(data,'data')
+ this.dataForm = data
+ }
+ this.$nextTick(() => {
+ this.$refs['dataForm'].clearValidate()
+ })
+ },
+ async getArea() {
+ const res = await getAreaList();
+ if (res.code == 200) {
+ this.areaList = res.data
+ }
+ },
+ async getTypeList() {
+ this.loading = true;
+ const res = await getOperatePage({name: ''})
+ if(res.code == 200){
+ this.typeList = this.handleTree(res.data, "id");
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ this.loading = false;
+ },
+ handleClose() {
+ this.dialogVisible = false;
+ this.$emit("getList");
+ },
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.title == '新增'){
+ console.log("this.dataForm",this.dataForm)
+ const res = await addNotCoalPayCategory(this.dataForm);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '新增成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ const res = await updateNotCoalPayCategory(this.dataForm);
+ if(res.code == 200) {
+ this.$emit("getList");
+ this.dialogVisible = false;
+ this.$message({
+ type:'success',
+ message: '编辑成功'
+ })
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }
+ })
+
+ },
+ resetDataForm() {
+ this.dataForm = {
+ }
+ },
+ }
+}
+
+</script>
+<style scoped>
+.infoTitle{
+ margin-top:-10px;
+ margin-bottom:20px;
+ display: flex;
+ justify-content: space-around;
+ font-weight: 800;
+ font-size: 16px
+}
+
+</style>
diff --git a/src/views/specialOperationsPay/notCoalWorkType/index.vue b/src/views/specialOperationsPay/notCoalWorkType/index.vue
new file mode 100644
index 0000000..466a0d1
--- /dev/null
+++ b/src/views/specialOperationsPay/notCoalWorkType/index.vue
@@ -0,0 +1,226 @@
+<template>
+ <div class="app-container">
+ <el-row :gutter="10" class="mb8">
+ <el-radio-group v-model="queryParams.categoryType" @change="changeTimeStatus">
+ <el-radio-button>全部</el-radio-button>
+ <el-radio-button :label="1">理论</el-radio-button>
+ <el-radio-button :label="2">实操</el-radio-button>
+ </el-radio-group>
+ <el-select v-model="queryParams.districtCode" style="margin-left: 15px" placeholder="行政区划">
+ <el-option
+ v-for="item in areaList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.code">
+ </el-option>
+ </el-select>
+ <el-button
+ size="small"
+ type="primary"
+ style="margin-bottom: 10px;margin-left: 20px"
+ @click="handleQuery()"
+ >查询
+ </el-button>
+ <el-button
+ size="small"
+ type="primary"
+ style="margin-bottom: 10px"
+ @click="resetQuery()"
+ >重置
+ </el-button>
+ </el-row>
+ <el-row :gutter="10" class="mb8">
+ <el-button
+ type="primary"
+ plain
+ icon="el-icon-plus"
+ size="mini"
+ @click="handleView('add',{})"
+ v-hasPermi="['system:experts:add']"
+ >新增
+ </el-button>
+ </el-row>
+
+ <el-table
+ :data="cateGoryList"
+ style="width: 100%;margin-bottom: 20px;"
+ row-key="id"
+ :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+ <el-table-column label="地州" align="center" prop="districtName"/>
+ <el-table-column label="类别" align="center" prop="categoryType">
+ <template #default="scope">
+ {{scope.row.categoryType == 1?'理论':scope.row.categoryType == 2?'实操':''}}
+ </template>
+ </el-table-column>
+ <el-table-column label="科目名称" align="center" prop="subjectName" :show-overflow-tooltip="true"/>
+ <el-table-column label="关联资格类型" align="center" prop="operateTypeName" :show-overflow-tooltip="true"/>
+ <el-table-column label="金额(元)" align="center" prop="amount"/>
+ <el-table-column label="业务代码" align="center" prop="businessCode"/>
+ <el-table-column label="单位编码" align="center" prop="companyCode"/>
+ <el-table-column label="开票人" align="center" prop="drawer"/>
+ <el-table-column label="复核人" align="center" prop="reviewer"/>
+ <el-table-column label="开票单位社会信用代码" align="center" prop="invoicingCompanyCode"/>
+ <el-table-column label="描述" align="center" prop="describe"/>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+ <template #default="scope">
+ <el-button
+ v-if="scope.row.subjectName"
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleView('edit',scope.row)"
+ >编辑
+ </el-button>
+ <el-button
+ v-if="scope.row.subjectName"
+ size="mini"
+ type="text"
+ style="color: #f56c6c"
+ icon="el-icon-delete"
+ @click="handleDelete(scope.row)"
+ v-hasPermi="['system:experts:remove']"
+ >删除
+ </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"-->
+<!-- />-->
+ <detail-dialog ref="detailDialogRef" @getList="getList"></detail-dialog>
+ </div>
+</template>
+
+<script>
+import detailDialog from './components/detailDialog.vue'
+import {delNotCoalPayCategory, getNotCoalPayCategory} from '@/api/specialOperationsPay/notCoalPay'
+import Cookies from 'js-cookie'
+import {getAreaList} from "@/api/coalMine/placeManage/train";
+import {delTeacher} from "@/api/coalMine/teacher";
+
+export default {
+ name: "coalWorkType",
+ dicts: [],
+ components: {detailDialog},
+ data() {
+ return {
+ loading: false,
+ single: true,
+ multiple: true,
+ showSearch: true,
+ addForm: false,
+ total: 0,
+ expertTypes: [],
+ areaList: [],
+ cateGoryList: [],
+ queryParams: {
+ categoryType: null,
+ districtCode: ''
+ },
+ };
+ },
+ created() {
+ this.getList()
+ this.getArea()
+ },
+ methods: {
+ getList() {
+ this.loading = true;
+ getNotCoalPayCategory(this.queryParams).then((res) => {
+ if (res.code == 200) {
+ let totalList = []
+ if(Array.isArray(res.rows) && res.rows.length>0){
+ for(let item of res.rows){
+ if(!totalList.find(i=>i.districtName == item.districtName)){
+ totalList.push({
+ districtName: item.districtName,
+ id: '100' + item.id,
+ children: [item]
+ })
+ }else{
+ for(let i of totalList){
+ if(i.districtName == item.districtName){
+ i.children.push(item)
+ }
+ }
+ }
+ }
+ totalList.map(i=>{
+ if(i.children.length == 1){
+ for(let key in i.children[0]){
+ i[key] = i.children[0][key]
+ }
+ delete i.children
+ }
+ return i
+ })
+ }
+ this.cateGoryList = JSON.parse(JSON.stringify(totalList))
+ console.log(this.cateGoryList,'666')
+ this.total = res.total
+ this.loading = false;
+ }
+ })
+ },
+ async getArea() {
+ const res = await getAreaList();
+ if (res.code == 200) {
+ this.areaList = res.data;
+ }
+ },
+ changeTimeStatus(val) {
+ this.getList()
+ },
+
+ handleChange() {
+
+ },
+ handleQuery() {
+ this.getList()
+ },
+ resetQuery() {
+ this.queryParams = {
+ categoryType: null,
+ districtCode: ''
+ }
+ this.getList()
+ },
+ handleView(type,data) {
+ this.$refs.detailDialogRef.openDialog(type,data);
+ },
+ handleDelete(row){
+ this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const res = await delNotCoalPayCategory(row.id)
+ if(res.code == 200){
+ this.$message({
+ type: 'success',
+ message: '删除成功!'
+ });
+ await this.getList()
+ }else{
+ this.$message({
+ type: 'warning',
+ message: res.msg
+ });
+ }
+ }).catch(() => {
+
+ });
+ }
+ }
+};
+</script>
+
+<style scoped>
+.app-container /deep/ .el-table .tr-red {
+ color: red !important;
+}
+</style>
diff --git a/src/views/specialOperationsPay/singlePage/index.vue b/src/views/specialOperationsPay/singlePage/index.vue
new file mode 100644
index 0000000..71eaf4d
--- /dev/null
+++ b/src/views/specialOperationsPay/singlePage/index.vue
@@ -0,0 +1,477 @@
+<template>
+ <div class="container">
+ <div class="loginTop">
+ <div>新疆维吾尔自治区</div>
+ <div>特种作业缴费助手</div>
+ </div>
+ <div class="loginForm">
+ <el-form ref="dataForm" :model="dataForm" :rules="rules" label-position="right" label-width="80px">
+ <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-item label="类别" prop="type">
+ <el-select v-model="dataForm.type" placeholder="请选择">
+ <el-option key="1" label="非煤" :value="1"></el-option>
+ <el-option key="2" label="煤矿" :value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <div class="tipBox">
+ <span>提示:请使用报名时预留的手机号进行查询,如查询不到待缴费信息,请联系报名机构进行信息核实。</span>
+ </div>
+ <div class="btnBox">
+ <div @click="onSubmit">查询缴费项目</div>
+ </div>
+ </div>
+ <el-dialog
+ :title="dialogTitle"
+ :visible.sync="listVisible"
+ :modal-append-to-body="false"
+ fullscreen
+ class="myCustomDialog"
+ :before-close="handleClose"
+ >
+ <div v-if="hasInfo">
+ <div class="topInfo">
+ <el-row style="margin-bottom: 0">
+ <el-col :span="12">
+ <div><i class="el-icon-user-solid" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.name}}</div>
+ </el-col>
+ <el-col :span="12">
+ <div><i class="el-icon-phone" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.phone}}</div>
+ </el-col>
+ </el-row>
+ <div><i class="el-icon-s-finance" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.idCard}}</div>
+ </div>
+ <div v-if="this.dataForm.type == 1" class="feeList">
+ <div v-for="(item,index) in info.list" class="infoCard" :key="index">
+ <div>批次名称:<span class="cardCont">{{item.batchName }}</span></div>
+ <div>所属地区:<span class="cardCont">{{item.districtName }}</span></div>
+ <div>填报时间:<span class="cardCont">{{item.createTime}}</span></div>
+ <div>状态状态:
+ <el-tag v-if="item.payStatus == 0" type="danger" size="small">待缴费</el-tag>
+ <el-tag v-if="item.payStatus == 1" type="success" size="small">已缴费</el-tag>
+ </div>
+ <div v-if="item.nonCoalPayCategoryList && item.nonCoalPayCategoryList.find(i=>i.categoryType == 1)">
+ 理论应缴:
+ <span class="cardCont">{{item.nonCoalPayCategoryList.find(i=>i.categoryType == 1).categoryAmount }}元</span>
+ </div>
+ <div v-if="item.nonCoalPayCategoryList && item.nonCoalPayCategoryList.find(i=>i.categoryType == 2)">
+ 实操应缴:
+ <span class="cardCont">{{item.nonCoalPayCategoryList.find(i=>i.categoryType == 2).categoryAmount }}元</span>
+ </div>
+ <div>总计应缴:<span class="cardCont">{{ item.amount }}元</span></div>
+ <el-button style="margin-top: 5px" type="primary" size="small" v-if="item.payStatus == 0" @click="goPay(item)">去缴费</el-button>
+ <el-button style="margin-top: 5px" type="success" size="small" v-if="item.payStatus == 1" @click="checkTicket(item)">查看票据</el-button>
+ </div>
+ </div>
+ <div v-else class="feeList">
+ <div v-for="(item,index) in info.list" class="infoCard" :key="index">
+ <div>批次名称:<span class="cardCont" v-if="item.coalPays">{{item.coalPays.batchName }}</span></div>
+<!-- <div>所属地区:<span class="cardCont">{{item.districtName }}</span></div>-->
+ <div>填报时间:<span class="cardCont" v-if="item.coalPays">{{item.coalPays.createTime}}</span></div>
+ <div>状态状态:
+ <el-tag v-if="item.payStatus == 0" type="danger" size="small">待缴费</el-tag>
+ <el-tag v-if="item.payStatus == 1" type="success" size="small">已缴费</el-tag>
+ </div>
+ <div v-if="item.coalPays && item.coalPays.coalCategoryList && item.coalPays.coalCategoryList.find(i=>i.categoryType == 1)">
+ 理论应缴:
+ <span class="cardCont">{{item.coalPays.coalCategoryList.find(i=>i.categoryType == 1).amount }}元</span>
+ </div>
+ <div v-if="item.coalPays && item.coalPays.coalCategoryList && item.coalPays.coalCategoryList.find(i=>i.categoryType == 2)">
+ 实操应缴:
+ <span class="cardCont">{{item.coalPays.coalCategoryList.find(i=>i.categoryType == 2).amount }}元</span>
+ </div>
+ <div>总计应缴:<span class="cardCont" v-if="item.coalPays">{{ item.coalPays.amount }}元</span></div>
+ <el-button style="margin-top: 5px" type="primary" size="small" v-if="item.payStatus == 0" @click="goPay(item)">去缴费</el-button>
+ <el-button style="margin-top: 5px" type="success" size="small" v-if="item.payStatus == 1" @click="checkTicket(item)">查看票据</el-button>
+ </div>
+ </div>
+ </div>
+ <div class="noData" v-else>
+ <el-image style="width: 150px; height: 150px" :src="noData" fit="contain"></el-image>
+ <span>该用户暂无数据</span>
+ </div>
+ </el-dialog>
+ <el-dialog
+ title="缴费"
+ :visible.sync="detailVisible"
+ :modal-append-to-body="false"
+ fullscreen
+ class="myCustomDialog"
+ >
+ <div class="topInfo">
+ <el-row style="margin-bottom: 0">
+ <el-col :span="12">
+ <div><i class="el-icon-user-solid" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.name}}</div>
+ </el-col>
+ <el-col :span="12">
+ <div><i class="el-icon-phone" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.phone}}</div>
+ </el-col>
+ </el-row>
+ <div><i class="el-icon-s-finance" style="font-size: 20px;color: #0fc7f0;margin-right: 6px"></i>{{info.idCard}}</div>
+ </div>
+ <div v-if="this.dataForm.type == 1" class="feeDetail">
+ <div class="topDetail">
+ <div>批次名称:<span class="cardCont">{{detailInfo.batchName }}</span></div>
+ <div>所属地区:<span class="cardCont">{{detailInfo.districtName }}</span></div>
+ </div>
+ <div class="midDetail">
+ <div>类别:<span>{{ detailInfo.payType == 1?'初训理论':detailInfo.payType == 2?'初训实操':detailInfo.payType == 3?'初训理论与实操':detailInfo.payType == 4?'复训理论':'' }}</span></div>
+ <div>组织架构:<span>{{detailInfo.deptName }}</span></div>
+ <div v-if="detailInfo.nonCoalPayCategoryList && detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 1)">
+ 理论:
+ <span>{{detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 1).subjectName }}<span> {{detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 1).categoryAmount }} </span>元</span>
+ </div>
+ <div v-if="detailInfo.nonCoalPayCategoryList && detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 2)">
+ 实操:
+ <span>{{detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 2).subjectName }}<span> {{detailInfo.nonCoalPayCategoryList.find(i=>i.categoryType == 2).categoryAmount }} </span>元</span>
+ </div>
+ </div>
+ <div class="bottomDetail">
+ 应缴费金额:<span>{{detailInfo.amount}}</span>元
+ </div>
+ <div class="goPayBtn" @click="payBill()">立即缴费</div>
+ </div>
+ <div v-else class="feeDetail">
+ <div class="topDetail">
+ <div>批次名称:<span class="cardCont" v-if="detailInfo.coalPays">{{detailInfo.coalPays.batchName }}</span></div>
+ <!-- <div>所属地区:<span class="cardCont">{{detailInfo.districtName }}</span></div>-->
+ </div>
+ <div class="midDetail">
+ <div>类别:<span v-if="detailInfo.coalPays">{{ detailInfo.coalPays.payType == 1?'初训理论':detailInfo.coalPays.payType == 2?'初训实操':detailInfo.coalPays.payType == 3?'初训理论与实操':detailInfo.coalPays.payType == 4?'复训理论':'' }}</span></div>
+ <div>组织架构:<span v-if="detailInfo.coalPays">{{detailInfo.coalPays.deptName }}</span></div>
+ <div v-if="detailInfo.coalPays && detailInfo.coalPays.coalCategoryList && detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 1)">
+ 理论:
+ <span>{{detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 1).subjectName }}<span> {{detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 1).amount }} </span>元</span>
+ </div>
+ <div v-if="detailInfo.coalPays && detailInfo.coalPays.coalCategoryList && detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 2)">
+ 实操:
+ <span>{{detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 2).subjectName }}<span> {{detailInfo.coalPays.coalCategoryList.find(i=>i.categoryType == 2).amount }} </span>元</span>
+ </div>
+ </div>
+ <div class="bottomDetail">
+ 应缴费金额:<span v-if="detailInfo.coalPays">{{detailInfo.coalPays.amount}}</span>元
+ </div>
+ <div class="goPayBtn" @click="payBill()">立即缴费</div>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script >
+import {verifyIdCard, verifySimplePhone} from "@/utils/validate";
+import {nonCoalSelectH5} from "@/api/specialOperationsPay/notCoalPay";
+import {findStudent} from "@/api/specialOperationsPay/coalPay";
+import noData from '@/assets/images/noData.png'
+
+export default {
+ name: 'singlePage',
+ 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 {
+ dataForm: {
+ idCard: '320322199509262810',
+ phone: '15261806176',
+ type: 1
+ },
+ rules: {
+ idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
+ phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
+ },
+ dialogTitle: '',
+ listVisible: false,
+ info: {},
+ hasInfo: true,
+ detailVisible: false,
+ detailInfo: {},
+ noData
+ }
+ },
+ created() {
+
+ },
+ methods: {
+ onSubmit() {
+ this.$refs["dataForm"].validate( async valid => {
+ if (valid) {
+ if(this.dataForm.type == 1){
+ this.dialogTitle = '缴费项目查询--非煤'
+ const {type,...data} = this.dataForm
+ this.info = data
+ const res = await nonCoalSelectH5(data);
+ if(res.code == 200) {
+ if(res.data && Array.isArray(res.data) && res.data.length>0){
+ this.info.list = res.data
+ this.info.name = res.data[0].studentName
+ this.hasInfo = true
+ }else{
+ this.hasInfo = false
+ }
+ this.listVisible = true
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }else {
+ this.dialogTitle = '缴费项目查询--煤矿'
+ const {type,...data} = this.dataForm
+ this.info = data
+ const res = await findStudent(data);
+ if(res.code == 200) {
+ if(res.data && Array.isArray(res.data) && res.data.length>0){
+ this.info.list = res.data
+ this.info.name = res.data[0].name
+ this.hasInfo = true
+ }else{
+ this.hasInfo = false
+ }
+ this.listVisible = true
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.msg
+ })
+ }
+ }
+ }
+ })
+
+ },
+ goPay(item){
+ this.detailInfo = item
+ this.detailVisible = true
+ },
+ payBill(){
+ console.log('立即付款')
+ },
+ resetDataForm() {
+ this.dataForm = {
+ }
+ },
+ handleClose(){
+ this.info = {}
+ this.listVisible = false
+ }
+ }
+}
+
+</script>
+<style lang="scss" scoped>
+ .container{
+ width: 100%;
+ height: 100%;
+ }
+
+ .loginTop{
+ width: 100%;
+ height: 20%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ background: rgb(15,199,240);
+ color: #fff;
+ text-align: center;
+
+ div:first-of-type{
+ font-size: clamp(1.25rem, 1rem + 1.25vw, 2.5rem);
+ margin-bottom: 1rem;
+ }
+ div:last-of-type{
+ font-size: clamp(1.75rem, 1.1rem + 3.25vw, 5rem);
+ font-weight: 800;
+ }
+ }
+
+ .loginForm{
+ width: 100%;
+ height: 80%;
+ padding: 2rem 40px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: left;
+
+ .el-form{
+ width: 100%;
+
+ .el-select{
+ width: 100%;
+ }
+ }
+
+ .tipBox{
+ width: 100%;
+ padding: 20px;
+ font-size: 14px;
+ background: rgb(236,251,253);
+ color: rgb(15,199,240);
+ border-radius: 10px;
+ margin-top: 18px;
+ margin-bottom: 40px;
+ }
+ .btnBox{
+ width: 100%;
+
+ div{
+ background: rgb(15,199,240);
+ color: #fff;
+ border-radius: 10px;
+ padding: 10px 0;
+ text-align: center;
+ cursor: pointer;
+ font-size: clamp(1rem, 0.85rem + 0.75vw, 1.75rem);
+ }
+ }
+ }
+</style>
+<style lang="scss">
+ .myCustomDialog{
+ .el-dialog .el-dialog__header{
+ height: 60px;
+ padding: 0;
+ line-height: 60px;
+ background-color: rgb(15,199,240);
+ text-align: center;
+ .el-dialog__title{
+ color: #FFF;
+ }
+ .el-dialog__close{
+ color: #fff;
+ }
+ }
+ .el-dialog__body{
+ padding: 20px;
+ height: calc(100% - 60px);
+ .noData{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ span{
+ color: #999;
+ margin-top: 10px;
+ }
+ }
+
+ .topInfo{
+ width: 100%;
+ height: 90px;
+ font-size: 18px;
+ padding-bottom: 10px;
+ border-bottom: 1px solid #ccc;
+ background: #fff;
+ &>div{
+ margin-top: 10px;
+ }
+ }
+ .feeList{
+ width: 100%;
+ height: calc(100% - 90px);
+ overflow: hidden;
+ overflow-y: auto;
+
+ .infoCard{
+ padding: 15px 0;
+ border-bottom: 1px solid #e6e6e6;
+ &:last-of-type{
+ border-bottom: none;
+ }
+ &>div{
+ color: #999;
+ margin-bottom: 6px;
+ .cardCont{
+ color: #333;
+ }
+ }
+ }
+ }
+ .feeDetail{
+ .topDetail{
+ width: 100%;
+ padding: 20px;
+ font-size: 14px;
+ background: rgb(236,251,253);
+ color: #333;
+ border-radius: 10px;
+ margin: 20px 0;
+ div{
+ margin-bottom: 10px;
+ &:last-of-type{
+ margin-bottom: 0;
+ };
+ }
+ }
+ .midDetail{
+ width: 100%;
+ padding: 20px;
+ font-size: 14px;
+ background: rgb(251,248,231);
+ color: #333;
+ border-radius: 10px;
+ margin: 20px 0;
+ div{
+ margin-bottom: 10px;
+ &:last-of-type{
+ margin-bottom: 0;
+ };
+ &>span{
+ color: #0fc7f0;
+ span{
+ font-size: 18px;
+ font-weight: bolder;
+ color: rgb(219,120,14)
+ }
+ }
+ }
+ }
+ .bottomDetail{
+ width: 100%;
+ text-align: right;
+ span{
+ font-size: 40px;
+ color: rgb(240,69,2);
+ font-weight: bolder;
+ }
+ }
+ .goPayBtn{
+ margin-top: 20px;
+ background: rgb(5,185,23);
+ color: #fff;
+ border-radius: 10px;
+ padding: 10px 0;
+ text-align: center;
+ cursor: pointer;
+ font-size: clamp(1rem, 0.85rem + 0.75vw, 1.75rem);
+ }
+ }
+ }
+ }
+</style>
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index dd8f325..4b87c69 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -133,6 +133,20 @@
</el-row>
<el-row>
<el-col :span="12">
+ <el-form-item label="所辖行政区划" prop="districtCode">
+ <el-select v-model="form.districtCode" placeholder="请选择" style="width: 100%;" :disabled="disableChange">
+ <el-option
+ v-for="item in areaList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.code">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
@@ -162,6 +176,7 @@
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {getAreaList} from "@/api/coalMine/placeManage/train";
export default {
name: "Dept",
@@ -175,6 +190,7 @@
showSearch: true,
// 表格树数据
deptList: [],
+ areaList: [],
// 部门树选项
deptOptions: [],
// 弹出层标题
@@ -192,6 +208,7 @@
},
// 表单参数
form: {},
+ disableChange: false,
// 表单校验
rules: {
parentId: [
@@ -203,6 +220,7 @@
orderNum: [
{ required: true, message: "显示排序不能为空", trigger: "blur" }
],
+ districtCode: [{ required: true, message: "所属地区不能为空", trigger: "blur" }],
email: [
{
type: "email",
@@ -222,6 +240,7 @@
},
created() {
this.getList();
+ this.getArea()
},
methods: {
/** 查询部门列表 */
@@ -232,6 +251,14 @@
this.loading = false;
});
},
+
+ async getArea() {
+ const res = await getAreaList();
+ if(res.code == 200) {
+ this.areaList = res.data;
+ }
+ },
+
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
@@ -273,7 +300,18 @@
},
/** 新增按钮操作 */
handleAdd(row) {
+ console.log(row,'新增row')
this.reset();
+ if(row.deptId || row.districtCode){
+ if(row.districtCode && row.districtCode !== '65'){
+ this.form.districtCode = row.districtCode
+ this.disableChange = true
+ }else{
+ this.disableChange = false
+ }
+ }else{
+ this.disableChange = false
+ }
if (row != undefined) {
this.form.parentId = row.deptId;
}
@@ -296,6 +334,7 @@
this.reset();
getDept(row.deptId).then(response => {
this.form = response.data;
+ console.log(this.form,'form')
this.open = true;
this.title = "修改组织架构";
listDeptExcludeChild(row.deptId).then(response => {
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 02611be..cc9e96e 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -212,11 +212,6 @@
<el-input v-model="form.nickName" placeholder="请输入真实姓名" maxlength="30" />
</el-form-item>
</el-col>
-<!-- <el-col :span="12">-->
-<!-- <el-form-item label="归属部门" prop="deptId">-->
-<!-- <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />-->
-<!-- </el-form-item>-->
-<!-- </el-col>-->
</el-row>
<el-row :gutter="20">
<el-col :span="12">
@@ -303,16 +298,21 @@
</el-col>
</el-row>
<el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="所属地区">
- <el-select v-model="form.districtId" placeholder="请选择" style="width: 100%;">
- <el-option
- v-for="item in areaList"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- </el-option>
- </el-select>
+<!-- <el-col :span="12">-->
+<!-- <el-form-item label="所属地区">-->
+<!-- <el-select v-model="form.districtId" placeholder="请选择" style="width: 100%;">-->
+<!-- <el-option-->
+<!-- v-for="item in areaList"-->
+<!-- :key="item.id"-->
+<!-- :label="item.name"-->
+<!-- :value="item.id">-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+ <el-col :span="12" v-if="showDeptList">
+ <el-form-item label="组织架构" prop="deptId">
+ <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择组织架构" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -449,6 +449,7 @@
deptId: undefined
},
showInstitutuion: false,
+ showDeptList: false,
// 列信息
columns: [
{ key: 0, label: `用户编号`, visible: true },
@@ -473,6 +474,9 @@
],
institutionIds: [
{ required: true, message: "所属机构不能为空", trigger: "blur" }
+ ],
+ deptId: [
+ { required: true, message: "组织架构不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" },
@@ -588,6 +592,11 @@
},
getSections(val){
this.sectionOptions = []
+ if(val.indexOf(101)>-1){
+ this.showDeptList = true
+ }else{
+ this.showDeptList = false
+ }
if(val.indexOf(100)>-1 && val.indexOf(102)>-1){
this.getSectionList()
this.showInstitutuion = true
@@ -677,6 +686,9 @@
this.showInstitutuion = true
this.form.institutionIds = response.data.institutions.map(i=>i.institutionId.toString())
}
+ if(response.roleIds.indexOf(101)>-1){
+ this.showDeptList = true
+ }
});
},
/** 重置密码按钮操作 */
diff --git a/vue.config.js b/vue.config.js
index 0198408..91442d8 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,7 +36,7 @@
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://localhost:8080`,
- target: `http://192.168.0.41:8085`,
+ target: `http://192.168.2.42:8085`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
@@ -69,6 +69,22 @@
minRatio: 0.8 // 压缩率小于1才会压缩
})
],
+ module: {
+ rules: [
+ {
+ test: /\.(xlsx|xls)$/,
+ use: [
+ {
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]', // 保留原始文件名和扩展名
+ outputPath: 'assets', // 输出文件的文件夹路径,可以根据需要更改
+ },
+ },
+ ],
+ },
+ ],
+ }
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
--
Gitblit v1.9.2