App.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <script setup lang="ts">
  2. import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
  3. import { createPinia } from 'pinia';
  4. import { useUserStore } from './store/user';
  5. import { initDebug } from './utils/debug';
  6. // 初始化全局调试工具
  7. initDebug();
  8. onLaunch(() => {
  9. console.log('App Launch');
  10. const userStore = useUserStore();
  11. userStore.initUser();
  12. // 应用夜间模式
  13. applyDarkMode();
  14. });
  15. onShow(() => {
  16. console.log('App Show');
  17. });
  18. onHide(() => {
  19. console.log('App Hide');
  20. });
  21. // 应用夜间模式
  22. function applyDarkMode() {
  23. try {
  24. const isDark = uni.getStorageSync('dark_mode');
  25. if (isDark) {
  26. uni.setStorageSync('is_dark_mode', true);
  27. }
  28. } catch (error) {
  29. console.error('应用夜间模式失败:', error);
  30. }
  31. }
  32. </script>
  33. <template>
  34. <view id="app"></view>
  35. </template>
  36. <style>
  37. /* 全局样式 */
  38. page {
  39. background-color: #f9fafb;
  40. font-family: 'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  41. font-size: 14px;
  42. color: #1f2937;
  43. min-height: 100vh;
  44. transition: background-color 0.3s, color 0.3s;
  45. }
  46. /* 全局页面切换动画 - 滑入效果 */
  47. page {
  48. animation: pageIn 0.3s ease-out;
  49. }
  50. @keyframes pageIn {
  51. from {
  52. opacity: 0.8;
  53. transform: translateX(30px);
  54. }
  55. to {
  56. opacity: 1;
  57. transform: translateX(0);
  58. }
  59. }
  60. /* 列表项入场动画 */
  61. @keyframes listItemIn {
  62. from {
  63. opacity: 0;
  64. transform: translateY(20px);
  65. }
  66. to {
  67. opacity: 1;
  68. transform: translateY(0);
  69. }
  70. }
  71. .list-item-enter {
  72. animation: listItemIn 0.4s ease-out forwards;
  73. }
  74. /* 按钮点击反馈 */
  75. button:active,
  76. .btn:active,
  77. .action-btn:active,
  78. .generate-btn:active {
  79. transform: scale(0.96);
  80. transition: transform 0.1s ease;
  81. }
  82. /* 触摸反馈元素 */
  83. .touch-feedback:active {
  84. transform: scale(0.96);
  85. transition: transform 0.1s ease;
  86. opacity: 0.9;
  87. }
  88. /* 主色调 */
  89. :root {
  90. --primary-color: #4f46e5;
  91. --primary-light: #6366f1;
  92. --primary-lighter: #818cf8;
  93. --accent-color: #f97316;
  94. --success-color: #10b981;
  95. --error-color: #ef4444;
  96. --text-primary: #1f2937;
  97. --text-secondary: #6b7280;
  98. --bg-primary: #f9fafb;
  99. --bg-card: #ffffff;
  100. }
  101. /* 夜间模式 */
  102. page.dark-mode {
  103. background-color: #111827;
  104. color: #ffffff;
  105. }
  106. /* 禁止选择文本 */
  107. text {
  108. user-select: none;
  109. }
  110. /* 安全区域 */
  111. .safe-area-bottom {
  112. padding-bottom: constant(safe-area-inset-bottom);
  113. padding-bottom: env(safe-area-inset-bottom);
  114. }
  115. </style>