调整属性查询面板风格,与分区属性查询面板风格一致;移除官网优化分区的工具栏
This commit is contained in:
@@ -7,7 +7,7 @@ export default function Home() {
|
|||||||
return (
|
return (
|
||||||
<div className="relative w-full h-full overflow-hidden">
|
<div className="relative w-full h-full overflow-hidden">
|
||||||
<MapComponent>
|
<MapComponent>
|
||||||
<MapToolbar hiddenButtons={["style"]} />
|
{/* <MapToolbar hiddenButtons={["style"]} /> */}
|
||||||
<ZonePropsPanel />
|
<ZonePropsPanel />
|
||||||
</MapComponent>
|
</MapComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,15 +18,6 @@ const PropertyPanel: React.FC<PropertyPanelProps> = ({
|
|||||||
type = "未知类型",
|
type = "未知类型",
|
||||||
properties = [],
|
properties = [],
|
||||||
}) => {
|
}) => {
|
||||||
if (!id) {
|
|
||||||
return (
|
|
||||||
<div className="absolute top-0 right-0 h-auto bg-white p-6 rounded-bl-2xl shadow-lg min-w-[320px] z-10">
|
|
||||||
<h3 className="text-lg font-semibold mb-4">属性面板</h3>
|
|
||||||
<p className="text-gray-500">请选择一个要素以查看其属性。</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const formatValue = (property: BaseProperty) => {
|
const formatValue = (property: BaseProperty) => {
|
||||||
if (property.formatter) {
|
if (property.formatter) {
|
||||||
return property.formatter(property.value);
|
return property.formatter(property.value);
|
||||||
@@ -37,24 +28,137 @@ const PropertyPanel: React.FC<PropertyPanelProps> = ({
|
|||||||
return property.value;
|
return property.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isImportantKeys = ["ID", "类型", "Name", "面积", "长度"];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="absolute top-0 right-0 h-auto bg-white p-6 rounded-bl-2xl shadow-lg min-w-[320px] z-10">
|
<div className="absolute top-4 right-4 bg-white shadow-2xl rounded-xl overflow-hidden w-96 max-h-[850px] flex flex-col backdrop-blur-sm opacity-95 hover:opacity-100 transition-all duration-300">
|
||||||
<h3 className="text-lg font-semibold mb-4">属性面板</h3>
|
{/* 头部 */}
|
||||||
<div className="space-y-2">
|
<div className="flex justify-between items-center px-5 py-4 bg-[#257DD4] text-white">
|
||||||
<div>
|
<div className="flex items-center gap-2">
|
||||||
<span className="font-medium">ID:</span>
|
<svg
|
||||||
<span>{id}</span>
|
className="w-5 h-5"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<h3 className="text-lg font-semibold">属性面板</h3>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
<span className="font-medium">类型:</span>
|
|
||||||
<span>{type}</span>
|
{/* 内容区域 */}
|
||||||
</div>
|
<div className="flex-1 overflow-y-auto px-4 py-3">
|
||||||
{properties.map((property, index) => (
|
{!id ? (
|
||||||
<div key={index}>
|
<div className="flex flex-col items-center justify-center py-12 text-gray-400">
|
||||||
<span className="font-medium">{property.label}:</span>
|
<svg
|
||||||
<span>{formatValue(property)}</span>
|
className="w-16 h-16 mb-3"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={1.5}
|
||||||
|
d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<p className="text-sm">暂无属性信息</p>
|
||||||
|
<p className="text-xs mt-1">请选择一个要素以查看其属性</p>
|
||||||
</div>
|
</div>
|
||||||
))}
|
) : (
|
||||||
|
<div className="space-y-2">
|
||||||
|
{/* ID 属性 */}
|
||||||
|
<div className="group rounded-lg p-3 transition-all duration-200 bg-blue-50 hover:bg-blue-100 border-l-4 border-blue-500">
|
||||||
|
<div className="flex justify-between items-start gap-3">
|
||||||
|
<span className="font-medium text-xs uppercase tracking-wide text-blue-700">
|
||||||
|
ID
|
||||||
|
</span>
|
||||||
|
<span className="text-sm font-semibold text-right flex-1 text-blue-900">
|
||||||
|
{id}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 类型属性 */}
|
||||||
|
<div className="group rounded-lg p-3 transition-all duration-200 bg-blue-50 hover:bg-blue-100 border-l-4 border-blue-500">
|
||||||
|
<div className="flex justify-between items-start gap-3">
|
||||||
|
<span className="font-medium text-xs uppercase tracking-wide text-blue-700">
|
||||||
|
类型
|
||||||
|
</span>
|
||||||
|
<span className="text-sm font-semibold text-right flex-1 text-blue-900">
|
||||||
|
{type}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 其他属性 */}
|
||||||
|
{properties.map((property, index) => {
|
||||||
|
const isImportant = isImportantKeys.includes(property.label);
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
key={index}
|
||||||
|
className={`group rounded-lg p-3 transition-all duration-200 ${
|
||||||
|
isImportant
|
||||||
|
? "bg-blue-50 hover:bg-blue-100 border-l-4 border-blue-500"
|
||||||
|
: "bg-gray-50 hover:bg-gray-100"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<div className="flex justify-between items-start gap-3">
|
||||||
|
<span
|
||||||
|
className={`font-medium text-xs uppercase tracking-wide ${
|
||||||
|
isImportant ? "text-blue-700" : "text-gray-600"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{property.label}
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
className={`text-sm font-semibold text-right flex-1 ${
|
||||||
|
isImportant ? "text-blue-900" : "text-gray-800"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{formatValue(property)}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* 底部统计区域 */}
|
||||||
|
<div className="px-5 py-3 bg-gray-50 border-t border-gray-200">
|
||||||
|
<div className="flex items-center justify-between text-xs">
|
||||||
|
<span className="text-gray-600 flex items-center gap-1">
|
||||||
|
<svg
|
||||||
|
className="w-4 h-4"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
strokeWidth={2}
|
||||||
|
d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
共 {id ? properties.length + 2 : 0} 个属性
|
||||||
|
</span>
|
||||||
|
{id && (
|
||||||
|
<span className="text-green-600 flex items-center gap-1 font-medium">
|
||||||
|
<span className="w-2 h-2 bg-green-500 rounded-full animate-pulse"></span>
|
||||||
|
已选中
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ const ZonePropsPanel: React.FC<ZonePropsPanelProps> = ({
|
|||||||
return (
|
return (
|
||||||
<div className="absolute top-4 right-4 bg-white shadow-2xl rounded-xl overflow-hidden w-96 max-h-[850px] flex flex-col backdrop-blur-sm opacity-95 hover:opacity-100 transition-all duration-300">
|
<div className="absolute top-4 right-4 bg-white shadow-2xl rounded-xl overflow-hidden w-96 max-h-[850px] flex flex-col backdrop-blur-sm opacity-95 hover:opacity-100 transition-all duration-300">
|
||||||
{/* 头部 */}
|
{/* 头部 */}
|
||||||
<div className="flex justify-between items-center px-5 py-4 bg-blue-500 text-white">
|
<div className="flex justify-between items-center px-5 py-4 bg-[#257DD4] text-white">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<svg
|
<svg
|
||||||
className="w-5 h-5"
|
className="w-5 h-5"
|
||||||
|
|||||||
Reference in New Issue
Block a user