147 lines
4.1 KiB
Vue
147 lines
4.1 KiB
Vue
<script lang="ts" setup>
|
||
import { ref, watch } from 'vue';
|
||
|
||
import { getUserRegisterInfo } from '#/api/legacy/approval';
|
||
import { getUserIdentity, getUserVipEquity } from '#/api/legacy/user';
|
||
import { formatDate } from '#/views/system/shared';
|
||
|
||
import {
|
||
Col,
|
||
Descriptions,
|
||
DescriptionsItem,
|
||
Drawer,
|
||
Empty,
|
||
Row,
|
||
Spin,
|
||
Tag,
|
||
} from 'antdv-next';
|
||
|
||
defineOptions({ name: 'OperateUserAuthInfoDrawer' });
|
||
|
||
const props = defineProps<{
|
||
open: boolean;
|
||
userId: number | string;
|
||
}>();
|
||
|
||
const emit = defineEmits<{
|
||
close: [];
|
||
}>();
|
||
|
||
const loading = ref(false);
|
||
const vipEquity = ref<Record<string, any>>({});
|
||
const identity = ref<Record<string, any>>({});
|
||
const registerInfo = ref<Record<string, any>>({});
|
||
|
||
watch(
|
||
() => (props.open ? props.userId : ''),
|
||
async (userId) => {
|
||
if (!userId) {
|
||
return;
|
||
}
|
||
loading.value = true;
|
||
try {
|
||
const [vip, idInfo, register] = await Promise.all([
|
||
getUserVipEquity(userId),
|
||
getUserIdentity(userId),
|
||
getUserRegisterInfo(userId),
|
||
]);
|
||
vipEquity.value = vip || {};
|
||
identity.value = idInfo || {};
|
||
registerInfo.value = register || {};
|
||
} finally {
|
||
loading.value = false;
|
||
}
|
||
},
|
||
{ immediate: true },
|
||
);
|
||
|
||
function buildIdentityTags() {
|
||
const target = identity.value || {};
|
||
const pairs = [
|
||
['主播', target.anchor],
|
||
['主播代理', target.agent],
|
||
['货运代理', target.freightAgent],
|
||
['BD', target.bd],
|
||
['BD Leader', target.bdLeader],
|
||
['Yumi 经理', target.yumiManager || target.yumi_manager],
|
||
];
|
||
return pairs.filter(([, enabled]) => Boolean(enabled));
|
||
}
|
||
</script>
|
||
|
||
<template>
|
||
<Drawer
|
||
:open="open"
|
||
destroy-on-close
|
||
title="认证信息"
|
||
width="760"
|
||
@close="emit('close')"
|
||
>
|
||
<Spin :spinning="loading">
|
||
<Row :gutter="[16, 16]">
|
||
<Col :span="24">
|
||
<Descriptions bordered size="small" title="注册信息">
|
||
<DescriptionsItem label="注册时间">
|
||
{{ formatDate(registerInfo.createTime || registerInfo.registerTime) }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="注册来源">
|
||
{{ registerInfo.authType || '-' }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="来源平台">
|
||
{{ registerInfo.originPlatform || registerInfo.platform || '-' }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="设备号">
|
||
{{ registerInfo.deviceNo || registerInfo.imei || '-' }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="注册IP">
|
||
{{ registerInfo.registerIp || registerInfo.ip || '-' }}
|
||
</DescriptionsItem>
|
||
</Descriptions>
|
||
</Col>
|
||
|
||
<Col :span="24">
|
||
<Descriptions bordered size="small" title="VIP权益">
|
||
<DescriptionsItem label="会员名">
|
||
{{ vipEquity.vipName || vipEquity.name || '-' }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="到期时间">
|
||
{{ formatDate(vipEquity.expiredTime || vipEquity.invalidTime) }}
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="权益描述" :span="2">
|
||
{{ vipEquity.equityDesc || vipEquity.description || '-' }}
|
||
</DescriptionsItem>
|
||
</Descriptions>
|
||
</Col>
|
||
|
||
<Col :span="24">
|
||
<Descriptions bordered size="small" title="身份信息">
|
||
<DescriptionsItem label="当前身份" :span="2">
|
||
<div v-if="buildIdentityTags().length > 0" class="tag-row">
|
||
<Tag v-for="[label] in buildIdentityTags()" :key="label">
|
||
{{ label }}
|
||
</Tag>
|
||
</div>
|
||
<Empty v-else description="暂无身份信息" />
|
||
</DescriptionsItem>
|
||
<DescriptionsItem label="历史身份" :span="2">
|
||
{{
|
||
Array.isArray(identity.historyIdentity)
|
||
? identity.historyIdentity.join(',')
|
||
: '-'
|
||
}}
|
||
</DescriptionsItem>
|
||
</Descriptions>
|
||
</Col>
|
||
</Row>
|
||
</Spin>
|
||
</Drawer>
|
||
</template>
|
||
|
||
<style scoped>
|
||
.tag-row {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
}
|
||
</style>
|