Files
smart-crop-ui/crop-x/src/app/central-config/tenant-management/tenant-authorization/page.tsx
2025-10-20 16:19:41 +08:00

243 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Metadata } from 'next'
export const metadata: Metadata = {
title: '租户授权 - Crop-X 智慧农业管理系统',
description: '租户授权管理页面',
}
export default function TenantAuthorizationPage() {
return (
<div className="space-y-6">
<div className="bg-white rounded-lg shadow p-6">
<h2 className="text-2xl font-bold text-gray-800 mb-6">
🔐
</h2>
<div className="mb-6">
<div className="flex items-center space-x-4">
<select className="px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
<option></option>
<option>T001 - 绿</option>
<option>T002 - </option>
<option>T003 - </option>
<option>T004 - </option>
</select>
<button className="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors">
</button>
</div>
</div>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
<div className="lg:col-span-2">
<div className="bg-green-50 rounded-lg p-6">
<h3 className="text-lg font-semibold text-green-900 mb-4">
📋
</h3>
<div className="space-y-4">
{[
{ module: '智能农机管理', code: 'machinery', enabled: true, features: ['档案管理', '实时监控', '任务调度', '数据分析'] },
{ module: '地块信息管理', code: 'land', enabled: true, features: ['地块档案', '地图管理', '空间分析', '环境监测'] },
{ module: '农事操作管理', code: 'farming', enabled: true, features: ['农事计划', '任务管理', '操作执行', '知识库'] },
{ module: '农业资产管理', code: 'asset', enabled: false, features: ['基础信息', '采购管理', '库存管理', '物资领用'] },
{ module: 'AI作物模型', code: 'ai-model', enabled: false, features: ['数据感知', '模型应用', '智能决策', '监控中心'] },
{ module: '水肥控制', code: 'irrigation', enabled: true, features: ['水肥机管理', '智能灌溉', '施肥配方', '实时监测'] },
{ module: '中心配置', code: 'config', enabled: false, features: ['租户管理', '用户管理', '系统参数', '消息中心'] },
].map((item, index) => (
<div key={index} className="bg-white rounded-lg p-4">
<div className="flex justify-between items-center mb-3">
<div className="flex items-center">
<input
type="checkbox"
className="h-4 w-4 text-green-600 focus:ring-green-500 border-gray-300 rounded mr-3"
defaultChecked={item.enabled}
/>
<h4 className="font-medium text-gray-800">{item.module}</h4>
<span className="ml-2 text-xs text-gray-500 bg-gray-100 px-2 py-1 rounded">
{item.code}
</span>
</div>
<button className="text-blue-600 hover:text-blue-800 text-sm">
</button>
</div>
<div className="grid grid-cols-2 md:grid-cols-4 gap-2">
{item.features.map((feature, featureIndex) => (
<label key={featureIndex} className="flex items-center text-sm">
<input
type="checkbox"
className="h-3 w-3 text-green-600 focus:ring-green-500 border-gray-300 rounded mr-2"
defaultChecked={item.enabled}
/>
<span className={item.enabled ? 'text-gray-700' : 'text-gray-400'}>
{feature}
</span>
</label>
))}
</div>
</div>
))}
</div>
</div>
</div>
<div className="space-y-6">
<div className="bg-blue-50 rounded-lg p-6">
<h3 className="text-lg font-semibold text-blue-900 mb-4">
🔑 API访问权限
</h3>
<div className="space-y-4">
<div className="flex items-center justify-between">
<span className="text-gray-700">API访问</span>
<span className="text-sm text-green-600"></span>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
API Key
</label>
<div className="flex space-x-2">
<input
type="password"
className="flex-1 px-3 py-2 border border-gray-300 rounded-md bg-gray-50"
value="••••••••••••••••••••••••••••••••"
readOnly
/>
<button className="px-3 py-1 bg-blue-600 text-white text-sm rounded hover:bg-blue-700">
</button>
</div>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
访
</label>
<select className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
<option>1000/</option>
<option>5000/</option>
<option>10000/</option>
<option></option>
</select>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
IP白名单
</label>
<textarea
className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
rows={3}
placeholder="输入允许访问的IP地址每行一个"
></textarea>
</div>
</div>
</div>
<div className="bg-purple-50 rounded-lg p-6">
<h3 className="text-lg font-semibold text-purple-900 mb-4">
📊
</h3>
<div className="space-y-2">
<div className="flex justify-between items-center">
<span className="text-gray-600"></span>
<span className="font-semibold text-green-600">4 / 7</span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600"></span>
<span className="font-semibold text-blue-600">18 / 28</span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600">API权限</span>
<span className="font-semibold text-purple-600"></span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600"></span>
<span className="text-sm text-gray-500">2024-10-20 15:30</span>
</div>
</div>
</div>
<div className="bg-orange-50 rounded-lg p-6">
<h3 className="text-lg font-semibold text-orange-900 mb-4">
</h3>
<div className="space-y-2">
<button className="w-full px-4 py-2 bg-green-600 text-white rounded-md hover:bg-green-700 transition-colors">
</button>
<button className="w-full px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors">
</button>
<button className="w-full px-4 py-2 bg-purple-600 text-white rounded-md hover:bg-purple-700 transition-colors">
</button>
</div>
</div>
</div>
</div>
<div className="mt-6 bg-yellow-50 rounded-lg p-6">
<h3 className="text-lg font-semibold text-yellow-900 mb-4">
📋
</h3>
<div className="overflow-x-auto">
<table className="min-w-full divide-y divide-gray-200">
<thead className="bg-yellow-100">
<tr>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-700 uppercase tracking-wider">
</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-700 uppercase tracking-wider">
</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-700 uppercase tracking-wider">
</th>
<th className="px-6 py-3 text-left text-xs font-medium text-gray-700 uppercase tracking-wider">
</th>
</tr>
</thead>
<tbody className="bg-white divide-y divide-gray-200">
{[
{ time: '2024-10-20 15:30', type: '模块授权', content: '启用智能农机管理模块', operator: 'admin' },
{ time: '2024-10-20 14:15', type: '权限调整', content: '关闭农业资产管理模块', operator: 'admin' },
{ time: '2024-10-20 10:45', type: 'API配置', content: '重置API密钥', operator: 'admin' },
{ time: '2024-10-19 16:20', type: '权限调整', content: '启用水肥控制模块', operator: 'admin' },
].map((record, index) => (
<tr key={index}>
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{record.time}
</td>
<td className="px-6 py-4 whitespace-nowrap">
<span className={`px-2 py-1 text-xs font-medium rounded-full ${
record.type === '模块授权' ? 'bg-green-100 text-green-800' :
record.type === '权限调整' ? 'bg-blue-100 text-blue-800' :
'bg-purple-100 text-purple-800'
}`}>
{record.type}
</span>
</td>
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{record.content}
</td>
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{record.operator}
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
<div className="mt-6 flex justify-end space-x-4">
<button className="px-6 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors">
</button>
<button className="px-6 py-2 bg-green-600 text-white rounded-md hover:bg-green-700 transition-colors">
</button>
</div>
</div>
</div>
)
}