send.vue 9.6 KB
<template>
  <div class="app-container">

    <div class="from-Card">
      <el-form
        v-show="showSearch" ref="queryRef" size="small" :model="queryParams" :inline="true"
        label-position="top"
      >
        <el-row style="width: 100%;">
          <el-col :span="4">
            <el-form-item label="结算编号" prop="payCode">
              <el-input
                v-model="queryParams.payCode" placeholder="请输入结算编号" clearable
                @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item :label="queryParams.type == '1' ? '考级名称' : '考段名称'" prop="name">
              <el-input
                v-model="queryParams.name" :placeholder="queryParams.type == '1' ? '请输入考级名称' : '请输入考段名称'"
                clearable @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="证书是否发送" prop="certStatus">
              <el-select
                v-model="queryParams.certStatus" style="width: 100%;" clearable placeholder=""
                @change="handleQuery"
              >
                <el-option label="全部" value="" />
                <el-option label="已发放" value="2" />
                <el-option label="部分发放" value="1" />
                <el-option label="未发放" value="0" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="申请单位" prop="memberName">
              <el-input
                v-model="queryParams.memberName" placeholder="请输入申请单位" clearable
                @keyup.enter="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8" :hidden="showCollect">
            <el-form-item label="证书发送日期" prop="certTimeRange">
              <el-date-picker
                v-model="queryParams.certTimeRange" clearable type="daterange" range-separator="至"
                start-placeholder="开始时间" end-placeholder="结束时间" value-format="YYYY-MM-DD" style="width: 460px;"
                @change="handleQuery"
              />
            </el-form-item>
          </el-col>
          <el-col :span="4" :hidden="showCollect">
            <el-form-item label="占位" style="opacity: 0" />
          </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" size="small" type="primary" link icon="ArrowDown"
              @click="showCollect = !showCollect"
            >展开</el-button>
            <el-button
              v-else size="small" type="primary" link icon="ArrowUp"
              @click="showCollect = !showCollect"
            >收起</el-button>
          </div>
        </el-row>


      </el-form>
      <el-row justify="space-between">
        <div>
          <el-button type="primary" :icon="Position" :disabled="multiple" @click="handleSendAll">批量生成证书</el-button>
          <el-button :icon="Download" type="success" :disabled="multiple" @click="handleDownloadAll">批量下载证书</el-button>
          <!--          <el-button size="small" type="warning" @click="handleExport">导出</el-button>-->
        </div>

      </el-row>
    </div>

    <!-- <el-row :gutter="10" class="mb8">
      <el-col :span="1.5" />
      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" />
    </el-row> -->
    <div class="table">
      <el-table v-loading="loading" border :data="infoList" @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55" align="center" :selectable="selectable" />
        <el-table-column type="index" width="55" align="center" label="序号" />
        <el-table-column label="结算编号" align="center" prop="payCode" min-width="120" />
        <el-table-column
          :label="queryParams.type == '1' ? '考级名称' : '考段名称'" align="center" prop="name" min-width="220"
          :show-overflow-tooltip="true"
        />
        <el-table-column label="申请单位" align="center" prop="memberName" min-width="100" :show-overflow-tooltip="true" />
        <!--        <el-table-column label="申请日期" align="center" prop="applyTime" min-width="100">-->
        <!--          <template #default="scope">-->
        <!--            <span>{{ parseTime(scope.row.applyTime, '{y}-{m}-{d}') }}</span>-->
        <!--          </template>-->
        <!--        </el-table-column>-->
        <el-table-column label="已发证书" min-width="90" align="center" prop="hasCerts" />
        <el-table-column label="待发证书" min-width="90" align="center" prop="noCerts" />
        <el-table-column label="提交日期" min-width="100" align="center" prop="submitTime">
          <template #default="scope">
            <span>{{ parseTime(scope.row.submitTime, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="证书是否已发" min-width="110" align="center" prop="certStatusStr" />
        <el-table-column label="证书发送时间" min-width="110" align="center" prop="certTime">
          <template #default="scope">
            <span>{{ parseTime(scope.row.certTime, '{y}-{m}-{d}') }}</span>
          </template>
        </el-table-column>
        <el-table-column width="200" label="操作" fixed="right" align="center">
          <template #default="scope">
            <el-button type="primary" @click="handleCert(scope.row)">查看</el-button>
            <el-button
              :disabled="scope.row.certStatus == '2'" color="#13B5B1" style="--el-color-black:#fff;"
              @click="handleSend(scope.row)"
            >一键生成</el-button>
          </template>
        </el-table-column>
      </el-table>

      <pagination
        v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
        :total="total" @pagination="getList"
      />
    </div>


    <exam-view ref="examRef" @send-cert="getList" />
  </div>
</template>

<script setup name="Level_Cert">
import { getCurrentInstance, reactive } from '@vue/runtime-core'
import { onMounted, ref, toRefs } from 'vue'
import { parseTime } from '@/utils/ruoyi'
import { certsLList, submitCert } from '@/api/exam/cert'
import ExamView from './examList.vue'
import { useRoute, useRouter } from 'vue-router'
import _ from 'lodash'

const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
import { Download, Position } from '@element-plus/icons-vue'
const batchList = ref([])
const showCollect = ref(true)
const infoList = ref([])
const loading = ref(true)
const showSearch = ref(true)
const multiple = ref(true)
const total = ref(0)
let ids = []


const data = reactive({
  queryParams: {
    pageNum: 1,
    pageSize: 10,
    name: undefined,
    memberName: undefined,
    examiner: undefined,
    applyTimeRange: undefined,
    certTimeRange: undefined,
    certStatus: undefined
    // type: '1'
  }
})
const { queryParams } = toRefs(data)


onMounted(() => {
  if (route.path.indexOf('level') > -1) {
    queryParams.value.type = '1'
  } else if (route.path.indexOf('rank') > -1) {
    queryParams.value.type = '2'
  } else if (route.path.indexOf('beyond') > -1) {
    queryParams.value.type = '3'
  }

  getList()
})

function selectable(row) {
  return row.certStatus != '9'
}

/** 查询考级信息列表 */
function getList() {
  loading.value = true
  certsLList(queryParams.value).then(response => {
    infoList.value = response.rows
    total.value = response.total
    loading.value = false
  })
}

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

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

/** 重置按钮操作 */
function resetQuery() {
  proxy.resetForm('queryRef')
  handleQuery()
}

/**
 * 一键发送
 */

function handleSend(row) {
  proxy.$modal.confirm(`确定一键下发 ${row.name} 的证书?`)
    .then(() => {
      submitCert([{
        id: row.payId
      }]).then(() => {
        proxy.$modal.msgSuccess('下发成功')
        getList()
      })
    })
}

function handleSendAll() {
  proxy.$modal.confirm(queryParams.value.type == '1' ? `确定下发选中考级的证书?` : `确定下发选中考段的证书?`)
    .then(() => {
      const params = []
      _.each(ids, (id) => {
        params.push({
          id: id
        })
      })
      submitCert(params).then(() => {
        proxy.$modal.msgSuccess('下发成功')
        getList()
      })
    })
}

/**
 * 学生列表
 */
function handleCert(row) {
  proxy.$refs['examRef'].open(row, queryParams.value.type)
}


function handleExport() {
  proxy.download('/exam/payment/certsList/export', {
    ...queryParams.value
  }, `考试证书${new Date().getTime()}.xlsx`)
}

function handleDownloadAll() {
  if (ids.length <= 0) return proxy.msgError('请选择考试')
  // batchList
  const flag = batchList.value.some(item => {
    if (item.certStatus != 2) {
      return proxy.$message.warning(`考级名称为”${item.name}“的数据项未发放证书!`)
    }
  })
  if (flag) return
  const routerData = router.resolve({
    path: '/download',
    query: {
      arr: ids,
      type: 'examCert'
    }
  })
  window.open(routerData.href, '_blank')
}

</script>

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