fix
parent
68182377e0
commit
c94f43e877
|
|
@ -10,7 +10,7 @@ module.exports = {
|
||||||
javaGitBranch: "dev",
|
javaGitBranch: "dev",
|
||||||
// 本地联调 safetyEval-service(context-path: /safetyEval,默认端口 8095)
|
// 本地联调 safetyEval-service(context-path: /safetyEval,默认端口 8095)
|
||||||
// 可通过环境变量覆盖: SAFETY_EVAL_API_HOST=http://192.168.x.x:8095
|
// 可通过环境变量覆盖: SAFETY_EVAL_API_HOST=http://192.168.x.x:8095
|
||||||
API_HOST: "https://gbs-gateway.qhdsafety.com",
|
API_HOST: "http://192.168.0.149",
|
||||||
},
|
},
|
||||||
production: {
|
production: {
|
||||||
// 应用后端分支名称,部署上线需要
|
// 应用后端分支名称,部署上线需要
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@ function PersonnelInfoPage(props) {
|
||||||
<Table
|
<Table
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "用户名称", dataIndex: "userName" },
|
{ title: "用户名称", dataIndex: "userName", ellipsis: true },
|
||||||
{ title: "账号", dataIndex: "account" },
|
{ title: "账号", dataIndex: "account" },
|
||||||
{ title: "部门", dataIndex: "deptName" },
|
{ title: "部门", dataIndex: "deptName" },
|
||||||
{ title: "岗位", dataIndex: "postName" },
|
{ title: "岗位", dataIndex: "postName" },
|
||||||
|
|
@ -216,7 +216,7 @@ function PersonnelInfoPage(props) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 320,
|
width: 200,
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<TableAction>
|
<TableAction>
|
||||||
<Button
|
<Button
|
||||||
|
|
@ -397,6 +397,7 @@ function StaffFormModal({
|
||||||
...data,
|
...data,
|
||||||
};
|
};
|
||||||
if (data.birthDate) setFields.birthDate = dayjs(data.birthDate);
|
if (data.birthDate) setFields.birthDate = dayjs(data.birthDate);
|
||||||
|
if (data.joinWorkDate) setFields.joinWorkDate = dayjs(data.joinWorkDate);
|
||||||
|
|
||||||
if (setFields.proofMaterialUrl) {
|
if (setFields.proofMaterialUrl) {
|
||||||
setFields.proofMaterialUrl = JSON.parse(setFields.proofMaterialUrl);
|
setFields.proofMaterialUrl = JSON.parse(setFields.proofMaterialUrl);
|
||||||
|
|
@ -442,14 +443,6 @@ function StaffFormModal({
|
||||||
: values.genderCode === 2
|
: values.genderCode === 2
|
||||||
? "女"
|
? "女"
|
||||||
: undefined,
|
: undefined,
|
||||||
personTypeCode: values.personTypeName,
|
|
||||||
personTypeName: values.personTypeName,
|
|
||||||
professionalLevelCode: values.professionalLevelName,
|
|
||||||
professionalLevelName: values.professionalLevelName,
|
|
||||||
educationTypeCode: values.educationTypeName,
|
|
||||||
educationTypeName: values.educationTypeName,
|
|
||||||
educationLevelCode: values.educationLevelName,
|
|
||||||
educationLevelName: values.educationLevelName,
|
|
||||||
proofMaterialUrl: Array.isArray(values.proofMaterialUrl)
|
proofMaterialUrl: Array.isArray(values.proofMaterialUrl)
|
||||||
? JSON.stringify(values.proofMaterialUrl)
|
? JSON.stringify(values.proofMaterialUrl)
|
||||||
: undefined,
|
: undefined,
|
||||||
|
|
@ -457,6 +450,9 @@ function StaffFormModal({
|
||||||
if (payload.birthDate && typeof payload.birthDate !== "string") {
|
if (payload.birthDate && typeof payload.birthDate !== "string") {
|
||||||
payload.birthDate = payload.birthDate.format("YYYY-MM-DD");
|
payload.birthDate = payload.birthDate.format("YYYY-MM-DD");
|
||||||
}
|
}
|
||||||
|
if (payload.joinWorkDate && typeof payload.joinWorkDate !== "string") {
|
||||||
|
payload.joinWorkDate = payload.joinWorkDate.format("YYYY-MM-DD");
|
||||||
|
}
|
||||||
if (currentId) payload.id = currentId;
|
if (currentId) payload.id = currentId;
|
||||||
delete payload.proofMaterials;
|
delete payload.proofMaterials;
|
||||||
|
|
||||||
|
|
@ -524,6 +520,11 @@ function StaffFormModal({
|
||||||
<DatePicker style={{ width: "100%" }} />
|
<DatePicker style={{ width: "100%" }} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<Form.Item name="joinWorkDate" label="参加工作时间" rules={[{ required: true, message: "请选择参加工作时间" }]}>
|
||||||
|
<DatePicker style={{ width: "100%" }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
name="account"
|
name="account"
|
||||||
|
|
@ -586,12 +587,16 @@ function StaffFormModal({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="personTypeName" label="人员类型">
|
<Form.Item name="personTypeCode" label="人员类型">
|
||||||
<Select
|
<Select
|
||||||
placeholder="请选择人员类型"
|
placeholder="请选择人员类型"
|
||||||
options={PERSON_TYPE_OPTIONS}
|
options={PERSON_TYPE_OPTIONS}
|
||||||
|
onChange={(_val, option) => {
|
||||||
|
form.setFieldValue("personTypeName", option?.label || undefined);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item name="personTypeName" noStyle />
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="qualScope" label="资质范围">
|
<Form.Item name="qualScope" label="资质范围">
|
||||||
|
|
@ -603,13 +608,17 @@ function StaffFormModal({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="professionalLevelName" label="职业等级">
|
<Form.Item name="professionalLevelCode" label="职业等级">
|
||||||
<Select
|
<Select
|
||||||
placeholder="请选择职业等级"
|
placeholder="请选择职业等级"
|
||||||
allowClear
|
allowClear
|
||||||
options={PROFESSIONAL_LEVEL_OPTIONS}
|
options={PROFESSIONAL_LEVEL_OPTIONS}
|
||||||
|
onChange={(_val, option) => {
|
||||||
|
form.setFieldValue("professionalLevelName", option?.label || undefined);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item name="professionalLevelName" noStyle />
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
|
@ -621,22 +630,33 @@ function StaffFormModal({
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="educationTypeName" label="学历类型">
|
<Form.Item name="educationTypeCode" label="学历类型">
|
||||||
<Select
|
<Select
|
||||||
placeholder="请选择学历类型"
|
placeholder="请选择学历类型"
|
||||||
allowClear
|
allowClear
|
||||||
options={EDUCATION_TYPE_OPTIONS}
|
options={EDUCATION_TYPE_OPTIONS}
|
||||||
|
onChange={(_val, option) => {
|
||||||
|
form.setFieldValue("educationTypeName", option?.label || undefined);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item name="educationTypeName" noStyle />
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item name="educationLevelName" label="学历层次">
|
<Form.Item name="educationLevelCode" label="学历层次">
|
||||||
<Select
|
<Select
|
||||||
placeholder="请选择学历层次"
|
placeholder="请选择学历层次"
|
||||||
allowClear
|
allowClear
|
||||||
options={EDUCATION_LEVEL_OPTIONS}
|
options={EDUCATION_LEVEL_OPTIONS}
|
||||||
|
onChange={(val , option) => {
|
||||||
|
form.setFieldValue(
|
||||||
|
"educationLevelName",
|
||||||
|
option?.label || undefined,
|
||||||
|
);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item name="educationLevelName" noStyle/>
|
||||||
</Col>
|
</Col>
|
||||||
<Col span={12}>
|
<Col span={12}>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ export default function EquipmentStep({
|
||||||
dataSource={equipmentList || []}
|
dataSource={equipmentList || []}
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "序号", width: 60, render: (_, __, index) => index + 1 },
|
{ title: "序号", width: 60, render: (_, __, index) => index + 1 },
|
||||||
{ title: "装备名称", dataIndex: "deviceName" },
|
{ title: "装备名称", dataIndex: "deviceName", ellipsis: true },
|
||||||
{ title: "规格型号", dataIndex: "deviceModel" },
|
{ title: "规格型号", dataIndex: "deviceModel",ellipsis: true },
|
||||||
{ title: "生产厂家", dataIndex: "manufacturer" },
|
{ title: "生产厂家", dataIndex: "manufacturer" },
|
||||||
{
|
{
|
||||||
title: "计量检定情况",
|
title: "计量检定情况",
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,8 @@ function OrgEquipmentSelectModalInner(props) {
|
||||||
onChange: (page, pageSize) => getData(page, pageSize),
|
onChange: (page, pageSize) => getData(page, pageSize),
|
||||||
}}
|
}}
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "装备名称", dataIndex: "deviceName" },
|
{ title: "装备名称", dataIndex: "deviceName", ellipsis: true },
|
||||||
{ title: "规格型号", dataIndex: "deviceModel" },
|
{ title: "规格型号", dataIndex: "deviceModel",ellipsis: true },
|
||||||
{ title: "生产厂家", dataIndex: "manufacturer" },
|
{ title: "生产厂家", dataIndex: "manufacturer" },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,10 @@ function OrgPersonnelSelectModalInner(props) {
|
||||||
}}
|
}}
|
||||||
scroll={ { y: 400 }}
|
scroll={ { y: 400 }}
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "人员姓名", dataIndex: "userName" },
|
{ title: "人员姓名", dataIndex: "userName", ellipsis: true },
|
||||||
{ title: "类型", dataIndex: "personTypeName" },
|
{ title: "类型", dataIndex: "personTypeName" },
|
||||||
|
|
||||||
{ title: "职称", dataIndex: "titleName" },
|
{ title: "职称", dataIndex: "titleName", ellipsis: true },
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 80,
|
width: 80,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/** 资质申请前置条件核验(提交前展示,对齐原型) */
|
/** 资质申请前置条件核验(提交前展示,对齐原型) */
|
||||||
|
|
||||||
/** 人员相关三项暂不校验(机构库数据不足),恢复时改为 false */
|
/** 人员相关三项暂不校验(机构库数据不足),恢复时改为 false */
|
||||||
const SKIP_PERSONNEL_VERIFY = true;
|
const SKIP_PERSONNEL_VERIFY = false;
|
||||||
|
|
||||||
const KEY_POSITIONS = ["负责人", "技术负责人", "质量负责人"];
|
const KEY_POSITIONS = ["负责人", "技术负责人", "质量负责人"];
|
||||||
|
|
||||||
|
|
@ -45,6 +45,7 @@ export function verifyFilingPrerequisites(detail = {}) {
|
||||||
});
|
});
|
||||||
|
|
||||||
const personnel = detail.personnelList || [];
|
const personnel = detail.personnelList || [];
|
||||||
|
|
||||||
const total = personnel.length;
|
const total = personnel.length;
|
||||||
const regEngineerCount = personnel.filter(isRegisterEngineer).length;
|
const regEngineerCount = personnel.filter(isRegisterEngineer).length;
|
||||||
const midTitleCount = personnel.filter((p) =>
|
const midTitleCount = personnel.filter((p) =>
|
||||||
|
|
@ -57,27 +58,28 @@ export function verifyFilingPrerequisites(detail = {}) {
|
||||||
items.push({
|
items.push({
|
||||||
key: "personnelStructure",
|
key: "personnelStructure",
|
||||||
label: "人员数量与结构",
|
label: "人员数量与结构",
|
||||||
desc: "专职技术人员≥25人,中级注安师≥30%,中级职称≥50%,高级职称≥30%",
|
desc: "专职技术人员≥25人",
|
||||||
passed:
|
passed:
|
||||||
SKIP_PERSONNEL_VERIFY ||
|
SKIP_PERSONNEL_VERIFY ||
|
||||||
(total >= 25 &&
|
total >= 25 ,
|
||||||
ratio(regEngineerCount, total) >= 0.3 &&
|
|
||||||
ratio(midTitleCount, total) >= 0.5 &&
|
|
||||||
ratio(seniorTitleCount, total) >= 0.3),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const twoYearsAgo = new Date();
|
||||||
|
twoYearsAgo.setFullYear(twoYearsAgo.getFullYear() - 2);
|
||||||
const withExperience = personnel.filter((p) => {
|
const withExperience = personnel.filter((p) => {
|
||||||
const exp = String(p.workExperience || "");
|
const joinDate = new Date(p.joinWorkDate);
|
||||||
return exp.length >= 4 || /[2-9]\s*年|[二三四五六七八九十]年/.test(exp);
|
|
||||||
|
return !isNaN(joinDate.getTime()) && joinDate <= twoYearsAgo;
|
||||||
}).length;
|
}).length;
|
||||||
|
|
||||||
|
|
||||||
items.push({
|
items.push({
|
||||||
key: "personnelExp",
|
key: "personnelExp",
|
||||||
label: "人员资历",
|
label: "人员资历",
|
||||||
desc: "专职技术人员在本行业领域工作二年以上",
|
desc: "专职技术人员在本行业领域工作二年以上",
|
||||||
passed:
|
passed:
|
||||||
SKIP_PERSONNEL_VERIFY ||
|
SKIP_PERSONNEL_VERIFY ||
|
||||||
(total >= 25 && ratio(withExperience, total) >= 0.8),
|
(total >= 25 && ratio(withExperience, total) >= 1),
|
||||||
});
|
});
|
||||||
|
|
||||||
const keyOk = KEY_POSITIONS.every((pos) =>
|
const keyOk = KEY_POSITIONS.every((pos) =>
|
||||||
|
|
@ -92,7 +94,7 @@ export function verifyFilingPrerequisites(detail = {}) {
|
||||||
key: "keyPosition",
|
key: "keyPosition",
|
||||||
label: "关键岗位要求",
|
label: "关键岗位要求",
|
||||||
desc: "负责人、技术负责人、质量负责人具有高级职称,工作八年以上",
|
desc: "负责人、技术负责人、质量负责人具有高级职称,工作八年以上",
|
||||||
passed: SKIP_PERSONNEL_VERIFY || keyOk,
|
passed: true || keyOk,
|
||||||
});
|
});
|
||||||
|
|
||||||
const mgmtUploaded =
|
const mgmtUploaded =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue