memberExport.vue 11.7 KB
<template>
  <div class="app-container">
    <div>
      <!-- 搜索区域 -->
      <div class="from-Card">
        <el-form
          ref="queryRef" size="small" :model="queryParams" :inline="true" label-width="auto"
          label-position="top"
        >
          <el-row style="width: 100%;">
            <el-col :span="4">
              <el-form-item label="缴费名称" prop="finalDocName">
                <el-input
                  v-model.trim="queryParams.finalDocName" placeholder="" clearable style="width: 100%;"
                  @keyup.enter="searchFN"
                />
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-form-item label="缴费编号" prop="sonWfCode">
                <el-input
                  v-model.trim="queryParams.sonWfCode" placeholder="" clearable style="width: 100%"
                  @keyup.enter="searchFN"
                />
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-form-item label="缴费单位" prop="payDeptName">
                <el-input
                  v-model.trim="queryParams.payDeptName" placeholder="" clearable style="width: 100%;"
                  @keyup.enter="searchFN"
                />
              </el-form-item>
            </el-col>

            <el-col :span="8" style="display: flex">
              <el-form-item style="width: 100%;" label="审核日期" prop="name">
                <el-date-picker
                  v-model="overDateRange[0]" type="date" value-format="YYYY-MM-DD HH:mm:ss"
                  placeholder="开始时间" style="width: 100%;"
                />
              </el-form-item>
              <el-form-item style="width: 100%;" label="审核日期" prop="name">
                <el-date-picker
                  v-model="overDateRange[1]" type="date" value-format="YYYY-MM-DD HH:mm:ss"
                  placeholder="结束时间" style="width: 100%;"
                  :default-time="defaultTime"
                />
              </el-form-item>
            </el-col>
            <el-col :span="4" style="min-width: 175px">
              <el-form-item label="&nbsp;" prop="auditTime">
                <el-button size="" type="primary" icon="Search" @click="searchFN">查询</el-button>
                <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
              </el-form-item>
            </el-col>
            <div class="po-r-btns">
              <!--              <el-button size="default" type="primary" icon="Search" @click="searchFN">查询</el-button>-->
              <!--              <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>-->
            </div>

          </el-row>
        </el-form>
        <el-row justify="end">

          <el-button :icon="Download" type="warning" @click="exportFN">导出</el-button>
        </el-row>
      </div>
      <!-- 表格数据 -->
      <div class="table">
        <el-table
          v-loading="loading" :data="list" :row-class-name="tableRowClassName" border
          style="width: 100%" @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="40" align="center" />
          <el-table-column type="index" label="序号" width="55" align="center" />
          <el-table-column label="缴费编号" align="center" prop="docCode" min-width="120" :show-overflow-tooltip="true" />
          <el-table-column
            label="缴费名称" align="center" prop="finalDocName" min-width="260"
            :show-overflow-tooltip="true"
          />
          <el-table-column label="缴费单位" align="center" prop="sourceMemberName" min-width="200" :show-overflow-tooltip="true" />
          <el-table-column label="人数合计" align="center" prop="personCount" min-width="160" :show-overflow-tooltip="true" />
          <el-table-column label="新会员合计" align="center" prop="newPersonCount" min-width="110" />
          <el-table-column label="年限合计" align="center" prop="yearCount" min-width="110" />
          <el-table-column label="费用合计" align="center" prop="fee" min-width="110" />

          <el-table-column label="提交日期" align="center" prop="" min-width="100">
            <template #default="scope">
              <span>{{ parseTime(scope.row.commitTime, '{y}-{m}-{d}') }}</span>
            </template>
          </el-table-column>
          <el-table-column label="审核日期" align="center" prop="" min-width="100">
            <template #default="scope">
              <span>{{ parseTime(scope.row.auditTime, '{y}-{m}-{d}') }}</span>
            </template>
          </el-table-column>

          <el-table-column align="center" min-width="100" fixed="right" label="操作">
            <template #default="scope">
              <div>
                <el-button type="primary" @click="handeView(scope.row)">查看</el-button>

              </div>
            </template>
          </el-table-column>
        </el-table>

        <div v-show="total>0" class="totalCost">
          人数合计:<span>{{ statistical.personCount }} </span>
          新会员: <span>{{ statistical.newCount }} </span>
          年限合计:<span>{{ statistical.yearsTotal }} </span>
          费用合计:<span>{{ statistical.totalCost?.toFixed(2) }} </span>
        </div>

        <pagination
          v-show="total > 0"
          v-model:page="queryParams.pageNum"
          v-model:limit="queryParams.pageSize"
          :total="total" @pagination="initData"
        />
      </div>
    </div>
    <!--文件上传-->
    <el-dialog
      v-if="showFileUpload" v-model="showFileUpload" draggable title="上传缴费凭证" width="600px"
      @close="close"
    >
      <el-form ref="refForm" :model="form" :rules="rules">
        <el-form-item label="缴费日期:" prop="payTime">
          <el-date-picker
            v-model="form.payTime" value-format="YYYY-MM-DD hh:mm:ss" type="datetime" placeholder="请选择缴费日期"
            style="width: 100%;"
          />
        </el-form-item>
        <el-form-item label="缴费凭证:" prop="url">
          <file-upload v-model="form.url" :file-type="arr" accept=".png,.jpg,.jpeg,.pdf,.zip" />
        </el-form-item>
        <el-form-item label="备注:" prop="remark">
          <el-input v-model="form.remark" :rows="4" type="textarea" />
        </el-form-item>
      </el-form>
      <template #footer>
        <el-row justify="center">
          <el-button type="primary" @click="uploadSure"> </el-button>
          <el-button @click="showFileUpload = false"> </el-button>
        </el-row>
      </template>
    </el-dialog>

    <feeBillView ref="feeBillViewRef" @approval="initData" />
    <bill ref="billRef" />
    <!-- 下载缴费凭证 -->
    <el-link v-show="false" ref="linkRef" :href="fillImgUrl(url)" :underline="false" target="_blank" />

    <viewView ref="viewViewRef" />
  </div>
</template>

<script setup>
import { getCurrentInstance, onMounted } from 'vue'
import { reactive } from '@vue/runtime-core'
import { ref, toRefs, computed } from 'vue'
import { Download, Wallet } from '@element-plus/icons-vue'
import { getList, commitPaymentVoucher, settle, unSettle, paymentDoc, listByDaoguan } from '@/api/member/feeBill.js'
import feeBillView from '@/views/member/feeBill/feeBillView.vue'
import viewView from '@/views/member/components/viewView.vue'
import useUserStore from '@/store/modules/user'
import bill from '@/views/member/feeBill//bill'
import { useRouter } from 'vue-router'
import { delPayment } from '/@/api/member/memberPay'
import { dateEnd } from '/@/utils/ruoyi'
const router = useRouter()
const deptType = computed(() => useUserStore().deptType)

const show = ref(true)
const showCollect = ref(true)
const { proxy } = getCurrentInstance()
const total = ref(0)
const showFileUpload = ref(false)
const list = ref([])
const lists = ref([])
const batchList = ref([])
const url = ref()
const statistical = ref({})
const arr = ['png', 'jpg', 'jpeg', 'pdf', 'zip']
const createTimeRange = ref([])
const payTimeRange = ref([])
const settleTimeRange = ref([])
const payFlag = ref()
const overDateRange = ref([null, null])
const loading = ref(false)
const defaultTime = ref(new Date(0, 0, 0, 23, 59, 59))
const data = reactive({
  queryParams: {
    pageNum: 1,
    pageSize: 10
    // auditStatus: '1'
  },
  form: {},
  rules: {
    payTime: { required: true, message: '请选择缴费日期', trigger: 'blur' },
    url: { required: true, message: '请上传缴费凭证', trigger: 'blur' }
  }
})
const { queryParams, form, rules } = toRefs(data)

onMounted(() => {
  initData()
})

function searchFN() {
  queryParams.value.pageNum = 1
  initData()
}

// // 背景色
const tableRowClassName = ({
  row,
  rowIndex
}) => {
  if (row.settleFlag == 0) {
    return 'success-row'
  }
}

// 获取赛会列表
async function initData() {
  if ((overDateRange.value[0] == null && overDateRange.value[1] != null) || (overDateRange.value[1] == null && overDateRange.value[0] != null)) return proxy.$modal.msgError('请完善审核日期')
  if (overDateRange.value[1])overDateRange.value[1] = dateEnd(overDateRange.value[1])
  queryParams.value.overDateRange = overDateRange.value.length == 2 && overDateRange.value[0] != null ? overDateRange.value?.toString() : null
  loading.value = true
  // queryParams.value.overDateRange = overDateRange.value?.toString()

  if (payFlag.value === '3') {
    queryParams.value.settleFlag = '0'
    queryParams.value.payFlag = undefined
  }
  if (payFlag.value === '') {
    queryParams.value.settleFlag = undefined
    queryParams.value.payFlag = undefined
  }
  if (payFlag.value === '0') {
    queryParams.value.payFlag = '0'
    queryParams.value.settleFlag = 1
  }
  if (payFlag.value === '1') {
    queryParams.value.payFlag = 1
    queryParams.value.settleFlag = 1
  }

  const res = await listByDaoguan(queryParams.value)
  statistical.value = {
    totalCost: 0,
    yearsTotal: 0,
    personCount: 0,
    newCount: 0
  }
  list.value = res.rows
  total.value = res.total
  list.value.forEach(item => {
    statistical.value.totalCost += (item.fee * 1)
    statistical.value.yearsTotal += (item.yearCount * 1)
    statistical.value.personCount += (item.personCount * 1)
    statistical.value.newCount += (item.newPersonCount * 1)
    item.memId = item.sourceMemberId
  })
  loading.value = false
}

// 上传缴费凭证确定
async function uploadSure() {
  console.log(form.value)
  proxy.$refs['refForm'].validate(async valid => {
    if (valid) {
      const res = await commitPaymentVoucher({
        docId: form.value.docId,
        payTime: form.value.payTime,
        url: JSON.stringify(form.value.url),
        remark: form.value.remark
      })
      if (res.code == 200) {
        showFileUpload.value = false
        initData()
        proxy.$modal.msgSuccess('操作成功')
      } else {
        proxy.$modal.msgError('操作失败')
      }
      console.log(res)
    } else {
      proxy.$modal.msgError('请完善信息')
    }
  })
}

// 多选
function handleSelectionChange(e) {
  lists.value = e.map(item => item.rangeId)
  batchList.value = e
  show.value = !lists.value.length
}

// 导出
function exportFN() {
  proxy.download('/person/paymentDoc/exportByDaoguan', {
    ...queryParams.value, ids: lists.value
  }, `个人会员缴费单${new Date().getTime()}.xlsx`)
}

// 重置
function resetQuery() {
  queryParams.value = {
    pageNum: 1,
    pageSize: 10,
    auditStatus: '1'
  }
  payFlag.value = ''
  settleTimeRange.value = []
  createTimeRange.value = []
  payTimeRange.value = []
  overDateRange.value = [null, null]
  initData()
}

function close() {
  form.value = {}
}


function handeView(row) {
  proxy.$refs['viewViewRef'].open(row, row.recordId, true)
}
</script>

<style lang="scss" scoped>
.router {
  margin-right: 20px;
}

.size {
  color: var(--el-button-text-color)
}
</style>