马宇豪
2025-03-04 509f1d71c91242b11fd287cfcdeafe3d19b2d807
src/views/specialOperationsPay/notCoalPay/index.vue
@@ -2,13 +2,13 @@
  <div class="app-container">
    <div>
      <el-button
        size="medium"
        style="margin-bottom: 10px;background-color: #0FC7F0;color: white"
        style="margin-right: 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"
        style="width: 300px"
        v-model="dateValue"
        @change="changeDate"
        type="daterange"
@@ -18,49 +18,66 @@
        start-placeholder="开始日期"
        end-placeholder="结束日期">
      </el-date-picker>
      <el-select v-model="queryParams.institutionId"  size="small" style="margin-left: 15px;" placeholder="请选择行政区划">
        <el-option
          v-for="item in districtList"
          :key="item.id"
          :label="item.institutionalName"
          :value="item.id">
        </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.districtCode" size="small" style="margin-left: 15px;margin-right: 15px" placeholder="行政区划">-->
<!--        <el-option-->
<!--          v-for="item in areaList"-->
<!--          :key="item.id"-->
<!--          :label="item.name"-->
<!--          :value="item.code">-->
<!--        </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" style="margin-left: 10px" :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">
          <el-tag type="success" v-if="scope.row.payPersonType == 1">个人</el-tag>
          <el-tag v-if="scope.row.payPersonType == 2">批量</el-tag>
          <el-button type="text" style="color:lightcoral;margin-left: 5px" @click="updatePayType(scope.row)" size="small" 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 && scope.row.payPersonType == 2 && (scope.row.havePayNum < scope.row.totalNum)" size="mini" type="text" style="color: #1890ff" @click="handleBatchPay(scope.row,'add')">批量缴费</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 +88,184 @@
      :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();
    const userInfo = store.getters && store.getters.userInfo
    this.districtCode = userInfo.district.districtCode
    if(userInfo.district.districtCode !== '65'){
      this.queryParams.districtCode = this.districtCode
    }else{
      this.queryParams.districtCode = ''
    }
    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.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,type) {
      this.$refs.batchPayRef.openDialog(val,type);
    },
    handleViewStu(val){
      this.$refs.stuDialogRef.openDialog(val);
    },
    handleQuery(){
    handleQuery() {
      this.queryParams.pageNum = 1
      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){
      if(row.totalNum < 2){
        this.$message({
          type: 'warning',
          message: '批量缴费人数不能小于二人'
        })
        return
      }
      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(() => {
      });