From 7df25edd961bba16da0caf80e958871598b725fb Mon Sep 17 00:00:00 2001 From: nanxun Date: Sun, 26 Jul 2026 11:57:57 +0800 Subject: [PATCH] Add transfer tracking and secure admin access --- admin-web/src/App.vue | 40 +- admin-web/src/api/index.ts | 35 +- admin-web/src/auth.ts | 66 + admin-web/src/router/index.ts | 20 + admin-web/src/views/AdminAccounts.vue | 134 + admin-web/src/views/Audit.vue | 47 + admin-web/src/views/ChangePassword.vue | 61 + admin-web/src/views/Login.vue | 57 + .../ApiIntegrationTests.cs | 284 +- .../PushIntegrationTests.cs | 5 +- .../Contracts/AdminContracts.cs | 7 + .../Contracts/BusinessContracts.cs | 52 +- .../Controllers/AdminAccountsController.cs | 145 ++ .../Controllers/AdminAuthController.cs | 85 + .../Controllers/BudgetsController.cs | 7 +- .../Controllers/ChatController.cs | 16 +- .../Controllers/ParseController.cs | 91 +- .../Controllers/ReportsController.cs | 11 +- .../Controllers/TransactionsController.cs | 268 +- .../Controllers/UsersController.cs | 25 +- backend/MiaoJiZhang.Api/Program.cs | 26 +- .../Services/AdminAuditMiddleware.cs | 71 + .../Services/AdminAuthAttribute.cs | 53 +- .../Services/AdminBootstrapService.cs | 38 + .../Services/AdminSessionService.cs | 217 ++ .../MiaoJiZhang.Api/Services/AgentService.cs | 86 +- .../MiaoJiZhang.Api/Services/AiServices.cs | 16 +- .../Services/BudgetPushService.cs | 4 +- .../Services/BudgetRecommendationService.cs | 8 +- backend/MiaoJiZhang.Api/Services/LlmClient.cs | 17 +- .../Services/OpenAiVisionClient.cs | 82 +- backend/MiaoJiZhang.Api/appsettings.json | 4 +- .../wwwroot/assets/AdminAccounts-BxH8Tvl4.css | 1 + .../wwwroot/assets/AdminAccounts-xELW_24X.js | 1 + .../wwwroot/assets/Audit-DpmM8lbq.js | 1 + .../wwwroot/assets/Audit-JCYtiNTO.css | 1 + .../wwwroot/assets/Avatars-C-Wo_pPa.js | 1 + .../wwwroot/assets/Avatars-_cLWzrux.js | 1 - .../assets/ChangePassword-DjS4RQAq.css | 1 + .../wwwroot/assets/ChangePassword-xz_zpSth.js | 1 + .../assets/CheckCircleOutlined-Cj-UZA8Z.js | 57 + .../wwwroot/assets/Configs-D-dS3WsF.js | 1 - .../wwwroot/assets/Configs-Ga-2Xx4M.js | 1 + .../wwwroot/assets/Dashboard-BXeKlUaO.js | 1 + .../wwwroot/assets/Dashboard-CuG4yPoO.js | 1 - .../wwwroot/assets/DeleteOutlined-9xCyM9wU.js | 1 + .../wwwroot/assets/DeleteOutlined-yVoeJ3Fd.js | 1 - .../wwwroot/assets/EditOutlined-BANF15gL.js | 1 + .../wwwroot/assets/EditOutlined-h6ScL3Qz.js | 1 - .../wwwroot/assets/Login-CQg7MvS_.css | 1 + .../wwwroot/assets/Login-Cl1usiNO.js | 1 + .../wwwroot/assets/Personas-C1q-3qo3.js | 1 - .../wwwroot/assets/Personas-ow2fn6F8.js | 1 + .../wwwroot/assets/PushCampaigns-BINkv7-Z.js | 1 - .../wwwroot/assets/PushCampaigns-DJpHjoz4.js | 1 + .../wwwroot/assets/ReloadOutlined-B8fhuZd5.js | 1 + .../wwwroot/assets/ReloadOutlined-CVrW_3-b.js | 1 - .../wwwroot/assets/Settings-BDielewc.js | 1 - .../wwwroot/assets/Settings-DerxQWe0.js | 1 + .../wwwroot/assets/Stickers-DUjXvIGf.js | 1 + .../wwwroot/assets/Stickers-XxXWJcKc.js | 1 - .../wwwroot/assets/SysCategories-CQ5KlFMH.js | 1 + .../wwwroot/assets/SysCategories-DuRocsDz.js | 1 - .../wwwroot/assets/TeamOutlined-0klbs6LP.js | 1 - .../wwwroot/assets/TeamOutlined-TB46PgwW.js | 1 + .../wwwroot/assets/Users-BMT8aDm5.js | 1 - .../wwwroot/assets/Users-CKf2UaT3.js | 1 + .../_plugin-vue_export-helper-BDNMzG2s.js | 1 + .../wwwroot/assets/api-DftvpHMa.js | 9 + .../wwwroot/assets/api-wmB-hCXT.js | 9 - .../wwwroot/assets/auth-BCjWWmZ9.js | 1 + .../assets/config-provider-DjHSmQsy.js | 55 + .../assets/config-provider-q7ATIdCu.js | 111 - .../wwwroot/assets/dayjs.min-BCbhqiun.js | 1 + .../wwwroot/assets/dayjs.min-CeCVojfG.js | 1 - .../wwwroot/assets/index-BK5aVReu.js | 363 --- .../wwwroot/assets/index-DxeieaIN.js | 327 +++ .../wwwroot/assets/modal-B_MK8QJe.js | 37 + backend/MiaoJiZhang.Api/wwwroot/index.html | 18 +- .../Entities/AdminSecurity.cs | 60 + backend/MiaoJiZhang.Domain/Entities/Ledger.cs | 13 +- backend/MiaoJiZhang.Domain/Enums/Enums.cs | 41 +- .../Persistence/AppDbContext.cs | 49 +- ...24307_TransferAndAdminSecurity.Designer.cs | 1255 +++++++++ ...20260726024307_TransferAndAdminSecurity.cs | 255 ++ .../Migrations/AppDbContextModelSnapshot.cs | 2280 +++++++++-------- docs/DEVELOPER.md | 22 +- docs/app-client-integration.md | 13 +- .../main/kotlin/com/nx/miaoji/MainActivity.kt | 13 +- .../kotlin/com/nx/miaoji/PaymentParser.kt | 27 +- .../nx/miaoji/RecognitionBridgeProvider.kt | 7 + .../com/nx/miaoji/RecognitionCoordinator.kt | 2 + .../kotlin/com/nx/miaoji/RecognitionStore.kt | 109 +- .../miaoji/ScreenshotAccessibilityService.kt | 88 +- .../kotlin/com/nx/miaoji/PaymentParserTest.kt | 30 + frontend/lib/features/add/add_page.dart | 102 +- frontend/lib/features/add/parse_sheet.dart | 8 +- .../features/add/screenshot_parse_sheet.dart | 98 +- .../lib/features/home/pages/search_page.dart | 21 +- .../home/pages/transaction_edit_page.dart | 41 +- .../features/home/pages/tx_detail_page.dart | 10 +- .../settings/recognition_batch_page.dart | 151 +- .../settings/screenshot_settings_page.dart | 2 +- frontend/lib/shared/api/business_api.dart | 91 +- .../lib/shared/services/local_database.dart | 199 +- .../services/recognition_import_service.dart | 44 +- .../shared/services/screenshot_channel.dart | 46 +- frontend/pubspec.yaml | 2 +- frontend/test/api_models_test.dart | 26 + .../test/local_transfer_database_test.dart | 85 + release-notes/JiZhi-1.2.5-internal-133.md | 21 + 111 files changed, 6379 insertions(+), 1934 deletions(-) create mode 100644 admin-web/src/auth.ts create mode 100644 admin-web/src/views/AdminAccounts.vue create mode 100644 admin-web/src/views/Audit.vue create mode 100644 admin-web/src/views/ChangePassword.vue create mode 100644 admin-web/src/views/Login.vue create mode 100644 backend/MiaoJiZhang.Api/Contracts/AdminContracts.cs create mode 100644 backend/MiaoJiZhang.Api/Controllers/AdminAccountsController.cs create mode 100644 backend/MiaoJiZhang.Api/Controllers/AdminAuthController.cs create mode 100644 backend/MiaoJiZhang.Api/Services/AdminAuditMiddleware.cs create mode 100644 backend/MiaoJiZhang.Api/Services/AdminBootstrapService.cs create mode 100644 backend/MiaoJiZhang.Api/Services/AdminSessionService.cs create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/AdminAccounts-BxH8Tvl4.css create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/AdminAccounts-xELW_24X.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Audit-DpmM8lbq.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Audit-JCYtiNTO.css create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Avatars-C-Wo_pPa.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Avatars-_cLWzrux.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/ChangePassword-DjS4RQAq.css create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/ChangePassword-xz_zpSth.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/CheckCircleOutlined-Cj-UZA8Z.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Configs-D-dS3WsF.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Configs-Ga-2Xx4M.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Dashboard-BXeKlUaO.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Dashboard-CuG4yPoO.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/DeleteOutlined-9xCyM9wU.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/DeleteOutlined-yVoeJ3Fd.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/EditOutlined-BANF15gL.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/EditOutlined-h6ScL3Qz.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Login-CQg7MvS_.css create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Login-Cl1usiNO.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Personas-C1q-3qo3.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Personas-ow2fn6F8.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/PushCampaigns-BINkv7-Z.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/PushCampaigns-DJpHjoz4.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/ReloadOutlined-B8fhuZd5.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/ReloadOutlined-CVrW_3-b.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Settings-BDielewc.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Settings-DerxQWe0.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Stickers-DUjXvIGf.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Stickers-XxXWJcKc.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/SysCategories-CQ5KlFMH.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/SysCategories-DuRocsDz.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/TeamOutlined-0klbs6LP.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/TeamOutlined-TB46PgwW.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Users-BMT8aDm5.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/Users-CKf2UaT3.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/_plugin-vue_export-helper-BDNMzG2s.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/api-DftvpHMa.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/api-wmB-hCXT.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/auth-BCjWWmZ9.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/config-provider-DjHSmQsy.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/config-provider-q7ATIdCu.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/dayjs.min-BCbhqiun.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/dayjs.min-CeCVojfG.js delete mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/index-BK5aVReu.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/index-DxeieaIN.js create mode 100644 backend/MiaoJiZhang.Api/wwwroot/assets/modal-B_MK8QJe.js create mode 100644 backend/MiaoJiZhang.Domain/Entities/AdminSecurity.cs create mode 100644 backend/MiaoJiZhang.Infrastructure/Persistence/Migrations/20260726024307_TransferAndAdminSecurity.Designer.cs create mode 100644 backend/MiaoJiZhang.Infrastructure/Persistence/Migrations/20260726024307_TransferAndAdminSecurity.cs create mode 100644 frontend/test/local_transfer_database_test.dart create mode 100644 release-notes/JiZhi-1.2.5-internal-133.md diff --git a/admin-web/src/App.vue b/admin-web/src/App.vue index 44d76fc..fa91f0f 100644 --- a/admin-web/src/App.vue +++ b/admin-web/src/App.vue @@ -1,9 +1,11 @@