Add login flow, session routing, and MainTab shell aligned with reference UI.

Implement token-based root routing, Android-matched login screen, five-slot MainTabBar with scan action, and placeholder tab pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 15:12:34 +08:00
parent e290656322
commit b7d74905b7
70 changed files with 1588 additions and 48 deletions

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "icon_cb_privacy_selected.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "icon_cb_privacy_unselect.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "icon_pwd_invisible.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "icon_pwd_visible.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "icon_scan.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "icon_scan@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "icon_scan@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 B

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "img_login_bg.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_data_selected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_data_selected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_data_selected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_data_unselected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_data_unselected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_data_unselected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_home_selected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_home_selected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_home_selected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_home_unselected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_home_unselected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_home_unselected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_order_selected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_order_selected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_order_selected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_order_unselected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_order_unselected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_order_unselected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_profile_selected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_profile_selected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_profile_selected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "tab_profile_unselected.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "tab_profile_unselected@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "tab_profile_unselected@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB