From 509f1d71c91242b11fd287cfcdeafe3d19b2d807 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期二, 04 三月 2025 11:11:46 +0800
Subject: [PATCH] 新增

---
 src/views/specialOperationsPay/coalPay/index.vue                            |   27 
 src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue      |   93 ++++
 src/views/system/dept/index.vue                                             |    8 
 src/views/specialOperationsPay/notCoalPay/components/batchPay.vue           |   23 +
 src/api/specialOperationsPay/coalPay.js                                     |   28 +
 src/views/onlineEducation/count/index.vue                                   |   35 +
 src/views/onlineEducation/learnRecord/index.vue                             |   80 ++++
 src/views/specialOperationsPay/notCoalCalculate/index.vue                   |  202 ++++++++++++
 .env.development                                                            |   12 
 src/assets/studentInfo.xlsx                                                 |    0 
 src/views/specialOperationsPay/coalCalculate/index.vue                      |  167 ++++++++++
 src/views/specialOperationsPay/coalPay/components/studentDialog.vue         |   96 +++++
 src/views/specialOperationsPay/singlePage/index.vue                         |    7 
 src/main.js                                                                 |    8 
 src/views/specialOperationsPay/notCoalWorkType/index.vue                    |    2 
 src/views/specialOperationsPay/notCoalPay/index.vue                         |   23 
 package.json                                                                |    3 
 src/views/specialOperationsPay/notCoalCalculate/components/detailDialog.vue |  138 ++++++++
 18 files changed, 863 insertions(+), 89 deletions(-)

diff --git a/.env.development b/.env.development
index f6cfc0f..9819f85 100644
--- a/.env.development
+++ b/.env.development
@@ -5,18 +5,18 @@
 ENV = 'development'
 
 # 若依管理系统/开发环境
-#黄镇
-#VUE_APP_BASE_API = 'http://192.168.0.47:8085/api'
+#新线上
+#VUE_APP_BASE_API = 'http://117.190.86.66:8581/api'
 
 #董
-#VUE_APP_BASE_API = 'http://192.168.2.24:8085/api'
+VUE_APP_BASE_API = 'http://192.168.2.24:8085/api'
 
-#孔
-#VUE_APP_BASE_API = 'http://192.168.2.15:8085/api'
+#贺
+#VUE_APP_BASE_API = 'http://192.168.2.11:8085/api'
 
 
 #线上
-VUE_APP_BASE_API = 'http://106.15.95.149:8086/api'
+#VUE_APP_BASE_API = 'http://106.15.95.149:8086/api'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
diff --git a/package.json b/package.json
index 66bd619..98e6085 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,8 @@
     "vue-print-nb": "^1.7.5",
     "vue-router": "3.4.9",
     "vuedraggable": "2.24.3",
-    "vuex": "3.6.0"
+    "vuex": "3.6.0",
+    "xlsx": "^0.18.5"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "4.4.6",
diff --git a/src/api/specialOperationsPay/coalPay.js b/src/api/specialOperationsPay/coalPay.js
index 3cef0f0..a1522ad 100644
--- a/src/api/specialOperationsPay/coalPay.js
+++ b/src/api/specialOperationsPay/coalPay.js
@@ -1,11 +1,11 @@
 import request from '@/utils/request'
 
 // 数据分页
-export function getCoalPayCategory(data) {
+export function getCoalPayCategory(query) {
   return request({
     url: '/pay/coalCategory/list',
-    method: 'post',
-    data: data
+    method: 'get',
+    params: query
   })
 }
 
@@ -37,11 +37,11 @@
 }
 
 // 缴费列表
-export function getCoalPayList(data) {
+export function getCoalPayList(query) {
   return request({
     url: '/pay/coalPay/list',
-    method: 'post',
-    data: data
+    method: 'get',
+    params: query
   })
 }
 
@@ -157,3 +157,19 @@
     params: query
   })
 }
+
+export function coalCount(query) {
+  return request({
+    url: '/pay/coalCategory/count',
+    method: 'get',
+    params: query
+  })
+}
+
+export function notCoalCount(query) {
+  return request({
+    url: '/pay/nonCoalCategory/count',
+    method: 'get',
+    params: query
+  })
+}
diff --git a/src/assets/studentInfo.xlsx b/src/assets/studentInfo.xlsx
index dd1c715..ce51d17 100644
--- a/src/assets/studentInfo.xlsx
+++ b/src/assets/studentInfo.xlsx
Binary files differ
diff --git a/src/main.js b/src/main.js
index 3625db9..1a8a6f8 100644
--- a/src/main.js
+++ b/src/main.js
@@ -40,6 +40,11 @@
 import '@/utils/filter'
 import '@/utils/validate'
 import Print from 'vue-print-nb'
+import FileSaver from 'file-saver'
+import * as XLSX from 'xlsx';
+//import XLSX from 'xlsx'  //无效导入,XLSX是undefined
+
+// 将excel表格模板设置全局
 
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
@@ -51,7 +56,8 @@
 Vue.prototype.selectDictLabels = selectDictLabels
 Vue.prototype.download = download
 Vue.prototype.handleTree = handleTree
-
+Vue.prototype.$FileSaver = FileSaver
+Vue.prototype.$XLSX = XLSX
 // 全局组件挂载
 Vue.component('DictTag', DictTag)
 Vue.component('Pagination', Pagination)
diff --git a/src/views/onlineEducation/count/index.vue b/src/views/onlineEducation/count/index.vue
index b9ee916..ba55738 100644
--- a/src/views/onlineEducation/count/index.vue
+++ b/src/views/onlineEducation/count/index.vue
@@ -51,13 +51,13 @@
         @click="resetQuery()"
       >重置</el-button>
     </div>
-    <el-table v-loading="loading" :data="expertList">
+    <el-table v-loading="loading" :data="expertList" show-summary :summary-method="getSummaries">
       <el-table-column label="平台" align="center" prop="institutionName" />
       <el-table-column label="培训总人数" align="center" prop="studentCount" />
       <el-table-column label="培训学时达标人数" align="center" prop="finishCount" />
       <el-table-column label="学时合格率" align="center" prop="classHourRate" />
-      <el-table-column label="考试总人数" align="center" prop="eaxmStudentCount" />
-      <el-table-column label="考试合格人数" align="center" prop="passCount" />
+      <el-table-column label="自测考试总人数" align="center" prop="eaxmStudentCount" />
+      <el-table-column label="自测考试合格人数" align="center" prop="passCount" />
       <el-table-column label="考试合格率" align="center" prop="passRate">
         <template #default="scope">
           <span>{{scope.row.passRate}}%</span>
@@ -195,8 +195,33 @@
       this.time = []
       this.getList()
     },
-    handleAdd(){
-
+    getSummaries(param) {
+      const { columns, data } = param
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '总计';
+          return
+        }
+        if (index === columns.length - 1) {
+          sums[index] = '--';
+          return
+        }
+        const values = data.map(item => Number(item[column.property]))
+        if (!values.every(value => isNaN(value))) {
+          sums[index] = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0)
+        } else {
+          sums[index] = '--';
+        }
+      })
+      return sums;
     }
   }
 };
diff --git a/src/views/onlineEducation/learnRecord/index.vue b/src/views/onlineEducation/learnRecord/index.vue
index 23d7d25..c998cc2 100644
--- a/src/views/onlineEducation/learnRecord/index.vue
+++ b/src/views/onlineEducation/learnRecord/index.vue
@@ -1,10 +1,49 @@
 <template>
   <div class="app-container">
-    <el-radio-group v-model="queryParams.status" style="margin-bottom: 10px;" @change="changeTimeStatus">
+    <el-radio-group v-model="queryParams.status" @change="changeTimeStatus" style="margin-bottom: 10px">
       <el-radio-button label="0">全部</el-radio-button>
       <el-radio-button label="2">异常记录</el-radio-button>
       <el-radio-button label="1">正常记录</el-radio-button>
     </el-radio-group>
+    <div style="margin-bottom: 10px">
+      <el-select v-model="queryParams.institutionId" placeholder="请选择平台" style="margin-right: 10px">
+        <el-option
+          v-for="item in platformList"
+          :key="item.id"
+          :label="item.institutionalName"
+          :value="item.id">
+        </el-option>
+      </el-select>
+      <el-input
+        v-model="queryParams.idcard"
+        placeholder="请输入身份证号"
+        clearable
+        style="width: 300px;margin-right: 10px"
+      />
+      <el-date-picker
+        v-model="dateValue"
+        value-format="yyyy-MM-dd HH:mm:ss"
+        type="datetimerange"
+        range-separator="-"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        style="width: 380px"
+      ></el-date-picker>
+      <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="expertList" :row-class-name="tableAddClass">
       <el-table-column label="记录编号" align="center" prop="id" />
       <el-table-column label="身份证号" align="center" prop="idcard" :show-overflow-tooltip="true" />
@@ -45,13 +84,13 @@
 import detailDialog from './components/detailDialog.vue'
 import { listRecord, listStudent } from '@/api/onlineEducation/student'
 import Cookies from 'js-cookie'
+import {listPlatSelect} from "@/api/onlineEducation/plat";
 export default {
   name: "nPeopleManage",
   dicts: [],
   components: { detailDialog},
   data() {
     return {
-
       loading: false,
       single: true,
       multiple: true,
@@ -60,24 +99,40 @@
       total: 0,
       expertTypes: [],
       expertList: [],
+      platformList: [],
+      dateValue: [],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
         status: 0,
+        institutionId: null,
+        idcard: '',
+        startTime: '',
+        endTime: ''
       },
     };
   },
   created() {
-      this.getList();
+      this.getList()
+      this.getPlat()
   },
   methods: {
     getList(){
-      this.loading = true;
+      this.loading = true
+      this.queryParams.startTime = this.dateValue[0]?this.dateValue[0]:''
+      this.queryParams.endTime = this.dateValue[1]?this.dateValue[1]:''
       listRecord( this.queryParams).then((res) => {
         if (res.code == 200) {
           this.expertList = res.rows
           this.total = res.total
-          this.loading = false;
+          this.loading = false
+        }
+      })
+    },
+    getPlat() {
+      listPlatSelect().then((res) => {
+        if (res.code == 200) {
+          this.platformList = res.data
         }
       })
     },
@@ -94,10 +149,21 @@
 
     },
     handleQuery(){
-
+      this.queryParams.pageNum = 1
+      this.getList();
     },
     resetQuery(){
-
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        status: 0,
+        institutionId: null,
+        idcard: '',
+        startTime: '',
+        endTime: ''
+      }
+      this.dateValue = []
+      this.getList()
     },
     handleView(data){
       this.$refs.detailDialogRef.openDialog(data);
diff --git a/src/views/specialOperationsPay/coalCalculate/index.vue b/src/views/specialOperationsPay/coalCalculate/index.vue
new file mode 100644
index 0000000..19fa9bb
--- /dev/null
+++ b/src/views/specialOperationsPay/coalCalculate/index.vue
@@ -0,0 +1,167 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-date-picker
+        v-model="queryParams.year"
+        type="year"
+        style="width: 300px"
+        value-format="yyyy"
+        placeholder="选择年">
+      </el-date-picker>
+      <el-select v-model="queryParams.quarter" placeholder="请选择季度" style="width: 300px;margin-left: 5px" clearable>
+        <el-option
+          v-for="item in quarterList"
+          :key="item.id"
+          :label="item.label"
+          :value="item.id">
+        </el-option>
+      </el-select>
+      <el-cascader v-model="queryParams.deptId" :show-all-levels="false" style="margin-left: 10px" filterable :options="deptOptions"
+                   placeholder="组织架构"
+                   :props="{ emitPath: false,value:'deptId',label: 'deptName' }"></el-cascader>
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        @click="handleQuery()"
+      >查询
+      </el-button>
+      <el-button
+        type="primary"
+        @click="resetQuery()"
+      >重置
+      </el-button>
+      <!--      <el-select v-model="queryParams.districtCode" placeholder="所辖行政区划" style="width: 100%;">-->
+      <!--        <el-option-->
+      <!--          v-for="item in areaList"-->
+      <!--          :key="item.id"-->
+      <!--          :label="item.name"-->
+      <!--          :value="item.code">-->
+      <!--        </el-option>-->
+      <!--      </el-select>-->
+    </div>
+
+    <el-table v-loading="loading" :data="dataList" style="margin-top: 20px" :row-class-name="tableAddClass">
+      <el-table-column label="工种类别" align="center" prop="subjectName"></el-table-column>
+      <el-table-column label="缴费人次" align="center" prop="num" :show-overflow-tooltip="true"/>
+      <el-table-column label="缴费标准" align="center" prop="amount">
+        <template #default="scope">
+          {{ scope.row.amount }}元/人次
+        </template>
+      </el-table-column>
+      <el-table-column label="总额" align="center" prop="totalMoney"/>
+      <el-table-column label="上缴费中央" align="center" prop="turnContent"/>
+      <el-table-column label="自治区级" align="center" prop="autonomy"/>
+      <!--      <el-table-column label="地(州、市级)" align="center" prop="describe" />-->
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import {
+  coalCount
+} from '@/api/specialOperationsPay/coalPay'
+import Cookies from 'js-cookie'
+import {listDept} from "@/api/system/dept";
+
+export default {
+  name: "coalCalculate",
+  dicts: [],
+  components: {},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      dataList: [],
+      deptOptions: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: '',
+        quarter: null,
+        deptId: null
+      },
+      total: 0,
+      quarterList: [
+        {
+          id: 1,
+          label: '第一季度'
+        },
+        {
+          id: 2,
+          label: '第二季度'
+        },
+        {
+          id: 3,
+          label: '第三季度'
+        },
+        {
+          id: 4,
+          label: '第四季度'
+        }
+      ]
+    };
+  },
+  created() {
+    this.getList()
+    this.getDeptTree()
+  },
+  methods: {
+    getList() {
+      this.loading = true;
+      coalCount(this.queryParams).then((res) => {
+        if (res.code == 200) {
+          this.dataList = res.rows
+          this.total = res.total
+          this.loading = false
+        }
+      })
+    },
+    getDeptTree() {
+      listDept({
+        deptName: undefined,
+        status: undefined
+      }).then(response => {
+        this.deptOptions = this.handleTree(response.data, "deptId")
+      })
+    },
+    changeStatus(val) {
+      this.getList()
+    },
+    tableAddClass({row, rowIndex}) {
+      if (row.difference < row.duration) {
+        return "tr-red";
+      }
+      return "";
+    },
+
+    handleQuery() {
+      this.getList();
+    },
+    resetQuery() {
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        year: '',
+        quarter: null,
+        deptId: null
+      }
+      this.getList()
+    },
+  }
+};
+</script>
+
+<style scoped>
+.app-container /deep/ .el-table .tr-red {
+  color: red !important;
+}
+</style>
diff --git a/src/views/specialOperationsPay/coalPay/components/studentDialog.vue b/src/views/specialOperationsPay/coalPay/components/studentDialog.vue
index 28a7602..d1f8f2e 100644
--- a/src/views/specialOperationsPay/coalPay/components/studentDialog.vue
+++ b/src/views/specialOperationsPay/coalPay/components/studentDialog.vue
@@ -24,12 +24,12 @@
         <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>
+              <span>{{stuInfo.coalCategoryList.find(i => i.categoryType == 1) && 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>
+              <span>{{stuInfo.coalCategoryList.find(i => i.categoryType == 2) && stuInfo.coalCategoryList.find(i => i.categoryType == 2).subjectName }}</span>
             </el-form-item>
           </el-col>
         </el-row>
@@ -75,18 +75,21 @@
       </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 style="margin: 20px 15px;display: flex;justify-content: space-between">
+        <div>
+          <el-button size="small"  type="primary" @click="handleAddStu('add',{})">添加学员</el-button>
+          <el-button size="small"  type="primary" @click="importDialog = true">批量导入</el-button>
+        </div>
+        <el-button type="text" @click="exportExcel">导出清单</el-button>
       </div>
-      <el-table v-loading="loading" :data="stuList">
+      <el-table v-loading="loading" :data="stuList" id="table_excel">
         <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?'女':'未知'}}
+            {{(parseInt(scope.row.idCard.substr(16, 1))) % 2 === 0 ? "女" : "男"}}
           </template>
         </el-table-column>
         <el-table-column label="财政缴款码" align="center" prop="payCode">
@@ -96,9 +99,11 @@
         </el-table-column>
         <el-table-column label="是否已缴" align="center" prop="payStatus">
           <template #default="scope">
-            {{scope.row.payStatus == 0?'未缴':scope.row.payStatus == 1?'已缴':'未缴'}}
+            <span v-if="scope.row.payStatus == 1" style="color: green">已缴</span>
+            <span v-else style="color: red">未缴</span>
           </template>
         </el-table-column>
+        <el-table-column label="培训机构" align="center" prop="train" />
         <el-table-column label="类别" align="center" prop="payType">
           <template #default="scope">
             {{scope.row.payType == 1?'个人':scope.row.payType == 2?'集体':'个人'}}
@@ -106,9 +111,10 @@
         </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>
+            <el-button size="mini" type="text" v-if="scope.row.payStatus == 1" style="color: #1890ff" @click="checkTicket">查看票据</el-button>
+            <el-button size="mini" type="text" v-if="scope.row.payStatus == 0" style="color: #1890ff" @click="goPay(scope.row)">去缴费</el-button>
+            <el-button size="mini" type="text" style="color: #1890ff" v-if="!(scope.row.payCode && scope.row.payCode!=='')" @click="handleAddStu('edit',scope.row)">修改</el-button>
+            <el-button size="mini" type="text" style="color:lightcoral" v-if="!(scope.row.payCode && scope.row.payCode!=='')" @click="handleDelete(scope.row)">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -137,6 +143,9 @@
             <el-radio :label="0">男</el-radio>
             <el-radio :label="1">女</el-radio>
           </el-radio-group>
+        </el-form-item>
+        <el-form-item label="培训机构:">
+          <el-input v-model.trim="dataForm.train"/>
         </el-form-item>
         <el-form-item label="身份证号:" prop="idCard">
           <el-input v-model.trim="dataForm.idCard"/>
@@ -202,7 +211,15 @@
 </template>
 <script>
 import {verifyIdCard, verifySimplePhone} from "@/utils/validate";
-import {addCoalPayStu, delCoalPayStu, editCoalPayStu, getCoalPayStudentList} from "@/api/specialOperationsPay/coalPay";
+import {
+  addCoalPayStu,
+  coalPersonPay,
+  delCoalPayStu,
+  editCoalPayStu,
+  getCoalPayStudentList
+} from "@/api/specialOperationsPay/coalPay";
+import * as XLSX from 'xlsx';
+import { saveAs } from 'file-saver';
 import exampleFile from '@/assets/studentInfo.xlsx'
 import {getToken} from "@/utils/auth";
 export default {
@@ -262,6 +279,38 @@
     };
   },
   methods: {
+    exportExcel() {
+      var xlsxParam = { raw: true }
+      let tables = document.getElementById('table_excel')
+      let clonedTable = tables.cloneNode(true); // 深度克隆
+      // 删除克隆表格中的最后一列
+      const allRows = clonedTable.querySelectorAll('tr');
+      allRows.forEach((row,index) => {
+        const cells = row.querySelectorAll('th,td');
+        if (cells.length > 0) {
+          if(index == 0){
+            row.removeChild(cells[cells.length - 2]); // 表头行要特殊处理
+          }else{
+            row.removeChild(cells[cells.length - 1]); // 移除最后一个单元格
+          }
+        }
+      })
+      let table_book = this.$XLSX.utils.table_to_book(clonedTable, xlsxParam);
+      const table_write = this.$XLSX.write(table_book, {
+        bookType: 'xlsx',
+        bookSST: true,
+        type: 'array'
+      });
+      try {
+        this.$FileSaver.saveAs(
+          new Blob([table_write], { type: 'application/octet-stream' }),
+          `${this.stuInfo.batchName}批次学员缴费清单.xlsx`
+        );
+      } catch (e) {
+        if (typeof console !== 'undefined') console.log(e, table_write);
+      }
+      return table_write
+    },
     openDialog(val) {
       this.stuInfo = val
       this.getStuList(this.stuInfo.id)
@@ -401,6 +450,29 @@
         }
       })
     },
+    checkTicket(){
+      window.open('http://finpt.xjcz.gov.cn/fs-public/index.do')
+    },
+    async goPay(item){
+      if(item.payCode && item.payCode !== ''){
+        window.open(`http://finpt.xjcz.gov.cn/fs-public/billQuery/findByOrderId.do?orderId=${item.orderId}&deviceType=1`)
+      }else{
+        const query = {
+          coalPayId: item.coalPayId,
+          studentId: item.id
+        }
+        const res = await coalPersonPay(query)
+        if(res.code == 200) {
+          window.open(`http://finpt.xjcz.gov.cn/fs-public/billQuery/findByOrderId.do?orderId=${res.msg}&deviceType=1`)
+        }else{
+          this.payLoading = false
+          this.$message({
+            type:'warning',
+            message: res.msg
+          })
+        }
+      }
+    },
     handleDelete(row){
       this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
         confirmButtonText: '确定',
diff --git a/src/views/specialOperationsPay/coalPay/index.vue b/src/views/specialOperationsPay/coalPay/index.vue
index 14c0a56..eca8d17 100644
--- a/src/views/specialOperationsPay/coalPay/index.vue
+++ b/src/views/specialOperationsPay/coalPay/index.vue
@@ -2,7 +2,6 @@
   <div class="app-container">
     <div>
       <el-button
-        size="medium"
         style="margin-bottom: 10px;background-color: #0FC7F0;color: white"
         @click="handleAdd('add',{})"
         v-if="isAhthority"
@@ -10,7 +9,6 @@
       </el-button>
       <el-date-picker
         style="margin-left: 30px;width: 300px"
-        size="small"
         v-model="dateValue"
         @change="changeDate"
         type="daterange"
@@ -20,16 +18,14 @@
         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-cascader v-model="queryParams.deptId" 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()"
@@ -53,11 +49,11 @@
           <span>{{scope.row.havePayNum}}</span>/{{scope.row.totalNum}}
         </template>
       </el-table-column>
-      <el-table-column label="学员个人缴费" align="center" prop="batchName">
+      <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>
+          <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" size="small" @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">
@@ -186,6 +182,13 @@
       this.getList()
     },
     updatePayType(row){
+      if(row.totalNum < 2){
+        this.$message({
+          type: 'warning',
+          message: '批量缴费人数不能小于二人'
+        })
+        return
+      }
       this.$confirm('一旦关闭则无法重新开启个人缴费,必须批量缴完剩余所有学员。是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
@@ -196,17 +199,17 @@
           this.$message({
             type: 'success',
             message: '删除成功!'
-          });
+          })
           await this.getList()
         }else{
           this.$message({
             type: 'warning',
             message: res.msg
-          });
+          })
         }
       }).catch(() => {
 
-      });
+      })
     },
 
     handleDelete(row){
diff --git a/src/views/specialOperationsPay/notCoalCalculate/components/detailDialog.vue b/src/views/specialOperationsPay/notCoalCalculate/components/detailDialog.vue
new file mode 100644
index 0000000..671eeb2
--- /dev/null
+++ b/src/views/specialOperationsPay/notCoalCalculate/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/notCoalCalculate/index.vue b/src/views/specialOperationsPay/notCoalCalculate/index.vue
new file mode 100644
index 0000000..b3a1a5d
--- /dev/null
+++ b/src/views/specialOperationsPay/notCoalCalculate/index.vue
@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <div>
+      <el-date-picker
+        v-model="queryParams.year"
+        type="year"
+        style="width: 300px"
+        value-format="yyyy"
+        placeholder="选择年">
+      </el-date-picker>
+      <el-select v-model="queryParams.quarter" placeholder="请选择季度" style="width: 300px;margin-left: 5px" clearable>
+        <el-option
+          v-for="item in quarterList"
+          :key="item.id"
+          :label="item.label"
+          :value="item.id">
+        </el-option>
+      </el-select>
+      <el-select v-model="queryParams.districtCode" placeholder="所辖行政区划" @change="changeDeptList" style="width: 300px;margin-left: 5px">
+        <el-option
+          v-for="item in areaList"
+          :key="item.id"
+          :label="item.name"
+          :value="item.code">
+        </el-option>
+      </el-select>
+      <el-cascader v-model="queryParams.deptId" style="margin-left: 10px" :show-all-levels="false" filterable :options="deptList" placeholder="组织架构"
+                   :props="{ emitPath: false,value:'deptId',label: 'deptName' }"></el-cascader>
+      <el-button
+        type="primary"
+        style="margin-left: 20px"
+        @click="handleQuery()"
+      >查询
+      </el-button>
+      <el-button
+        type="primary"
+        @click="resetQuery()"
+      >重置
+      </el-button>
+    </div>
+
+    <el-table v-loading="loading" :data="dataList" style="margin-top: 20px" :row-class-name="tableAddClass">
+      <el-table-column label="工种类别" align="center" prop="subjectName"></el-table-column>
+      <el-table-column label="缴费人次" align="center" prop="num" :show-overflow-tooltip="true"/>
+      <el-table-column label="缴费标准" align="center" prop="amount">
+        <template #default="scope">
+          {{ scope.row.amount }}元/人次
+        </template>
+      </el-table-column>
+      <el-table-column label="总额" align="center" prop="totalMoney"/>
+      <el-table-column label="上缴费中央" align="center" prop="turnContent"/>
+      <el-table-column label="自治区级" align="center" prop="autonomy"/>
+      <el-table-column label="地(州、市级)" align="center" prop="prefecuture"/>
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import {
+  notCoalCount
+} from '@/api/specialOperationsPay/coalPay'
+import Cookies from 'js-cookie'
+import {getAreaList} from "@/api/coalMine/placeManage/train";
+import {deptTreeSelect} from "@/api/system/user";
+import {listDept} from "@/api/system/dept";
+
+export default {
+  name: "notCoalCalculate",
+  dicts: [],
+  components: {},
+  data() {
+    return {
+      loading: false,
+      single: true,
+      multiple: true,
+      showSearch: true,
+      dataList: [],
+      areaList: [],
+      deptOptions: [],
+      deptList: [],
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        year: '',
+        quarter: null,
+        districtCode: '',
+        deptId: null
+      },
+      total: 0,
+      quarterList: [
+        {
+          id: 1,
+          label: '第一季度'
+        },
+        {
+          id: 2,
+          label: '第二季度'
+        },
+        {
+          id: 3,
+          label: '第三季度'
+        },
+        {
+          id: 4,
+          label: '第四季度'
+        }
+      ]
+    };
+  },
+  created() {
+    this.getList()
+    this.getArea()
+    this.getDeptTree()
+  },
+  methods: {
+    getList() {
+      this.loading = true
+      notCoalCount(this.queryParams).then((res) => {
+        if (res.code == 200) {
+          this.dataList = res.rows
+          this.total = res.total
+          this.loading = false
+        }
+      })
+    },
+    async getArea() {
+      const res = await getAreaList();
+      if (res.code == 200) {
+        this.areaList = res.data;
+      }
+    },
+    getDeptTree() {
+      listDept({
+        deptName: undefined,
+        status: undefined
+      }).then(response => {
+        this.deptOptions = this.handleTree(response.data, "deptId")
+        this.deptList = this.deptOptions
+      })
+    },
+    changeStatus(val) {
+      this.getList()
+    },
+    changeDeptList(){
+      const code = this.queryParams.districtCode
+      if(this.getListByCode(this.deptOptions,code)){
+        this.deptList = this.getListByCode(this.deptOptions,code)
+      }else{
+        this.deptList = this.deptOptions
+      }
+    },
+    tableAddClass({row, rowIndex}) {
+      if (row.difference < row.duration) {
+        return "tr-red";
+      }
+      return "";
+    },
+
+    handleQuery() {
+      this.getList();
+    },
+    resetQuery() {
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        year: '',
+        quarter: null,
+        districtCode: '',
+        deptId: null
+      }
+      this.getList()
+    },
+    getListByCode(tree,code){
+      for(let i of tree){
+        if(i.districtCode == code){
+          return i.children
+        }
+        if(i.children){
+          const foundList = this.getListByCode(i.children,code)
+          if(foundList){
+            return foundList
+          }
+        }
+      }
+      return null
+    }
+  }
+};
+</script>
+
+<style scoped>
+.app-container /deep/ .el-table .tr-red {
+  color: red !important;
+}
+</style>
diff --git a/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue b/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
index 0adfc96..e6f16d5 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
+++ b/src/views/specialOperationsPay/notCoalPay/components/batchPay.vue
@@ -30,7 +30,7 @@
 <script >
 import { verifySimplePhone } from '@/utils/validate'
 import {coalTeamPay} from "@/api/specialOperationsPay/coalPay";
-import {nonCoalTeamPay} from "@/api/specialOperationsPay/notCoalPay";
+import {nonCoalPersonPay, nonCoalTeamPay} from "@/api/specialOperationsPay/notCoalPay";
 
 export default {
   name: 'batchPay',
@@ -76,12 +76,21 @@
           if(this.dialogStatus == 'add'){
             const res = await nonCoalTeamPay(this.dataForm);
             if(res.code == 200) {
-              this.$emit("getList");
-              this.dialogVisible = false;
-              this.$message({
-                type:'success',
-                message: '提交成功'
-              })
+              this.$emit("getList")
+              this.dialogVisible = false
+              const query = {
+                id: this.dataForm.id,
+                payType: 2
+              }
+              const res = await nonCoalPersonPay(query)
+              if(res.code == 200) {
+                window.open(`http://finpt.xjcz.gov.cn/fs-public/billQuery/findByOrderId.do?orderId=${res.msg}&deviceType=1`)
+              }else{
+                this.$message({
+                  type:'warning',
+                  message: res.msg
+                })
+              }
             }else{
               this.$message({
                 type:'warning',
diff --git a/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue b/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
index d9872de..fff6fdf 100644
--- a/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
+++ b/src/views/specialOperationsPay/notCoalPay/components/studentDialog.vue
@@ -26,12 +26,12 @@
         <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.nonCoalPayCategoryList.find(i=>i.categoryType == 1).subjectName}}</span>
+              <span>{{stuInfo.nonCoalPayCategoryList.find(i => i.categoryType == 1) && stuInfo.nonCoalPayCategoryList.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.nonCoalPayCategoryList.find(i=>i.categoryType == 2).subjectName}}</span>
+              <span>{{stuInfo.nonCoalPayCategoryList.find(i => i.categoryType == 2) && stuInfo.nonCoalPayCategoryList.find(i => i.categoryType == 2).subjectName }}</span>
             </el-form-item>
           </el-col>
         </el-row>
@@ -77,18 +77,21 @@
       </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 style="margin: 20px 15px;display: flex;justify-content: space-between">
+        <div>
+          <el-button size="small" type="primary" @click="handleAddStu('add',{})">添加学员</el-button>
+          <el-button size="small" type="primary" @click="importDialog = true">批量导入</el-button>
+        </div>
+        <el-button type="text" @click="exportExcel">导出清单</el-button>
       </div>
-      <el-table v-loading="loading" :data="stuList">
+      <el-table v-loading="loading" :data="stuList" id="table_excel">
         <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?'女':'未知'}}
+            {{(parseInt(scope.row.idCard.substr(16, 1))) % 2 === 0 ? "女" : "男"}}
           </template>
         </el-table-column>
         <el-table-column label="财政缴款码" align="center" prop="payCode">
@@ -98,9 +101,11 @@
         </el-table-column>
         <el-table-column label="是否已缴" align="center" prop="payStatus">
           <template #default="scope">
-            {{scope.row.payStatus == 0?'未缴':scope.row.payStatus == 1?'已缴':''}}
+            <span v-if="scope.row.payStatus == 1" style="color: green">已缴</span>
+            <span v-else style="color: red">未缴</span>
           </template>
         </el-table-column>
+        <el-table-column label="培训机构" align="center" prop="train" />
         <el-table-column label="类别" align="center" prop="payType">
           <template #default="scope">
             {{scope.row.payType == 1?'个人':scope.row.payType == 2?'集体':''}}
@@ -108,9 +113,10 @@
         </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>
+            <el-button size="mini" type="text" v-if="scope.row.payStatus == 1" style="color: #1890ff" @click="checkTicket">查看票据</el-button>
+            <el-button size="mini" type="text" v-if="scope.row.payStatus == 0" style="color: #1890ff" @click="goPay(scope.row)">去缴费</el-button>
+            <el-button size="mini" type="text" style="color: #1890ff" v-if="!(scope.row.payCode && scope.row.payCode!=='')" @click="handleAddStu('edit',scope.row)">修改</el-button>
+            <el-button size="mini" type="text" style="color:lightcoral" v-if="!(scope.row.payCode && scope.row.payCode!=='')" @click="handleDelete(scope.row)">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -139,6 +145,9 @@
             <el-radio :label="0">男</el-radio>
             <el-radio :label="1">女</el-radio>
           </el-radio-group>
+        </el-form-item>
+        <el-form-item label="培训机构:">
+          <el-input v-model.trim="dataForm.train"/>
         </el-form-item>
         <el-form-item label="身份证号:" prop="idCard">
           <el-input v-model.trim="dataForm.idCard"/>
@@ -205,15 +214,18 @@
 <script>
 
 
-import {verifyIdCard, verifySimplePhone} from "@/utils/validate";
+import {verifyIdCard, verifySimplePhone} from "@/utils/validate"
+import * as XLSX from 'xlsx';
+import { saveAs } from 'file-saver';
 import {
   addNonCoalStu, delNonCalStu, delNonCoalPay,
   editNonCoalStu,
   getNonCoalPayStudents,
-  getPayTypeInfo
+  getPayTypeInfo, nonCoalPersonPay
 } from "@/api/specialOperationsPay/notCoalPay";
 import exampleFile from '@/assets/studentInfo.xlsx'
 import {getToken} from "@/utils/auth";
+import {coalPersonPay} from "@/api/specialOperationsPay/coalPay";
 export default {
   name: 'addStu',
   components: {},
@@ -270,6 +282,38 @@
     };
   },
   methods: {
+    exportExcel() {
+      var xlsxParam = { raw: true }
+      let tables = document.getElementById('table_excel')
+      let clonedTable = tables.cloneNode(true); // 深度克隆
+      // 删除克隆表格中的最后一列
+      const allRows = clonedTable.querySelectorAll('tr');
+      allRows.forEach((row,index) => {
+        const cells = row.querySelectorAll('th,td');
+        if (cells.length > 0) {
+          if(index == 0){
+            row.removeChild(cells[cells.length - 2]); // 表头行要特殊处理
+          }else{
+            row.removeChild(cells[cells.length - 1]); // 移除最后一个单元格
+          }
+        }
+      })
+      let table_book = this.$XLSX.utils.table_to_book(clonedTable, xlsxParam);
+      const table_write = this.$XLSX.write(table_book, {
+        bookType: 'xlsx',
+        bookSST: true,
+        type: 'array'
+      });
+      try {
+        this.$FileSaver.saveAs(
+          new Blob([table_write], { type: 'application/octet-stream' }),
+          `${this.stuInfo.batchName}批次学员缴费清单.xlsx`
+        );
+      } catch (e) {
+        if (typeof console !== 'undefined') console.log(e, table_write);
+      }
+      return table_write
+    },
     openDialog(id) {
       this.getStuList(id)
       this.id = id
@@ -292,7 +336,6 @@
         const {id,nonCoalPayId,name,idCard,sex,phone} = data
         this.dataForm = {id,nonCoalPayId,name,idCard,sex,phone}
       }
-      console.log(this.dataForm,'form')
       this.dialogStatus = type
     },
 
@@ -395,6 +438,28 @@
         }
       })
     },
+    checkTicket(){
+      window.open('http://finpt.xjcz.gov.cn/fs-public/index.do')
+    },
+    async goPay(item){
+      if(item.payCode && item.payCode !== ''){
+        window.open(`http://finpt.xjcz.gov.cn/fs-public/billQuery/findByOrderId.do?orderId=${item.orderId}&deviceType=1`)
+      }else{
+        const query = {
+          id: item.id,
+          payType: 1
+        }
+        const res = await nonCoalPersonPay(query)
+        if(res.code == 200) {
+          window.open(`http://finpt.xjcz.gov.cn/fs-public/billQuery/findByOrderId.do?orderId=${res.msg}&deviceType=1`)
+        }else{
+          this.$message({
+            type:'warning',
+            message: res.msg
+          })
+        }
+      }
+    },
     handleDelete(row){
       this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', {
         confirmButtonText: '确定',
diff --git a/src/views/specialOperationsPay/notCoalPay/index.vue b/src/views/specialOperationsPay/notCoalPay/index.vue
index 1a54724..224d544 100644
--- a/src/views/specialOperationsPay/notCoalPay/index.vue
+++ b/src/views/specialOperationsPay/notCoalPay/index.vue
@@ -2,7 +2,6 @@
   <div class="app-container">
     <div>
       <el-button
-        size="medium"
         style="margin-right: 10px;background-color: #0FC7F0;color: white"
         @click="handleAdd('add',{})"
         v-if="isAhthority"
@@ -10,7 +9,6 @@
       </el-button>
       <el-date-picker
         style="width: 300px"
-        size="small"
         v-model="dateValue"
         @change="changeDate"
         type="daterange"
@@ -37,16 +35,14 @@
 <!--        </el-option>-->
 <!--      </el-select>-->
 <!--      <treeselect v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择组织架构" />-->
-      <el-cascader v-model="queryParams.deptId" size="small" style="margin-left: 10px" :options="deptOptions" placeholder="组织架构" :props="{ expandTrigger: 'hover',checkStrictly: true,emitPath: false,value: 'id' }"></el-cascader>
+      <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
-        size="small"
         type="primary"
         style="margin-bottom: 10px"
         @click="resetQuery()"
@@ -70,11 +66,11 @@
           <span>{{scope.row.havePayNum}}</span>/{{scope.row.totalNum}}
         </template>
       </el-table-column>
-      <el-table-column label="学员个人缴费" align="center" prop="batchName">
+      <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>
+          <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">
@@ -162,7 +158,6 @@
   methods: {
     getList() {
       this.loading = true;
-      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) => {
@@ -204,6 +199,7 @@
       this.$refs.batchPayRef.openDialog(val,type);
     },
     handleQuery() {
+      this.queryParams.pageNum = 1
       this.getList();
     },
     resetQuery() {
@@ -221,6 +217,13 @@
       this.getList();
     },
     updatePayType(row){
+      if(row.totalNum < 2){
+        this.$message({
+          type: 'warning',
+          message: '批量缴费人数不能小于二人'
+        })
+        return
+      }
       this.$confirm('一旦关闭则无法重新开启个人缴费,必须批量缴完剩余所有学员。是否继续?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
diff --git a/src/views/specialOperationsPay/notCoalWorkType/index.vue b/src/views/specialOperationsPay/notCoalWorkType/index.vue
index c458da1..a73de84 100644
--- a/src/views/specialOperationsPay/notCoalWorkType/index.vue
+++ b/src/views/specialOperationsPay/notCoalWorkType/index.vue
@@ -22,14 +22,12 @@
 <!--        </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()"
diff --git a/src/views/specialOperationsPay/singlePage/index.vue b/src/views/specialOperationsPay/singlePage/index.vue
index 339f274..010e7df 100644
--- a/src/views/specialOperationsPay/singlePage/index.vue
+++ b/src/views/specialOperationsPay/singlePage/index.vue
@@ -65,7 +65,7 @@
             </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>
+            <el-button style="margin-top: 5px" type="success" size="small" v-if="item.payStatus == 1" @click="checkTicket()">查看票据</el-button>
           </div>
         </div>
         <div v-else class="feeList">
@@ -87,7 +87,7 @@
             </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>
+            <el-button style="margin-top: 5px" type="success" size="small" v-if="item.payStatus == 1" @click="checkTicket()">查看票据</el-button>
           </div>
         </div>
       </div>
@@ -327,6 +327,9 @@
         }
       }
     },
+    checkTicket(){
+      window.open('http://finpt.xjcz.gov.cn/fs-public/index.do')
+    },
     resetDataForm() {
       this.dataForm = {
       }
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index 46d38d1..acd5c4c 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -57,18 +57,18 @@
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
       <el-table-column prop="deptName" label="组织架构名称"></el-table-column>
-      <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
-      <el-table-column prop="status" label="状态" width="200">
+      <el-table-column prop="orderNum" label="排序" width="50"></el-table-column>
+      <el-table-column prop="status" label="状态" width="70">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column label="创建时间" align="center" prop="createTime" width="200">
+      <el-table-column label="创建时间" align="center" prop="createTime" width="160">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding" width="200">
+      <el-table-column label="操作" align="center" class-name="small-padding" width="160">
         <template slot-scope="scope">
           <el-button
             size="mini"

--
Gitblit v1.9.2