refactor : 模块化模型管理表单
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, Row, Col, Card, Slider } from 'antd';
|
||||||
|
|
||||||
|
const BehaviorRecommendForm: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={12}>
|
||||||
|
<Card size="small" title="行为权重分配">
|
||||||
|
<Form.Item
|
||||||
|
label="浏览记录权重"
|
||||||
|
name="browseWeight"
|
||||||
|
tooltip="浏览记录在推荐算法中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="申请记录权重" name="applyWeight" tooltip="申请记录在推荐算法中的权重">
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="申请历史权重"
|
||||||
|
name="applyHistoryWeight"
|
||||||
|
tooltip="申请历史记录在推荐算法中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="收藏记录权重"
|
||||||
|
name="collectWeight"
|
||||||
|
tooltip="收藏记录在推荐算法中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BehaviorRecommendForm;
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, Row, Col, Card, Slider } from 'antd';
|
||||||
|
|
||||||
|
const CompetitivenessForm: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="基本信息竞争力">
|
||||||
|
<Form.Item
|
||||||
|
label="学历字段权重"
|
||||||
|
name="educationWeight"
|
||||||
|
tooltip="学历在竞争力计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="性别字段权重" name="genderWeight" tooltip="性别在竞争力计算中的权重">
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="年龄字段权重" name="ageWeight" tooltip="年龄在竞争力计算中的权重">
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="期望信息竞争力">
|
||||||
|
<Form.Item
|
||||||
|
label="期望薪资权重"
|
||||||
|
name="salaryWeight"
|
||||||
|
tooltip="期望薪资在竞争力计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="工作经验权重"
|
||||||
|
name="experienceWeight"
|
||||||
|
tooltip="工作经验在竞争力计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="期望工作岗位权重"
|
||||||
|
name="jobTitleWeight"
|
||||||
|
tooltip="期望工作岗位在竞争力计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="地区竞争力">
|
||||||
|
<Form.Item
|
||||||
|
label="期望工作地区权重"
|
||||||
|
name="areaWeight"
|
||||||
|
tooltip="期望工作地区在竞争力计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CompetitivenessForm;
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, Row, Col, Card, InputNumber, Select } from 'antd';
|
||||||
|
|
||||||
|
const { Option } = Select;
|
||||||
|
|
||||||
|
const LocationMatchForm: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={12}>
|
||||||
|
<Card size="small" title="距离算法设置">
|
||||||
|
<Form.Item label="距离计算算法" name="distanceAlgorithm" tooltip="选择计算距离的算法">
|
||||||
|
<Select placeholder="请选择距离算法">
|
||||||
|
<Option value="euclidean">欧氏距离</Option>
|
||||||
|
<Option value="manhattan">曼哈顿距离</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="地铁口附近距离(Km)"
|
||||||
|
name="subwayDistance"
|
||||||
|
tooltip="地铁口附近的距离阈值"
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={100}
|
||||||
|
max={5000}
|
||||||
|
step={100}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
placeholder="请输入地铁口附近距离"
|
||||||
|
addonAfter="Km"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="商圈附近距离(Km)"
|
||||||
|
name="businessDistrictDistance"
|
||||||
|
tooltip="商圈附近的距离阈值"
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={500}
|
||||||
|
max={10000}
|
||||||
|
step={100}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
placeholder="请输入商圈附近距离"
|
||||||
|
addonAfter="Km"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={12}>
|
||||||
|
<Card size="small" title="个人位置设置">
|
||||||
|
<Form.Item
|
||||||
|
label="个人附近距离(Km)"
|
||||||
|
name="personalDistance"
|
||||||
|
tooltip="个人位置附近的距离阈值"
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={1000}
|
||||||
|
max={20000}
|
||||||
|
step={500}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
placeholder="请输入个人附近距离"
|
||||||
|
addonAfter="Km"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default LocationMatchForm;
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, Row, Col, Card, Slider } from 'antd';
|
||||||
|
|
||||||
|
const MatchDegreeForm: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="基本信息权重">
|
||||||
|
<Form.Item
|
||||||
|
label="学历字段权重"
|
||||||
|
name="educationWeight"
|
||||||
|
tooltip="学历在匹配度计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="性别字段权重" name="genderWeight" tooltip="性别在匹配度计算中的权重">
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="年龄字段权重" name="ageWeight" tooltip="年龄在匹配度计算中的权重">
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="期望信息权重">
|
||||||
|
<Form.Item
|
||||||
|
label="期望薪资权重"
|
||||||
|
name="salaryWeight"
|
||||||
|
tooltip="期望薪资在匹配度计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="工作经验权重"
|
||||||
|
name="experienceWeight"
|
||||||
|
tooltip="工作经验在匹配度计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="期望工作岗位权重"
|
||||||
|
name="jobTitleWeight"
|
||||||
|
tooltip="期望工作岗位在匹配度计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="地区权重">
|
||||||
|
<Form.Item
|
||||||
|
label="期望工作地区权重"
|
||||||
|
name="areaWeight"
|
||||||
|
tooltip="期望工作地区在匹配度计算中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default MatchDegreeForm;
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, Row, Col, Card, Divider, InputNumber, Slider } from 'antd';
|
||||||
|
|
||||||
|
const PreciseMatchForm: React.FC = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={12}>
|
||||||
|
<Card size="small" title="基本匹配范围">
|
||||||
|
<Form.Item
|
||||||
|
label="年龄匹配范围(年)"
|
||||||
|
name="ageMatchRange"
|
||||||
|
tooltip="设置年龄匹配的允许偏差范围"
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
max={20}
|
||||||
|
step={1}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
placeholder="请输入年龄匹配范围"
|
||||||
|
addonAfter="年"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="工作经验匹配范围(年)"
|
||||||
|
name="experienceMatchRange"
|
||||||
|
tooltip="设置工作经验匹配的允许偏差范围"
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
max={10}
|
||||||
|
step={0.5}
|
||||||
|
precision={1}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
placeholder="请输入工作经验匹配范围"
|
||||||
|
addonAfter="年"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
<Divider />
|
||||||
|
|
||||||
|
<Row gutter={24}>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="第一段工作经历">
|
||||||
|
<Form.Item
|
||||||
|
label="经历权重"
|
||||||
|
name="firstWorkExpWeight"
|
||||||
|
tooltip="第一段工作经历在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="距今时间权重"
|
||||||
|
name="firstWorkExpTimeWeight"
|
||||||
|
tooltip="第一段工作经历距今时间在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="第二段工作经历">
|
||||||
|
<Form.Item
|
||||||
|
label="经历权重"
|
||||||
|
name="secondWorkExpWeight"
|
||||||
|
tooltip="第二段工作经历在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="距今时间权重"
|
||||||
|
name="secondWorkExpTimeWeight"
|
||||||
|
tooltip="第二段工作经历距今时间在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
<Col span={8}>
|
||||||
|
<Card size="small" title="第三段工作经历">
|
||||||
|
<Form.Item
|
||||||
|
label="经历权重"
|
||||||
|
name="thirdWorkExpWeight"
|
||||||
|
tooltip="第三段工作经历在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="距今时间权重"
|
||||||
|
name="thirdWorkExpTimeWeight"
|
||||||
|
tooltip="第三段工作经历距今时间在匹配中的权重"
|
||||||
|
>
|
||||||
|
<Slider min={0} max={1} step={0.1} marks={{ 0: '0', 0.5: '0.5', 1: '1' }} />
|
||||||
|
</Form.Item>
|
||||||
|
</Card>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PreciseMatchForm;
|
||||||
@@ -1,22 +1,7 @@
|
|||||||
import React, { Fragment, useState, useEffect } from 'react';
|
import React, { Fragment, useState, useEffect } from 'react';
|
||||||
import { useAccess } from '@umijs/max';
|
import { useAccess } from '@umijs/max';
|
||||||
import { getModelConfig, saveModelConfig } from '@/services/application/modelManagement';
|
import { getModelConfig, saveModelConfig } from '@/services/application/modelManagement';
|
||||||
import {
|
import { Card, Row, Col, Form, Button, message, Menu, Space, Modal } from 'antd';
|
||||||
Card,
|
|
||||||
Row,
|
|
||||||
Col,
|
|
||||||
Form,
|
|
||||||
InputNumber,
|
|
||||||
Slider,
|
|
||||||
Button,
|
|
||||||
message,
|
|
||||||
Divider,
|
|
||||||
Menu,
|
|
||||||
Space,
|
|
||||||
Typography,
|
|
||||||
Select,
|
|
||||||
Modal,
|
|
||||||
} from 'antd';
|
|
||||||
import {
|
import {
|
||||||
SaveOutlined,
|
SaveOutlined,
|
||||||
ReloadOutlined,
|
ReloadOutlined,
|
||||||
@@ -28,8 +13,12 @@ import {
|
|||||||
EnvironmentOutlined,
|
EnvironmentOutlined,
|
||||||
} from '@ant-design/icons';
|
} from '@ant-design/icons';
|
||||||
|
|
||||||
const { Title, Text } = Typography;
|
// 导入表单组件
|
||||||
const { Option } = Select;
|
import PreciseMatchForm from './ModelForms/PreciseMatchForm'; //人岗精准匹配模型
|
||||||
|
import MatchDegreeForm from './ModelForms/MatchDegreeForm'; //人岗匹配度计算模型
|
||||||
|
import BehaviorRecommendForm from './ModelForms/BehaviorRecommendForm'; //基于求职者行为的推荐模型
|
||||||
|
import CompetitivenessForm from './ModelForms/CompetitivenessForm'; //竞争力计算模型
|
||||||
|
import LocationMatchForm from './ModelForms/LocationMatchForm'; //位置匹配模型
|
||||||
|
|
||||||
function ModelManagement() {
|
function ModelManagement() {
|
||||||
const access = useAccess();
|
const access = useAccess();
|
||||||
@@ -104,14 +93,12 @@ function ModelManagement() {
|
|||||||
const weights = weightConfigs[modelKey] || [];
|
const weights = weightConfigs[modelKey] || [];
|
||||||
const total = weights.reduce((sum: number, key: string) => {
|
const total = weights.reduce((sum: number, key: string) => {
|
||||||
const value = formValues[key] || 0;
|
const value = formValues[key] || 0;
|
||||||
|
|
||||||
return sum + Math.round(value * 100);
|
return sum + Math.round(value * 100);
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
setTotalWeight(total / 100);
|
setTotalWeight(total / 100);
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
|
||||||
const handleFormChange = (changedValues: any, allValues: any) => {
|
const handleFormChange = (changedValues: any, allValues: any) => {
|
||||||
calculateTotalWeight(selectedModel, allValues);
|
calculateTotalWeight(selectedModel, allValues);
|
||||||
};
|
};
|
||||||
@@ -187,7 +174,6 @@ function ModelManagement() {
|
|||||||
calculateTotalWeight(modelKey, values);
|
calculateTotalWeight(modelKey, values);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const handleSaveConfig = async (values: any) => {
|
const handleSaveConfig = async (values: any) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
@@ -208,7 +194,7 @@ function ModelManagement() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 重置
|
||||||
const handleResetConfig = async () => {
|
const handleResetConfig = async () => {
|
||||||
Modal.confirm({
|
Modal.confirm({
|
||||||
title: '重置确认',
|
title: '重置确认',
|
||||||
@@ -221,26 +207,44 @@ function ModelManagement() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 模型切换
|
||||||
const handleModelChange = (key: string) => {
|
const handleModelChange = (key: string) => {
|
||||||
setSelectedModel(key);
|
setSelectedModel(key);
|
||||||
loadConfigData(key);
|
loadConfigData(key);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//颜色
|
||||||
const getWeightColor = () => {
|
const getWeightColor = () => {
|
||||||
if (totalWeight == 1) return '#52c41a';
|
if (totalWeight == 1) return '#52c41a';
|
||||||
if (totalWeight > 1) return '#ff4d4f';
|
if (totalWeight > 1) return '#ff4d4f';
|
||||||
return '#faad14';
|
return '#faad14';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 状态文本
|
||||||
const getWeightStatusText = () => {
|
const getWeightStatusText = () => {
|
||||||
if (totalWeight == 1) return '权重分配合理';
|
if (totalWeight == 1) return '权重分配合理';
|
||||||
if (totalWeight > 1) return '权重超出范围';
|
if (totalWeight > 1) return '权重超出范围';
|
||||||
return '权重分配不足';
|
return '权重分配不足';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 渲染表单组件
|
||||||
|
const renderFormComponent = () => {
|
||||||
|
switch (selectedModel) {
|
||||||
|
case 'preciseMatch':
|
||||||
|
return <PreciseMatchForm />;
|
||||||
|
case 'matchDegree':
|
||||||
|
return <MatchDegreeForm />;
|
||||||
|
case 'behaviorRecommend':
|
||||||
|
return <BehaviorRecommendForm />;
|
||||||
|
case 'competitiveness':
|
||||||
|
return <CompetitivenessForm />;
|
||||||
|
case 'locationMatch':
|
||||||
|
return <LocationMatchForm />;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadConfigData(selectedModel);
|
loadConfigData(selectedModel);
|
||||||
}, []);
|
}, []);
|
||||||
@@ -366,471 +370,7 @@ function ModelManagement() {
|
|||||||
onValuesChange={handleFormChange}
|
onValuesChange={handleFormChange}
|
||||||
style={{ height: '100%' }}
|
style={{ height: '100%' }}
|
||||||
>
|
>
|
||||||
{/* 人岗精准匹配模型 */}
|
{renderFormComponent()}
|
||||||
{selectedModel === 'preciseMatch' && (
|
|
||||||
<div>
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={12}>
|
|
||||||
<Card size="small" title="基本匹配范围">
|
|
||||||
<Form.Item
|
|
||||||
label="年龄匹配范围(年)"
|
|
||||||
name="ageMatchRange"
|
|
||||||
tooltip="设置年龄匹配的允许偏差范围"
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
max={20}
|
|
||||||
step={1}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
placeholder="请输入年龄匹配范围"
|
|
||||||
addonAfter="年"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="工作经验匹配范围(年)"
|
|
||||||
name="experienceMatchRange"
|
|
||||||
tooltip="设置工作经验匹配的允许偏差范围"
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
max={10}
|
|
||||||
step={0.5}
|
|
||||||
precision={1}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
placeholder="请输入工作经验匹配范围"
|
|
||||||
addonAfter="年"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="第一段工作经历">
|
|
||||||
<Form.Item
|
|
||||||
label="经历权重"
|
|
||||||
name="firstWorkExpWeight"
|
|
||||||
tooltip="第一段工作经历在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="距今时间权重"
|
|
||||||
name="firstWorkExpTimeWeight"
|
|
||||||
tooltip="第一段工作经历距今时间在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="第二段工作经历">
|
|
||||||
<Form.Item
|
|
||||||
label="经历权重"
|
|
||||||
name="secondWorkExpWeight"
|
|
||||||
tooltip="第二段工作经历在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="距今时间权重"
|
|
||||||
name="secondWorkExpTimeWeight"
|
|
||||||
tooltip="第二段工作经历距今时间在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="第三段工作经历">
|
|
||||||
<Form.Item
|
|
||||||
label="经历权重"
|
|
||||||
name="thirdWorkExpWeight"
|
|
||||||
tooltip="第三段工作经历在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="距今时间权重"
|
|
||||||
name="thirdWorkExpTimeWeight"
|
|
||||||
tooltip="第三段工作经历距今时间在匹配中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* 人岗匹配度计算模型 */}
|
|
||||||
{selectedModel === 'matchDegree' && (
|
|
||||||
<div>
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="基本信息权重">
|
|
||||||
<Form.Item
|
|
||||||
label="学历字段权重"
|
|
||||||
name="educationWeight"
|
|
||||||
tooltip="学历在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="性别字段权重"
|
|
||||||
name="genderWeight"
|
|
||||||
tooltip="性别在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="年龄字段权重"
|
|
||||||
name="ageWeight"
|
|
||||||
tooltip="年龄在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="期望信息权重">
|
|
||||||
<Form.Item
|
|
||||||
label="期望薪资权重"
|
|
||||||
name="salaryWeight"
|
|
||||||
tooltip="期望薪资在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="工作经验权重"
|
|
||||||
name="experienceWeight"
|
|
||||||
tooltip="工作经验在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="期望工作岗位权重"
|
|
||||||
name="jobTitleWeight"
|
|
||||||
tooltip="期望工作岗位在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="地区权重">
|
|
||||||
<Form.Item
|
|
||||||
label="期望工作地区权重"
|
|
||||||
name="areaWeight"
|
|
||||||
tooltip="期望工作地区在匹配度计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* 基于求职者行为的推荐模型 */}
|
|
||||||
{selectedModel === 'behaviorRecommend' && (
|
|
||||||
<div>
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={12}>
|
|
||||||
<Card size="small" title="行为权重分配">
|
|
||||||
<Form.Item
|
|
||||||
label="浏览记录权重"
|
|
||||||
name="browseWeight"
|
|
||||||
tooltip="浏览记录在推荐算法中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="申请记录权重"
|
|
||||||
name="applyWeight"
|
|
||||||
tooltip="申请记录在推荐算法中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="申请历史权重"
|
|
||||||
name="applyHistoryWeight"
|
|
||||||
tooltip="申请历史记录在推荐算法中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="收藏记录权重"
|
|
||||||
name="collectWeight"
|
|
||||||
tooltip="收藏记录在推荐算法中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* 竞争力计算模型 */}
|
|
||||||
{selectedModel === 'competitiveness' && (
|
|
||||||
<div>
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="基本信息竞争力">
|
|
||||||
<Form.Item
|
|
||||||
label="学历字段权重"
|
|
||||||
name="educationWeight"
|
|
||||||
tooltip="学历在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="性别字段权重"
|
|
||||||
name="genderWeight"
|
|
||||||
tooltip="性别在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="年龄字段权重"
|
|
||||||
name="ageWeight"
|
|
||||||
tooltip="年龄在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="期望信息竞争力">
|
|
||||||
<Form.Item
|
|
||||||
label="期望薪资权重"
|
|
||||||
name="salaryWeight"
|
|
||||||
tooltip="期望薪资在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="工作经验权重"
|
|
||||||
name="experienceWeight"
|
|
||||||
tooltip="工作经验在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="期望工作岗位权重"
|
|
||||||
name="jobTitleWeight"
|
|
||||||
tooltip="期望工作岗位在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={8}>
|
|
||||||
<Card size="small" title="地区竞争力">
|
|
||||||
<Form.Item
|
|
||||||
label="期望工作地区权重"
|
|
||||||
name="areaWeight"
|
|
||||||
tooltip="期望工作地区在竞争力计算中的权重"
|
|
||||||
>
|
|
||||||
<Slider
|
|
||||||
min={0}
|
|
||||||
max={1}
|
|
||||||
step={0.1}
|
|
||||||
marks={{ 0: '0', 0.5: '0.5', 1: '1' }}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* 位置匹配模型 */}
|
|
||||||
{selectedModel === 'locationMatch' && (
|
|
||||||
<div>
|
|
||||||
<Row gutter={24}>
|
|
||||||
<Col span={12}>
|
|
||||||
<Card size="small" title="距离算法设置">
|
|
||||||
<Form.Item
|
|
||||||
label="距离计算算法"
|
|
||||||
name="distanceAlgorithm"
|
|
||||||
tooltip="选择计算距离的算法"
|
|
||||||
>
|
|
||||||
<Select placeholder="请选择距离算法">
|
|
||||||
<Option value="euclidean">欧氏距离</Option>
|
|
||||||
<Option value="manhattan">曼哈顿距离</Option>
|
|
||||||
</Select>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="地铁口附近距离(Km)"
|
|
||||||
name="subwayDistance"
|
|
||||||
tooltip="地铁口附近的距离阈值"
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={100}
|
|
||||||
max={5000}
|
|
||||||
step={100}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
placeholder="请输入地铁口附近距离"
|
|
||||||
addonAfter="Km"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="商圈附近距离(Km)"
|
|
||||||
name="businessDistrictDistance"
|
|
||||||
tooltip="商圈附近的距离阈值"
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={500}
|
|
||||||
max={10000}
|
|
||||||
step={100}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
placeholder="请输入商圈附近距离"
|
|
||||||
addonAfter="Km"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
<Col span={12}>
|
|
||||||
<Card size="small" title="个人位置设置">
|
|
||||||
<Form.Item
|
|
||||||
label="个人附近距离(Km)"
|
|
||||||
name="personalDistance"
|
|
||||||
tooltip="个人位置附近的距离阈值"
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={1000}
|
|
||||||
max={20000}
|
|
||||||
step={500}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
placeholder="请输入个人附近距离"
|
|
||||||
addonAfter="Km"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</Form>
|
</Form>
|
||||||
</Card>
|
</Card>
|
||||||
</Col>
|
</Col>
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
.cards {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(4, 1fr);
|
|
||||||
grid-row-gap: 30px;
|
|
||||||
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-right: 80px;
|
|
||||||
|
|
||||||
.label {
|
|
||||||
margin-right: 10px;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user