Files
company-celebration/packages/client-mobile/src/App.vue
empty e7397d22a9 feat: initialize Annual Gala Interactive System monorepo
- Set up pnpm workspace with 4 packages: shared, server, client-mobile, client-screen
- Implement Redis atomic voting with Lua scripts (HINCRBY + distributed lock)
- Add optimistic UI with IndexedDB queue for offline resilience
- Configure Socket.io with auto-reconnection (infinite retries)
- Separate mobile (Vant) and big screen (Pixi.js) dependencies

Tech stack:
- Frontend Mobile: Vue 3 + Vant + Socket.io-client
- Frontend Screen: Vue 3 + Pixi.js + GSAP
- Backend: Express + Socket.io + Redis + Prisma/MySQL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 01:19:36 +08:00

44 lines
876 B
Vue

<script setup lang="ts">
import { onMounted, onUnmounted } from 'vue';
import { useConnectionStore } from './stores/connection';
import ConnectionStatus from './components/ConnectionStatus.vue';
const connectionStore = useConnectionStore();
onMounted(() => {
connectionStore.connect();
});
onUnmounted(() => {
connectionStore.disconnect();
});
</script>
<template>
<div class="app-container">
<ConnectionStatus />
<router-view v-slot="{ Component }">
<transition name="fade" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
</div>
</template>
<style lang="scss">
.app-container {
min-height: 100vh;
background: linear-gradient(180deg, #fff5f5 0%, #ffffff 100%);
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.2s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
</style>