react-phone-apps/apps/property-survey/app/_layout.tsx
lanrtop eab08d8c96 feat: 新增物品分类管理与第四楼支持
- 新增「设置」Tab,支持物品分类的增删改(数据库持久化)
- 物品分类由硬编码枚举迁移为动态分类,通过 CategoriesContext 全局共享
- items 表新增 unit(单位)、spec(规格)字段,附带旧库迁移
- markers 表 CHECK 约束扩展支持第 4 楼(楼顶),附带重建表迁移
- SVG 地图渲染:overdraw 预渲染提升清晰度,嵌入图片改用原生 Image 渲染
- FoldableLayout 改为 showDetail prop 控制动画宽度

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 23:12:52 +09:00

66 lines
1.7 KiB
TypeScript

import { Tabs } from 'expo-router'
import { useEffect, useState } from 'react'
import { StatusBar } from 'expo-status-bar'
import { ActivityIndicator, View } from 'react-native'
import { SafeAreaProvider } from 'react-native-safe-area-context'
import { initDatabase } from '../src/db/database'
import { CategoriesProvider } from '../src/features/settings/CategoriesContext'
export default function RootLayout() {
const [dbReady, setDbReady] = useState(false)
useEffect(() => {
initDatabase()
.then(() => setDbReady(true))
.catch((err) => {
console.error('数据库初始化失败:', err)
setDbReady(true)
})
}, [])
if (!dbReady) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" />
</View>
)
}
return (
<SafeAreaProvider>
<StatusBar style="auto" />
<CategoriesProvider>
<Tabs
screenOptions={{
headerShown: true,
tabBarActiveTintColor: '#10B981',
}}
>
<Tabs.Screen
name="index"
options={{
title: '登记',
tabBarLabel: '登记',
headerShown: false,
}}
/>
<Tabs.Screen
name="summary"
options={{
title: '汇总',
tabBarLabel: '汇总',
}}
/>
<Tabs.Screen
name="settings"
options={{
title: '设置',
tabBarLabel: '设置',
}}
/>
</Tabs>
</CategoriesProvider>
</SafeAreaProvider>
)
}