jcloud/dashboard/src2/components/JsiteDomainRealNameInfoDialog.vue

327 lines
12 KiB
Vue

<template>
<Dialog v-bind="$attrs" :options="{ title: '实名认证信息', size: '3xl' }" v-model="show">
<template #body>
<div v-if="loading" class="flex justify-center items-center py-12">
<div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600"></div>
<span class="ml-3 text-gray-600">加载中...</span>
</div>
<div v-else-if="error" class="text-center py-12">
<div class="text-red-500 mb-4">
<AlertTriangleIcon class="h-12 w-12 mx-auto" />
</div>
<p class="text-gray-600">{{ error }}</p>
</div>
<div v-else-if="realNameData" class="space-y-6">
<!-- 认证状态 -->
<div class="bg-gradient-to-r from-green-50 to-emerald-50 rounded-xl p-6 border border-green-200">
<div class="flex items-center">
<div class="flex-shrink-0">
<CheckCircleIcon class="h-8 w-8 text-green-500" />
</div>
<div class="ml-4">
<h3 class="text-lg font-medium text-green-900">认证已通过</h3>
<p class="text-sm text-green-700">该域名已完成实名认证</p>
</div>
</div>
</div>
<!-- 基本信息 -->
<div class="bg-white rounded-xl border border-gray-200 shadow-sm">
<div class="px-6 py-4 border-b border-gray-100">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<FileTextIcon class="h-5 w-5 mr-2 text-blue-600" />
域名基本信息
</h3>
</div>
<div class="p-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">域名</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.domain || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">注册时间</dt>
<dd class="mt-1 text-sm text-gray-900">{{ formatDateTime(realNameData.regdate) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">到期时间</dt>
<dd class="mt-1 text-sm text-gray-900">{{ formatDateTime(realNameData.rexpiredate) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">域名状态</dt>
<dd class="mt-1 text-sm text-gray-900">{{ getDomainStatusText(realNameData.status) || '未填写' }}</dd>
</div>
</div>
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">实名状态</dt>
<dd class="mt-1 text-sm text-gray-900">{{ getRealNameStatusText(realNameData.real_name_status?.r_status) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">注册类型</dt>
<dd class="mt-1 text-sm text-gray-900">{{ getRegTypeText(realNameData.c_regtype) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">模板ID</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.c_sysid || '未填写' }}</dd>
</div>
</div>
</div>
</div>
</div>
<!-- 所有者信息 -->
<div class="bg-white rounded-xl border border-gray-200 shadow-sm">
<div class="px-6 py-4 border-b border-gray-100">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<UserIcon class="h-5 w-5 mr-2 text-blue-600" />
所有者信息
</h3>
</div>
<div class="p-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">中文姓名</dt>
<dd class="mt-1 text-sm text-gray-900">{{ getFullChineseName() || '未填写' }}</dd>
</div>
<div v-if="realNameData.owner?.dom_org_m">
<dt class="text-sm font-medium text-gray-600">中文单位</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner.dom_org_m || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">邮箱</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_em || '未填写' }}</dd>
</div>
</div>
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">电话</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_ph || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">传真</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_fax || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">国家/地区</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_co || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">省份</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_st_m || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">城市</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_ct_m || '未填写' }}</dd>
</div>
</div>
</div>
<div class="mt-4">
<div>
<dt class="text-sm font-medium text-gray-600">地址</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_adr_m || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">邮编</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.owner?.dom_pc || '未填写' }}</dd>
</div>
</div>
</div>
</div>
<!-- 实名证件信息 -->
<div v-if="realNameData.orgfile" class="bg-white rounded-xl border border-gray-200 shadow-sm">
<div class="px-6 py-4 border-b border-gray-100">
<h3 class="text-lg font-semibold text-gray-900 flex items-center">
<FileTextIcon class="h-5 w-5 mr-2 text-blue-600" />
实名证件信息
</h3>
</div>
<div class="p-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">实名证件类型</dt>
<dd class="mt-1 text-sm text-gray-900">{{ getDocumentTypeText(realNameData.orgfile.f_type) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">实名证件号码</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.orgfile.f_code || '未填写' }}</dd>
</div>
</div>
<div class="space-y-4">
<div>
<dt class="text-sm font-medium text-gray-600">证件上传时间</dt>
<dd class="mt-1 text-sm text-gray-900">{{ formatDateTime(realNameData.orgfile.f_date) || '未填写' }}</dd>
</div>
<div>
<dt class="text-sm font-medium text-gray-600">证件ID</dt>
<dd class="mt-1 text-sm text-gray-900">{{ realNameData.orgfile.f_sysid || '未填写' }}</dd>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
</Dialog>
</template>
<script>
import { Dialog, createResource } from 'jingrow-ui';
import CheckCircleIcon from '~icons/lucide/check-circle';
import AlertTriangleIcon from '~icons/lucide/alert-triangle';
import FileTextIcon from '~icons/lucide/file-text';
import UserIcon from '~icons/lucide/user';
export default {
name: 'JsiteDomainRealNameInfoDialog',
components: {
Dialog,
CheckCircleIcon,
AlertTriangleIcon,
FileTextIcon,
UserIcon
},
props: {
domain: String,
domainDoc: Object
},
data() {
return {
show: true,
loading: false,
error: null,
realNameData: null
};
},
methods: {
async loadRealNameInfo() {
console.log('loadRealNameInfo called, domainDoc:', this.domainDoc);
if (!this.domainDoc?.domain) {
console.error('域名信息不存在, domainDoc:', this.domainDoc);
this.error = '域名信息不存在';
return;
}
this.loading = true;
this.error = null;
try {
const getRealNameRequest = createResource({
url: 'jcloud.api.domain_west.get_west_domain_real_info',
params: {
domain: this.domainDoc.domain
},
onSuccess: (response) => {
console.log('API响应:', response);
// 修复API响应处理逻辑
let data = null;
if (response && response.status === "success" && response.data) {
data = response.data;
} else if (response && response.message && response.message.status === "success" && response.message.data) {
data = response.message.data;
}
if (data) {
console.log('提取的数据:', data);
this.realNameData = data;
} else {
console.error('无效的响应格式:', response);
this.error = '获取实名认证信息失败';
}
this.loading = false;
},
onError: (error) => {
console.error('获取域名实名信息失败:', error);
this.error = '获取实名认证信息失败';
this.loading = false;
}
});
getRealNameRequest.submit();
} catch (error) {
console.error('获取域名实名信息失败:', error);
this.error = '获取实名认证信息失败';
this.loading = false;
}
},
formatDateTime(dateStr) {
if (!dateStr) return '未知';
try {
const date = new Date(dateStr);
return date.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
} catch {
return dateStr;
}
},
getDomainStatusText(status) {
const statusMap = {
'ok': '正常',
'pending': '待处理',
'error': '错误'
};
return statusMap[status] || status || '未知';
},
getRealNameStatusText(status) {
const statusMap = {
1: '实名成功',
2: '实名中',
3: '实名失败',
0: '未实名'
};
return statusMap[status] || status || '未知';
},
getDocumentTypeText(type) {
const typeMap = {
1: '身份证',
2: '护照',
3: '工商营业执照(填统一社会信用代码)',
4: '组织机构代码证',
5: '其他'
};
return typeMap[type] || type || '未知';
},
getRegTypeText(regType) {
const typeMap = {
'I': '个人',
'E': '企业'
};
return typeMap[regType] || regType || '未知';
},
getFullChineseName() {
if (!this.realNameData?.owner) return '未填写';
const lastName = this.realNameData.owner.dom_ln_m || '';
const firstName = this.realNameData.owner.dom_fn_m || '';
return lastName + firstName || '未填写';
}
},
mounted() {
this.loadRealNameInfo();
}
};
</script>