This commit is contained in:
Mrx
2026-01-27 17:28:50 +08:00
2 changed files with 155 additions and 15 deletions

View File

@@ -184,7 +184,10 @@ export const certificationApi = {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}),
// 管理员代用户完成认证(暂不关联合同)
adminCompleteWithoutContract: (data) => request.post('/certifications/admin/complete-without-contract', data)
}
// API相关接口

View File

@@ -469,42 +469,46 @@
</div>
</div>
<!-- 企业信息 -->
<div v-if="selectedUser.enterprise_info" class="enterprise-info">
<!-- 企业与合同信息仅在用户已完成企业认证时展示 -->
<div v-if="selectedUser.is_certified" class="enterprise-info">
<h3 class="text-lg font-semibold text-gray-900 mb-4">企业信息</h3>
<div :class="['grid gap-4', isMobile ? 'grid-cols-1' : 'grid-cols-2']">
<div class="info-item">
<span class="info-label">企业名称:</span>
<span class="info-value">{{ selectedUser.enterprise_info.company_name }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.company_name || '-' }}</span>
</div>
<div class="info-item">
<span class="info-label">统一社会信用代码:</span>
<span class="info-value">{{ selectedUser.enterprise_info.unified_social_code }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.unified_social_code || '-' }}</span>
</div>
<div class="info-item">
<span class="info-label">法定代表人:</span>
<span class="info-value">{{ selectedUser.enterprise_info.legal_person_name }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.legal_person_name || '-' }}</span>
</div>
<div class="info-item">
<span class="info-label">法定代表人手机:</span>
<span class="info-value">{{ formatPhone(selectedUser.enterprise_info.legal_person_phone) }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.legal_person_phone ?
formatPhone(selectedUser.enterprise_info.legal_person_phone) : '-' }}</span>
</div>
<div class="info-item col-span-2">
<span class="info-label">企业地址:</span>
<span class="info-value">{{ selectedUser.enterprise_info.enterprise_address }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.enterprise_address || '-' }}</span>
</div>
<div class="info-item">
<span class="info-label">企业邮箱:</span>
<span class="info-value">{{ selectedUser.enterprise_info.enterprise_email || '-' }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.enterprise_email || '-' }}</span>
</div>
<div class="info-item">
<span class="info-label">认证时间:</span>
<span class="info-value">{{ formatDate(selectedUser.enterprise_info.created_at) }}</span>
<span class="info-value">{{ selectedUser.enterprise_info?.created_at ?
formatDate(selectedUser.enterprise_info.created_at) : '-' }}</span>
</div>
</div>
<!-- 合同信息部分 -->
<div v-if="selectedUser.enterprise_info.contracts && selectedUser.enterprise_info.contracts.length > 0" class="contracts-section mt-6">
<div
v-if="selectedUser.enterprise_info && selectedUser.enterprise_info.contracts && selectedUser.enterprise_info.contracts.length > 0"
class="contracts-section mt-6">
<h4 class="text-md font-semibold text-gray-900 mb-3">合同信息</h4>
<div class="contracts-list space-y-3">
<div
@@ -546,6 +550,11 @@
<el-icon class="text-4xl text-gray-300 mb-2"><warning /></el-icon>
<div class="text-lg font-medium text-gray-600">该用户尚未完成企业认证</div>
<div class="text-sm text-gray-500 mt-1">完成企业认证后可查看详细信息</div>
<div class="mt-4">
<el-button type="primary" @click="openAdminCompleteCertDialog" size="small">
代用户完成认证
</el-button>
</div>
</div>
</div>
</el-dialog>
@@ -641,12 +650,61 @@
</div>
</template>
</el-dialog>
<!-- 管理员代用户完成认证弹窗 -->
<el-dialog v-model="adminCertDialogVisible" title="代用户完成企业认证" :width="isMobile ? '90%' : '600px'"
class="enterprise-dialog">
<div v-if="selectedUser" class="space-y-4">
<div class="user-info mb-4">
<div class="info-item">
<span class="info-label">用户手机:</span>
<span class="info-value">{{ formatPhone(selectedUser.phone) }}</span>
</div>
</div>
<el-form ref="adminCertFormRef" :model="adminCertForm" :rules="adminCertRules" label-width="120px">
<el-form-item label="企业名称" prop="company_name">
<el-input v-model="adminCertForm.company_name" placeholder="请输入企业名称" />
</el-form-item>
<el-form-item label="统一社会信用代码" prop="unified_social_code">
<el-input v-model="adminCertForm.unified_social_code" placeholder="请输入统一社会信用代码" />
</el-form-item>
<el-form-item label="法定代表人姓名" prop="legal_person_name">
<el-input v-model="adminCertForm.legal_person_name" placeholder="请输入法定代表人姓名" />
</el-form-item>
<el-form-item label="法定代表人身份证" prop="legal_person_id">
<el-input v-model="adminCertForm.legal_person_id" placeholder="请输入法定代表人身份证号码" />
</el-form-item>
<el-form-item label="法人手机号" prop="legal_person_phone">
<el-input v-model="adminCertForm.legal_person_phone" placeholder="请输入法人手机号" />
</el-form-item>
<el-form-item label="企业地址" prop="enterprise_address">
<el-input v-model="adminCertForm.enterprise_address" placeholder="请输入企业地址" />
</el-form-item>
<el-form-item label="操作原因" prop="reason">
<el-input v-model="adminCertForm.reason" type="textarea" :rows="3" placeholder="请填写本次代用户完成认证的原因,便于审计" />
</el-form-item>
</el-form>
</div>
<template #footer>
<div :class="['dialog-footer', isMobile ? 'flex-col' : '']">
<el-button :class="isMobile ? 'w-full' : ''" @click="adminCertDialogVisible = false">
取消
</el-button>
<el-button type="primary" :class="isMobile ? 'w-full' : ''" @click="handleSubmitAdminCert"
:loading="adminCertLoading">
确认完成认证
</el-button>
</div>
</template>
</el-dialog>
</template>
</ListPageLayout>
</template>
<script setup>
import { financeApi, userApi } from '@/api'
import { certificationApi, financeApi, userApi } from '@/api'
import FilterItem from '@/components/common/FilterItem.vue'
import FilterSection from '@/components/common/FilterSection.vue'
import ListPageLayout from '@/components/common/ListPageLayout.vue'
@@ -673,6 +731,30 @@ const selectedUser = ref(null)
const rechargeLoading = ref(false)
const rechargeFormRef = ref(null)
// 管理员代用户完成认证
const adminCertDialogVisible = ref(false)
const adminCertLoading = ref(false)
const adminCertFormRef = ref(null)
const adminCertForm = reactive({
company_name: '',
unified_social_code: '',
legal_person_name: '',
legal_person_id: '',
legal_person_phone: '',
enterprise_address: '',
reason: ''
})
const adminCertRules = {
company_name: [{ required: true, message: '请输入企业名称', trigger: 'blur' }],
unified_social_code: [{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }],
legal_person_name: [{ required: true, message: '请输入法定代表人姓名', trigger: 'blur' }],
legal_person_id: [{ required: true, message: '请输入法定代表人身份证号码', trigger: 'blur' }],
legal_person_phone: [{ required: true, message: '请输入法人手机号', trigger: 'blur' }],
enterprise_address: [{ required: true, message: '请输入企业地址', trigger: 'blur' }],
reason: [{ required: true, message: '请填写本次操作原因', trigger: 'blur' }]
}
// 统计数据
const stats = ref({
total_users: 0,
@@ -862,6 +944,61 @@ const handleViewUser = (user) => {
userDialogVisible.value = true
}
// 打开管理员代用户完成认证弹窗
const openAdminCompleteCertDialog = () => {
if (!selectedUser.value) return
// 如果用户已有部分企业信息,做回显
if (selectedUser.value.enterprise_info) {
const info = selectedUser.value.enterprise_info
adminCertForm.company_name = info.company_name || ''
adminCertForm.unified_social_code = info.unified_social_code || ''
adminCertForm.legal_person_name = info.legal_person_name || ''
adminCertForm.legal_person_id = info.legal_person_id || ''
adminCertForm.legal_person_phone = info.legal_person_phone || ''
adminCertForm.enterprise_address = info.enterprise_address || ''
} else {
adminCertForm.company_name = ''
adminCertForm.unified_social_code = ''
adminCertForm.legal_person_name = ''
adminCertForm.legal_person_id = ''
adminCertForm.legal_person_phone = ''
adminCertForm.enterprise_address = ''
}
adminCertForm.reason = ''
adminCertDialogVisible.value = true
}
// 提交管理员代用户完成认证
const handleSubmitAdminCert = async () => {
if (!adminCertFormRef.value || !selectedUser.value) return
try {
await adminCertFormRef.value.validate()
adminCertLoading.value = true
const payload = {
user_id: selectedUser.value.id,
company_name: adminCertForm.company_name,
unified_social_code: adminCertForm.unified_social_code,
legal_person_name: adminCertForm.legal_person_name,
legal_person_id: adminCertForm.legal_person_id,
legal_person_phone: adminCertForm.legal_person_phone,
enterprise_address: adminCertForm.enterprise_address,
reason: adminCertForm.reason
}
await certificationApi.adminCompleteWithoutContract(payload)
ElMessage.success('已代用户完成企业认证')
adminCertDialogVisible.value = false
userDialogVisible.value = false
// 重新加载用户列表和统计
await loadUsers()
await loadStats()
} catch (error) {
console.error('代用户完成认证失败:', error)
ElMessage.error(error?.response?.data?.message || '代用户完成认证失败')
} finally {
adminCertLoading.value = false
}
}
// 查看合同
const handleViewContract = (contract) => {
if (contract.contract_file_url) {