From e735896a68d8c1742859a06d7bc1c7c1bb61f57d Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期四, 23 一月 2025 14:08:52 +0800 Subject: [PATCH] 新增页面 --- src/views/specialOperationsPay/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