1
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 21s
Docker Build & Deploy / WeChat Notification (push) Successful in 1s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 21s
Docker Build & Deploy / WeChat Notification (push) Successful in 1s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
This commit is contained in:
@@ -16,6 +16,10 @@
|
|||||||
/>
|
/>
|
||||||
</keep-alive>
|
</keep-alive>
|
||||||
</router-view>
|
</router-view>
|
||||||
|
|
||||||
|
<!-- 底部导航栏(全局统一) -->
|
||||||
|
<GlassBottomNav v-if="showNav" />
|
||||||
|
|
||||||
<GlobalAddBill
|
<GlobalAddBill
|
||||||
v-if="isShowAddBill"
|
v-if="isShowAddBill"
|
||||||
@success="handleAddTransactionSuccess"
|
@success="handleAddTransactionSuccess"
|
||||||
@@ -152,6 +156,7 @@ import { RouterView, useRoute } from 'vue-router'
|
|||||||
import { ref, onMounted, onUnmounted, computed, watch } from 'vue'
|
import { ref, onMounted, onUnmounted, computed, watch } from 'vue'
|
||||||
import { useMessageStore } from '@/stores/message'
|
import { useMessageStore } from '@/stores/message'
|
||||||
import GlobalAddBill from '@/components/Global/GlobalAddBill.vue'
|
import GlobalAddBill from '@/components/Global/GlobalAddBill.vue'
|
||||||
|
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
||||||
import '@/styles/common.css'
|
import '@/styles/common.css'
|
||||||
import { needRefresh, updateServiceWorker } from './registerServiceWorker'
|
import { needRefresh, updateServiceWorker } from './registerServiceWorker'
|
||||||
|
|
||||||
@@ -256,6 +261,16 @@ const isShowAddBill = computed(() => {
|
|||||||
return route.path === '/' || route.path === '/balance' || route.path === '/message' || route.path === '/calendar' || route.path === '/calendar-v2'
|
return route.path === '/' || route.path === '/balance' || route.path === '/message' || route.path === '/calendar' || route.path === '/calendar-v2'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 需要显示底部导航栏的路由
|
||||||
|
const showNav = computed(() => {
|
||||||
|
return [
|
||||||
|
'/', '/statistics-v2',
|
||||||
|
'/calendar', '/calendar-v2',
|
||||||
|
'/balance', '/message',
|
||||||
|
'/budget', '/setting'
|
||||||
|
].includes(route.path)
|
||||||
|
})
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
if (mediaQuery) {
|
if (mediaQuery) {
|
||||||
mediaQuery.removeEventListener('change', updateTheme)
|
mediaQuery.removeEventListener('change', updateTheme)
|
||||||
|
|||||||
@@ -55,12 +55,6 @@
|
|||||||
ref="messageViewRef"
|
ref="messageViewRef"
|
||||||
:is-component="true"
|
:is-component="true"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeNavTab"
|
|
||||||
@tab-click="handleNavTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -70,17 +64,9 @@ import { useRoute } from 'vue-router'
|
|||||||
import TransactionsRecord from './TransactionsRecord.vue'
|
import TransactionsRecord from './TransactionsRecord.vue'
|
||||||
import EmailRecord from './EmailRecord.vue'
|
import EmailRecord from './EmailRecord.vue'
|
||||||
import MessageView from './MessageView.vue'
|
import MessageView from './MessageView.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeNavTab = ref('balance')
|
|
||||||
const handleNavTabClick = (item, index) => {
|
|
||||||
console.log('Tab clicked:', item.name, index)
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
const tabActive = ref(route.query.tab || 'balance')
|
const tabActive = ref(route.query.tab || 'balance')
|
||||||
|
|
||||||
// 监听路由参数变化,用于从 tabbar 点击时切换 tab
|
// 监听路由参数变化,用于从 tabbar 点击时切换 tab
|
||||||
|
|||||||
@@ -497,12 +497,6 @@
|
|||||||
@cancel="showDatePicker = false"
|
@cancel="showDatePicker = false"
|
||||||
/>
|
/>
|
||||||
</van-popup>
|
</van-popup>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="navActiveTab"
|
|
||||||
@tab-click="handleNavTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -524,15 +518,8 @@ import BudgetEditPopup from '@/components/Budget/BudgetEditPopup.vue'
|
|||||||
import SavingsConfigPopup from '@/components/Budget/SavingsConfigPopup.vue'
|
import SavingsConfigPopup from '@/components/Budget/SavingsConfigPopup.vue'
|
||||||
import BudgetChartAnalysis from '@/components/Budget/BudgetChartAnalysis.vue'
|
import BudgetChartAnalysis from '@/components/Budget/BudgetChartAnalysis.vue'
|
||||||
import PopupContainer from '@/components/PopupContainer.vue'
|
import PopupContainer from '@/components/PopupContainer.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
|
|
||||||
// 底部导航栏
|
// 底部导航栏
|
||||||
const navActiveTab = ref('budget')
|
|
||||||
const handleNavTabClick = (item, index) => {
|
|
||||||
console.log('Tab clicked:', item.name, index)
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
const activeTab = ref(BudgetCategory.Expense)
|
const activeTab = ref(BudgetCategory.Expense)
|
||||||
const selectedDate = ref(new Date())
|
const selectedDate = ref(new Date())
|
||||||
const showDatePicker = ref(false)
|
const showDatePicker = ref(false)
|
||||||
|
|||||||
@@ -44,12 +44,6 @@
|
|||||||
:transaction="currentTransaction"
|
:transaction="currentTransaction"
|
||||||
@save="onDetailSave"
|
@save="onDetailSave"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeTab"
|
|
||||||
@tab-click="handleTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -62,14 +56,6 @@ import TransactionList from '@/components/TransactionList.vue'
|
|||||||
import TransactionDetail from '@/components/TransactionDetail.vue'
|
import TransactionDetail from '@/components/TransactionDetail.vue'
|
||||||
import SmartClassifyButton from '@/components/SmartClassifyButton.vue'
|
import SmartClassifyButton from '@/components/SmartClassifyButton.vue'
|
||||||
import PopupContainer from '@/components/PopupContainer.vue'
|
import PopupContainer from '@/components/PopupContainer.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeTab = ref('calendar')
|
|
||||||
const handleTabClick = (item, index) => {
|
|
||||||
console.log('Tab clicked:', item.name, index)
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
const dailyStatistics = ref({})
|
const dailyStatistics = ref({})
|
||||||
const listVisible = ref(false)
|
const listVisible = ref(false)
|
||||||
|
|||||||
@@ -139,12 +139,6 @@
|
|||||||
<!-- 底部安全距离 -->
|
<!-- 底部安全距离 -->
|
||||||
<div style="height: calc(95px + env(safe-area-inset-bottom, 0px))" />
|
<div style="height: calc(95px + env(safe-area-inset-bottom, 0px))" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeTab"
|
|
||||||
@tab-click="handleTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -157,19 +151,11 @@ import { useAuthStore } from '@/stores/auth'
|
|||||||
import { useVersionStore } from '@/stores/version'
|
import { useVersionStore } from '@/stores/version'
|
||||||
import { getVapidPublicKey, subscribe, testNotification } from '@/api/notification'
|
import { getVapidPublicKey, subscribe, testNotification } from '@/api/notification'
|
||||||
import { updateServiceWorker } from '@/registerServiceWorker'
|
import { updateServiceWorker } from '@/registerServiceWorker'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
const versionStore = useVersionStore()
|
const versionStore = useVersionStore()
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeTab = ref('setting')
|
|
||||||
const handleTabClick = (item, index) => {
|
|
||||||
console.log('Tab clicked:', item.name, index)
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileInputRef = ref(null)
|
const fileInputRef = ref(null)
|
||||||
const currentType = ref('')
|
const currentType = ref('')
|
||||||
const notificationEnabled = ref(false)
|
const notificationEnabled = ref(false)
|
||||||
|
|||||||
@@ -70,12 +70,6 @@
|
|||||||
@cancel="onDatePickerCancel"
|
@cancel="onDatePickerCancel"
|
||||||
/>
|
/>
|
||||||
</van-popup>
|
</van-popup>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeTab"
|
|
||||||
@tab-click="handleTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -88,7 +82,6 @@ import CalendarModule from './modules/Calendar.vue'
|
|||||||
import StatsModule from './modules/Stats.vue'
|
import StatsModule from './modules/Stats.vue'
|
||||||
import TransactionListModule from './modules/TransactionList.vue'
|
import TransactionListModule from './modules/TransactionList.vue'
|
||||||
import TransactionDetailSheet from '@/components/Transaction/TransactionDetailSheet.vue'
|
import TransactionDetailSheet from '@/components/Transaction/TransactionDetailSheet.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
import { getTransactionDetail } from '@/api/transactionRecord'
|
import { getTransactionDetail } from '@/api/transactionRecord'
|
||||||
|
|
||||||
// 定义组件名称(keep-alive 需要通过 name 识别)
|
// 定义组件名称(keep-alive 需要通过 name 识别)
|
||||||
@@ -99,12 +92,6 @@ defineOptions({
|
|||||||
// 路由
|
// 路由
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeTab = ref('calendar')
|
|
||||||
const handleTabClick = () => {
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
// 下拉刷新状态
|
// 下拉刷新状态
|
||||||
const refreshing = ref(false)
|
const refreshing = ref(false)
|
||||||
|
|
||||||
|
|||||||
@@ -318,12 +318,6 @@
|
|||||||
:transaction="currentTransaction"
|
:transaction="currentTransaction"
|
||||||
@save="onBillSave"
|
@save="onBillSave"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeTab"
|
|
||||||
@tab-click="handleTabClick"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -339,18 +333,10 @@ import TransactionList from '@/components/TransactionList.vue'
|
|||||||
import TransactionDetail from '@/components/TransactionDetail.vue'
|
import TransactionDetail from '@/components/TransactionDetail.vue'
|
||||||
import SmartClassifyButton from '@/components/SmartClassifyButton.vue'
|
import SmartClassifyButton from '@/components/SmartClassifyButton.vue'
|
||||||
import PopupContainer from '@/components/PopupContainer.vue'
|
import PopupContainer from '@/components/PopupContainer.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
import { getCssVar } from '@/utils/theme'
|
import { getCssVar } from '@/utils/theme'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeTab = ref('statistics')
|
|
||||||
const handleTabClick = (item, index) => {
|
|
||||||
console.log('Tab clicked:', item.name, index)
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const firstLoading = ref(true)
|
const firstLoading = ref(true)
|
||||||
|
|||||||
@@ -108,12 +108,6 @@
|
|||||||
/>
|
/>
|
||||||
</van-popup>
|
</van-popup>
|
||||||
|
|
||||||
<!-- 液态玻璃底部导航栏 -->
|
|
||||||
<GlassBottomNav
|
|
||||||
v-model="activeTab"
|
|
||||||
@tab-click="handleTabClick"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 分类账单弹窗 -->
|
<!-- 分类账单弹窗 -->
|
||||||
<CategoryBillPopup
|
<CategoryBillPopup
|
||||||
v-model="billPopupVisible"
|
v-model="billPopupVisible"
|
||||||
@@ -136,7 +130,6 @@ import MonthlyExpenseCard from './modules/MonthlyExpenseCard.vue'
|
|||||||
import ExpenseCategoryCard from './modules/ExpenseCategoryCard.vue'
|
import ExpenseCategoryCard from './modules/ExpenseCategoryCard.vue'
|
||||||
import IncomeNoneCategoryCard from './modules/IncomeNoneCategoryCard.vue'
|
import IncomeNoneCategoryCard from './modules/IncomeNoneCategoryCard.vue'
|
||||||
import CategoryBillPopup from '@/components/CategoryBillPopup.vue'
|
import CategoryBillPopup from '@/components/CategoryBillPopup.vue'
|
||||||
import GlassBottomNav from '@/components/GlassBottomNav.vue'
|
|
||||||
import {
|
import {
|
||||||
// 新统一接口
|
// 新统一接口
|
||||||
getDailyStatisticsByRange,
|
getDailyStatisticsByRange,
|
||||||
@@ -162,12 +155,6 @@ const messageStore = useMessageStore()
|
|||||||
// 主题
|
// 主题
|
||||||
const theme = computed(() => messageStore.isDarkMode ? 'dark' : 'light')
|
const theme = computed(() => messageStore.isDarkMode ? 'dark' : 'light')
|
||||||
|
|
||||||
// 底部导航栏
|
|
||||||
const activeTab = ref('statistics')
|
|
||||||
const handleTabClick = (_item, _index) => {
|
|
||||||
// 导航逻辑已在组件内部处理
|
|
||||||
}
|
|
||||||
|
|
||||||
// 状态管理
|
// 状态管理
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const refreshing = ref(false)
|
const refreshing = ref(false)
|
||||||
|
|||||||
Reference in New Issue
Block a user