yeg
2 天以前 d8eaa16682cf180e9563d6be05fb43057daf6c07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getFamilyCardApplicationDetail, unbindFamilyCard } from '../api/admin'
import type { FamilyCardApplication } from '../types/admin'
 
const route = useRoute()
const detail = ref<FamilyCardApplication>()
const loading = ref(false)
const unbinding = ref(false)
 
function text(value?: string | number | null) {
  return value === undefined || value === null || value === '' ? '-' : String(value)
}
 
function genderText(gender?: number | string) {
  if (gender === 1 || gender === '1') return '男'
  if (gender === 2 || gender === '2') return '女'
  return '-'
}
 
const isBound = computed(() => detail.value?.status === 1 || detail.value?.status === '1')
const cardholderInfo = computed(() => [
  { label: '持卡人姓名:', value: text(detail.value?.talentName) },
  { label: '身份证号:', value: text(detail.value?.talentIdCardNo) },
  { label: '联系方式:', value: text(detail.value?.talentMobile) },
  { label: '联系地址:', value: text(detail.value?.contactAddress) },
  { label: '工作地址:', value: text(detail.value?.workAddress) },
  { label: '性别:', value: genderText(detail.value?.gender) },
  { label: '人才等级:', value: text(detail.value?.cardLevel) },
  { label: '当前家属卡数量:', value: `${detail.value?.currentFamilyCardCount ?? 0}/${detail.value?.familyCardLimit ?? 2}` },
])
const familyInfo = computed(() => [
  { label: '家属姓名:', value: text(detail.value?.familyName || detail.value?.dependentName) },
  { label: '身份证号:', value: text(detail.value?.idCardNo || detail.value?.dependentIdCardNo) },
  { label: '手机号:', value: text(detail.value?.familyMobile || detail.value?.dependentMobile) },
  { label: '与持卡人关系:', value: text(detail.value?.relationship || detail.value?.relation) },
])
 
async function loadDetail() {
  loading.value = true
  try {
    detail.value = await getFamilyCardApplicationDetail(String(route.params.id))
  } finally {
    loading.value = false
  }
}
 
async function unbind() {
  if (!detail.value) return
  await ElMessageBox.confirm('解除绑定后,该家属卡将无法继续使用。确定解除吗?', '解除绑定', {
    type: 'warning',
    confirmButtonText: '确定解绑',
    cancelButtonText: '取消',
  })
  unbinding.value = true
  try {
    detail.value = await unbindFamilyCard(detail.value.id)
    ElMessage.success('解除绑定成功')
  } finally {
    unbinding.value = false
  }
}
 
onMounted(loadDetail)
</script>
 
<template>
  <div v-loading="loading" class="family-card-detail-page">
    <section class="family-card-detail-panel">
      <div class="reservation-detail-section">
        <h3>持卡人信息</h3>
        <div class="reservation-detail-grid family-card-owner-grid">
          <div v-for="item in cardholderInfo" :key="item.label" class="reservation-detail-item">
            <span>{{ item.label }}</span><strong>{{ item.value }}</strong>
          </div>
        </div>
      </div>
      <div class="reservation-detail-section">
        <h3>家属信息</h3>
        <div class="reservation-detail-grid family-card-member-grid">
          <div v-for="item in familyInfo" :key="item.label" class="reservation-detail-item">
            <span>{{ item.label }}</span><strong>{{ item.value }}</strong>
          </div>
        </div>
      </div>
    </section>
    <div class="family-card-detail-actions">
      <el-button v-if="isBound" type="primary" :loading="unbinding" @click="unbind">解除绑定</el-button>
      <span v-else class="family-card-unbound-tip">该家属卡已解绑</span>
    </div>
  </div>
</template>