diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fa0f51f..6ec8c73 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,13 +1,14 @@ { - "name": "smartflow-frontend", + "name": "smartmate-frontend", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "smartflow-frontend", + "name": "smartmate-frontend", "version": "0.1.0", "dependencies": { + "@element-plus/icons-vue": "^2.3.0", "@vue/shared": "^3.5.0", "axios": "^1.8.0", "element-plus": "^2.9.0", diff --git a/frontend/package.json b/frontend/package.json index 6cf5a8c..ef38110 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "@vue/shared": "^3.5.0", "axios": "^1.8.0", "element-plus": "^2.9.0", + "@element-plus/icons-vue": "^2.3.0", "highlight.js": "^11.11.1", "markdown-it": "^14.1.0", "pinia": "^2.2.0", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 4b2dcd5..a9a2613 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,16 +1,53 @@ @@ -187,16 +190,9 @@ const renderSlots = computed(() => flex-direction: column; justify-content: space-between; min-height: 140px; - transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); cursor: default; } -.pastel-item:hover { - transform: scale(1.03) translateY(-4px); - box-shadow: 0 15px 30px -10px rgba(0, 0, 0, 0.1); - z-index: 10; -} - .item-time { font-size: 12px; font-weight: 800; @@ -266,20 +262,16 @@ const renderSlots = computed(() => animation: pill-shimmer 1.5s infinite linear; } +.skeleton-pill.is-pause { + min-height: 80px; +} + @keyframes pill-shimmer { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } -/* 动画效果 */ -.grid-pop-enter-active { - transition: all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); -} -.grid-pop-enter-from { - opacity: 0; - transform: scale(0.9); -} @media (max-width: 1200px) { .pastel-grid { grid-template-columns: repeat(4, 1fr); } diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index b545505..cd87674 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -7,12 +7,15 @@ import DashboardView from '@/views/DashboardView.vue' import ScheduleView from '@/views/ScheduleView.vue' import AssistantReasoningDebug from '@/views/debug/AssistantReasoningDebug.vue' +import HomeView from '@/views/HomeView.vue' + const router = createRouter({ history: createWebHistory(), routes: [ { path: '/', - redirect: '/dashboard', + name: 'home', + component: HomeView, }, { path: '/auth', @@ -46,6 +49,30 @@ const router = createRouter({ requiresAuth: true, }, }, + { + path: '/forum', + name: 'forum', + component: () => import('@/views/ForumView.vue'), + meta: { + requiresAuth: true, + }, + }, + { + path: '/forum/:id', + name: 'plan-detail', + component: () => import('@/views/PlanDetailView.vue'), + meta: { + requiresAuth: true, + }, + }, + { + path: '/store', + name: 'store', + component: () => import('@/views/StoreView.vue'), + meta: { + requiresAuth: true, + }, + }, { path: '/debug/tool-card', name: 'debug-tool-card', diff --git a/frontend/src/views/DashboardView.vue b/frontend/src/views/DashboardView.vue index f4ef3a4..6ef6e45 100644 --- a/frontend/src/views/DashboardView.vue +++ b/frontend/src/views/DashboardView.vue @@ -1,7 +1,7 @@ + + + + diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue new file mode 100644 index 0000000..9d4dd37 --- /dev/null +++ b/frontend/src/views/HomeView.vue @@ -0,0 +1,610 @@ + + + + + diff --git a/frontend/src/views/PlanDetailView.vue b/frontend/src/views/PlanDetailView.vue new file mode 100644 index 0000000..c68b4b5 --- /dev/null +++ b/frontend/src/views/PlanDetailView.vue @@ -0,0 +1,868 @@ + + + + + diff --git a/frontend/src/views/StoreView.vue b/frontend/src/views/StoreView.vue new file mode 100644 index 0000000..fd03b90 --- /dev/null +++ b/frontend/src/views/StoreView.vue @@ -0,0 +1,672 @@ + + + + +