diff --git a/src/components/admin/SystemAdminPanel.tsx b/src/components/admin/SystemAdminPanel.tsx index 69d7303..246528c 100644 --- a/src/components/admin/SystemAdminPanel.tsx +++ b/src/components/admin/SystemAdminPanel.tsx @@ -91,18 +91,6 @@ type ProjectDatabaseConfig = { has_dsn: boolean; }; -type ProjectGeoServerConfig = { - id?: string | null; - project_id: string; - gs_base_url?: string | null; - gs_admin_user?: string | null; - gs_datastore_name: string; - default_extent?: Record | null; - srid: number; - configured?: boolean; - has_password: boolean; -}; - type DatabaseHealth = { ok: boolean; detail: string; @@ -166,15 +154,6 @@ const createDefaultDatabaseForms = () => ({ iot_data: { ...defaultDatabaseForms.iot_data }, }); -const defaultGeoserverForm = { - gs_base_url: "", - gs_admin_user: "", - gs_admin_password: "", - gs_datastore_name: "ds_postgis", - default_extent: "", - srid: 4326, -}; - const getBusinessRoleLabel = (role: string) => businessRoleOptions.find((option) => option.value === role)?.label ?? role; @@ -363,8 +342,6 @@ export const SystemAdminPanel = () => { const [members, setMembers] = useState([]); const [projects, setProjects] = useState([]); const [databases, setDatabases] = useState([]); - const [geoserverConfig, setGeoserverConfig] = - useState(null); const [currentAdmin, setCurrentAdmin] = useState(null); const [adminChecked, setAdminChecked] = useState(false); const [isAuthorized, setIsAuthorized] = useState(false); @@ -388,7 +365,6 @@ export const SystemAdminPanel = () => { biz_data: null, iot_data: null, }); - const [geoserverForm, setGeoserverForm] = useState(defaultGeoserverForm); const activeUsers = useMemo( () => users.filter((user) => user.is_active).length, @@ -532,36 +508,6 @@ export const SystemAdminPanel = () => { }); }, [projectId]); - const loadGeoserverConfig = useCallback(async () => { - if (!projectId.trim()) return; - const response = await apiFetch( - `${config.BACKEND_URL}/api/v1/admin/projects/${projectId.trim()}/geoserver`, - ); - if (response.status === 404) { - const errorText = await readErrorText(response); - if (isFastApiRouteNotFound(response, errorText)) { - setMetadataConfigAvailable(false); - } - setGeoserverConfig(null); - setGeoserverForm(defaultGeoserverForm); - return; - } - if (!response.ok) { - throw new Error(await readErrorText(response)); - } - setMetadataConfigAvailable(true); - const payload = (await response.json()) as ProjectGeoServerConfig; - setGeoserverConfig(payload); - setGeoserverForm({ - gs_base_url: payload.gs_base_url ?? "", - gs_admin_user: payload.gs_admin_user ?? "", - gs_admin_password: "", - gs_datastore_name: payload.gs_datastore_name || "ds_postgis", - default_extent: formatJsonField(payload.default_extent), - srid: payload.srid || 4326, - }); - }, [projectId]); - useEffect(() => { let cancelled = false; @@ -657,18 +603,16 @@ export const SystemAdminPanel = () => { if (!isAuthorized || !hasProjectId || !metadataConfigAvailable) return; setDatabaseHealth({ biz_data: null, iot_data: null }); loadDatabases().catch((err) => setError(String(err))); - loadGeoserverConfig().catch((err) => setError(String(err))); }, [ hasProjectId, isAuthorized, loadDatabases, - loadGeoserverConfig, metadataConfigAvailable, ]); useEffect(() => { - if (!metadataConfigAvailable && tab !== 4) { - setTab(4); + if (!metadataConfigAvailable && tab !== 3) { + setTab(3); } }, [metadataConfigAvailable, tab]); @@ -769,8 +713,6 @@ export const SystemAdminPanel = () => { setMembers([]); setDatabases([]); setDatabaseForms(createDefaultDatabaseForms()); - setGeoserverConfig(null); - setGeoserverForm(defaultGeoserverForm); setDatabaseHealth({ biz_data: null, iot_data: null }); }; @@ -957,51 +899,6 @@ export const SystemAdminPanel = () => { await loadDatabases(); }; - const saveGeoserverConfig = async (event: FormEvent) => { - event.preventDefault(); - if (!projectId.trim()) return; - setError(null); - setMessage(null); - try { - const payload: Record = { - gs_base_url: geoserverForm.gs_base_url.trim() || null, - gs_admin_user: geoserverForm.gs_admin_user.trim() || null, - gs_datastore_name: geoserverForm.gs_datastore_name.trim() || "ds_postgis", - default_extent: parseOptionalJsonObject( - geoserverForm.default_extent, - "默认范围", - ), - srid: Number(geoserverForm.srid), - }; - if (geoserverForm.gs_admin_password.trim()) { - payload.gs_admin_password = geoserverForm.gs_admin_password.trim(); - } - const response = await apiFetch( - `${config.BACKEND_URL}/api/v1/admin/projects/${projectId.trim()}/geoserver`, - { - method: "PUT", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload), - }, - ); - if (!response.ok) { - const errorText = await readErrorText(response); - if (isFastApiRouteNotFound(response, errorText)) { - setMetadataConfigAvailable(false); - return; - } - throw new Error(errorText); - } - const saved = (await response.json()) as ProjectGeoServerConfig; - setGeoserverConfig(saved); - setGeoserverForm((current) => ({ ...current, gs_admin_password: "" })); - setMessage("GeoServer 配置已保存"); - await loadGeoserverConfig(); - } catch (err) { - setError(String(err)); - } - }; - return ( { )} {isAuthorized && !metadataConfigAvailable && ( - 后端尚未启用项目配置接口,请重启或部署包含 /api/v1/admin/projects 的后端后再使用项目配置、数据库配置和 GeoServer 配置。 + 后端尚未启用项目配置接口,请重启或部署包含 /api/v1/admin/projects 的后端后再使用项目配置和数据库配置。 )} @@ -1226,17 +1123,11 @@ export const SystemAdminPanel = () => { label="数据库配置" disabled={!metadataConfigAvailable} /> - } - iconPosition="start" - label="GeoServer" - disabled={!metadataConfigAvailable} - /> } iconPosition="start" label="系统用户" /> - {tab === 4 && ( + {tab === 3 && ( { )} - {tab === 3 && ( - - } - variant="outlined" - onClick={loadGeoserverConfig} - disabled={!hasProjectId} - > - 刷新配置 - - } - /> - {!hasProjectId && ( - - 当前未选择管理项目。 - - )} - {hasProjectId && ( - - - - - - {selectedProject?.name ?? projectId} - - - {selectedProject?.gs_workspace ?? "未设置工作区"} - - - - - - - setGeoserverForm({ - ...geoserverForm, - gs_base_url: event.target.value, - }) - } - fullWidth - /> - - setGeoserverForm({ - ...geoserverForm, - gs_admin_user: event.target.value, - }) - } - fullWidth - /> - - setGeoserverForm({ - ...geoserverForm, - gs_admin_password: event.target.value, - }) - } - fullWidth - /> - - - - setGeoserverForm({ - ...geoserverForm, - gs_datastore_name: event.target.value, - }) - } - fullWidth - required - /> - - setGeoserverForm({ - ...geoserverForm, - srid: Number(event.target.value), - }) - } - sx={{ width: { xs: "100%", md: 180 } }} - required - /> - - - setGeoserverForm({ - ...geoserverForm, - default_extent: event.target.value, - }) - } - fullWidth - multiline - minRows={4} - placeholder='{"bbox":[120.1,30.1,120.2,30.2]}' - /> - - - - - - )} - - )} -