抓变化
This commit is contained in:
parent
90245dbb80
commit
7d839712ca
39
main.js
39
main.js
|
|
@ -131,6 +131,19 @@ function initDatabase() {
|
||||||
risk_tips TEXT, -- 隐患提示/工作要求
|
risk_tips TEXT, -- 隐患提示/工作要求
|
||||||
completion_time TEXT, -- 完成时间
|
completion_time TEXT, -- 完成时间
|
||||||
next_review_time TEXT, -- 下次梳理时间
|
next_review_time TEXT, -- 下次梳理时间
|
||||||
|
|
||||||
|
new_team INTEGER, --新进班组数量
|
||||||
|
new_members INTEGER, --新进班组骨干数量
|
||||||
|
new_high_altitude INTEGER, --新进高空人员数量
|
||||||
|
new_hired_general INTEGER, --新进一般人员数量
|
||||||
|
new_homework_content TEXT, --新的作业内容
|
||||||
|
change_homework_method TEXT, --改变作业方法
|
||||||
|
changes_geographical TEXT, --地理环境的变化
|
||||||
|
changes_meteorological TEXT, --气象环境的变化
|
||||||
|
changes_social TEXT, --社会环境的变化
|
||||||
|
changes_management TEXT, --管理要求的变化
|
||||||
|
changes_homework_plan TEXT, --作业计划的变化
|
||||||
|
changes_management_personnel TEXT, --管理人员的变化
|
||||||
remarks TEXT -- 备注
|
remarks TEXT -- 备注
|
||||||
)
|
)
|
||||||
`);
|
`);
|
||||||
|
|
@ -469,6 +482,20 @@ ipcMain.handle('update-project', (event, project) => {
|
||||||
risk_tips = ?,
|
risk_tips = ?,
|
||||||
completion_time = ?,
|
completion_time = ?,
|
||||||
next_review_time = ?,
|
next_review_time = ?,
|
||||||
|
|
||||||
|
new_team = ?,
|
||||||
|
new_members = ?,
|
||||||
|
new_high_altitude = ?,
|
||||||
|
new_hired_general = ?,
|
||||||
|
new_homework_content= ?,
|
||||||
|
change_homework_method = ?,
|
||||||
|
changes_geographical = ?,
|
||||||
|
changes_meteorological = ?,
|
||||||
|
changes_social = ?,
|
||||||
|
changes_management = ?,
|
||||||
|
changes_homework_plan = ?,
|
||||||
|
changes_management_personnel = ?,
|
||||||
|
|
||||||
remarks = ?
|
remarks = ?
|
||||||
WHERE id = ?
|
WHERE id = ?
|
||||||
`;
|
`;
|
||||||
|
|
@ -503,6 +530,18 @@ ipcMain.handle('update-project', (event, project) => {
|
||||||
project.risk_tips,
|
project.risk_tips,
|
||||||
project.completion_time,
|
project.completion_time,
|
||||||
project.next_review_time,
|
project.next_review_time,
|
||||||
|
project.new_team,
|
||||||
|
project.new_members,
|
||||||
|
project.new_high_altitude,
|
||||||
|
project.new_hired_general,
|
||||||
|
project.new_homework_content,
|
||||||
|
project.change_homework_method,
|
||||||
|
project.changes_geographical,
|
||||||
|
project.changes_meteorological,
|
||||||
|
project.changes_social,
|
||||||
|
project.changes_management,
|
||||||
|
project.changes_homework_plan,
|
||||||
|
project.changes_management_personnel,
|
||||||
project.remarks,
|
project.remarks,
|
||||||
project.id
|
project.id
|
||||||
], function (err) {
|
], function (err) {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import Toolbar from './components/Toolbar';
|
||||||
import TreeView from './components/TreeView';
|
import TreeView from './components/TreeView';
|
||||||
import DataView from './components/DataView';
|
import DataView from './components/DataView';
|
||||||
import ProjectDetailForm from './components/ProjectDetailForm';
|
import ProjectDetailForm from './components/ProjectDetailForm';
|
||||||
|
import ProjectWarningView from "./components/ProjectWarningView";
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
// 状态管理
|
// 状态管理
|
||||||
|
|
@ -393,6 +394,13 @@ function App() {
|
||||||
loading={loading}
|
loading={loading}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* 树状结构区 */}
|
||||||
|
<ProjectWarningView
|
||||||
|
projects={projects}
|
||||||
|
loading={loading}
|
||||||
|
onClick={handleProjectClick} // 传入点击事件处理函数
|
||||||
|
/>
|
||||||
|
|
||||||
{/* 项目详情表单 */}
|
{/* 项目详情表单 */}
|
||||||
<ProjectDetailForm
|
<ProjectDetailForm
|
||||||
visible={detailModalVisible}
|
visible={detailModalVisible}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,12 @@ const ProjectDetailForm = ({ visible, project, onCancel, onSave }) => {
|
||||||
open={visible}
|
open={visible}
|
||||||
width={800}
|
width={800}
|
||||||
onCancel={onCancel}
|
onCancel={onCancel}
|
||||||
|
bodyStyle={{
|
||||||
|
maxHeight: '60vh',
|
||||||
|
overflowY: 'scroll',
|
||||||
|
msOverflowStyle: 'none', // IE, Edge
|
||||||
|
scrollbarWidth: 'none' // Firefox
|
||||||
|
}}
|
||||||
footer={[
|
footer={[
|
||||||
<Button key="cancel" onClick={onCancel}>
|
<Button key="cancel" onClick={onCancel}>
|
||||||
取消
|
取消
|
||||||
|
|
@ -135,6 +141,102 @@ const ProjectDetailForm = ({ visible, project, onCancel, onSave }) => {
|
||||||
<Form.Item label="隐患提示/工作要求" name="risk_tips">
|
<Form.Item label="隐患提示/工作要求" name="risk_tips">
|
||||||
<TextArea rows={2}/>
|
<TextArea rows={2}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
|
<Form.Item>
|
||||||
|
<div>
|
||||||
|
<p style={{fontSize: '20px', fontWeight: 'bold'}}>人的变化</p>
|
||||||
|
<Form.Item label="新进班组数量" name="new_team">
|
||||||
|
<Input type="number"/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="新进班组骨干数量" name="new_members">
|
||||||
|
<Input type="number"/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="新进高空人员数量" name="new_high_altitude">
|
||||||
|
<Input type="number"/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="新进一般人员数量" name="new_hired_general">
|
||||||
|
<Input type="number"/>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
|
<Form.Item>
|
||||||
|
<div>
|
||||||
|
<p style={{fontSize: '20px', fontWeight: 'bold'}}>机的变化</p>
|
||||||
|
<Form.Item label="新的作业内容" name="new_homework_content">
|
||||||
|
<Select allowClear placeholder="请选择新的作业内容">
|
||||||
|
<Option value="同一班组作业类型调整">同一班组作业类型调整</Option>
|
||||||
|
<Option value="在运变电站新增作业">在运变电站新增作业</Option>
|
||||||
|
<Option value="工程转序">工程转序</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="改变作业方法" name="change_homework_method">
|
||||||
|
<Select allowClear placeholder="请选择改变作业方法">
|
||||||
|
<Option value="同一部位基础开挖由机械变为人工">同一部位基础开挖由机械变为人工</Option>
|
||||||
|
<Option
|
||||||
|
value="同一部位铁塔组立由起重机变为抱杆">同一部位铁塔组立由起重机变为抱杆</Option>
|
||||||
|
<Option value="同一跨越物改变跨越方式">同一跨越物改变跨越方式</Option>
|
||||||
|
<Option value="同一放线段改变放线方式">同一放线段改变放线方式</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
|
<Form.Item>
|
||||||
|
<div>
|
||||||
|
<p style={{fontSize: '20px', fontWeight: 'bold'}}>环境的变化</p>
|
||||||
|
<Form.Item label="地理环境的变化" name="changes_geographical">
|
||||||
|
<Select allowClear placeholder="请选择地理环境的变化">
|
||||||
|
<Option value="新增带电线路(引起近电作业)">新增带电线路(引起近电作业)</Option>
|
||||||
|
<Option value="新增带电线路(未引起近电作业)">新增带电线路(未引起近电作业)</Option>
|
||||||
|
<Option
|
||||||
|
value="新增跨越物(新投入使用铁路、高速、电力线等线性工程)">新增跨越物(新投入使用铁路、高速、电力线等线性工程)</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="气象环境的变化" name="changes_meteorological">
|
||||||
|
<Select allowClear placeholder="请选择气象环境的变化">
|
||||||
|
<Option value="降雪预警">降雪预警</Option>
|
||||||
|
<Option value="降雨预警">降雨预警</Option>
|
||||||
|
<Option value="大风预警">大风预警</Option>
|
||||||
|
<Option value="高温预警">高温预警</Option>
|
||||||
|
<Option value="低温预警">低温预警</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="社会环境的变化" name="changes_social">
|
||||||
|
<Select allowClear placeholder="请选择社会环境的变化">
|
||||||
|
<Option value="外部协调引起阻工(属地协调不畅)">外部协调引起阻工(属地协调不畅)</Option>
|
||||||
|
<Option value="物资供应滞后">物资供应滞后</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
</Form.Item>
|
||||||
|
|
||||||
|
<Form.Item>
|
||||||
|
<div>
|
||||||
|
<p style={{fontSize: '20px', fontWeight: 'bold'}}>管理的变化</p>
|
||||||
|
<Form.Item label="管理要求的变化" name="changes_management">
|
||||||
|
<Select allowClear placeholder="请选择管理要求的变化">
|
||||||
|
<Option value="投产计划提前(工期紧张)">投产计划提前(工期紧张)</Option>
|
||||||
|
<Option value="特殊时段作业">特殊时段作业</Option>
|
||||||
|
<Option value="停电计划调整">停电计划调整</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="作业计划的变化" name="changes_homework_plan">
|
||||||
|
<Select allowClear placeholder="请选择作业计划的变化">
|
||||||
|
<Option value="原作业计划未按期执行,顺延至今">原作业计划未按期执行,顺延至今</Option>
|
||||||
|
<Option value="下周作业计划无法执行,临时变更">下周作业计划无法执行,临时变更</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="管理人员的变化" name="changes_management_personnel">
|
||||||
|
<Select allowClear placeholder="请选择管理人员变化">
|
||||||
|
<Option value="施工项目部关键人员变化">施工项目部关键人员变化</Option>
|
||||||
|
<Option value="监理项目部关键人员变化">监理项目部关键人员变化</Option>
|
||||||
|
<Option value="业主项目部关键人员变化">业主项目部关键人员变化</Option>
|
||||||
|
<Option value="施工单位主要负责人、分管领导调整">施工单位主要负责人、分管领导调整</Option>
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
</Form.Item>
|
||||||
<Form.Item label="备注" name="remarks">
|
<Form.Item label="备注" name="remarks">
|
||||||
<TextArea rows={2}/>
|
<TextArea rows={2}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Spin } from 'antd';
|
||||||
|
|
||||||
|
const ProjectWarningView = ({ projects = [], loading = false,onClick}) => {
|
||||||
|
const warningFields = [
|
||||||
|
{ key: 'new_team', label: '新班组', message: '存在新班组,请做好班组入场管理。' },
|
||||||
|
{ key: 'new_homework_content', label: '新的作业内容', message: '存在新的作业内容,请加强现场管控。' },
|
||||||
|
{ key: 'change_homework_method', label: '改变作业方法', message: '存在改变作业方法,请及时核查施工方案编审、方案交底及人员、机具准备情况。' },
|
||||||
|
{ key: 'changes_geographical', label: '地理环境的变化', message: '存在作业环境的变化,请及时核查施工方案编审、方案交底及人员、机具准备情况。' },
|
||||||
|
{ key: 'changes_meteorological', label: '气象环境的变化', message: '存在气象预警,请关注天气变化,做好应对措施。' },
|
||||||
|
{ key: 'changes_social', label: '社会环境的变化', message: '存在社会环境变化,请合理安排作业计划,避免人员失控。' },
|
||||||
|
{ key: 'changes_management', label: '管理要求的变化', message: '存在管理要求的变化,请加强现场巡查力度,严防无计划作业。' },
|
||||||
|
{ key: 'changes_homework_plan', label: '作业计划的变化', message: '存在作业计划的变化,请做好施工力量配备。' },
|
||||||
|
{ key: 'changes_management_personnel', label: '管理人员的变化', message: '存在管理人员的变化,请加强现场管控。' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const hasWarnings = (item) => {
|
||||||
|
if (typeof item !== 'object') return false;
|
||||||
|
if (item.new_members || item.new_high_altitude || item.new_hired_general) return true;
|
||||||
|
return warningFields.some(({ key }) => item[key]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const filteredProjects = projects.filter(hasWarnings);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="project-warning-view"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
padding: '16px 20px',
|
||||||
|
fontWeight: '700',
|
||||||
|
fontSize: '18px',
|
||||||
|
userSelect: 'none',
|
||||||
|
borderBottom: '1px solid var(--vscode-sidebar-border)'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
工程预警
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
padding: '20px',
|
||||||
|
overflowY: 'auto',
|
||||||
|
flexGrow: 1,
|
||||||
|
maxHeight: '90%',
|
||||||
|
scrollbarWidth: 'thin',
|
||||||
|
scrollbarColor: '#c1c1c1 transparent',
|
||||||
|
}}
|
||||||
|
|
||||||
|
>
|
||||||
|
<Spin spinning={loading} tip="加载中...">
|
||||||
|
{!loading && (
|
||||||
|
<>
|
||||||
|
{filteredProjects.length > 0 ? (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
display: 'grid',
|
||||||
|
gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))',
|
||||||
|
gap: '24px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{filteredProjects.map((item, index) => (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
style={{
|
||||||
|
border: '1px solid #ddd',
|
||||||
|
|
||||||
|
borderRadius: '12px',
|
||||||
|
padding: '20px',
|
||||||
|
boxShadow: '0 6px 15px rgba(0,0,0,0.07)',
|
||||||
|
transition: 'transform 0.3s ease, box-shadow 0.3s ease',
|
||||||
|
cursor: 'pointer',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
gap: '12px',
|
||||||
|
userSelect: 'none',
|
||||||
|
}}
|
||||||
|
onClick={() => onClick(item)}
|
||||||
|
onMouseEnter={(e) => {
|
||||||
|
e.currentTarget.style.transform = 'translateY(-6px) scale(1.02)';
|
||||||
|
e.currentTarget.style.boxShadow = '0 12px 24px rgba(0,0,0,0.15)';
|
||||||
|
}}
|
||||||
|
onMouseLeave={(e) => {
|
||||||
|
e.currentTarget.style.transform = 'translateY(0) scale(1)';
|
||||||
|
e.currentTarget.style.boxShadow = '0 6px 15px rgba(0,0,0,0.07)';
|
||||||
|
}}
|
||||||
|
title={typeof item === 'string' ? item : item.sub_project_name || '未命名项目'}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
fontWeight: '700',
|
||||||
|
fontSize: '16px',
|
||||||
|
whiteSpace: 'nowrap',
|
||||||
|
overflow: 'hidden',
|
||||||
|
textOverflow: 'ellipsis',
|
||||||
|
maxWidth: '100%',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{typeof item === 'string' ? item : item.sub_project_name || '未命名项目'}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{(item.new_members || item.new_high_altitude || item.new_hired_general) && (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
fontSize: '14px',
|
||||||
|
color: '#e64c3c',
|
||||||
|
fontWeight: '600',
|
||||||
|
borderLeft: '4px solid #e64c3c',
|
||||||
|
paddingLeft: '10px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
新人: 存在新人员,请做好人员“面对面”核实。
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{warningFields.map(({key, label, message}) =>
|
||||||
|
item[key] ? (
|
||||||
|
<div
|
||||||
|
key={key}
|
||||||
|
style={{
|
||||||
|
fontSize: '14px',
|
||||||
|
color: '#e64c3c',
|
||||||
|
fontWeight: '600',
|
||||||
|
borderLeft: '4px solid #e64c3c',
|
||||||
|
paddingLeft: '10px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{label}: {message}
|
||||||
|
</div>
|
||||||
|
) : null
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#aaa',
|
||||||
|
fontSize: '15px',
|
||||||
|
marginTop: '50px',
|
||||||
|
userSelect: 'none',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
暂无项目预警
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Spin>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ProjectWarningView;
|
||||||
|
|
@ -36,7 +36,7 @@ const TreeView = ({ treeData, selectedNode, onSelect, loading }) => {
|
||||||
return (
|
return (
|
||||||
<div className="tree-view">
|
<div className="tree-view">
|
||||||
<div style={{padding: '10px', fontWeight: 'bold', borderBottom: '1px solid var(--vscode-sidebar-border)'}}>
|
<div style={{padding: '10px', fontWeight: 'bold', borderBottom: '1px solid var(--vscode-sidebar-border)'}}>
|
||||||
项目结构
|
项目预警
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{loading ? (
|
{loading ? (
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,13 @@ code {
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.project-warning-view {
|
||||||
|
width: 400px;
|
||||||
|
background-color: var(--vscode-sidebar-bg);
|
||||||
|
border-right: 1px solid var(--vscode-sidebar-border);
|
||||||
|
}
|
||||||
|
|
||||||
.data-view {
|
.data-view {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background-color: var(--vscode-editor-bg);
|
background-color: var(--vscode-editor-bg);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue