人员库修改

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' } { required: true, message: '请选择注册日期', trigger: 'change' }
], ],
businessTerm: [ 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: [ residence: [
{ required: true, message: '请输入住所', trigger: 'blur' } { required: true, message: '请输入住所', trigger: 'blur' }

View File

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

View File

@ -31,66 +31,68 @@
</div> </div>
<!-- 企业信息卡片 --> <!-- 企业信息卡片 -->
<div class="enterprise-card" v-for="item in enterpriseList" :key="item.enterpriseId"> <div class="enterprise-card-wrapper" v-for="item in enterpriseList" :key="item.enterpriseId">
<div class="enterprise-header"> <div class="enterprise-card">
<h3 class="enterprise-name">{{ item.enterpriseName }}</h3> <div class="enterprise-header">
</div> <h3 class="enterprise-name">{{ item.enterpriseName }}</h3>
<div class="enterprise-info">
<div class="info-item">
<span class="label">法定代表人:</span>
<span class="value">{{ item.legalPersonName }}</span>
</div> </div>
<div class="info-item">
<span class="label">统一信用代码:</span> <div class="enterprise-info">
<span class="value">{{ item.enterpriseCode }}</span> <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> </div>
<!-- 过期文档标签 --> <!-- 过期证件标签 - 独立于卡片之外 -->
<div class="expired-tags" v-if="item.errorInfos && item.errorInfos.length > 0"> <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> <span class="expired-text">{{ item.errorInfos.join(',') }}</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>
</div> </div>
</div> </div>
</div> </div>
@ -352,6 +354,11 @@ export default {
} }
} }
.enterprise-card-wrapper {
display: flex;
flex-direction: column;
}
.enterprise-card { .enterprise-card {
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
@ -447,17 +454,15 @@ export default {
} }
.expired-tags { .expired-tags {
margin-bottom: 15px; padding: 8px 12px;
flex-shrink: 0;
.expired-tag { .expired-text {
display: inline-block; display: block;
background: #ff4d4f; color: #db3e29;
color: #fff; font-size: 14px;
font-size: 12px; line-height: 1.5;
padding: 2px 8px; word-break: break-all;
border-radius: 4px;
margin-right: 8px;
margin-bottom: 4px;
} }
} }

View File

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