From 92062262a6b9e2c2d80e7324a1659a26825b20f2 Mon Sep 17 00:00:00 2001 From: zzh Date: Thu, 26 Mar 2026 10:33:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E5=8F=B3=E4=B8=8B=E8=A7=92=E4=B8=89=E4=B8=AA=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=9A=E6=9C=9F=E5=88=9D=E5=BA=93=E5=AD=98=E3=80=81=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E9=9C=80=E6=B1=82=E3=80=81=E6=99=BA=E8=83=BD=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 0 .gitignore | 0 .shared/ui-ux-pro-max/data/charts.csv | 0 .shared/ui-ux-pro-max/data/colors.csv | 0 .shared/ui-ux-pro-max/data/landing.csv | 0 .shared/ui-ux-pro-max/data/products.csv | 0 .shared/ui-ux-pro-max/data/prompts.csv | 0 .shared/ui-ux-pro-max/data/stacks/flutter.csv | 0 .../data/stacks/html-tailwind.csv | 0 .shared/ui-ux-pro-max/data/stacks/nextjs.csv | 0 .../data/stacks/react-native.csv | 0 .shared/ui-ux-pro-max/data/stacks/react.csv | 0 .shared/ui-ux-pro-max/data/stacks/svelte.csv | 0 .shared/ui-ux-pro-max/data/stacks/swiftui.csv | 0 .shared/ui-ux-pro-max/data/stacks/vue.csv | 0 .shared/ui-ux-pro-max/data/styles.csv | 0 .shared/ui-ux-pro-max/data/typography.csv | 0 .shared/ui-ux-pro-max/data/ux-guidelines.csv | 0 .shared/ui-ux-pro-max/scripts/core.py | 0 .shared/ui-ux-pro-max/scripts/search.py | 0 .windsurf/workflows/ui-ux-pro-max.md | 0 AI_ANALYSIS_README.md | 0 README.md | 0 add_customer_name_column.py | 0 backend/.env.example | 0 backend/ai_service.py | 0 backend/api_ai.py | 0 backend/requirements_ai.txt | 0 backend/test_ai.py | 0 check_reconciliations.py | 0 cookies.txt | 0 dashboard.svg | 0 date-dark.svg | 0 date.svg | 0 deploy/nginx/prod-mgmt.conf | 0 deploy/systemd/prod-mgmt.service | 4 +- frontend/assets/ai-icon.svg | 0 frontend/assets/avatars/.gitignore | 0 frontend/assets/calendar-dark.svg | 0 frontend/assets/calendar.svg | 0 frontend/assets/dashboard-enhancements.css | 0 frontend/assets/dashboard.svg | 0 frontend/assets/favicon.svg | 0 frontend/assets/icon-tuxi.png | Bin frontend/assets/login.css | 91 ++++ frontend/assets/meituan-test.css | 0 frontend/assets/mod.css | 0 frontend/assets/mod.html | 0 frontend/assets/moon.svg | 0 frontend/assets/pdd.svg | 0 frontend/assets/sun.svg | 0 frontend/assets/tuxi-station.png | Bin frontend/assets/user-avatar.svg | 0 frontend/assets/xlsx.min.js | 0 frontend/assets/yt.svg | 0 frontend/js/api.js | 0 frontend/js/app.js | 0 frontend/js/bundle.js | 0 frontend/js/components/ai-report.js | 0 frontend/js/components/bom.js | 0 frontend/js/components/customer-order.js | 0 frontend/js/components/dashboard.js | 187 ++++++- frontend/js/components/defects.js | 0 frontend/js/components/devices.js | 0 frontend/js/components/environment.js | 0 frontend/js/components/export.js | 0 .../js/components/finished-goods-receipt.js | 0 frontend/js/components/initial-stock.js | 0 frontend/js/components/login.js | 2 +- frontend/js/components/material-purchase.js | 0 frontend/js/components/meituan-test.js | 0 frontend/js/components/menu-search.js | 0 frontend/js/components/notifications.js | 0 frontend/js/components/operations-log.js | 0 .../components/outsourcing-material-issue.js | 0 frontend/js/components/outsourcing-orders.js | 0 .../js/components/outsourcing-wip-stock.js | 0 frontend/js/components/personnel.js | 0 frontend/js/components/product-intro.js | 0 frontend/js/components/production.js | 0 frontend/js/components/purchase-demand.js | 0 frontend/js/components/qa.js | 0 frontend/js/components/reconciliation.js | 0 frontend/js/components/settings.js | 0 frontend/js/components/sidebar.js | 0 frontend/js/components/work-order.js | 0 frontend/js/router.js | 0 frontend/js/utils/memory-monitor.js | 0 frontend/login.html | 458 +++++++++++++++--- frontend/sop_files/sop_20251122172515_xlsx | Bin .../sop_files/sop_20251122172848_file.xlsx | Bin .../sop_20251122175115_010286AD2891-SOP.xlsx | Bin import_reconciliation_excel.py | 0 init_customer_orders.py | 0 init_reconciliations.py | 0 manager.svg | 0 material_purchase_template.csv | 0 query_shipment_sn.sh | 0 server/=2.0.0 | 0 server/ai_routes.py | 0 server/app.py | 162 ++++++- server/app_optimized.py | 0 server/gunicorn_config.py | 0 server/requirements.txt | 0 server/synquery.py | 0 .../uploads/repair_images/1765522104011_1.png | Bin .../1765947122961_20251217125035_19_56.jpg | Bin .../1766120385979_20251219125803_22_56.png | Bin .../1766121162179_20251219131050_23_56.png | Bin .../1766123577056_20251219134956_24_56.png | Bin .../1767764546205_20260107134146_47_2.png | Bin .../1767765712285_20260107135736_235_522.jpg | Bin .../1767769254073_20260107145956_36_56.png | Bin .../1767770188596_20260107124823_203_522.png | Bin .../1768377511654_20260114110759_221_541.jpg | 0 .../1768377511655_20260114155719_49_2.png | 0 .../1768377852973_20260114111043_225_541.jpg | Bin .../1769069408213_20260122160930_62_2.jpg | Bin .../1772006261842_2026-02-25_155742.png | Bin ...34944_07408db7c7d572e8a5c13dc395e5a2a6.jpg | Bin ...83982_d3a9e44fb22bee9c56bb03cdb9f2b570.jpg | Bin ...62391_a050ec74aea30b0e120b16df226521aa.jpg | Bin .../1773018850072_20260309091204_70_2.jpg | Bin .../1773018945336_20260309091505_71_2.jpg | Bin sop_template_example.csv | 0 test-meituan-api.html | 0 test-xlsx.html | 0 test_fix_total_amount.py | 0 test_outsourcing_system.py | 0 test_price_matching.py | 0 test_purchase_demand_ordered.py | 0 test_py/batch_import.py | 0 test_py/check_excel.py | 0 test_py/create_shipments_template.py | 0 test_py/test-theme.html | 0 test_py/test_captcha.png | Bin test_py/test_captcha.py | 0 test_py/test_import.py | 0 test_py/test_login.html | 0 test_py/validate_excel.py | 0 test_shipment_upload.py | 0 test_toast.html | 0 update_factory.py | 0 user.svg | 0 144 files changed, 810 insertions(+), 94 deletions(-) mode change 100644 => 100755 .env.example mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .shared/ui-ux-pro-max/data/charts.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/colors.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/landing.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/products.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/prompts.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/flutter.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/html-tailwind.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/nextjs.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/react-native.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/react.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/svelte.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/swiftui.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/stacks/vue.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/styles.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/typography.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/data/ux-guidelines.csv mode change 100644 => 100755 .shared/ui-ux-pro-max/scripts/core.py mode change 100644 => 100755 .shared/ui-ux-pro-max/scripts/search.py mode change 100644 => 100755 .windsurf/workflows/ui-ux-pro-max.md mode change 100644 => 100755 AI_ANALYSIS_README.md mode change 100644 => 100755 README.md mode change 100644 => 100755 add_customer_name_column.py mode change 100644 => 100755 backend/.env.example mode change 100644 => 100755 backend/ai_service.py mode change 100644 => 100755 backend/api_ai.py mode change 100644 => 100755 backend/requirements_ai.txt mode change 100644 => 100755 backend/test_ai.py mode change 100644 => 100755 check_reconciliations.py mode change 100644 => 100755 cookies.txt mode change 100644 => 100755 dashboard.svg mode change 100644 => 100755 date-dark.svg mode change 100644 => 100755 date.svg mode change 100644 => 100755 deploy/nginx/prod-mgmt.conf mode change 100644 => 100755 deploy/systemd/prod-mgmt.service mode change 100644 => 100755 frontend/assets/ai-icon.svg mode change 100644 => 100755 frontend/assets/avatars/.gitignore mode change 100644 => 100755 frontend/assets/calendar-dark.svg mode change 100644 => 100755 frontend/assets/calendar.svg mode change 100644 => 100755 frontend/assets/dashboard-enhancements.css mode change 100644 => 100755 frontend/assets/dashboard.svg mode change 100644 => 100755 frontend/assets/favicon.svg mode change 100644 => 100755 frontend/assets/icon-tuxi.png mode change 100644 => 100755 frontend/assets/login.css mode change 100644 => 100755 frontend/assets/meituan-test.css mode change 100644 => 100755 frontend/assets/mod.css mode change 100644 => 100755 frontend/assets/mod.html mode change 100644 => 100755 frontend/assets/moon.svg mode change 100644 => 100755 frontend/assets/pdd.svg mode change 100644 => 100755 frontend/assets/sun.svg mode change 100644 => 100755 frontend/assets/tuxi-station.png mode change 100644 => 100755 frontend/assets/user-avatar.svg mode change 100644 => 100755 frontend/assets/xlsx.min.js mode change 100644 => 100755 frontend/assets/yt.svg mode change 100644 => 100755 frontend/js/api.js mode change 100644 => 100755 frontend/js/app.js mode change 100644 => 100755 frontend/js/bundle.js mode change 100644 => 100755 frontend/js/components/ai-report.js mode change 100644 => 100755 frontend/js/components/bom.js mode change 100644 => 100755 frontend/js/components/customer-order.js mode change 100644 => 100755 frontend/js/components/dashboard.js mode change 100644 => 100755 frontend/js/components/defects.js mode change 100644 => 100755 frontend/js/components/devices.js mode change 100644 => 100755 frontend/js/components/environment.js mode change 100644 => 100755 frontend/js/components/export.js mode change 100644 => 100755 frontend/js/components/finished-goods-receipt.js mode change 100644 => 100755 frontend/js/components/initial-stock.js mode change 100644 => 100755 frontend/js/components/login.js mode change 100644 => 100755 frontend/js/components/material-purchase.js mode change 100644 => 100755 frontend/js/components/meituan-test.js mode change 100644 => 100755 frontend/js/components/menu-search.js mode change 100644 => 100755 frontend/js/components/notifications.js mode change 100644 => 100755 frontend/js/components/operations-log.js mode change 100644 => 100755 frontend/js/components/outsourcing-material-issue.js mode change 100644 => 100755 frontend/js/components/outsourcing-orders.js mode change 100644 => 100755 frontend/js/components/outsourcing-wip-stock.js mode change 100644 => 100755 frontend/js/components/personnel.js mode change 100644 => 100755 frontend/js/components/product-intro.js mode change 100644 => 100755 frontend/js/components/production.js mode change 100644 => 100755 frontend/js/components/purchase-demand.js mode change 100644 => 100755 frontend/js/components/qa.js mode change 100644 => 100755 frontend/js/components/reconciliation.js mode change 100644 => 100755 frontend/js/components/settings.js mode change 100644 => 100755 frontend/js/components/sidebar.js mode change 100644 => 100755 frontend/js/components/work-order.js mode change 100644 => 100755 frontend/js/router.js mode change 100644 => 100755 frontend/js/utils/memory-monitor.js mode change 100644 => 100755 frontend/login.html mode change 100644 => 100755 frontend/sop_files/sop_20251122172515_xlsx mode change 100644 => 100755 frontend/sop_files/sop_20251122172848_file.xlsx mode change 100644 => 100755 frontend/sop_files/sop_20251122175115_010286AD2891-SOP.xlsx mode change 100644 => 100755 import_reconciliation_excel.py mode change 100644 => 100755 init_customer_orders.py mode change 100644 => 100755 init_reconciliations.py mode change 100644 => 100755 manager.svg mode change 100644 => 100755 material_purchase_template.csv mode change 100644 => 100755 query_shipment_sn.sh mode change 100644 => 100755 server/=2.0.0 mode change 100644 => 100755 server/ai_routes.py mode change 100644 => 100755 server/app.py mode change 100644 => 100755 server/app_optimized.py mode change 100644 => 100755 server/gunicorn_config.py mode change 100644 => 100755 server/requirements.txt mode change 100644 => 100755 server/synquery.py mode change 100644 => 100755 server/uploads/repair_images/1765522104011_1.png mode change 100644 => 100755 server/uploads/repair_images/1765947122961_20251217125035_19_56.jpg mode change 100644 => 100755 server/uploads/repair_images/1766120385979_20251219125803_22_56.png mode change 100644 => 100755 server/uploads/repair_images/1766121162179_20251219131050_23_56.png mode change 100644 => 100755 server/uploads/repair_images/1766123577056_20251219134956_24_56.png mode change 100644 => 100755 server/uploads/repair_images/1767764546205_20260107134146_47_2.png mode change 100644 => 100755 server/uploads/repair_images/1767765712285_20260107135736_235_522.jpg mode change 100644 => 100755 server/uploads/repair_images/1767769254073_20260107145956_36_56.png mode change 100644 => 100755 server/uploads/repair_images/1767770188596_20260107124823_203_522.png mode change 100644 => 100755 server/uploads/repair_images/1768377511654_20260114110759_221_541.jpg mode change 100644 => 100755 server/uploads/repair_images/1768377511655_20260114155719_49_2.png mode change 100644 => 100755 server/uploads/repair_images/1768377852973_20260114111043_225_541.jpg mode change 100644 => 100755 server/uploads/repair_images/1769069408213_20260122160930_62_2.jpg mode change 100644 => 100755 server/uploads/repair_images/1772006261842_2026-02-25_155742.png mode change 100644 => 100755 server/uploads/repair_images/1772678034944_07408db7c7d572e8a5c13dc395e5a2a6.jpg mode change 100644 => 100755 server/uploads/repair_images/1772678183982_d3a9e44fb22bee9c56bb03cdb9f2b570.jpg mode change 100644 => 100755 server/uploads/repair_images/1772678362391_a050ec74aea30b0e120b16df226521aa.jpg mode change 100644 => 100755 server/uploads/repair_images/1773018850072_20260309091204_70_2.jpg mode change 100644 => 100755 server/uploads/repair_images/1773018945336_20260309091505_71_2.jpg mode change 100644 => 100755 sop_template_example.csv mode change 100644 => 100755 test-meituan-api.html mode change 100644 => 100755 test-xlsx.html mode change 100644 => 100755 test_fix_total_amount.py mode change 100644 => 100755 test_outsourcing_system.py mode change 100644 => 100755 test_price_matching.py mode change 100644 => 100755 test_purchase_demand_ordered.py mode change 100644 => 100755 test_py/batch_import.py mode change 100644 => 100755 test_py/check_excel.py mode change 100644 => 100755 test_py/create_shipments_template.py mode change 100644 => 100755 test_py/test-theme.html mode change 100644 => 100755 test_py/test_captcha.png mode change 100644 => 100755 test_py/test_captcha.py mode change 100644 => 100755 test_py/test_import.py mode change 100644 => 100755 test_py/test_login.html mode change 100644 => 100755 test_py/validate_excel.py mode change 100644 => 100755 test_shipment_upload.py mode change 100644 => 100755 test_toast.html mode change 100644 => 100755 update_factory.py mode change 100644 => 100755 user.svg diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/charts.csv b/.shared/ui-ux-pro-max/data/charts.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/colors.csv b/.shared/ui-ux-pro-max/data/colors.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/landing.csv b/.shared/ui-ux-pro-max/data/landing.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/products.csv b/.shared/ui-ux-pro-max/data/products.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/prompts.csv b/.shared/ui-ux-pro-max/data/prompts.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/flutter.csv b/.shared/ui-ux-pro-max/data/stacks/flutter.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv b/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/nextjs.csv b/.shared/ui-ux-pro-max/data/stacks/nextjs.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/react-native.csv b/.shared/ui-ux-pro-max/data/stacks/react-native.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/react.csv b/.shared/ui-ux-pro-max/data/stacks/react.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/svelte.csv b/.shared/ui-ux-pro-max/data/stacks/svelte.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/swiftui.csv b/.shared/ui-ux-pro-max/data/stacks/swiftui.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/stacks/vue.csv b/.shared/ui-ux-pro-max/data/stacks/vue.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/styles.csv b/.shared/ui-ux-pro-max/data/styles.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/typography.csv b/.shared/ui-ux-pro-max/data/typography.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/data/ux-guidelines.csv b/.shared/ui-ux-pro-max/data/ux-guidelines.csv old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/scripts/core.py b/.shared/ui-ux-pro-max/scripts/core.py old mode 100644 new mode 100755 diff --git a/.shared/ui-ux-pro-max/scripts/search.py b/.shared/ui-ux-pro-max/scripts/search.py old mode 100644 new mode 100755 diff --git a/.windsurf/workflows/ui-ux-pro-max.md b/.windsurf/workflows/ui-ux-pro-max.md old mode 100644 new mode 100755 diff --git a/AI_ANALYSIS_README.md b/AI_ANALYSIS_README.md old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/add_customer_name_column.py b/add_customer_name_column.py old mode 100644 new mode 100755 diff --git a/backend/.env.example b/backend/.env.example old mode 100644 new mode 100755 diff --git a/backend/ai_service.py b/backend/ai_service.py old mode 100644 new mode 100755 diff --git a/backend/api_ai.py b/backend/api_ai.py old mode 100644 new mode 100755 diff --git a/backend/requirements_ai.txt b/backend/requirements_ai.txt old mode 100644 new mode 100755 diff --git a/backend/test_ai.py b/backend/test_ai.py old mode 100644 new mode 100755 diff --git a/check_reconciliations.py b/check_reconciliations.py old mode 100644 new mode 100755 diff --git a/cookies.txt b/cookies.txt old mode 100644 new mode 100755 diff --git a/dashboard.svg b/dashboard.svg old mode 100644 new mode 100755 diff --git a/date-dark.svg b/date-dark.svg old mode 100644 new mode 100755 diff --git a/date.svg b/date.svg old mode 100644 new mode 100755 diff --git a/deploy/nginx/prod-mgmt.conf b/deploy/nginx/prod-mgmt.conf old mode 100644 new mode 100755 diff --git a/deploy/systemd/prod-mgmt.service b/deploy/systemd/prod-mgmt.service old mode 100644 new mode 100755 index 24d461e..6208b62 --- a/deploy/systemd/prod-mgmt.service +++ b/deploy/systemd/prod-mgmt.service @@ -3,9 +3,9 @@ Description=Production Management Flask App After=network.target [Service] -WorkingDirectory=/home/hyx/work/生产管理系统 +WorkingDirectory=/opt/生产管理系统 # 使用Flask但启用多线程和Keep-Alive -ExecStart=/home/hyx/work/.venv/bin/python server/app.py +ExecStart=/usr/bin/python3 server/app.py Restart=always Environment=APP_SECRET=please-change-to-strong ADMIN_PASSWORD=change-this SUPERADMIN_USERNAME=zzh SUPERADMIN_PASSWORD=Zzh08165511 REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_DB=0 REDIS_PASSWORD=Zzh08165511 diff --git a/frontend/assets/ai-icon.svg b/frontend/assets/ai-icon.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/avatars/.gitignore b/frontend/assets/avatars/.gitignore old mode 100644 new mode 100755 diff --git a/frontend/assets/calendar-dark.svg b/frontend/assets/calendar-dark.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/calendar.svg b/frontend/assets/calendar.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/dashboard-enhancements.css b/frontend/assets/dashboard-enhancements.css old mode 100644 new mode 100755 diff --git a/frontend/assets/dashboard.svg b/frontend/assets/dashboard.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/favicon.svg b/frontend/assets/favicon.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/icon-tuxi.png b/frontend/assets/icon-tuxi.png old mode 100644 new mode 100755 diff --git a/frontend/assets/login.css b/frontend/assets/login.css old mode 100644 new mode 100755 index 5491b52..67c32df --- a/frontend/assets/login.css +++ b/frontend/assets/login.css @@ -262,6 +262,10 @@ body { z-index: 1; } +.input-block:has(.password-toggle) { + position: relative; +} + .input, button { background: rgba(255, 255, 255, 0.1); @@ -304,11 +308,58 @@ button { box-shadow: 0 0 0 3px rgba(138, 43, 226, 0.2); } +.input-block:has(.password-toggle) .input { + padding-right: 45px; +} + .input { box-shadow: inset 2px 2px 4px rgba(0, 0, 0, 0.2), 2px 2px 4px rgba(138, 43, 226, 0.1); } +/* 密码显示/隐藏按钮 */ +.password-toggle { + position: absolute; + right: 12px; + top: 50%; + transform: translateY(-50%); + background: transparent; + border: none; + padding: 8px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: rgba(255, 255, 255, 0.6); + transition: all 0.3s ease; + z-index: 10; + margin: 0; + width: auto; + height: auto; + box-shadow: none; +} + +.password-toggle:hover { + color: rgba(255, 255, 255, 0.9); + background: transparent; + transform: translateY(-50%) scale(1.1); + box-shadow: none; +} + +.password-toggle:active { + transform: translateY(-50%) scale(0.95); +} + +.password-toggle::before { + display: none; +} + +.eye-icon { + width: 20px; + height: 20px; + pointer-events: none; +} + /* 验证码区域 */ .captcha-block { display: flex; @@ -526,6 +577,46 @@ button:disabled { filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.1)); } +/* 角色容器 */ +.character-container { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +.character { + width: 200px; + height: 200px; + filter: drop-shadow(0 4px 12px rgba(138, 43, 226, 0.3)); + transition: transform 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +#char-head, +#char-body, +#char-hands ellipse, +#char-eyes ellipse { + transition: all 0.3s ease; +} + +#char-mouth { + transition: d 0.3s ease; +} + +#hand-left, +#hand-right { + transition: cx 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55), + cy 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55), + transform 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +#eye-left, +#eye-right { + transition: ry 0.15s ease, cx 0.3s ease; +} + /* 响应式设计 */ @media (max-width: 768px) { .container { diff --git a/frontend/assets/meituan-test.css b/frontend/assets/meituan-test.css old mode 100644 new mode 100755 diff --git a/frontend/assets/mod.css b/frontend/assets/mod.css old mode 100644 new mode 100755 diff --git a/frontend/assets/mod.html b/frontend/assets/mod.html old mode 100644 new mode 100755 diff --git a/frontend/assets/moon.svg b/frontend/assets/moon.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/pdd.svg b/frontend/assets/pdd.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/sun.svg b/frontend/assets/sun.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/tuxi-station.png b/frontend/assets/tuxi-station.png old mode 100644 new mode 100755 diff --git a/frontend/assets/user-avatar.svg b/frontend/assets/user-avatar.svg old mode 100644 new mode 100755 diff --git a/frontend/assets/xlsx.min.js b/frontend/assets/xlsx.min.js old mode 100644 new mode 100755 diff --git a/frontend/assets/yt.svg b/frontend/assets/yt.svg old mode 100644 new mode 100755 diff --git a/frontend/js/api.js b/frontend/js/api.js old mode 100644 new mode 100755 diff --git a/frontend/js/app.js b/frontend/js/app.js old mode 100644 new mode 100755 diff --git a/frontend/js/bundle.js b/frontend/js/bundle.js old mode 100644 new mode 100755 diff --git a/frontend/js/components/ai-report.js b/frontend/js/components/ai-report.js old mode 100644 new mode 100755 diff --git a/frontend/js/components/bom.js b/frontend/js/components/bom.js old mode 100644 new mode 100755 diff --git a/frontend/js/components/customer-order.js b/frontend/js/components/customer-order.js old mode 100644 new mode 100755 diff --git a/frontend/js/components/dashboard.js b/frontend/js/components/dashboard.js old mode 100644 new mode 100755 index f2e3f01..81102ad --- a/frontend/js/components/dashboard.js +++ b/frontend/js/components/dashboard.js @@ -642,12 +642,8 @@ const Dashboard = (() => { const txCounts = countByTime(txData); const mtCounts = countByTime(mtData); const actualMax = Math.max(...pddCounts, ...ytCounts, ...txCounts, ...mtCounts, 0); - // 动态调整Y轴:让小数据更明显 - let maxCount; - if (actualMax <= 2) maxCount = 3; // 数据是1-2时,Y轴最大值设为3,让数据占据1/3到2/3的高度 - else if (actualMax <= 5) maxCount = 8; // 数据是3-5时,Y轴最大值设为8 - else if (actualMax <= 10) maxCount = 15; // 数据是6-10时,Y轴最大值设为15 - else maxCount = actualMax; + // 根据最高数据点动态调整Y轴最大值(增加10%的上边距) + const maxCount = actualMax === 0 ? 5 : Math.ceil(actualMax * 1.1); const maxDigits = Math.max(maxCount.toString().length, 2); const dynamicLeftPadding = Math.max(50, 25 + maxDigits * 10); const padding = {left: dynamicLeftPadding, right: 20, top: 20, bottom: 30}; @@ -1946,6 +1942,52 @@ const Dashboard = (() => { productionFillEl.style.width = fillWidth + '%'; productionFillEl.style.backgroundColor = color; } + + // 更新期初库存数据 + if(dashRes.inventory) { + const invTotal = document.getElementById('inventory-total'); + const invZero = document.getElementById('inventory-zero'); + const invLow = document.getElementById('inventory-low'); + const invQty = document.getElementById('inventory-qty'); + + if(invTotal) invTotal.textContent = dashRes.inventory.total_items || 0; + if(invZero) invZero.textContent = dashRes.inventory.zero_stock || 0; + if(invLow) invLow.textContent = dashRes.inventory.low_stock || 0; + if(invQty) invQty.textContent = dashRes.inventory.total_qty || 0; + } + + // 更新采购需求数据 + if(dashRes.purchase) { + const purTotal = document.getElementById('purchase-total'); + const purPending = document.getElementById('purchase-pending'); + const purUrgent = document.getElementById('purchase-urgent'); + const purRate = document.getElementById('purchase-rate'); + + if(purTotal) purTotal.textContent = dashRes.purchase.total_demands || 0; + if(purPending) purPending.textContent = dashRes.purchase.pending || 0; + if(purUrgent) purUrgent.textContent = dashRes.purchase.urgent || 0; + if(purRate) purRate.textContent = (dashRes.purchase.completion_rate || 0) + '%'; + } + + // 更新智能建议 + if(dashRes.smartSuggestions) { + const suggestionsEl = document.getElementById('smart-suggestions'); + if(suggestionsEl) { + if(dashRes.smartSuggestions.length > 0) { + suggestionsEl.innerHTML = dashRes.smartSuggestions.map(s => ` +
+
+ ${s.icon} + ${s.title} +
+
${s.message}
+
+ `).join(''); + } else { + suggestionsEl.innerHTML = '
暂无建议
一切正常运行中
'; + } + } + } } clearTimeout(timeoutId); @@ -2055,6 +2097,8 @@ const Dashboard = (() => { ${metricsCard('发货数量', data.shipments, 'warning')} ${todayProductionCard(data.todayPdd || 0, data.todayYt || 0, data.activePlatform || 'pdd')} + +
@@ -2135,15 +2179,15 @@ const Dashboard = (() => {
-
+
产量占比
-
-
+
+
审计(本月)
-
+
-
+
0%
@@ -2160,19 +2204,19 @@ const Dashboard = (() => {
-
+
发货(按机种)
-
+
-
+
-
+
审计看板 点击查看完整数据
@@ -2197,8 +2241,117 @@ const Dashboard = (() => {
- - ${AIReport.generateAICard()} + +
+ +
+
+
+
📦 库存管理
+
期初库存
+
+
+ + + + + +
+
+ +
+
+ ${data.inventory?.total_items || 0} + 种物料 +
+
+ +
+
+
零库存
+
${data.inventory?.zero_stock || 0}
+
+
+
低库存
+
${data.inventory?.low_stock || 0}
+
+
+
总库存
+
${data.inventory?.total_qty || 0}
+
+
+
+ + +
+
+
+
🛒 采购管理
+
采购需求
+
+
+ + + + + +
+
+ +
+
+ ${data.purchase?.total_demands || 0} + 个需求 +
+
+ +
+
+
待处理
+
${data.purchase?.pending || 0}
+
+
+
紧急
+
${data.purchase?.urgent || 0}
+
+
+
完成率
+
${data.purchase?.completion_rate || 0}%
+
+
+
+ + +
+
+
+
💡 AI助手
+
智能建议
+
+
+ + + + +
+
+ +
+ ${(data.smartSuggestions || []).length > 0 ? + data.smartSuggestions.map(s => ` +
+
+ ${s.icon} + ${s.title} +
+
${s.message}
+
+ `).join('') : + '
暂无建议
一切正常运行中
' + } +
+
+