transferMember.vue 11.1 KB
<template>
  <div class="box">
    <el-form
      ref="infoRef" size="small" label-width="100px" :model="form" :rules="rules"
      style="width: 1000px;"
    >
      <!-- <el-form-item label="会员调动名称:" prop="">
        <el-input v-model="form.Dname" disabled style="width: 500px;" />
      </el-form-item> -->
      <!-- <el-form-item label="姓名:" prop="name">
        <el-input v-model="form.name" style="width: 500px;" />
      </el-form-item> -->
      <!-- <el-form-item label="证件类型:" prop="idcType">
        <el-select v-model="form.idcType" placeholder="请选择" style="width: 500px;">
          <el-option label="身份证" value="0" />
          <el-option label="护照" value="1" />
        </el-select>
      </el-form-item> -->
      <el-form-item label="证件号码:" prop="idcCode">
        <el-select v-model="form.idcType" placeholder="请选择" style="width: 200px;">
          <el-option v-for="item in cardType" :key="item.value" :hidden="item.value==2" :label="item.label" :value="item.value" />
          <!-- <el-option label="身份证" value="0" />
          <el-option label="护照" value="1" /> -->
        </el-select>
        <el-input v-model="form.idcCode" placeholder="请输入" style="width: 300px;" @change="IDchange" />
        <el-button class="btn" icon="Search" type="primary" @click="selectMember"> 查询</el-button>
        <el-button class="btn" icon="Plus" type="primary" :disabled="flag" @click="submitForm"> 添加</el-button>
        <el-button class="btn" icon="" type="warning" @click="importData"> 批量导入</el-button>
      </el-form-item>

      <!--
      <el-form-item label="原单位:" prop="paymentName">
        <el-input v-model="form.memName" disabled readonly style="width: 500px;" />
      </el-form-item> -->

    </el-form>
    <br>
    <div class="vipData">
      <div> 人数合计:<span>{{ total }}</span></div>
      <!-- <div> 新会员合计:<span>{{ formData.newPersonCount? formData.newPersonCount:0 }}</span></div>
      <div> 续费会员合计:<span>{{ formData.oldPersonCount? formData.oldPersonCount:0 }}</span></div> -->
      <!-- <el-col :span="4">
        <div class="nav-box"> 合计年限<span>{{ formData.oldPersonCount? formData.oldPersonCount:0 }}</span></div>
      </el-col> -->
    </div>
    <br>
    <br>
    <div>
      <el-form ref="" :model="queryParams" size="small" :inline="true" label-width="auto">
        <el-form-item label="姓名:" prop="">
          <el-input v-model="queryParams.personName" style="width: 200px;" />
        </el-form-item>
        <el-form-item label="证件号码:">
          <el-select v-model="queryParams.personIdcType" placeholder="请选择" style="width: 200px;">
            <el-option v-for="item in cardType" :key="item.value" :hidden="item.value==2" :label="item.label" :value="item.value" />
            <!-- <el-option label="身份证" value="0" />
            <el-option label="护照" value="1" /> -->
          </el-select>
          <el-input v-model="queryParams.personIdcCode" placeholder="请输入" style="width: 250px;" @change="IDchange" />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="getList()"> 查询</el-button>
          <el-button @click="reset"> 重置</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div>
      <el-table border :data="list" style="width: 100%" @sort-change="sortChange">
        <el-table-column label="序号" type="index" width="55" />
        <el-table-column label="姓名" align="center" prop="perName" min-width="80" />
        <el-table-column label="证件类型" align="center" prop="perIdcType" min-width="80">
          <template #default="props">
            <div>{{ cardType[props.row.perIdcType]?.label }}</div>
            <div />
          </template>
        </el-table-column>

        <el-table-column label="证件号" align="center" prop="perIdcCode" min-width="170">
          <template #default="props">
            <div v-if="props.row.perType == 1" />
          </template>
        </el-table-column>
        <!-- <el-table-column
          label="所属单位(团体会员)" align="center" prop="sourceDeptName" min-width="140"
          :show-overflow-tooltip="true"
        /> -->

        <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="200">
          <template #default="scope">
            <!-- <el-button type="primary" @click="handleInfo(scope.row)">查看</el-button> -->
            <el-button type="danger" @click="handleDelete(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>
    <br>
    <br>
    <el-row justify="center">
      <el-button type="primary" :disabled="list?.length <= 0" @click="commitFN">保存并提交</el-button>
    </el-row>
    <!-- <onLine ref="onLineRef" @backFN="backFN" /> -->
    <batchData ref="batchDataRef" @backFN="backFN" />
  </div>
</template>

<script setup>
import { ref, toRefs, reactive, onMounted } from 'vue'
import { pickUp, addTransferToRange, transferList, commit, transfer } from '@/api/member/mobilize.js'
import { useRoute, useRouter } from 'vue-router'
import { getCurrentInstance } from '@vue/runtime-core'
import batchData from './batchData.vue'

const router = useRouter()
const route = useRoute()
const buttonLoading = ref(false)
const { proxy } = getCurrentInstance()
const flag = ref(true)
const cardType = ref([
  { label: '身份证', value: '0' },
  { label: '港澳台通行证 ', value: '1' },
  { label: '中国护照', value: '2' },
  { label: '外国护照', value: '3' },
  { label: '其它', value: '4' }
])

const data = reactive({
  rules: {
    name: { required: true, message: '请输入会员姓名', trigger: 'blur' },
    idcType: { required: true, message: '请选择证件类型', trigger: 'blur' },
    idcCode: [
      { required: true, message: '请输入证件号', trigger: 'blur' },
      { validator: validateMin, trigger: 'blur' }
    ],
    cityId: { required: true, message: '请选择地区', trigger: 'change' }
  },
  form: {
  },
  queryParams: {
    pageNum: 1,
    pageSize: 10,
    rangeId: '-1'
  },
  formData: {}
})
const total = ref(0)
const list = ref([])
const { rules, form, queryParams, formData } = toRefs(data)

onMounted(() => {
  if (route.query.rangId) {
    form.value.rangeId = route.query.rangId
    queryParams.value.rangeId = route.query.rangId
    getList()
  }
})

// 身份证校验
// 自定义表单验证
function validateMin(rule, value, callback) {
  const i = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/
  if (!form.value.idcType) callback(new Error('请选择证件类型!'))
  if (form.value.idcType == 0) {
    if (!i.test(form.value.idcCode)) {
      callback(new Error('请输入正确的证件号!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 查询会员
function selectMember() {
  proxy.$refs['infoRef'].validate(async(valid) => {
    if (valid) {
      const res = await pickUp(form.value)
      if (res.code == 200) {
        // form.value = true
        form.value.perId = res.data.perId
        form.value.ancestorNameList = res.data.ancestorNameList
        form.value.memName = res.data.memName
        form.value.personIdArray = res.data.perId
        flag.value = false
        return proxy.$modal.msgSuccess('查询成功!')
      }
    } else {
      proxy.$modal.msgError('请填写完整信息!')
    }
  })
}

async function getList() {
  const res = await transferList(queryParams.value)
  list.value = res.rows
  total.value = res.total
  formData.value = res
}

function reset() {
  queryParams.value.pageNum = 1
  queryParams.value.pageSize = 10
  queryParams.value.personIdcCode = ''
  queryParams.value.personIdcType = ''
  queryParams.value.personName = ''
  getList()
}

/** 添加 */
function submitForm() {
  proxy.$refs['infoRef'].validate(async valid => {
    if (valid) {
      buttonLoading.value = true
      const res = await addTransferToRange({
        rangeId: form.value.rangeId || '-1',
        personIdArray: form.value.personIdArray
      })
      if (res.code == 200) {
        if (res.data.result == 0) {
          proxy.$alert(
            // 导入成功
            "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + res.data?.list?.[0]?.data +
              res.data?.list?.[0]?.msg +
              '</div>',
            '导入结果',
            { dangerouslyUseHTMLString: true }
          )
        } else {
          proxy.$modal.msgSuccess('新增成功')
        }
        form.value.rangeId = res.data.rangeId
        queryParams.value.rangeId = res.data.rangeId
        flag.value = true
        form.value.idcType = ''
        form.value.idcCode = ''
        form.value.name = ''
        await getList()
      } else {
        proxy.$modal.msgError('添加失败')
      }
      buttonLoading.value = false
    }
  })
}

// 提交审核
async function commitFN() {
  if (form.value.rangeId == '-1') return
  const res = await commit([form.value.rangeId] || [queryParams.value.rangeId])
  if (res.code == 200) {
    proxy.$modal.msgSuccess('提交成功!')
    router.push('/member/mobillize')
  } else {
    proxy.$modal.msgError('提交失败!')
  }
}


/** 删除按钮操作 */
function handleDelete(row) {
  proxy.$modal.confirm('是否确认删除个人会员姓名为"' + row.perName + '"的数据项?').then(function() {
    return transfer([row.id])
  }).then(() => {
    proxy.$modal.msgSuccess('删除成功')
    if (total.value == 1) {
      form.value.rangeId = '-1'
      queryParams.value.rangeId = '-1'
    }
    getList()
  }).catch(() => {
  }).finally(() => {
  })
}

// 会员导入
function importData() {
  console.log(form.value.rangeId)
  proxy.$refs['batchDataRef'].open(form.value.rangeId || '-1')
}

// 调动完成页面刷新
function backFN(row) {
  form.value.rangeId = row
  queryParams.value.rangeId = row
  getList()
}
</script>

<style scoped lang="scss">
.box {
  padding: 50px;
}

.tdFlex {
  display: flex;
}

.w50 {
  width: 50%;
}

.ml20 {
  margin-left: 20px;
}

:deep(.el-button--info) {
  background-color: #920f20;
  border: 1px solid #920f20;
}


.idCode {
  :deep(.el-upload--picture-card) {
    width: 380px;
    height: 240px;
  }

  :deep(.fileItem) {
    width: 380px;
    height: 240px;
  }

  :deep(.el-upload__tip) {
    display: none;
  }

  :deep(.el-upload-list--picture-card) {
    // text-align: center;
    display: flex;
    justify-content: center;
  }
}

.text-center {
  display: flex;
  margin-top: 30px;
  margin-bottom: 40px;
}

.text-center>div {
  margin-left: 20px;
}

.btn {
  margin-left: 10px;
}

.a {
  color: #0000ff;
  border-bottom: 1px solid #0000ff;
}

.nav-box {
  padding: 10px;
  font-size: 16px;
  background-color: #fff;

  span {
    font-weight: 600;
    font-size: 18px;
    margin: 0 10px;
  }
}
</style>