人员库修改
This commit is contained in:
parent
f3003a9a06
commit
4f841d1ca1
|
|
@ -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, yyyy年MM月dd日, 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}日$/, // yyyy年MM月dd日
|
||||||
|
/^\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' }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue