diff --git a/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.js b/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.js index 7f1d3c1..e31b727 100644 --- a/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.js +++ b/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.js @@ -1,10 +1,181 @@ -import React from 'react'; +import React, { useState } from 'react'; +import { Select, Tree } from 'antd'; import styles from './BasicAttribute.less'; +const buildingOptions = [ + { label: '工厂建筑', value: 'plant' }, + { label: '仓储设施', value: 'warehouse' }, +]; + +const factoryOptions = [ + { label: '全部工厂', value: 'all' }, + { label: '上海油库', value: 'shanghai' }, + { label: '南京油库', value: 'nanjing' }, +]; + +const treeData = [ + { + title: '上海油库', + key: 'shanghai', + children: [ + { + title: '汽油罐区', + key: 'gasoline-area', + children: [ + { + title: '汽油调合罐组', + key: 'blend-group', + children: [ + { + title: 'T-101 汽油储罐', + key: 't101', + children: [ + { title: 'LT-101 液位变送器', key: 'lt101' }, + { title: 'TT-101 温度变送器', key: 'tt101' }, + { title: 'PT-101 压力变送器', key: 'pt101' }, + { title: 'P-101A 输送泵', key: 'p101a' }, + { title: 'P-101B 输送泵', key: 'p101b' }, + { title: 'SP-101 密度计', key: 'sp101' }, + ], + }, + { title: 'T-102 汽油储罐', key: 't102' }, + { title: 'T-103 汽油储罐', key: 't103' }, + ], + }, + ], + }, + { + title: '柴油罐区', + key: 'diesel-area', + }, + { + title: '化危品库', + key: 'hazard', + }, + ], + }, +]; + +const infoCards = [ + { + title: '基本信息', + items: [ + { label: '储罐编号', value: 'T-101' }, + { label: '设备名称', value: '汽油储罐' }, + { label: '所属园区', value: '汽油罐区' }, + { label: '所属罐组', value: '汽油调合罐组' }, + { label: '用途类型', value: '常规罐' }, + { label: '投用日期', value: '2020-05-18' }, + { label: '状态', value: '在用' }, + ], + }, + { + title: '结构参数', + items: [ + { label: '几何容量', value: '5000 m³' }, + { label: '安全液位', value: '90%' }, + { label: '紧急高液位', value: '95%' }, + { label: '紧急低液位', value: '5%' }, + { label: '罐底留存量', value: '50 m³' }, + { label: '容积表 ID', value: 'VOL-T-101-2020' }, + { label: '罐顶类型', value: '浮顶' }, + ], + }, + { + title: '设备属性', + items: [ + { label: '材质', value: 'Q235B 碳钢' }, + { label: '设计压力', value: '0.6 MPa' }, + { label: '设计温度', value: '-10 ~ 60 ℃' }, + { label: '直径', value: '22 m' }, + { label: '高度', value: '13.5 m' }, + { label: '防腐等级', value: 'C4' }, + ], + }, + { + title: '关联信息', + items: [ + { label: '进油管线', value: ['P-1010', 'P-1011'], type: 'tags' }, + { label: '出油管线', value: ['P-1020', 'P-1021', 'P-1022'], type: 'tags' }, + { label: '配套泵', value: ['P-101A', 'P-101B'], type: 'tags' }, + { label: '测量点', value: ['SP-101'], type: 'tags' }, + { label: '安全联锁', value: ['高液位联锁关闭进口阀'], type: 'tags' }, + ], + }, +]; + const BasicAttribute = () => { + const [buildingType, setBuildingType] = useState('plant'); + const [factory, setFactory] = useState('all'); + return (
-
待开发
+
+
+ + 工厂层级结构 +
+
+ +
+
+ +
+
+ +
+
+ + 基本属性 +
+
+ {infoCards.map(card => ( +
+
{card.title}
+
+ {card.items.map(item => ( +
+ {item.label} + + {item.type === 'tags' && Array.isArray(item.value) ? ( + + {item.value.map(tag => ( + + {tag} + + ))} + + ) : ( + item.value + )} + +
+ ))} +
+
+ ))} +
+
); }; diff --git a/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.less b/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.less index b4d4d98..0a7c99d 100644 --- a/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.less +++ b/src/pages/business_basic/components/second_datamodel_components/BasicAttribute.less @@ -1,4 +1,165 @@ .container { - padding: 20px; + display: flex; + gap: 16px; + padding: 16px; + background-color: #f6f8fb; + border-radius: 12px; + min-height: 520px; + + .leftPanel { + flex: 0 0 320px; + background: #fff; + border-radius: 12px; + padding: 20px; + display: flex; + flex-direction: column; + box-shadow: 0 4px 20px rgba(21, 32, 66, 0.04); + } + + .rightPanel { + flex: 1; + background: #fff; + border-radius: 12px; + padding: 20px; + box-shadow: 0 4px 20px rgba(21, 32, 66, 0.04); + display: flex; + flex-direction: column; + } + + .blockHeader { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 16px; + + .titleIcon { + width: 3px; + height: 16px; + border-radius: 2px; + background: linear-gradient(180deg, #21c6b7 0%, #0c8dff 100%); + display: inline-block; + } + + .blockTitle { + font-size: 16px; + font-weight: 600; + color: #1f2f3d; + } + } + + .filters { + display: flex; + gap: 12px; + margin-bottom: 16px; + + .filterSelect { + width: 100%; + } + } + + .treeWrapper { + flex: 1; + overflow: auto; + background: #f8fafc; + border-radius: 12px; + padding: 12px; + border: 1px solid #e4e9f2; + + .tree :global(.ant-tree-node-content-wrapper) { + font-size: 13px; + padding: 4px 8px; + } + + .tree :global(.ant-tree-switcher) { + width: 18px; + } + } + + .infoGrid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + margin-top: 8px; + + .infoCard { + background: #f8fafc; + border-radius: 12px; + padding: 16px; + border: 1px solid #e4e9f2; + min-height: 220px; + + .cardTitle { + font-size: 15px; + font-weight: 600; + color: #1f2f3d; + margin-bottom: 12px; + } + + .cardBody { + display: flex; + flex-direction: column; + gap: 8px; + + .itemRow { + display: flex; + gap: 12px; + align-items: flex-start; + font-size: 13px; + color: #4f5e6f; + + .itemLabel { + width: 90px; + color: #7d8a99; + } + + .itemValue { + flex: 1; + color: #1f2f3d; + font-weight: 500; + + .tagList { + display: flex; + flex-wrap: wrap; + gap: 8px; + + .tag { + display: inline-flex; + align-items: center; + padding: 2px 10px; + border-radius: 999px; + background: rgba(12, 141, 255, 0.08); + color: #0c8dff; + font-size: 12px; + font-weight: 500; + } + } + } + } + } + } + } } +.tree :global(.ant-tree-node-content-wrapper) { + font-size: 13px; + padding: 4px 8px; +} + +.tree :global(.ant-tree-switcher) { + width: 18px; +} + +// @media (max-width: 1400px) { +// .container { +// flex-direction: column; + +// .leftPanel { +// flex: none; +// width: 100%; +// } + +// .infoGrid { +// grid-template-columns: 1fr; +// } +// } +// }