purewhiter--mobilegym
301 行
9.2 KiB
TypeScript
301 行
9.2 KiB
TypeScript
const MAIN_SCROLL = [
|
|
{ name: 'main', direction: 'vertical', description: '页面主内容区' },
|
|
] as const;
|
|
|
|
const DAILY_FORECAST_SCROLL = [
|
|
{ name: 'main', direction: 'vertical', description: '15日预报页面主内容区' },
|
|
{ name: 'forecast', direction: 'horizontal', description: '15日预报横向滚动区' },
|
|
] as const;
|
|
|
|
export const NAVIGATION_DECLARATION = {
|
|
app: 'weather',
|
|
routes: [
|
|
{
|
|
path: '/',
|
|
component: 'WeatherContent',
|
|
params: {},
|
|
entryPoint: 'home',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'weather.home.base', search: { menu: null }, description: '天气首页' },
|
|
{
|
|
id: 'weather.home.menu',
|
|
search: { menu: 'more' },
|
|
description: '首页更多菜单',
|
|
actions: [
|
|
{ id: 'menu.feedback', label: '反馈天气', behavior: 'other' },
|
|
],
|
|
},
|
|
],
|
|
queryParams: {},
|
|
description: '天气首页',
|
|
},
|
|
{
|
|
path: '/settings',
|
|
component: 'WeatherSettingsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [
|
|
{ id: 'weather.settings.base', search: { picker: null }, description: '天气设置页' },
|
|
{
|
|
id: 'weather.settings.picker.temp',
|
|
search: { picker: 'temp' },
|
|
description: '天气设置-温度单位选择',
|
|
actions: [
|
|
{ id: 'settings.tempUnit.select.celsius', label: '选择摄氏度°C', behavior: 'select' },
|
|
{ id: 'settings.tempUnit.select.fahrenheit', label: '选择华氏度°F', behavior: 'select' },
|
|
],
|
|
},
|
|
{
|
|
id: 'weather.settings.picker.wind',
|
|
search: { picker: 'wind' },
|
|
description: '天气设置-风力单位选择',
|
|
actions: [
|
|
{ id: 'settings.windUnit.select.beaufort', label: '选择蒲福风级', behavior: 'select' },
|
|
{ id: 'settings.windUnit.select.kmh', label: '选择公里/小时', behavior: 'select' },
|
|
{ id: 'settings.windUnit.select.ms', label: '选择米/秒', behavior: 'select' },
|
|
{ id: 'settings.windUnit.select.mph', label: '选择英里/小时', behavior: 'select' },
|
|
{ id: 'settings.windUnit.select.kn', label: '选择节', behavior: 'select' },
|
|
],
|
|
},
|
|
{
|
|
id: 'weather.settings.picker.pressure',
|
|
search: { picker: 'pressure' },
|
|
description: '天气设置-气压单位选择',
|
|
actions: [
|
|
{ id: 'settings.pressureUnit.select.hpa', label: '选择百帕(hPa)', behavior: 'select' },
|
|
{ id: 'settings.pressureUnit.select.mmhg', label: '选择毫米汞柱(mmHg)', behavior: 'select' },
|
|
{ id: 'settings.pressureUnit.select.inhg', label: '选择英寸汞柱(inHg)', behavior: 'select' },
|
|
],
|
|
},
|
|
],
|
|
queryParams: {},
|
|
description: '天气设置页',
|
|
},
|
|
{
|
|
path: '/settings/privacy',
|
|
component: 'WeatherPrivacySettingsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.privacy.base', search: {}, description: '隐私设置页' }],
|
|
queryParams: {},
|
|
description: '隐私设置页',
|
|
},
|
|
{
|
|
path: '/settings/permissions',
|
|
component: 'WeatherPermissionsPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.permissions.base', search: {}, description: '权限说明页' }],
|
|
queryParams: {},
|
|
description: '权限说明页',
|
|
},
|
|
{
|
|
path: '/cities',
|
|
component: 'WeatherCityManagerPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.cityManager.base', search: {}, description: '城市管理页' }],
|
|
queryParams: {},
|
|
description: '城市管理页',
|
|
},
|
|
{
|
|
path: '/cities/search',
|
|
component: 'WeatherCitySearchPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.citySearch.base', search: {}, description: '城市搜索页' }],
|
|
queryParams: {},
|
|
description: '城市搜索页',
|
|
},
|
|
{
|
|
path: '/cities/preview',
|
|
component: 'WeatherCityPreviewPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.cityPreview.base', search: {}, description: '城市预览页' }],
|
|
queryParams: { cityId: 'string' },
|
|
description: '城市天气预览页',
|
|
},
|
|
{
|
|
path: '/forecast/daily',
|
|
component: 'WeatherDailyForecastPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: DAILY_FORECAST_SCROLL,
|
|
uiStates: [{ id: 'weather.dailyForecast.base', search: {}, description: '15日天气预报页' }],
|
|
queryParams: { cityId: 'string' },
|
|
description: '15日天气预报页',
|
|
},
|
|
{
|
|
path: '/airquality',
|
|
component: 'WeatherAirQualityPage',
|
|
params: {},
|
|
entryPoint: 'none',
|
|
scrollContainers: MAIN_SCROLL,
|
|
uiStates: [{ id: 'weather.airQuality.base', search: {}, description: '空气质量详情页' }],
|
|
queryParams: { cityId: 'string' },
|
|
description: '空气质量详情页',
|
|
},
|
|
],
|
|
transitions: [
|
|
{
|
|
id: 'cities.open',
|
|
from: '/',
|
|
to: '/cities',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开城市管理',
|
|
ui: { placement: 'topbar', icon: 'add', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'menu.open',
|
|
from: '/',
|
|
to: '/',
|
|
search: { menu: 'more' },
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开更多菜单',
|
|
ui: { placement: 'topbar', icon: 'more', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.open',
|
|
from: { path: '/', search: { menu: 'more' } },
|
|
to: '/settings',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '打开天气设置',
|
|
ui: { placement: 'content', icon: 'settings', gesture: 'tap' },
|
|
},
|
|
// =========================
|
|
// Settings picker overlays
|
|
// =========================
|
|
{
|
|
id: 'settings.picker.temp.open',
|
|
from: '/settings',
|
|
to: '/settings',
|
|
search: { picker: 'temp' },
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开温度单位选择',
|
|
ui: { placement: 'content', icon: 'temp', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.picker.wind.open',
|
|
from: '/settings',
|
|
to: '/settings',
|
|
search: { picker: 'wind' },
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开风力单位选择',
|
|
ui: { placement: 'content', icon: 'wind', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'settings.picker.pressure.open',
|
|
from: '/settings',
|
|
to: '/settings',
|
|
search: { picker: 'pressure' },
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开气压单位选择',
|
|
ui: { placement: 'content', icon: 'pressure', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'privacy.open',
|
|
from: '/settings',
|
|
to: '/settings/privacy',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开隐私政策',
|
|
ui: { placement: 'content', icon: 'privacy', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'permissions.open',
|
|
from: '/settings/privacy',
|
|
to: '/settings/permissions',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开权限说明',
|
|
ui: { placement: 'content', icon: 'permission', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'city.search.open',
|
|
from: '/cities',
|
|
to: '/cities/search',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开城市搜索',
|
|
ui: { placement: 'content', icon: 'search', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'city.preview.open',
|
|
from: '/cities/search',
|
|
to: '/cities/preview',
|
|
search: {},
|
|
searchParams: { cityId: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开城市预览',
|
|
ui: { placement: 'content', icon: 'city', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'home.open',
|
|
from: '/cities/preview',
|
|
to: '/',
|
|
search: {},
|
|
searchParams: {},
|
|
mode: 'replace',
|
|
params: {},
|
|
label: '返回天气首页',
|
|
ui: { placement: 'content', icon: 'confirm', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'forecast.daily.open',
|
|
from: ['/', '/cities/preview'],
|
|
to: '/forecast/daily',
|
|
search: {},
|
|
searchParams: { cityId: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开15日天气预报',
|
|
ui: { placement: 'content', icon: 'forecast', gesture: 'tap' },
|
|
},
|
|
{
|
|
id: 'airquality.open',
|
|
from: ['/', '/cities/preview'],
|
|
to: '/airquality',
|
|
search: {},
|
|
searchParams: { cityId: 'string' },
|
|
mode: 'push',
|
|
params: {},
|
|
label: '打开空气质量详情',
|
|
ui: { placement: 'content', icon: 'leaf', gesture: 'tap' },
|
|
},
|
|
],
|
|
capabilities: {
|
|
historyBack: true,
|
|
},
|
|
} as const;
|
|
|
|
export type TransitionId = typeof NAVIGATION_DECLARATION.transitions[number]['id'];
|