settlementAudit.vue 12.5 KB
<template>
  <div class="app-container">
    <div class="from-Card">
      <el-form
        v-show="showSearch" ref="queryRef" :inline="true" :model="queryParams" label-position="top"
        size="small"
      >
        <el-row style="width: 100%;">
          <el-col :span="4">
            <el-form-item label="结算编号" prop="code">
              <el-input
                v-model.trim="queryParams.code"
                clearable
                placeholder="请输入结算编号"
                style="width: 100%;"
                @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="结算名称" prop="name">
              <el-input
                v-model.trim="queryParams.name"
                clearable
                placeholder="请输入结算名称"
                style="width: 100%;"
                @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="结算状态" prop="status">
              <el-select v-model="queryParams.status" clearable style="width: 100%;" @change="handleQuery">
                <el-option label="全部" value="" />
                <el-option label="待结算" value="1" />
                <el-option label="结算通过" value="2" />
                <el-option label="结算拒绝" value="3" />
                <el-option label="已结算" value="4" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="省级协会" prop="memName">
              <el-input
                v-model.trim="queryParams.memName"
                clearable
                placeholder="省级协会"
                style="width: 100%;"
                @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col v-if="!showCollect" :span="8" style="display: flex;">
            <el-form-item label="提交日期" prop="commitTimeRange" style="width: 100%;">
              <el-date-picker
                v-model="commitTimeRange[0]" placeholder="开始时间" style="width: 100%;"
                type="date" value-format="YYYY-MM-DD HH:mm:ss"
              />
            </el-form-item>
            <el-form-item label="提交日期" prop="commitTimeRange" style="width: 100%;">
              <el-date-picker
                v-model="commitTimeRange[1]" placeholder="结束时间" style="width: 100%;"
                type="date" value-format="YYYY-MM-DD HH:mm:ss"
              />
            </el-form-item>
          </el-col>
          <el-col v-if="!showCollect" :span="8" style="display: flex;">
            <el-form-item label="审核日期" prop="auditTimeRange" style="width: 100%;">
              <el-date-picker
                v-model="auditTimeRange[0]" placeholder="开始时间" style="width: 100%;"
                type="date" value-format="YYYY-MM-DD HH:mm:ss"
              />
            </el-form-item>
            <el-form-item label="审核日期" prop="auditTimeRange" style="width: 100%;">
              <el-date-picker
                v-model="auditTimeRange[1]" placeholder="结束时间" style="width: 100%;"
                type="date" value-format="YYYY-MM-DD HH:mm:ss"
              />
            </el-form-item>
          </el-col>
          <div class="po-r-btns">
            <el-button size="small" type="primary" @click="handleQuery">搜索</el-button>
            <el-button size="small" @click="resetQuery">重置</el-button>
            <el-button
              v-if="showCollect" icon="ArrowDown" link size="small" type="primary"
              @click="showCollect=!showCollect"
            >展开
            </el-button>
            <el-button
              v-else icon="ArrowUp" link size="small" type="primary"
              @click="showCollect=!showCollect"
            >收起
            </el-button>
          </div>
        </el-row>
      </el-form>
      <el-row justify="space-between">
        <div>
          <el-button :disabled="multiple" icon="Wallet" type="primary" @click="settleAll">批量审核
          </el-button>
          <!--          <el-button type="warning" :icon="Download" @click="handleExport">导出</el-button>-->
        </div>
      </el-row>
    </div>
    <div class="table">
      <el-table
        v-loading="loading" :data="infoList" :row-class-name="tableRowClassName" border
        @selection-change="handleSelectionChange"
      >
        <el-table-column :selectable="selectable" align="center" type="selection" width="40" />
        <el-table-column align="center" label="序号" type="index" width="55" />
        <el-table-column align="center" label="结算编号" min-width="120" prop="payCode">
          <template #default="{row}">
            <el-button link type="primary" @click="handelView(row)">{{ row.code }}</el-button>
          </template>
        </el-table-column>
        <el-table-column align="center" label="结算名称" min-width="230" prop="name" show-overflow-tooltip />
        <el-table-column
          align="center" label="结算单位" min-width="140" prop="memName"
          show-overflow-tooltip
        />
        <el-table-column align="center" label="考试人数" min-width="100" prop="personCount" />
        <el-table-column align="center" label="费用合计" min-width="100" prop="originPrice" />
        <el-table-column align="center" label="结算金额" min-width="100" prop="price" />
        <!--        <el-table-column label="上报单位" align="center" min-width="100" prop="totalAmount" />-->
        <!--        <el-table-column label="支付方式" align="center" min-width="100">-->
        <!--          民生付-->
        <!--        </el-table-column>-->
        <el-table-column align="center" label="结算状态" min-width="120" prop="verityStatusStr">
          <template #default="{row}">
            <span
              :class="{
                'text-success':row.status==='2',
                'text-danger':row.status==='3',
                'text-warning':row.status==='4'
              }"
            >{{ statusArr[row.status] }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="结算提交日期" min-width="120" prop="submitTime">
          <template #default="{row}">
            <span>{{ parseTime(row.commitTime, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column align="center" label="结算审核日期" min-width="120" prop="payTime">
          <template #default="{row}">
            <span>{{ parseTime(row.auditTime, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        
        <el-table-column align="center" label="发票" prop="" width="100">
          <template #default="{row}">
            <el-button v-if="row.fileUrl" link type="primary" @click="handelInvoice(row)">下载发票</el-button>
          </template>
        </el-table-column>
        <el-table-column
          align="center" label="备注" prop="auditReason" show-overflow-tooltip width="100"
        />
        <el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作" width="280">
          <template #default="{row}">
            <el-button type="primary" @click="handelDownload(row)">结算单</el-button>
            <el-button :disabled="row.status !== '1'" type="success" @click="handelAudit(row,0)">审核</el-button>
            <el-button :disabled="row.status !== '2'" type="warning" @click="handelSettlement(row,0)">结算</el-button>
          </template>
        </el-table-column>
      </el-table>
      
      <div v-show="total>0" class="totalCost">
        人数合计:<span>{{ statistical.personCount }} </span>
        费用合计:<span>{{ statistical.originPrice?.toFixed(2) }} </span>
        结算金额合计:<span>{{ statistical.price?.toFixed(2) }} </span>
      </div>
      
      <pagination
        v-show="total>0"
        v-model:limit="queryParams.pageSize"
        v-model:page="queryParams.pageNum"
        :total="total"
        @pagination="getList"
      />
    </div>
    
    <view-payment ref="viewPaymentRef" />
    <do-settlement ref="doSettlementRef" @approval="getList" />
    <settlementView ref="settlementViewRef" />
    <finalStatement ref="finalStatementRef" />
    <el-link
      v-show="false" ref="payCertRef" :href="fillImgUrl(currPayCert.url)" :underline="false"
      download="结算单" target="_blank"
    >{{ currPayCert.name }}
    </el-link>
  
  </div>
</template>

<script setup>
import { nextTick, onMounted, ref, toRefs, getCurrentInstance, reactive } from 'vue'
import { parseTime } from '@/utils/ruoyi'
import { settlementList, submit } from '@/api/exam/payment'
import ViewPayment from './components/paymentView'
import doSettlement from './components/doSettlement'
import _ from 'lodash'
import settlementView from './components/settlementView.vue'
import finalStatement from '@/views/exam/level/payment/components/finalStatement.vue'

import { dateEnd } from '@/utils/ruoyi'

const statusArr = ref(['未提交', '待审核', '待结算', '审核拒绝', '已结算'])
const { proxy } = getCurrentInstance()
const showCollect = ref(true)
const infoList = ref([])
const loading = ref(false)
const showSearch = ref(true)
const multiple = ref(true)
const total = ref(0)
const ids = ref()
const currPayCert = ref({})
const statistical = ref({})

const data = reactive({
  queryParams: {
    pageNum: 1,
    pageSize: 10,
    name: undefined,
    payCode: undefined,
    memName: undefined,
    status: '',
    examCodes: undefined,
    type: '1'
  },
  transcript: [],
  payId: undefined
})
const auditTimeRange = ref([null, null])
const commitTimeRange = ref([null, null])
const { queryParams } = toRefs(data)

onMounted(() => {
  getList()
})

// // 背景色
const tableRowClassName = ({ row }) => {
  if (row.status == '2') {
    return 'success-row'
  }
}


/** 查询考级信息列表 */
async function getList() {
  if (commitTimeRange.value[0] != null && commitTimeRange.value[1] != null) {
    commitTimeRange.value[1] = dateEnd(commitTimeRange.value[1])
    queryParams.value.commitTimeRange = commitTimeRange.value.toString()
  } else if (commitTimeRange.value[0] != null || commitTimeRange.value[1] != null) {
    return proxy.$modal.msgError('请完善提交日期')
  }
  
  if (auditTimeRange.value[0] != null && auditTimeRange.value[1] != null) {
    auditTimeRange.value[1] = dateEnd(auditTimeRange.value[1])
    queryParams.value.auditTimeRange = auditTimeRange.value.toString()
  } else if (auditTimeRange.value[0] != null || auditTimeRange.value[1] != null) {
    return proxy.$modal.msgError('请完善审核日期')
  }
  loading.value = true
  const res = await settlementList(queryParams.value)
  statistical.value = {
    price: 0,
    originPrice: 0,
    personCount: 0
  }
  infoList.value = res.rows
  total.value = res.total
  loading.value = false
  
  _.each(infoList.value, (info) => {
    statistical.value.price += (info.price * 1)
    statistical.value.originPrice += (info.originPrice * 1)
    statistical.value.personCount += (info.personCount * 1)
  })
}

/** 搜索按钮操作 */
function handleQuery() {
  queryParams.value.pageNum = 1
  getList()
}

function handelView(row) {
  proxy.$refs['settlementViewRef'].open(row)
}

// 多选框选中数据
function handleSelectionChange(selection) {
  ids.value = selection.map(item => item.id)
  multiple.value = !selection.length
}

function selectable(row) {
  return row.status == 1
}

/** 重置按钮操作 */
function resetQuery() {
  proxy.resetForm('queryRef')
  commitTimeRange.value = [null, null]
  auditTimeRange.value = [null, null]
  handleQuery()
}

// 审核
function handelAudit(row) {
  proxy.$refs['doSettlementRef'].open(row.id)
}

// 结算结算单
async function handelSettlement(row) {
  await proxy.$modal.confirm('是否确认结算?')
  await submit(row.id)
  await getList()
  proxy.$modal.msgSuccess('操作成功')
}

function handelDownload(row) {
  proxy.$refs['finalStatementRef'].open(row.id, '1')
}

function handelInvoice(row) {
  if (!row.fileUrl) return
  try {
    const invoice = JSON.parse(row.fileUrl)
    currPayCert.value = invoice[0]
    nextTick(() => {
      proxy.$refs['payCertRef'].$el.click()
    })
  } catch (e) {
    currPayCert.value = {}
    proxy.$modal.msgError('下载失败')
  }
}

// 批量结算
async function settleAll() {
  proxy.$refs['doSettlementRef'].open(ids.value)
}

</script>
<style lang="scss" scoped>

</style>