人员库修改

This commit is contained in:
cwchen 2025-11-17 15:25:52 +08:00
parent f3003a9a06
commit 4f841d1ca1
4 changed files with 172 additions and 87 deletions

View File

@ -123,7 +123,56 @@ export default {
{ required: true, message: '请选择注册日期', trigger: 'change' }
],
businessTerm: [
{ required: true, message: '请输入营业期限', trigger: 'blur' }
{ required: true, message: '请输入营业期限', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (!value) {
callback();
return;
}
const trimmedValue = value.trim();
// """"
if (trimmedValue === '永久' || trimmedValue === '长期') {
callback();
return;
}
//
// yyyy-MM-dd, yyyy/MM/dd, yyyyMMdd, yyyy.MM.dd
const datePatterns = [
/^\d{4}-\d{2}-\d{2}$/, // yyyy-MM-dd
/^\d{4}\/\d{2}\/\d{2}$/, // yyyy/MM/dd
/^\d{4}\.\d{2}\.\d{2}$/, // yyyy.MM.dd
/^\d{4}年\d{1,2}月\d{1,2}日$/, // yyyyMMdd
/^\d{4}-\d{1,2}-\d{1,2}$/, // yyyy-M-d
/^\d{4}\/\d{1,2}\/\d{1,2}$/ // yyyy/M/d
];
const isDate = datePatterns.some(pattern => pattern.test(trimmedValue));
if (isDate) {
//
let dateStr = trimmedValue;
//
if (dateStr.includes('年')) {
dateStr = dateStr.replace(/年/g, '-').replace(/月/g, '-').replace(/日/g, '');
}
dateStr = dateStr.replace(/\//g, '-').replace(/\./g, '-');
const dateParts = dateStr.split('-');
if (dateParts.length === 3) {
const year = parseInt(dateParts[0]);
const month = parseInt(dateParts[1]);
const day = parseInt(dateParts[2]);
const date = new Date(year, month - 1, day);
if (date.getFullYear() === year &&
date.getMonth() === month - 1 &&
date.getDate() === day) {
callback();
return;
}
}
}
callback(new Error('营业期限只能输入"永久"、"长期"或有效的日期格式2024-01-01'));
},
trigger: 'blur'
}
],
residence: [
{ required: true, message: '请输入住所', trigger: 'blur' }

View File

@ -125,7 +125,7 @@ export default {
methods: {
//
validateIdCard(rule, value, callback) {
if (!validIdCard(value)) {
if (!validIdCard(value) && value) {
callback(new Error('请输入合法的身份证号码'))
} else {
callback()
@ -133,7 +133,7 @@ export default {
},
//
validateMobile(rule, value, callback) {
if (!validMobile(value)) {
if (!validMobile(value) && value) {
callback(new Error('请输入合法的联系方式'))
} else {
callback()

View File

@ -31,66 +31,68 @@
</div>
<!-- 企业信息卡片 -->
<div class="enterprise-card" v-for="item in enterpriseList" :key="item.enterpriseId">
<div class="enterprise-header">
<h3 class="enterprise-name">{{ item.enterpriseName }}</h3>
</div>
<div class="enterprise-info">
<div class="info-item">
<span class="label">法定代表人:</span>
<span class="value">{{ item.legalPersonName }}</span>
<div class="enterprise-card-wrapper" v-for="item in enterpriseList" :key="item.enterpriseId">
<div class="enterprise-card">
<div class="enterprise-header">
<h3 class="enterprise-name">{{ item.enterpriseName }}</h3>
</div>
<div class="info-item">
<span class="label">统一信用代码:</span>
<span class="value">{{ item.enterpriseCode }}</span>
<div class="enterprise-info">
<div class="info-item">
<span class="label">法定代表人:</span>
<span class="value">{{ item.legalPersonName }}</span>
</div>
<div class="info-item">
<span class="label">统一信用代码:</span>
<span class="value">{{ item.enterpriseCode }}</span>
</div>
</div>
<!-- 数据统计 -->
<div class="data-stats">
<div class="stat-item">
<span class="stat-label">资质库</span>
<span class="stat-value">{{ item.qualificationNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">业绩库</span>
<span class="stat-value">{{ item.performanceNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">人员库</span>
<span class="stat-value">{{ item.personnelNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">财务库</span>
<span class="stat-value">{{ item.financeNum }}</span>
</div>
</div>
<!-- 操作按钮 -->
<div class="enterprise-actions">
<div @click="handleEnterpriseKnowledge(item)">
<img :src="EnterpriseKnowledge" alt="企业知识库" />
<span>企业知识库</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:detail']" @click="handleDetail(item)">
<img :src="EnterpriseDetail" alt="详情" />
<span>详情</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:edit']" @click="handleEdit(item)">
<img :src="EnterpriseEdit" alt="编辑" />
<span>编辑</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:del']" @click="handleDel(item)">
<img :src="EnterpriseDelete" alt="删除" />
<span>删除</span>
</div>
</div>
</div>
<!-- 过期文档标签 -->
<!-- 过期证件标签 - 独立于卡片之外 -->
<div class="expired-tags" v-if="item.errorInfos && item.errorInfos.length > 0">
<span class="expired-tag" v-for="doc in item.errorInfos" :key="doc">{{ doc }}</span>
</div>
<!-- 数据统计 -->
<div class="data-stats">
<div class="stat-item">
<span class="stat-label">资质库</span>
<span class="stat-value">{{ item.qualificationNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">业绩库</span>
<span class="stat-value">{{ item.performanceNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">人员库</span>
<span class="stat-value">{{ item.personnelNum }}</span>
</div>
<div class="stat-item">
<span class="stat-label">财务库</span>
<span class="stat-value">{{ item.financeNum }}</span>
</div>
</div>
<!-- 操作按钮 -->
<div class="enterprise-actions">
<div @click="handleEnterpriseKnowledge(item)">
<img :src="EnterpriseKnowledge" alt="企业知识库" />
<span>企业知识库</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:detail']" @click="handleDetail(item)">
<img :src="EnterpriseDetail" alt="详情" />
<span>详情</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:edit']" @click="handleEdit(item)">
<img :src="EnterpriseEdit" alt="编辑" />
<span>编辑</span>
</div>
<div v-hasPermi="['enterpriseLibrary:enterprise:del']" @click="handleDel(item)">
<img :src="EnterpriseDelete" alt="删除" />
<span>删除</span>
</div>
<span class="expired-text">{{ item.errorInfos.join(',') }}</span>
</div>
</div>
</div>
@ -352,6 +354,11 @@ export default {
}
}
.enterprise-card-wrapper {
display: flex;
flex-direction: column;
}
.enterprise-card {
background: #fff;
border-radius: 8px;
@ -447,17 +454,15 @@ export default {
}
.expired-tags {
margin-bottom: 15px;
padding: 8px 12px;
flex-shrink: 0;
.expired-tag {
display: inline-block;
background: #ff4d4f;
color: #fff;
font-size: 12px;
padding: 2px 8px;
border-radius: 4px;
margin-right: 8px;
margin-bottom: 4px;
.expired-text {
display: block;
color: #db3e29;
font-size: 14px;
line-height: 1.5;
word-break: break-all;
}
}

View File

@ -7,28 +7,59 @@
<div class="detail-content">
<template v-if="isProjectManager">
<!-- 建造师证书 -->
<FileOrImageDisplay label="建造师证书" :file="form.fileList[0]" :image-url="form.url" />
<!-- 专业类型 -->
<DetailItem label="专业类型" :value="form.professionalType" />
<!-- 证书编号 -->
<DetailItem label="证书编号" :value="form.certificateCode" />
<!-- 级别 -->
<DetailItem label="级别" :value="form.certificateLevel" />
<!-- 证书有效期 -->
<DetailItem label="证书有效期" :value="form.certificateValidityPeriod" />
<!-- 使用有效期 -->
<DetailItem label="使用有效期" :value="form.useValidityPeriod" />
<el-row :gutter="24">
<el-col :span="8">
<!-- 建造师证书 -->
<FileOrImageDisplay label="建造师证书" :file="form.fileList[0]" :image-url="form.url" />
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<!-- 专业类型 -->
<DetailItem label="专业类型" :value="form.professionalType" />
</el-col>
<el-col :span="8">
<!-- 证书编号 -->
<DetailItem label="证书编号" :value="form.certificateCode" />
</el-col>
<el-col :span="8">
<!-- 级别 -->
<DetailItem label="级别" :value="form.certificateLevel" />
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<!-- 证书有效期 -->
<DetailItem label="证书有效期" :value="form.certificateValidityPeriod" />
</el-col>
<el-col :span="8">
<!-- 使用有效期 -->
<DetailItem label="使用有效期" :value="form.useValidityPeriod" />
</el-col>
</el-row>
</template>
<template>
<!-- 安全考核B证安全考核C证其他人员证书 -->
<FileOrImageDisplay :label="certificateName" :file="form.fileList2[0]" :image-url="form.url2" />
<!-- 证书编号 -->
<DetailItem label="证书编号" :value="form.certificateCode2" />
<!-- 证书有效期 -->
<DetailItem label="证书有效期" :value="form.certificateValidityPeriod2" />
<!-- 注册专业 -->
<DetailItem label="注册专业" :value="form.registerProfessional" />
<el-row :gutter="24">
<el-col :span="8">
<FileOrImageDisplay :label="certificateName" :file="form.fileList2[0]" :image-url="form.url2" />
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<!-- 证书编号 -->
<DetailItem label="证书编号" :value="form.certificateCode2" />
</el-col>
<el-col :span="8">
<!-- 证书有效期 -->
<DetailItem label="证书有效期" :value="form.certificateValidityPeriod2" />
</el-col>
<el-col :span="8">
<!-- 注册专业 -->
<DetailItem label="注册专业" :value="form.registerProfessional" />
</el-col>
</el-row>
</template>
</div>