refactor(components): 重构组件目录结构,将UI组件按功能分类到对应子目录
将原ui目录下的组件按功能分类移动到新的子目录中: - 将GradientHeader、ConfirmDialog等基础组件移至common目录 - 将CourseCard、LiveStreamCard等课程相关组件移至courses目录 - 将FrostedGlass等视觉特效组件移至effects目录 - 将VideoPlayer、AudioPlayer等媒体组件移至media目录 - 将CheckInDialog等打卡相关组件移至checkin目录 - 更新所有引用路径以匹配新的目录结构
Showing
83 changed files
with
140 additions
and
114 deletions
| ... | @@ -262,3 +262,22 @@ src/ | ... | @@ -262,3 +262,22 @@ src/ |
| 262 | - 选中对象首次会弹窗确认(标记 `has_confirmed`),支持新增/编辑;删除对象调用 `gratitudeDeleteAPI`(当前页面内未引入该 API,需补齐后才可生效)。 | 262 | - 选中对象首次会弹窗确认(标记 `has_confirmed`),支持新增/编辑;删除对象调用 `gratitudeDeleteAPI`(当前页面内未引入该 API,需补齐后才可生效)。 |
| 263 | - 预览能力: | 263 | - 预览能力: |
| 264 | - 上传组件点击预览时,根据扩展名识别:音频使用 `AudioPlayer` 底部弹窗;视频使用 `VideoPlayer` 居中弹窗(封面 → 点击播放 → 关闭时重置进度);图片使用 `van-image-preview`。 | 264 | - 上传组件点击预览时,根据扩展名识别:音频使用 `AudioPlayer` 底部弹窗;视频使用 `VideoPlayer` 居中弹窗(封面 → 点击播放 → 关闭时重置进度);图片使用 `van-image-preview`。 |
| 265 | + | ||
| 266 | +## /src/components 目录下组件 | ||
| 267 | + | ||
| 268 | +| 目标目录(src/components/) | 包含组件 | 说明 | | ||
| 269 | +| --------------------------- | ------------------------------------------------------------ | ---------------- | | ||
| 270 | +| `checkin/` | `CheckInDialog.vue`, `CheckInList.vue`, `CheckInResult.vue` | 打卡相关组件 | | ||
| 271 | +| `media/` | `AudioPlayer.vue`, `VideoPlayer.vue`, `MusicPlayer.vue` | 音视频播放组件 | | ||
| 272 | +| `activity/` | `ActivityApplyHistoryPopup.vue`, `ActivityCard.vue`, `ActivityStatusBadge.vue`, `ActivityTicket.vue` | 活动相关组件 | | ||
| 273 | +| `common/` | `ConfirmDialog.vue`, `GradientHeader.vue`, `MenuItem.vue`, `SearchBar.vue`, `TermsPopup.vue`, `UserAgreement.vue` | 通用基础组件 | | ||
| 274 | +| `effects/` | `FrostedGlass.vue`, `LoadingSpinner.vue` | 视觉特效组件 | | ||
| 275 | +| `courses/` | `CourseCard.vue`, `LiveStreamCard.vue` | 课程展示组件 | | ||
| 276 | +| `payment/` | `WechatPayment.vue` | 支付组件 | | ||
| 277 | +| `studyDetail/` | `StudyMaterialsPopup.vue` | 学习资料弹窗 | | ||
| 278 | +| `layout/` | `AppLayout.vue`, `BottomNav.vue` | 布局与导航 | | ||
| 279 | +| `share/` | `SharePoster.vue` | 分享海报 | | ||
| 280 | +| `files/` | `FilePreview.vue` | 文件预览 | | ||
| 281 | +| `feedback/` | `FeedbackForm.vue` | 反馈表单 | | ||
| 282 | + | ||
| 283 | +--- | ... | ... |
| ... | @@ -8,52 +8,52 @@ export {} | ... | @@ -8,52 +8,52 @@ export {} |
| 8 | /* prettier-ignore */ | 8 | /* prettier-ignore */ |
| 9 | declare module 'vue' { | 9 | declare module 'vue' { |
| 10 | export interface GlobalComponents { | 10 | export interface GlobalComponents { |
| 11 | - ActivityApplyHistoryPopup: typeof import('./components/ui/ActivityApplyHistoryPopup.vue')['default'] | 11 | + ActivityApplyHistoryPopup: typeof import('./components/activity/ActivityApplyHistoryPopup.vue')['default'] |
| 12 | - ActivityCard: typeof import('./components/ui/ActivityCard.vue')['default'] | 12 | + ActivityCard: typeof import('./components/activity/ActivityCard.vue')['default'] |
| 13 | AddTargetDialog: typeof import('./components/count/AddTargetDialog.vue')['default'] | 13 | AddTargetDialog: typeof import('./components/count/AddTargetDialog.vue')['default'] |
| 14 | AppLayout: typeof import('./components/layout/AppLayout.vue')['default'] | 14 | AppLayout: typeof import('./components/layout/AppLayout.vue')['default'] |
| 15 | - AudioPlayer: typeof import('./components/ui/AudioPlayer.vue')['default'] | 15 | + AudioPlayer: typeof import('./components/media/AudioPlayer.vue')['default'] |
| 16 | BottomNav: typeof import('./components/layout/BottomNav.vue')['default'] | 16 | BottomNav: typeof import('./components/layout/BottomNav.vue')['default'] |
| 17 | CheckinCard: typeof import('./components/checkin/CheckinCard.vue')['default'] | 17 | CheckinCard: typeof import('./components/checkin/CheckinCard.vue')['default'] |
| 18 | - CheckInDialog: typeof import('./components/ui/CheckInDialog.vue')['default'] | 18 | + CheckInDialog: typeof import('./components/checkin/CheckInDialog.vue')['default'] |
| 19 | - CheckInList: typeof import('./components/ui/CheckInList.vue')['default'] | 19 | + CheckInList: typeof import('./components/checkin/CheckInList.vue')['default'] |
| 20 | CheckinTargetList: typeof import('./components/count/CheckinTargetList.vue')['default'] | 20 | CheckinTargetList: typeof import('./components/count/CheckinTargetList.vue')['default'] |
| 21 | - CollapsibleCalendar: typeof import('./components/ui/CollapsibleCalendar.vue')['default'] | 21 | + CollapsibleCalendar: typeof import('./components/calendar/CollapsibleCalendar.vue')['default'] |
| 22 | - ConfirmDialog: typeof import('./components/ui/ConfirmDialog.vue')['default'] | 22 | + ConfirmDialog: typeof import('./components/common/ConfirmDialog.vue')['default'] |
| 23 | - CourseCard: typeof import('./components/ui/CourseCard.vue')['default'] | 23 | + CourseCard: typeof import('./components/courses/CourseCard.vue')['default'] |
| 24 | - CourseGroupCascader: typeof import('./components/ui/CourseGroupCascader.vue')['default'] | 24 | + CourseGroupCascader: typeof import('./components/courses/CourseGroupCascader.vue')['default'] |
| 25 | - CourseImageCard: typeof import('./components/ui/CourseImageCard.vue')['default'] | 25 | + CourseImageCard: typeof import('./components/courses/CourseImageCard.vue')['default'] |
| 26 | CourseList: typeof import('./components/courses/CourseList.vue')['default'] | 26 | CourseList: typeof import('./components/courses/CourseList.vue')['default'] |
| 27 | FeaturedCoursesSection: typeof import('./components/homePage/FeaturedCoursesSection.vue')['default'] | 27 | FeaturedCoursesSection: typeof import('./components/homePage/FeaturedCoursesSection.vue')['default'] |
| 28 | FormPage: typeof import('./components/infoEntry/formPage.vue')['default'] | 28 | FormPage: typeof import('./components/infoEntry/formPage.vue')['default'] |
| 29 | - FrostedGlass: typeof import('./components/ui/FrostedGlass.vue')['default'] | 29 | + FrostedGlass: typeof import('./components/effects/FrostedGlass.vue')['default'] |
| 30 | - GradientHeader: typeof import('./components/ui/GradientHeader.vue')['default'] | 30 | + GradientHeader: typeof import('./components/common/GradientHeader.vue')['default'] |
| 31 | HotCoursesSection: typeof import('./components/homePage/HotCoursesSection.vue')['default'] | 31 | HotCoursesSection: typeof import('./components/homePage/HotCoursesSection.vue')['default'] |
| 32 | LatestActivitiesSection: typeof import('./components/homePage/LatestActivitiesSection.vue')['default'] | 32 | LatestActivitiesSection: typeof import('./components/homePage/LatestActivitiesSection.vue')['default'] |
| 33 | - LiveStreamCard: typeof import('./components/ui/LiveStreamCard.vue')['default'] | 33 | + LiveStreamCard: typeof import('./components/courses/LiveStreamCard.vue')['default'] |
| 34 | - MenuItem: typeof import('./components/ui/MenuItem.vue')['default'] | 34 | + MenuItem: typeof import('./components/common/MenuItem.vue')['default'] |
| 35 | - OfficeViewer: typeof import('./components/ui/OfficeViewer.vue')['default'] | 35 | + OfficeViewer: typeof import('./components/media/OfficeViewer.vue')['default'] |
| 36 | - PdfPreview: typeof import('./components/ui/PdfPreview.vue')['default'] | 36 | + PdfPreview: typeof import('./components/media/PdfPreview.vue')['default'] |
| 37 | - PdfViewer: typeof import('./components/ui/PdfViewer.vue')['default'] | 37 | + PdfViewer: typeof import('./components/media/PdfViewer.vue')['default'] |
| 38 | PostCountModel: typeof import('./components/count/postCountModel.vue')['default'] | 38 | PostCountModel: typeof import('./components/count/postCountModel.vue')['default'] |
| 39 | - RecallPoster: typeof import('./components/ui/RecallPoster.vue')['default'] | 39 | + RecallPoster: typeof import('./components/poster/RecallPoster.vue')['default'] |
| 40 | RecommendationsSection: typeof import('./components/homePage/RecommendationsSection.vue')['default'] | 40 | RecommendationsSection: typeof import('./components/homePage/RecommendationsSection.vue')['default'] |
| 41 | ReviewPopup: typeof import('./components/courses/ReviewPopup.vue')['default'] | 41 | ReviewPopup: typeof import('./components/courses/ReviewPopup.vue')['default'] |
| 42 | RouterLink: typeof import('vue-router')['RouterLink'] | 42 | RouterLink: typeof import('vue-router')['RouterLink'] |
| 43 | RouterView: typeof import('vue-router')['RouterView'] | 43 | RouterView: typeof import('vue-router')['RouterView'] |
| 44 | - SearchBar: typeof import('./components/ui/SearchBar.vue')['default'] | 44 | + SearchBar: typeof import('./components/common/SearchBar.vue')['default'] |
| 45 | - SharePoster: typeof import('./components/ui/SharePoster.vue')['default'] | 45 | + SharePoster: typeof import('./components/poster/SharePoster.vue')['default'] |
| 46 | StarryBackground: typeof import('./components/effects/StarryBackground.vue')['default'] | 46 | StarryBackground: typeof import('./components/effects/StarryBackground.vue')['default'] |
| 47 | StudyCatalogPopup: typeof import('./components/studyDetail/StudyCatalogPopup.vue')['default'] | 47 | StudyCatalogPopup: typeof import('./components/studyDetail/StudyCatalogPopup.vue')['default'] |
| 48 | StudyCommentsSection: typeof import('./components/studyDetail/StudyCommentsSection.vue')['default'] | 48 | StudyCommentsSection: typeof import('./components/studyDetail/StudyCommentsSection.vue')['default'] |
| 49 | StudyMaterialsPopup: typeof import('./components/studyDetail/StudyMaterialsPopup.vue')['default'] | 49 | StudyMaterialsPopup: typeof import('./components/studyDetail/StudyMaterialsPopup.vue')['default'] |
| 50 | - SummerCampCard: typeof import('./components/ui/SummerCampCard.vue')['default'] | 50 | + SummerCampCard: typeof import('./components/courses/SummerCampCard.vue')['default'] |
| 51 | - TaskCalendar: typeof import('./components/ui/TaskCalendar.vue')['default'] | 51 | + TaskCalendar: typeof import('./components/calendar/TaskCalendar.vue')['default'] |
| 52 | TaskCascaderFilter: typeof import('./components/teacher/TaskCascaderFilter.vue')['default'] | 52 | TaskCascaderFilter: typeof import('./components/teacher/TaskCascaderFilter.vue')['default'] |
| 53 | TaskFilter: typeof import('./components/teacher/TaskFilter.vue')['default'] | 53 | TaskFilter: typeof import('./components/teacher/TaskFilter.vue')['default'] |
| 54 | - TermsPopup: typeof import('./components/ui/TermsPopup.vue')['default'] | 54 | + TermsPopup: typeof import('./components/common/TermsPopup.vue')['default'] |
| 55 | - UploadVideoPopup: typeof import('./components/ui/UploadVideoPopup.vue')['default'] | 55 | + UploadVideoPopup: typeof import('./components/checkin/UploadVideoPopup.vue')['default'] |
| 56 | - UserAgreement: typeof import('./components/ui/UserAgreement.vue')['default'] | 56 | + UserAgreement: typeof import('./components/common/UserAgreement.vue')['default'] |
| 57 | VanActionSheet: typeof import('vant/es')['ActionSheet'] | 57 | VanActionSheet: typeof import('vant/es')['ActionSheet'] |
| 58 | VanBackTop: typeof import('vant/es')['BackTop'] | 58 | VanBackTop: typeof import('vant/es')['BackTop'] |
| 59 | VanBadge: typeof import('vant/es')['Badge'] | 59 | VanBadge: typeof import('vant/es')['Badge'] |
| ... | @@ -101,8 +101,8 @@ declare module 'vue' { | ... | @@ -101,8 +101,8 @@ declare module 'vue' { |
| 101 | VanTag: typeof import('vant/es')['Tag'] | 101 | VanTag: typeof import('vant/es')['Tag'] |
| 102 | VanTimePicker: typeof import('vant/es')['TimePicker'] | 102 | VanTimePicker: typeof import('vant/es')['TimePicker'] |
| 103 | VanUploader: typeof import('vant/es')['Uploader'] | 103 | VanUploader: typeof import('vant/es')['Uploader'] |
| 104 | - VideoBackground: typeof import('./components/ui/VideoBackground.vue')['default'] | 104 | + VideoBackground: typeof import('./components/media/VideoBackground.vue')['default'] |
| 105 | - VideoPlayer: typeof import('./components/ui/VideoPlayer.vue')['default'] | 105 | + VideoPlayer: typeof import('./components/media/VideoPlayer.vue')['default'] |
| 106 | WechatPayment: typeof import('./components/payment/WechatPayment.vue')['default'] | 106 | WechatPayment: typeof import('./components/payment/WechatPayment.vue')['default'] |
| 107 | } | 107 | } |
| 108 | } | 108 | } | ... | ... |
| ... | @@ -75,7 +75,7 @@ | ... | @@ -75,7 +75,7 @@ |
| 75 | </template> | 75 | </template> |
| 76 | 76 | ||
| 77 | <script setup> | 77 | <script setup> |
| 78 | -import FrostedGlass from './FrostedGlass.vue' | 78 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 79 | 79 | ||
| 80 | const props = defineProps({ | 80 | const props = defineProps({ |
| 81 | activity: { | 81 | activity: { | ... | ... |
File moved
| ... | @@ -22,7 +22,7 @@ | ... | @@ -22,7 +22,7 @@ |
| 22 | <script setup> | 22 | <script setup> |
| 23 | import { ref, computed, onMounted, provide } from 'vue' | 23 | import { ref, computed, onMounted, provide } from 'vue' |
| 24 | import { useRoute, useRouter } from 'vue-router' | 24 | import { useRoute, useRouter } from 'vue-router' |
| 25 | -import CheckInList from '@/components/ui/CheckInList.vue' | 25 | +import CheckInList from '@/components/checkin/CheckInList.vue' |
| 26 | import { getTaskListAPI } from "@/api/checkin"; | 26 | import { getTaskListAPI } from "@/api/checkin"; |
| 27 | import { normalizeCheckinTaskItems } from '@/utils/tools' | 27 | import { normalizeCheckinTaskItems } from '@/utils/tools' |
| 28 | 28 | ... | ... |
| ... | @@ -98,8 +98,8 @@ | ... | @@ -98,8 +98,8 @@ |
| 98 | <script setup> | 98 | <script setup> |
| 99 | import { ref } from 'vue' | 99 | import { ref } from 'vue' |
| 100 | import PostCountModel from "@/components/count/postCountModel.vue"; | 100 | import PostCountModel from "@/components/count/postCountModel.vue"; |
| 101 | -import VideoPlayer from "@/components/ui/VideoPlayer.vue"; | 101 | +import VideoPlayer from "@/components/media/VideoPlayer.vue"; |
| 102 | -import AudioPlayer from "@/components/ui/AudioPlayer.vue"; | 102 | +import AudioPlayer from "@/components/media/AudioPlayer.vue"; |
| 103 | 103 | ||
| 104 | const props = defineProps({ | 104 | const props = defineProps({ |
| 105 | /** | 105 | /** | ... | ... |
| ... | @@ -40,7 +40,7 @@ | ... | @@ -40,7 +40,7 @@ |
| 40 | <script setup> | 40 | <script setup> |
| 41 | import { ref, watch } from 'vue'; | 41 | import { ref, watch } from 'vue'; |
| 42 | import { showToast } from 'vant'; | 42 | import { showToast } from 'vant'; |
| 43 | -import VideoPlayer from '@/components/ui/VideoPlayer.vue'; | 43 | +import VideoPlayer from '@/components/media/VideoPlayer.vue'; |
| 44 | import { uploadFile, validateFile } from '@/utils/upload'; | 44 | import { uploadFile, validateFile } from '@/utils/upload'; |
| 45 | 45 | ||
| 46 | const props = defineProps({ | 46 | const props = defineProps({ | ... | ... |
| ... | @@ -35,7 +35,7 @@ | ... | @@ -35,7 +35,7 @@ |
| 35 | * @description 确认对话框组件,基于 FrostedGlass | 35 | * @description 确认对话框组件,基于 FrostedGlass |
| 36 | --> | 36 | --> |
| 37 | <script setup> | 37 | <script setup> |
| 38 | -import FrostedGlass from './FrostedGlass.vue' | 38 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 39 | 39 | ||
| 40 | const props = defineProps({ | 40 | const props = defineProps({ |
| 41 | /** 是否显示弹窗 (v-model) */ | 41 | /** 是否显示弹窗 (v-model) */ | ... | ... |
| ... | @@ -33,7 +33,7 @@ | ... | @@ -33,7 +33,7 @@ |
| 33 | <script setup> | 33 | <script setup> |
| 34 | import { watch, ref } from 'vue' | 34 | import { watch, ref } from 'vue' |
| 35 | import { useRouter } from 'vue-router' | 35 | import { useRouter } from 'vue-router' |
| 36 | -import FrostedGlass from './FrostedGlass.vue' | 36 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 37 | 37 | ||
| 38 | const router = useRouter() | 38 | const router = useRouter() |
| 39 | 39 | ... | ... |
File moved
| ... | @@ -21,7 +21,7 @@ | ... | @@ -21,7 +21,7 @@ |
| 21 | 21 | ||
| 22 | <script setup> | 22 | <script setup> |
| 23 | import { ref, onMounted } from 'vue' | 23 | import { ref, onMounted } from 'vue' |
| 24 | -import CourseCard from '@/components/ui/CourseCard.vue' | 24 | +import CourseCard from '@/components/courses/CourseCard.vue' |
| 25 | import { getCourseListAPI } from '@/api/course' | 25 | import { getCourseListAPI } from '@/api/course' |
| 26 | 26 | ||
| 27 | const courses = ref([]) | 27 | const courses = ref([]) | ... | ... |
| ... | @@ -19,7 +19,7 @@ | ... | @@ -19,7 +19,7 @@ |
| 19 | 19 | ||
| 20 | <script setup> | 20 | <script setup> |
| 21 | import { ref, onMounted } from 'vue' | 21 | import { ref, onMounted } from 'vue' |
| 22 | -import ActivityCard from '@/components/ui/ActivityCard.vue' | 22 | +import ActivityCard from '@/components/activity/ActivityCard.vue' |
| 23 | 23 | ||
| 24 | const activities = ref([]) | 24 | const activities = ref([]) |
| 25 | 25 | ... | ... |
| ... | @@ -43,7 +43,7 @@ | ... | @@ -43,7 +43,7 @@ |
| 43 | <script setup> | 43 | <script setup> |
| 44 | import { ref, onMounted } from 'vue' | 44 | import { ref, onMounted } from 'vue' |
| 45 | import { useRouter } from 'vue-router' | 45 | import { useRouter } from 'vue-router' |
| 46 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 46 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 47 | import { getCourseListAPI } from '@/api/course' | 47 | import { getCourseListAPI } from '@/api/course' |
| 48 | 48 | ||
| 49 | const router = useRouter() | 49 | const router = useRouter() | ... | ... |
| ... | @@ -23,7 +23,7 @@ | ... | @@ -23,7 +23,7 @@ |
| 23 | 23 | ||
| 24 | <script setup> | 24 | <script setup> |
| 25 | import BottomNav from './BottomNav.vue' | 25 | import BottomNav from './BottomNav.vue' |
| 26 | -import GradientHeader from '../ui/GradientHeader.vue' | 26 | +import GradientHeader from '../common/GradientHeader.vue' |
| 27 | import { useRoute } from 'vue-router' | 27 | import { useRoute } from 'vue-router' |
| 28 | 28 | ||
| 29 | const route = useRoute() | 29 | const route = useRoute() | ... | ... |
| ... | @@ -64,7 +64,7 @@ | ... | @@ -64,7 +64,7 @@ |
| 64 | 64 | ||
| 65 | <script setup> | 65 | <script setup> |
| 66 | import { ref, onMounted } from 'vue' | 66 | import { ref, onMounted } from 'vue' |
| 67 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 67 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 68 | import { wxPayAPI, wxPayCheckAPI } from "@/api/wx/pay" | 68 | import { wxPayAPI, wxPayCheckAPI } from "@/api/wx/pay" |
| 69 | 69 | ||
| 70 | // 定义组件的props | 70 | // 定义组件的props | ... | ... |
| ... | @@ -81,7 +81,7 @@ | ... | @@ -81,7 +81,7 @@ |
| 81 | 81 | ||
| 82 | <script setup> | 82 | <script setup> |
| 83 | import { computed } from 'vue'; | 83 | import { computed } from 'vue'; |
| 84 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 84 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 85 | 85 | ||
| 86 | const props = defineProps({ | 86 | const props = defineProps({ |
| 87 | /** 是否显示资料弹窗 (v-model) */ | 87 | /** 是否显示资料弹窗 (v-model) */ | ... | ... |
| ... | @@ -330,10 +330,10 @@ import { useRoute } from 'vue-router' | ... | @@ -330,10 +330,10 @@ import { useRoute } from 'vue-router' |
| 330 | 330 | ||
| 331 | // 导入布局和UI组件 | 331 | // 导入布局和UI组件 |
| 332 | import AppLayout from '@/components/layout/AppLayout.vue' | 332 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 333 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 333 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 334 | -import LiveStreamCard from '@/components/ui/LiveStreamCard.vue' | 334 | +import LiveStreamCard from '@/components/courses/LiveStreamCard.vue' |
| 335 | -import VideoPlayer from '@/components/ui/VideoPlayer.vue' | 335 | +import VideoPlayer from '@/components/media/VideoPlayer.vue' |
| 336 | -import CheckInList from '@/components/ui/CheckInList.vue' | 336 | +import CheckInList from '@/components/checkin/CheckInList.vue' |
| 337 | 337 | ||
| 338 | import FeaturedCoursesSection from '@/components/homePage/FeaturedCoursesSection.vue' | 338 | import FeaturedCoursesSection from '@/components/homePage/FeaturedCoursesSection.vue' |
| 339 | import RecommendationsSection from '@/components/homePage/RecommendationsSection.vue' | 339 | import RecommendationsSection from '@/components/homePage/RecommendationsSection.vue' | ... | ... |
| ... | @@ -151,7 +151,7 @@ | ... | @@ -151,7 +151,7 @@ |
| 151 | import { ref, computed, defineComponent, h } from 'vue' | 151 | import { ref, computed, defineComponent, h } from 'vue' |
| 152 | import { useRoute, useRouter } from 'vue-router' | 152 | import { useRoute, useRouter } from 'vue-router' |
| 153 | import AppLayout from '@/components/layout/AppLayout.vue' | 153 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 154 | -import ActivityCard from '@/components/ui/ActivityCard.vue' | 154 | +import ActivityCard from '@/components/activity/ActivityCard.vue' |
| 155 | import { activities } from '@/utils/mockData' | 155 | import { activities } from '@/utils/mockData' |
| 156 | import { useTitle } from '@vueuse/core'; | 156 | import { useTitle } from '@vueuse/core'; |
| 157 | const $route = useRoute(); | 157 | const $route = useRoute(); | ... | ... |
| ... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
| 2 | import { ref, onMounted, defineComponent, h } from "vue"; | 2 | import { ref, onMounted, defineComponent, h } from "vue"; |
| 3 | import { useRoute, useRouter } from "vue-router"; | 3 | import { useRoute, useRouter } from "vue-router"; |
| 4 | import AppLayout from "@/components/layout/AppLayout.vue"; | 4 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 5 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 5 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 6 | import { activities } from "@/utils/mockData"; | 6 | import { activities } from "@/utils/mockData"; |
| 7 | import { useTitle } from '@vueuse/core'; | 7 | import { useTitle } from '@vueuse/core'; |
| 8 | const $route = useRoute(); | 8 | const $route = useRoute(); | ... | ... |
| ... | @@ -116,7 +116,7 @@ | ... | @@ -116,7 +116,7 @@ |
| 116 | <script setup> | 116 | <script setup> |
| 117 | import { ref, reactive, computed, onMounted } from 'vue' | 117 | import { ref, reactive, computed, onMounted } from 'vue' |
| 118 | import { useRoute, useRouter } from 'vue-router' | 118 | import { useRoute, useRouter } from 'vue-router' |
| 119 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 119 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 120 | import { activities } from '@/utils/mockData' | 120 | import { activities } from '@/utils/mockData' |
| 121 | import { useTitle } from '@vueuse/core'; | 121 | import { useTitle } from '@vueuse/core'; |
| 122 | const $route = useRoute(); | 122 | const $route = useRoute(); | ... | ... |
| ... | @@ -35,7 +35,7 @@ | ... | @@ -35,7 +35,7 @@ |
| 35 | <script setup> | 35 | <script setup> |
| 36 | import { ref } from 'vue' | 36 | import { ref } from 'vue' |
| 37 | import { useRoute, useRouter } from 'vue-router' | 37 | import { useRoute, useRouter } from 'vue-router' |
| 38 | -import ActivityCard from '@/components/ui/ActivityCard.vue' | 38 | +import ActivityCard from '@/components/activity/ActivityCard.vue' |
| 39 | import { activities as mockActivities } from '@/utils/mockData' | 39 | import { activities as mockActivities } from '@/utils/mockData' |
| 40 | import { useTitle } from '@vueuse/core'; | 40 | import { useTitle } from '@vueuse/core'; |
| 41 | const $route = useRoute(); | 41 | const $route = useRoute(); | ... | ... |
| ... | @@ -109,7 +109,7 @@ | ... | @@ -109,7 +109,7 @@ |
| 109 | <script setup> | 109 | <script setup> |
| 110 | import { ref, reactive } from 'vue' | 110 | import { ref, reactive } from 'vue' |
| 111 | import { useRouter } from 'vue-router' | 111 | import { useRouter } from 'vue-router' |
| 112 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 112 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 113 | import { smsAPI } from '@/api/common'; | 113 | import { smsAPI } from '@/api/common'; |
| 114 | import { resetPasswordAPI } from '@/api/users'; | 114 | import { resetPasswordAPI } from '@/api/users'; |
| 115 | import { showToast } from 'vant'; | 115 | import { showToast } from 'vant'; | ... | ... |
| ... | @@ -184,13 +184,13 @@ | ... | @@ -184,13 +184,13 @@ |
| 184 | <script setup> | 184 | <script setup> |
| 185 | import { ref } from "vue"; | 185 | import { ref } from "vue"; |
| 186 | import { useRoute, useRouter } from "vue-router"; | 186 | import { useRoute, useRouter } from "vue-router"; |
| 187 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 187 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 188 | import { useAuth } from "@/contexts/auth"; | 188 | import { useAuth } from "@/contexts/auth"; |
| 189 | import { loginAPI, getUserInfoAPI } from "@/api/users"; | 189 | import { loginAPI, getUserInfoAPI } from "@/api/users"; |
| 190 | import { useTitle } from "@vueuse/core"; | 190 | import { useTitle } from "@vueuse/core"; |
| 191 | import { smsAPI } from "@/api/common"; | 191 | import { smsAPI } from "@/api/common"; |
| 192 | import { showToast } from "vant"; | 192 | import { showToast } from "vant"; |
| 193 | -import UserAgreement from "@/components/ui/UserAgreement.vue"; | 193 | +import UserAgreement from "@/components/common/UserAgreement.vue"; |
| 194 | import { setAuthHeaders } from "@/utils/axios"; | 194 | import { setAuthHeaders } from "@/utils/axios"; |
| 195 | import { applyUserInfoAuth } from "@/utils/auth_user_info"; | 195 | import { applyUserInfoAuth } from "@/utils/auth_user_info"; |
| 196 | import weixinLogo from '@/assets/images/weixin_logo_lg.jpeg' | 196 | import weixinLogo from '@/assets/images/weixin_logo_lg.jpeg' | ... | ... |
| ... | @@ -181,8 +181,8 @@ | ... | @@ -181,8 +181,8 @@ |
| 181 | <script setup> | 181 | <script setup> |
| 182 | import { ref, reactive } from 'vue' | 182 | import { ref, reactive } from 'vue' |
| 183 | import { useRoute, useRouter } from 'vue-router' | 183 | import { useRoute, useRouter } from 'vue-router' |
| 184 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 184 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 185 | -import TermsPopup from '@/components/ui/TermsPopup.vue' | 185 | +import TermsPopup from '@/components/common/TermsPopup.vue' |
| 186 | import { useAuth } from '@/contexts/auth' | 186 | import { useAuth } from '@/contexts/auth' |
| 187 | import { useTitle } from '@vueuse/core'; | 187 | import { useTitle } from '@vueuse/core'; |
| 188 | import { smsAPI } from '@/api/common'; | 188 | import { smsAPI } from '@/api/common'; | ... | ... |
| ... | @@ -177,8 +177,8 @@ import { getTaskDetailAPI, getUploadTaskInfoAPI, getSubtaskListAPI, reuseGratitu | ... | @@ -177,8 +177,8 @@ import { getTaskDetailAPI, getUploadTaskInfoAPI, getSubtaskListAPI, reuseGratitu |
| 177 | import { useTitle } from '@vueuse/core' | 177 | import { useTitle } from '@vueuse/core' |
| 178 | import { useCheckin } from '@/composables/useCheckin' | 178 | import { useCheckin } from '@/composables/useCheckin' |
| 179 | import { normalizeAttachmentTypeConfig } from '@/utils/tools' | 179 | import { normalizeAttachmentTypeConfig } from '@/utils/tools' |
| 180 | -import AudioPlayer from '@/components/ui/AudioPlayer.vue' | 180 | +import AudioPlayer from '@/components/media/AudioPlayer.vue' |
| 181 | -import VideoPlayer from '@/components/ui/VideoPlayer.vue' | 181 | +import VideoPlayer from '@/components/media/VideoPlayer.vue' |
| 182 | import AddTargetDialog from '@/components/count/AddTargetDialog.vue' | 182 | import AddTargetDialog from '@/components/count/AddTargetDialog.vue' |
| 183 | import CheckinTargetList from '@/components/count/CheckinTargetList.vue' | 183 | import CheckinTargetList from '@/components/count/CheckinTargetList.vue' |
| 184 | import { showToast, showLoadingToast } from 'vant' | 184 | import { showToast, showLoadingToast } from 'vant' | ... | ... |
| ... | @@ -61,7 +61,7 @@ | ... | @@ -61,7 +61,7 @@ |
| 61 | import { ref, computed } from "vue"; | 61 | import { ref, computed } from "vue"; |
| 62 | import { DatePicker, List, Popup } from "vant"; | 62 | import { DatePicker, List, Popup } from "vant"; |
| 63 | import AppLayout from "@/components/layout/AppLayout.vue"; | 63 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 64 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 64 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 65 | 65 | ||
| 66 | // 列表数据 | 66 | // 列表数据 |
| 67 | const list = ref([]); | 67 | const list = ref([]); | ... | ... |
| ... | @@ -157,8 +157,8 @@ import { ref, onBeforeUnmount, onMounted, computed, nextTick, getCurrentInstance | ... | @@ -157,8 +157,8 @@ import { ref, onBeforeUnmount, onMounted, computed, nextTick, getCurrentInstance |
| 157 | import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router' | 157 | import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router' |
| 158 | import { showConfirmDialog, showSuccessToast, showFailToast, showLoadingToast } from 'vant'; | 158 | import { showConfirmDialog, showSuccessToast, showFailToast, showLoadingToast } from 'vant'; |
| 159 | import AppLayout from "@/components/layout/AppLayout.vue"; | 159 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 160 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 160 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 161 | -import CollapsibleCalendar from "@/components/ui/CollapsibleCalendar.vue"; | 161 | +import CollapsibleCalendar from "@/components/calendar/CollapsibleCalendar.vue"; |
| 162 | import PostCountModel from "@/components/count/postCountModel.vue"; | 162 | import PostCountModel from "@/components/count/postCountModel.vue"; |
| 163 | import CheckinCard from "@/components/checkin/CheckinCard.vue"; | 163 | import CheckinCard from "@/components/checkin/CheckinCard.vue"; |
| 164 | import { useTitle, useResizeObserver, useScroll } from '@vueuse/core'; | 164 | import { useTitle, useResizeObserver, useScroll } from '@vueuse/core'; | ... | ... |
| ... | @@ -59,7 +59,7 @@ | ... | @@ -59,7 +59,7 @@ |
| 59 | import { ref, computed } from "vue"; | 59 | import { ref, computed } from "vue"; |
| 60 | import { DatePicker, List, Popup } from "vant"; | 60 | import { DatePicker, List, Popup } from "vant"; |
| 61 | import AppLayout from '@/components/layout/AppLayout.vue' | 61 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 62 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 62 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 63 | 63 | ||
| 64 | // 列表数据 | 64 | // 列表数据 |
| 65 | const list = ref([]); | 65 | const list = ref([]); | ... | ... |
| ... | @@ -60,7 +60,7 @@ | ... | @@ -60,7 +60,7 @@ |
| 60 | import { ref, computed } from "vue"; | 60 | import { ref, computed } from "vue"; |
| 61 | import { DatePicker, List, Popup } from "vant"; | 61 | import { DatePicker, List, Popup } from "vant"; |
| 62 | import AppLayout from "@/components/layout/AppLayout.vue"; | 62 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 63 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 63 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 64 | 64 | ||
| 65 | // 列表数据 | 65 | // 列表数据 |
| 66 | const list = ref([]); | 66 | const list = ref([]); | ... | ... |
| ... | @@ -60,7 +60,7 @@ | ... | @@ -60,7 +60,7 @@ |
| 60 | import { ref, computed } from "vue"; | 60 | import { ref, computed } from "vue"; |
| 61 | import { DatePicker, List, Popup } from "vant"; | 61 | import { DatePicker, List, Popup } from "vant"; |
| 62 | import AppLayout from "@/components/layout/AppLayout.vue"; | 62 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 63 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 63 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 64 | 64 | ||
| 65 | // 列表数据 | 65 | // 列表数据 |
| 66 | const list = ref([]); | 66 | const list = ref([]); | ... | ... |
| ... | @@ -259,8 +259,8 @@ | ... | @@ -259,8 +259,8 @@ |
| 259 | import { ref, onMounted, onUnmounted, watch, nextTick } from 'vue' | 259 | import { ref, onMounted, onUnmounted, watch, nextTick } from 'vue' |
| 260 | import { useRoute, useRouter } from 'vue-router' | 260 | import { useRoute, useRouter } from 'vue-router' |
| 261 | import AppLayout from '@/components/layout/AppLayout.vue' | 261 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 262 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 262 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 263 | -import ConfirmDialog from '@/components/ui/ConfirmDialog.vue' | 263 | +import ConfirmDialog from '@/components/common/ConfirmDialog.vue' |
| 264 | import WechatPayment from '@/components/payment/WechatPayment.vue' | 264 | import WechatPayment from '@/components/payment/WechatPayment.vue' |
| 265 | import FormPage from '@/components/infoEntry/formPage.vue' | 265 | import FormPage from '@/components/infoEntry/formPage.vue' |
| 266 | import { useCart } from '@/contexts/cart' | 266 | import { useCart } from '@/contexts/cart' | ... | ... |
| ... | @@ -338,9 +338,9 @@ import { sharePage } from '@/composables/useShare.js' | ... | @@ -338,9 +338,9 @@ import { sharePage } from '@/composables/useShare.js' |
| 338 | import { useImageLoader } from '@/composables/useImageLoader' | 338 | import { useImageLoader } from '@/composables/useImageLoader' |
| 339 | 339 | ||
| 340 | import AppLayout from '@/components/layout/AppLayout.vue' | 340 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 341 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 341 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 342 | -import SharePoster from '@/components/ui/SharePoster.vue' | 342 | +import SharePoster from '@/components/poster/SharePoster.vue' |
| 343 | -import CheckInDialog from '@/components/ui/CheckInDialog.vue' | 343 | +import CheckInDialog from '@/components/checkin/CheckInDialog.vue' |
| 344 | 344 | ||
| 345 | // 导入接口 | 345 | // 导入接口 |
| 346 | import { getCourseDetailAPI, getGroupCommentListAPI, addGroupCommentAPI } from "@/api/course"; | 346 | import { getCourseDetailAPI, getGroupCommentListAPI, addGroupCommentAPI } from "@/api/course"; | ... | ... |
| ... | @@ -33,8 +33,8 @@ | ... | @@ -33,8 +33,8 @@ |
| 33 | import { ref, onMounted, watch } from 'vue'; | 33 | import { ref, onMounted, watch } from 'vue'; |
| 34 | import { useRoute } from 'vue-router'; | 34 | import { useRoute } from 'vue-router'; |
| 35 | import AppLayout from '@/components/layout/AppLayout.vue'; | 35 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 36 | -import SearchBar from '@/components/ui/SearchBar.vue'; | 36 | +import SearchBar from '@/components/common/SearchBar.vue'; |
| 37 | -import CourseCard from '@/components/ui/CourseCard.vue'; | 37 | +import CourseCard from '@/components/courses/CourseCard.vue'; |
| 38 | import { courses as mockCourses } from '@/utils/mockData'; | 38 | import { courses as mockCourses } from '@/utils/mockData'; |
| 39 | // 导入接口 | 39 | // 导入接口 |
| 40 | import { getCourseListAPI } from "@/api/course"; | 40 | import { getCourseListAPI } from "@/api/course"; | ... | ... |
| ... | @@ -31,8 +31,8 @@ | ... | @@ -31,8 +31,8 @@ |
| 31 | import { ref, onMounted, computed } from 'vue'; | 31 | import { ref, onMounted, computed } from 'vue'; |
| 32 | import { useRoute } from 'vue-router'; | 32 | import { useRoute } from 'vue-router'; |
| 33 | import AppLayout from '@/components/layout/AppLayout.vue'; | 33 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 34 | -import CourseCard from '@/components/ui/CourseCard.vue'; | 34 | +import CourseCard from '@/components/courses/CourseCard.vue'; |
| 35 | -import CourseImageCard from '@/components/ui/CourseImageCard.vue'; | 35 | +import CourseImageCard from '@/components/courses/CourseImageCard.vue'; |
| 36 | // 导入接口 | 36 | // 导入接口 |
| 37 | import { getScheduleCombinationListAPI } from "@/api/course"; | 37 | import { getScheduleCombinationListAPI } from "@/api/course"; |
| 38 | 38 | ... | ... |
| ... | @@ -97,10 +97,10 @@ | ... | @@ -97,10 +97,10 @@ |
| 97 | import { computed, defineComponent, h } from "vue"; | 97 | import { computed, defineComponent, h } from "vue"; |
| 98 | import { useRoute, useRouter } from 'vue-router' | 98 | import { useRoute, useRouter } from 'vue-router' |
| 99 | import AppLayout from "@/components/layout/AppLayout.vue"; | 99 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 100 | -import SearchBar from "@/components/ui/SearchBar.vue"; | 100 | +import SearchBar from "@/components/common/SearchBar.vue"; |
| 101 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 101 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 102 | -import CourseCard from "@/components/ui/CourseCard.vue"; | 102 | +import CourseCard from "@/components/courses/CourseCard.vue"; |
| 103 | -import LiveStreamCard from "@/components/ui/LiveStreamCard.vue"; | 103 | +import LiveStreamCard from "@/components/courses/LiveStreamCard.vue"; |
| 104 | import { featuredCourse, liveStreams } from "@/utils/mockData"; | 104 | import { featuredCourse, liveStreams } from "@/utils/mockData"; |
| 105 | import { useTitle } from '@vueuse/core'; | 105 | import { useTitle } from '@vueuse/core'; |
| 106 | 106 | ... | ... |
| ... | @@ -33,7 +33,7 @@ | ... | @@ -33,7 +33,7 @@ |
| 33 | <script setup> | 33 | <script setup> |
| 34 | import { ref } from 'vue'; | 34 | import { ref } from 'vue'; |
| 35 | import { useRoute, useRouter } from 'vue-router'; | 35 | import { useRoute, useRouter } from 'vue-router'; |
| 36 | -import CourseCard from '@/components/ui/CourseCard.vue'; | 36 | +import CourseCard from '@/components/courses/CourseCard.vue'; |
| 37 | import { useTitle } from '@vueuse/core'; | 37 | import { useTitle } from '@vueuse/core'; |
| 38 | import AppLayout from "@/components/layout/AppLayout.vue"; | 38 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 39 | 39 | ... | ... |
| ... | @@ -24,7 +24,7 @@ | ... | @@ -24,7 +24,7 @@ |
| 24 | import { ref, onMounted } from 'vue'; | 24 | import { ref, onMounted } from 'vue'; |
| 25 | import { useRoute, useRouter } from 'vue-router'; | 25 | import { useRoute, useRouter } from 'vue-router'; |
| 26 | import AppLayout from '@/components/layout/AppLayout.vue'; | 26 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 27 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 27 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 28 | import { useTitle } from '@vueuse/core'; | 28 | import { useTitle } from '@vueuse/core'; |
| 29 | // 导入接口 | 29 | // 导入接口 |
| 30 | import { getArticleInfoAPI } from "@/api/help"; | 30 | import { getArticleInfoAPI } from "@/api/help"; | ... | ... |
| ... | @@ -49,7 +49,7 @@ | ... | @@ -49,7 +49,7 @@ |
| 49 | import { ref } from 'vue'; | 49 | import { ref } from 'vue'; |
| 50 | import { useRouter, useRoute } from 'vue-router'; | 50 | import { useRouter, useRoute } from 'vue-router'; |
| 51 | import AppLayout from '@/components/layout/AppLayout.vue'; | 51 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 52 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 52 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 53 | import { useTitle } from '@vueuse/core'; | 53 | import { useTitle } from '@vueuse/core'; |
| 54 | // 导入接口 | 54 | // 导入接口 |
| 55 | import { getArticleListAPI } from "@/api/help"; | 55 | import { getArticleListAPI } from "@/api/help"; | ... | ... |
| ... | @@ -111,7 +111,7 @@ | ... | @@ -111,7 +111,7 @@ |
| 111 | import { ref } from 'vue'; | 111 | import { ref } from 'vue'; |
| 112 | import { useRoute, useRouter } from 'vue-router'; | 112 | import { useRoute, useRouter } from 'vue-router'; |
| 113 | import { useTitle } from '@vueuse/core'; | 113 | import { useTitle } from '@vueuse/core'; |
| 114 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 114 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 115 | import AppLayout from '@/components/layout/AppLayout.vue'; | 115 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 116 | import { formatDate } from '@/utils/tools'; | 116 | import { formatDate } from '@/utils/tools'; |
| 117 | 117 | ... | ... |
| ... | @@ -27,7 +27,7 @@ | ... | @@ -27,7 +27,7 @@ |
| 27 | import { ref, onMounted } from 'vue'; | 27 | import { ref, onMounted } from 'vue'; |
| 28 | import { useRoute } from 'vue-router'; | 28 | import { useRoute } from 'vue-router'; |
| 29 | import AppLayout from '@/components/layout/AppLayout.vue'; | 29 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 30 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 30 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 31 | import { useTitle } from '@vueuse/core'; | 31 | import { useTitle } from '@vueuse/core'; |
| 32 | 32 | ||
| 33 | // 导入接口 | 33 | // 导入接口 | ... | ... |
| ... | @@ -66,7 +66,7 @@ | ... | @@ -66,7 +66,7 @@ |
| 66 | import { ref } from 'vue'; | 66 | import { ref } from 'vue'; |
| 67 | import { useRouter, useRoute } from 'vue-router'; | 67 | import { useRouter, useRoute } from 'vue-router'; |
| 68 | import AppLayout from '@/components/layout/AppLayout.vue'; | 68 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 69 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 69 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 70 | import { useTitle } from '@vueuse/core'; | 70 | import { useTitle } from '@vueuse/core'; |
| 71 | 71 | ||
| 72 | // 导入接口 | 72 | // 导入接口 | ... | ... |
| ... | @@ -52,8 +52,8 @@ | ... | @@ -52,8 +52,8 @@ |
| 52 | <script setup> | 52 | <script setup> |
| 53 | import { ref } from 'vue'; | 53 | import { ref } from 'vue'; |
| 54 | import { useRoute, useRouter } from 'vue-router'; | 54 | import { useRoute, useRouter } from 'vue-router'; |
| 55 | -import CourseCard from '@/components/ui/CourseCard.vue'; | 55 | +import CourseCard from '@/components/courses/CourseCard.vue'; |
| 56 | -import ActivityCard from '@/components/ui/ActivityCard.vue'; | 56 | +import ActivityCard from '@/components/activity/ActivityCard.vue'; |
| 57 | import { courses as mockCourses, activities as mockActivities } from '@/utils/mockData'; | 57 | import { courses as mockCourses, activities as mockActivities } from '@/utils/mockData'; |
| 58 | import { useTitle } from '@vueuse/core'; | 58 | import { useTitle } from '@vueuse/core'; |
| 59 | import AppLayout from "@/components/layout/AppLayout.vue"; | 59 | import AppLayout from "@/components/layout/AppLayout.vue"; | ... | ... |
| ... | @@ -196,7 +196,7 @@ | ... | @@ -196,7 +196,7 @@ |
| 196 | import { ref, computed, onMounted, onUnmounted } from 'vue' | 196 | import { ref, computed, onMounted, onUnmounted } from 'vue' |
| 197 | import { useRoute, useRouter } from 'vue-router'; | 197 | import { useRoute, useRouter } from 'vue-router'; |
| 198 | import AppLayout from '@/components/layout/AppLayout.vue' | 198 | import AppLayout from '@/components/layout/AppLayout.vue' |
| 199 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue' | 199 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue' |
| 200 | import WechatPayment from '@/components/payment/WechatPayment.vue' | 200 | import WechatPayment from '@/components/payment/WechatPayment.vue' |
| 201 | import { useTitle } from '@vueuse/core'; | 201 | import { useTitle } from '@vueuse/core'; |
| 202 | import { showConfirmDialog, showToast, Dialog } from 'vant'; | 202 | import { showConfirmDialog, showToast, Dialog } from 'vant'; | ... | ... |
| ... | @@ -135,10 +135,10 @@ | ... | @@ -135,10 +135,10 @@ |
| 135 | import { ref, h } from "vue"; | 135 | import { ref, h } from "vue"; |
| 136 | import { useRoute, useRouter } from "vue-router"; | 136 | import { useRoute, useRouter } from "vue-router"; |
| 137 | import AppLayout from "@/components/layout/AppLayout.vue"; | 137 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 138 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 138 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 139 | -import MenuItem from "@/components/ui/MenuItem.vue"; | 139 | +import MenuItem from "@/components/common/MenuItem.vue"; |
| 140 | import { useAuth } from "@/contexts/auth"; | 140 | import { useAuth } from "@/contexts/auth"; |
| 141 | -import CheckInDialog from "@/components/ui/CheckInDialog.vue"; | 141 | +import CheckInDialog from "@/components/checkin/CheckInDialog.vue"; |
| 142 | import { getUserInfoAPI } from "@/api/users"; | 142 | import { getUserInfoAPI } from "@/api/users"; |
| 143 | import { showToast } from "vant"; | 143 | import { showToast } from "vant"; |
| 144 | import { useTitle } from "@vueuse/core"; | 144 | import { useTitle } from "@vueuse/core"; | ... | ... |
| ... | @@ -119,7 +119,7 @@ | ... | @@ -119,7 +119,7 @@ |
| 119 | import { ref, onMounted } from 'vue'; | 119 | import { ref, onMounted } from 'vue'; |
| 120 | import { useRoute, useRouter } from 'vue-router'; | 120 | import { useRoute, useRouter } from 'vue-router'; |
| 121 | import AppLayout from '@/components/layout/AppLayout.vue'; | 121 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 122 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 122 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 123 | import { ChevronRightIcon } from '@heroicons/vue/24/outline'; | 123 | import { ChevronRightIcon } from '@heroicons/vue/24/outline'; |
| 124 | import { useTitle } from '@vueuse/core'; | 124 | import { useTitle } from '@vueuse/core'; |
| 125 | import { getUserInfoAPI } from '@/api/users'; | 125 | import { getUserInfoAPI } from '@/api/users'; | ... | ... |
| ... | @@ -118,7 +118,7 @@ import dayjs from 'dayjs'; | ... | @@ -118,7 +118,7 @@ import dayjs from 'dayjs'; |
| 118 | import { showToast } from 'vant'; | 118 | import { showToast } from 'vant'; |
| 119 | import { normalizeCheckinTaskItems } from '@/utils/tools' | 119 | import { normalizeCheckinTaskItems } from '@/utils/tools' |
| 120 | import AppLayout from '@/components/layout/AppLayout.vue'; | 120 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 121 | -import CheckInDialog from '@/components/ui/CheckInDialog.vue'; | 121 | +import CheckInDialog from '@/components/checkin/CheckInDialog.vue'; |
| 122 | 122 | ||
| 123 | // 导入接口 | 123 | // 导入接口 |
| 124 | import { getCourseDetailAPI } from '@/api/course'; | 124 | import { getCourseDetailAPI } from '@/api/course'; | ... | ... |
| ... | @@ -20,8 +20,8 @@ | ... | @@ -20,8 +20,8 @@ |
| 20 | <script setup> | 20 | <script setup> |
| 21 | import { ref } from 'vue'; | 21 | import { ref } from 'vue'; |
| 22 | import AppLayout from '@/components/layout/AppLayout.vue'; | 22 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 23 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 23 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 24 | -import AudioPlayer from '@/components/ui/AudioPlayer.vue'; | 24 | +import AudioPlayer from '@/components/media/AudioPlayer.vue'; |
| 25 | 25 | ||
| 26 | // 测试音频数据 | 26 | // 测试音频数据 |
| 27 | const audioList = ref([ | 27 | const audioList = ref([ | ... | ... |
| ... | @@ -53,7 +53,7 @@ | ... | @@ -53,7 +53,7 @@ |
| 53 | <script setup> | 53 | <script setup> |
| 54 | import { ref, onMounted } from "vue"; | 54 | import { ref, onMounted } from "vue"; |
| 55 | import AppLayout from "@/components/layout/AppLayout.vue"; | 55 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 56 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 56 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 57 | import { getUserInfoAPI, updateUserInfoAPI } from "@/api/users"; | 57 | import { getUserInfoAPI, updateUserInfoAPI } from "@/api/users"; |
| 58 | import { qiniuTokenAPI, qiniuUploadAPI, saveFileAPI } from '@/api/common'; | 58 | import { qiniuTokenAPI, qiniuUploadAPI, saveFileAPI } from '@/api/common'; |
| 59 | import { showToast, showLoadingToast } from 'vant'; | 59 | import { showToast, showLoadingToast } from 'vant'; | ... | ... |
| ... | @@ -61,7 +61,7 @@ | ... | @@ -61,7 +61,7 @@ |
| 61 | <script setup> | 61 | <script setup> |
| 62 | import { ref } from 'vue'; | 62 | import { ref } from 'vue'; |
| 63 | import AppLayout from '@/components/layout/AppLayout.vue'; | 63 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 64 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 64 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 65 | import { resetPasswordAPI } from '@/api/users'; | 65 | import { resetPasswordAPI } from '@/api/users'; |
| 66 | 66 | ||
| 67 | import { useTitle } from '@vueuse/core'; | 67 | import { useTitle } from '@vueuse/core'; | ... | ... |
| ... | @@ -89,7 +89,7 @@ | ... | @@ -89,7 +89,7 @@ |
| 89 | import { ref, onMounted, computed } from 'vue'; | 89 | import { ref, onMounted, computed } from 'vue'; |
| 90 | import { useRoute } from 'vue-router'; | 90 | import { useRoute } from 'vue-router'; |
| 91 | import AppLayout from '@/components/layout/AppLayout.vue'; | 91 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 92 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 92 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 93 | import { getUserInfoAPI, updateUserInfoAPI } from '@/api/users'; | 93 | import { getUserInfoAPI, updateUserInfoAPI } from '@/api/users'; |
| 94 | import { smsAPI } from '@/api/common'; | 94 | import { smsAPI } from '@/api/common'; |
| 95 | import { showToast } from 'vant'; | 95 | import { showToast } from 'vant'; | ... | ... |
| ... | @@ -41,7 +41,7 @@ | ... | @@ -41,7 +41,7 @@ |
| 41 | <script setup> | 41 | <script setup> |
| 42 | import { ref, onMounted } from 'vue'; | 42 | import { ref, onMounted } from 'vue'; |
| 43 | import AppLayout from '@/components/layout/AppLayout.vue'; | 43 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 44 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 44 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 45 | import { getUserInfoAPI, updateUserInfoAPI } from '@/api/users'; | 45 | import { getUserInfoAPI, updateUserInfoAPI } from '@/api/users'; |
| 46 | import { showToast } from 'vant'; | 46 | import { showToast } from 'vant'; |
| 47 | import { useTitle } from '@vueuse/core'; | 47 | import { useTitle } from '@vueuse/core'; | ... | ... |
| ... | @@ -95,7 +95,7 @@ import { useRouter } from 'vue-router' | ... | @@ -95,7 +95,7 @@ import { useRouter } from 'vue-router' |
| 95 | import { useTitle } from '@vueuse/core' | 95 | import { useTitle } from '@vueuse/core' |
| 96 | import { showToast } from 'vant' | 96 | import { showToast } from 'vant' |
| 97 | 97 | ||
| 98 | -import ActivityApplyHistoryPopup from '@/components/ui/ActivityApplyHistoryPopup.vue' | 98 | +import ActivityApplyHistoryPopup from '@/components/activity/ActivityApplyHistoryPopup.vue' |
| 99 | import { userInfoAPI, searchOldActivityAPI } from '@/api/recall_users' | 99 | import { userInfoAPI, searchOldActivityAPI } from '@/api/recall_users' |
| 100 | import { oldActivityBatchActivityRegistrationAPI } from '@/api/points' | 100 | import { oldActivityBatchActivityRegistrationAPI } from '@/api/points' |
| 101 | 101 | ... | ... |
| ... | @@ -40,7 +40,7 @@ | ... | @@ -40,7 +40,7 @@ |
| 40 | import { ref, onMounted } from 'vue' | 40 | import { ref, onMounted } from 'vue' |
| 41 | import { useRoute, useRouter } from 'vue-router' | 41 | import { useRoute, useRouter } from 'vue-router' |
| 42 | import { useTitle } from '@vueuse/core' | 42 | import { useTitle } from '@vueuse/core' |
| 43 | -import VideoBackground from '@/components/ui/VideoBackground.vue' | 43 | +import VideoBackground from '@/components/media/VideoBackground.vue' |
| 44 | 44 | ||
| 45 | import { getQrcodeAPI, trackingAPI } from '@/api/recall_users' | 45 | import { getQrcodeAPI, trackingAPI } from '@/api/recall_users' |
| 46 | 46 | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2025-12-23 13:44:58 | 2 | * @Date: 2025-12-23 13:44:58 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-12-25 11:22:16 | 4 | + * @LastEditTime: 2026-01-21 13:42:54 |
| 5 | * @FilePath: /mlaj/src/views/recall/CompleteInfoPage.vue | 5 | * @FilePath: /mlaj/src/views/recall/CompleteInfoPage.vue |
| 6 | - * @Description: 文件描述 | 6 | + * @Description: 完善信息页面 |
| 7 | --> | 7 | --> |
| 8 | <template> | 8 | <template> |
| 9 | <div class="complete-info-page w-full min-h-screen relative overflow-hidden flex flex-col items-center"> | 9 | <div class="complete-info-page w-full min-h-screen relative overflow-hidden flex flex-col items-center"> |
| ... | @@ -126,7 +126,7 @@ const handleConfirm = async () => { | ... | @@ -126,7 +126,7 @@ const handleConfirm = async () => { |
| 126 | // mobile: form.phone, | 126 | // mobile: form.phone, |
| 127 | idcard: form.idCard | 127 | idcard: form.idCard |
| 128 | }) | 128 | }) |
| 129 | - if (res.code) { | 129 | + if (res.code === 1) { |
| 130 | // 埋点 | 130 | // 埋点 |
| 131 | trackingAPI({ | 131 | trackingAPI({ |
| 132 | event_type: 'edit_user' | 132 | event_type: 'edit_user' |
| ... | @@ -136,7 +136,7 @@ const handleConfirm = async () => { | ... | @@ -136,7 +136,7 @@ const handleConfirm = async () => { |
| 136 | mobile: form.phone, | 136 | mobile: form.phone, |
| 137 | idcard: form.idCard | 137 | idcard: form.idCard |
| 138 | }) | 138 | }) |
| 139 | - if (activityRes.code) { | 139 | + if (activityRes.code === 1) { |
| 140 | // 更新司总缓存user_info键里面的user_name的值改成新的用户名 | 140 | // 更新司总缓存user_info键里面的user_name的值改成新的用户名 |
| 141 | localStorage.setItem('user_info', JSON.stringify({ | 141 | localStorage.setItem('user_info', JSON.stringify({ |
| 142 | ...JSON.parse(localStorage.getItem('user_info') || '{}'), | 142 | ...JSON.parse(localStorage.getItem('user_info') || '{}'), | ... | ... |
| 1 | +<!-- | ||
| 2 | + * @Date: 2025-12-23 13:44:58 | ||
| 3 | + * @LastEditors: hookehuyr hookehuyr@gmail.com | ||
| 4 | + * @LastEditTime: 2026-01-21 13:42:30 | ||
| 5 | + * @FilePath: /mlaj/src/views/recall/IDQueryPage.vue | ||
| 6 | + * @Description: 查询信息页面 | ||
| 7 | +--> | ||
| 1 | <template> | 8 | <template> |
| 2 | <div class="id-query-page w-full min-h-screen relative overflow-hidden flex flex-col items-center"> | 9 | <div class="id-query-page w-full min-h-screen relative overflow-hidden flex flex-col items-center"> |
| 3 | <!-- Starry Background --> | 10 | <!-- Starry Background --> |
| ... | @@ -154,7 +161,7 @@ const handleConfirm = async () => { | ... | @@ -154,7 +161,7 @@ const handleConfirm = async () => { |
| 154 | mobile: phone.value, | 161 | mobile: phone.value, |
| 155 | idcard: idCard.value | 162 | idcard: idCard.value |
| 156 | }) | 163 | }) |
| 157 | - if (res.code) { | 164 | + if (res.code === 1) { |
| 158 | const campaign_info = res.data?.campaign_info || [] | 165 | const campaign_info = res.data?.campaign_info || [] |
| 159 | // 如果能查到数据, 则跳转到timeline, 否则弹出提示 | 166 | // 如果能查到数据, 则跳转到timeline, 否则弹出提示 |
| 160 | const flag = campaign_info.length > 0; | 167 | const flag = campaign_info.length > 0; | ... | ... |
| ... | @@ -45,7 +45,7 @@ | ... | @@ -45,7 +45,7 @@ |
| 45 | import { ref, onMounted } from 'vue' | 45 | import { ref, onMounted } from 'vue' |
| 46 | import { useRoute, useRouter } from 'vue-router' | 46 | import { useRoute, useRouter } from 'vue-router' |
| 47 | import { useTitle } from '@vueuse/core' | 47 | import { useTitle } from '@vueuse/core' |
| 48 | -import RecallPoster from '@/components/ui/RecallPoster.vue' | 48 | +import RecallPoster from '@/components/poster/RecallPoster.vue' |
| 49 | import { qiniuTokenAPI, qiniuUploadAPI, saveFileAPI } from '@/api/common' | 49 | import { qiniuTokenAPI, qiniuUploadAPI, saveFileAPI } from '@/api/common' |
| 50 | import { showToast, showLoadingToast } from 'vant' | 50 | import { showToast, showLoadingToast } from 'vant' |
| 51 | import { qiniuFileHash } from '@/utils/qiniuFileHash' | 51 | import { qiniuFileHash } from '@/utils/qiniuFileHash' | ... | ... |
| ... | @@ -89,7 +89,7 @@ import { useRouter, useRoute } from 'vue-router' | ... | @@ -89,7 +89,7 @@ import { useRouter, useRoute } from 'vue-router' |
| 89 | import { showToast } from 'vant' | 89 | import { showToast } from 'vant' |
| 90 | import { useTitle } from '@vueuse/core' | 90 | import { useTitle } from '@vueuse/core' |
| 91 | import { setAuthHeaders } from "@/utils/axios"; | 91 | import { setAuthHeaders } from "@/utils/axios"; |
| 92 | -import VideoBackground from '@/components/ui/VideoBackground.vue' | 92 | +import VideoBackground from '@/components/media/VideoBackground.vue' |
| 93 | import { applyUserInfoAuth } from '@/utils/auth_user_info' | 93 | import { applyUserInfoAuth } from '@/utils/auth_user_info' |
| 94 | 94 | ||
| 95 | // 导入接口 | 95 | // 导入接口 | ... | ... |
| ... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
| 14 | <script setup> | 14 | <script setup> |
| 15 | import { computed, onMounted, onBeforeUnmount } from 'vue' | 15 | import { computed, onMounted, onBeforeUnmount } from 'vue' |
| 16 | import { useRoute, useRouter } from 'vue-router' | 16 | import { useRoute, useRouter } from 'vue-router' |
| 17 | -import PdfViewer from '@/components/ui/PdfViewer.vue' | 17 | +import PdfViewer from '@/components/media/PdfViewer.vue' |
| 18 | 18 | ||
| 19 | const route = useRoute() | 19 | const route = useRoute() |
| 20 | const router = useRouter() | 20 | const router = useRouter() | ... | ... |
| ... | @@ -241,10 +241,10 @@ | ... | @@ -241,10 +241,10 @@ |
| 241 | import { ref, onMounted, nextTick } from 'vue'; | 241 | import { ref, onMounted, nextTick } from 'vue'; |
| 242 | import { useRoute, useRouter } from 'vue-router'; | 242 | import { useRoute, useRouter } from 'vue-router'; |
| 243 | import { useTitle } from '@vueuse/core'; | 243 | import { useTitle } from '@vueuse/core'; |
| 244 | -import VideoPlayer from '@/components/ui/VideoPlayer.vue'; | 244 | +import VideoPlayer from '@/components/media/VideoPlayer.vue'; |
| 245 | -import AudioPlayer from '@/components/ui/AudioPlayer.vue'; | 245 | +import AudioPlayer from '@/components/media/AudioPlayer.vue'; |
| 246 | -import CheckInDialog from '@/components/ui/CheckInDialog.vue'; | 246 | +import CheckInDialog from '@/components/checkin/CheckInDialog.vue'; |
| 247 | -// import OfficeViewer from '@/components/ui/OfficeViewer.vue'; | 247 | +// import OfficeViewer from '@/components/media/OfficeViewer.vue'; |
| 248 | import dayjs from 'dayjs'; | 248 | import dayjs from 'dayjs'; |
| 249 | import { showToast } from 'vant'; | 249 | import { showToast } from 'vant'; |
| 250 | import { normalizeCheckinTaskItems } from '@/utils/tools' | 250 | import { normalizeCheckinTaskItems } from '@/utils/tools' | ... | ... |
| ... | @@ -151,9 +151,9 @@ import { ref, onBeforeUnmount, onMounted, computed } from 'vue' | ... | @@ -151,9 +151,9 @@ import { ref, onBeforeUnmount, onMounted, computed } from 'vue' |
| 151 | import { useRoute, useRouter } from 'vue-router' | 151 | import { useRoute, useRouter } from 'vue-router' |
| 152 | import { showConfirmDialog, showSuccessToast, showFailToast, showLoadingToast, showToast } from 'vant'; | 152 | import { showConfirmDialog, showSuccessToast, showFailToast, showLoadingToast, showToast } from 'vant'; |
| 153 | import AppLayout from "@/components/layout/AppLayout.vue"; | 153 | import AppLayout from "@/components/layout/AppLayout.vue"; |
| 154 | -import FrostedGlass from "@/components/ui/FrostedGlass.vue"; | 154 | +import FrostedGlass from "@/components/effects/FrostedGlass.vue"; |
| 155 | import CheckinCard from "@/components/checkin/CheckinCard.vue"; | 155 | import CheckinCard from "@/components/checkin/CheckinCard.vue"; |
| 156 | -import CourseGroupCascader from '@/components/ui/CourseGroupCascader.vue' | 156 | +import CourseGroupCascader from '@/components/courses/CourseGroupCascader.vue' |
| 157 | import TaskCascaderFilter from '@/components/teacher/TaskCascaderFilter.vue' | 157 | import TaskCascaderFilter from '@/components/teacher/TaskCascaderFilter.vue' |
| 158 | import PostCountModel from '@/components/count/postCountModel.vue' | 158 | import PostCountModel from '@/components/count/postCountModel.vue' |
| 159 | import { useTitle } from '@vueuse/core'; | 159 | import { useTitle } from '@vueuse/core'; | ... | ... |
| ... | @@ -381,7 +381,7 @@ import { ref, computed, onMounted } from 'vue'; | ... | @@ -381,7 +381,7 @@ import { ref, computed, onMounted } from 'vue'; |
| 381 | import { useRouter } from 'vue-router'; | 381 | import { useRouter } from 'vue-router'; |
| 382 | import { showToast, DatePicker, Popup } from 'vant'; | 382 | import { showToast, DatePicker, Popup } from 'vant'; |
| 383 | import AppLayout from '@/components/layout/AppLayout.vue'; | 383 | import AppLayout from '@/components/layout/AppLayout.vue'; |
| 384 | -import FrostedGlass from '@/components/ui/FrostedGlass.vue'; | 384 | +import FrostedGlass from '@/components/effects/FrostedGlass.vue'; |
| 385 | import { useTitle } from '@vueuse/core'; | 385 | import { useTitle } from '@vueuse/core'; |
| 386 | 386 | ||
| 387 | import { getTeacherFindSettingsAPI, setTeacherTaskAPI } from "@/api/teacher"; | 387 | import { getTeacherFindSettingsAPI, setTeacherTaskAPI } from "@/api/teacher"; | ... | ... |
| ... | @@ -170,7 +170,7 @@ import { useRouter } from 'vue-router' | ... | @@ -170,7 +170,7 @@ import { useRouter } from 'vue-router' |
| 170 | import AppLayout from '@/layouts/AppLayout.vue' | 170 | import AppLayout from '@/layouts/AppLayout.vue' |
| 171 | import { useTitle } from '@vueuse/core'; | 171 | import { useTitle } from '@vueuse/core'; |
| 172 | import { useAuth } from '@/contexts/auth' | 172 | import { useAuth } from '@/contexts/auth' |
| 173 | -import CourseGroupCascader from '@/components/ui/CourseGroupCascader.vue' | 173 | +import CourseGroupCascader from '@/components/courses/CourseGroupCascader.vue' |
| 174 | 174 | ||
| 175 | import { getTeacherGradeClassListAPI, getStudentListAPI } from "@/api/teacher"; | 175 | import { getTeacherGradeClassListAPI, getStudentListAPI } from "@/api/teacher"; |
| 176 | 176 | ... | ... |
| ... | @@ -31,8 +31,8 @@ | ... | @@ -31,8 +31,8 @@ |
| 31 | 31 | ||
| 32 | <script setup> | 32 | <script setup> |
| 33 | import { ref } from 'vue'; | 33 | import { ref } from 'vue'; |
| 34 | -import VideoPlayer from '@/components/ui/VideoPlayer.vue'; | 34 | +import VideoPlayer from '@/components/media/VideoPlayer.vue'; |
| 35 | -import UploadVideoPopup from '@/components/ui/UploadVideoPopup.vue'; | 35 | +import UploadVideoPopup from '@/components/checkin/UploadVideoPopup.vue'; |
| 36 | 36 | ||
| 37 | const showUploadPopup = ref(false); | 37 | const showUploadPopup = ref(false); |
| 38 | const videos = ref([]); | 38 | const videos = ref([]); | ... | ... |
-
Please register or login to post a comment