feat: 大屏

This commit is contained in:
ygx
2026-01-25 17:31:51 +08:00
parent 864345317d
commit e2fe633b28
7 changed files with 48 additions and 14 deletions

View File

@@ -78,8 +78,11 @@ axiosInstance.interceptors.response.use(
// 登录过期
if (code === ResultEnum.TOKEN_OVERDUE) {
window['$message'].error(window['$t']('http.token_overdue_message'))
// iframe 嵌入模式下,token 过期不重定向到登录
console.error('[GoView] iframe 模式token 已过期,请更新 URL 中的 token 参数')
// token 过期,跳转到源站首
console.error('[GoView] token 已过期,即将跳转到源站首页')
setTimeout(() => {
window.location.href = window.location.origin
}, 1500)
return Promise.resolve(responseData)
}
@@ -97,7 +100,8 @@ axiosInstance.interceptors.response.use(
const status = err.response?.status
switch (status) {
case 401:
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
// token 失效,跳转到源站首页
window.location.href = window.location.origin
Promise.reject(err)
break

View File

@@ -43,6 +43,10 @@ export enum PageEnum {
BASE_HOME_ITEMS = '/project/items',
BASE_HOME_ITEMS_NAME = 'Project-Items',
// 项目管理
BASE_HOME_MANAGEMENT = '/project/management',
BASE_HOME_MANAGEMENT_NAME = 'Project-Management',
// 我的模板
BASE_HOME_TEMPLATE = '/project/my-template',
BASE_HOME_TEMPLATE_NAME = 'Project-My-Template',

View File

@@ -5,6 +5,7 @@ import { PageEnum } from '@/enums/pageEnum'
const importPath = {
'PageEnum.BASE_HOME_NAME': () => import('@/views/project/index.vue'),
'PageEnum.BASE_HOME_ITEMS_NAME': () => import('@/views/project/items/index.vue'),
'PageEnum.BASE_HOME_MANAGEMENT_NAME': () => import('@/views/project/items/index.vue'),
'PageEnum.BASE_HOME_TEMPLATE_NAME': () => import('@/views/project/mtTemplate/index.vue'),
'PageEnum.BASE_HOME_TEMPLATE_MARKET_NAME': () => import('@/views/project/templateMarket/index.vue')
}
@@ -27,6 +28,14 @@ const projectRoutes: RouteRecordRaw = {
title: '我的项目'
}
},
{
path: PageEnum.BASE_HOME_MANAGEMENT,
name: PageEnum.BASE_HOME_MANAGEMENT_NAME,
component: importPath['PageEnum.BASE_HOME_MANAGEMENT_NAME'],
meta: {
title: '项目管理'
}
},
{
path: PageEnum.BASE_HOME_TEMPLATE,
name: PageEnum.BASE_HOME_TEMPLATE_NAME,

View File

@@ -111,7 +111,8 @@ export const logout = async () => {
window['$message'].success(window['$t']('global.logout_success'))
clearCookie(RequestHttpHeaderEnum.COOKIE)
clearLocalStorage(StorageEnum.GO_SYSTEM_STORE)
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
// 退出登录后跳转到源站首页
window.location.href = window.location.origin
}
} catch (error) {
window['$message'].success(window['$t']('global.logout_failure'))

View File

@@ -6,16 +6,16 @@ import { Chartype, ChartList } from '../../../index.d'
import { ResultEnum } from '@/enums/httpEnum'
// 数据初始化
export const useDataListInit = () => {
export const useDataListInit = (filterState?: number) => {
const loading = ref(true)
const paginat = reactive({
// 当前页数
page: 1,
// 每页值
limit: 10,
limit: 12,
// 总数
count: 10
count: 0
})
const list = ref<ChartList>([])
@@ -23,13 +23,18 @@ export const useDataListInit = () => {
// 数据请求
const fetchList = async () => {
loading.value = true
const { code, data }: any = await projectListApi({
const params: any = {
page: paginat.page,
size: paginat.limit
})
}
// 如果有 filterState 参数,添加到请求中
if (filterState !== undefined) {
params.state = filterState
}
const { code, data }: any = await projectListApi(params)
if (code === 0) {
paginat.count = data.total
list.value = (data.list).map(e => {
list.value = (data.list).map((e: any) => {
const { identity, projectName, state, createTime, indexImage, createUserId, backgroundImage } = e
return {
identity: identity,

View File

@@ -7,7 +7,7 @@
<!-- 列表 -->
<div v-show="!loading">
<n-grid :x-gap="20" :y-gap="20" cols="2 s:2 m:3 l:4 xl:4 xxl:4" responsive="screen">
<n-grid-item v-for="(item, index) in list" :key="item.id">
<n-grid-item v-for="(item, index) in list" :key="item.identity">
<project-items-card
:cardData="item"
@preview="previewHandle"
@@ -51,9 +51,14 @@ import { icon } from '@/plugins'
import { useModalDataInit } from './hooks/useModal.hook'
import { useDataListInit } from './hooks/useData.hook'
// 接收父组件传入的 state 过滤参数
const props = defineProps<{
filterState?: number
}>()
const { CopyIcon, EllipsisHorizontalCircleSharpIcon } = icon.ionicons5
const { modalData, modalShow, closeModal, previewHandle, resizeHandle, editHandle } = useModalDataInit()
const { loading, paginat, list, changeSize, changePage, releaseHandle, deleteHandle } = useDataListInit()
const { loading, paginat, list, changeSize, changePage, releaseHandle, deleteHandle } = useDataListInit(props.filterState)
</script>
<style lang="scss" scoped>

View File

@@ -3,12 +3,12 @@
<div class="go-project-items-header">
<project-layout-create :collapsed="false"></project-layout-create>
</div>
<project-items-list></project-items-list>
<project-items-list :filter-state="filterState"></project-items-list>
</div>
</template>
<script setup lang="ts">
import { onMounted } from 'vue'
import { onMounted, computed } from 'vue'
import { useRoute } from 'vue-router'
import { ProjectItemsList } from './components/ProjectItemsList'
import { ProjectLayoutCreate } from '../layout/components/ProjectLayoutCreate'
@@ -17,11 +17,17 @@ import { useDesignStore } from '@/store/modules/designStore/designStore'
import { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d'
import { ThemeEnum } from '@/enums/styleEnum'
import { setHtmlTheme } from '@/utils'
import { PageEnum } from '@/enums/pageEnum'
const route = useRoute()
const systemStore = useSystemStore()
const designStore = useDesignStore()
// 根据路由判断是否需要过滤 state=1 的数据
const filterState = computed(() => {
return route.name === PageEnum.BASE_HOME_MANAGEMENT_NAME ? 1 : undefined
})
// 组件挂载时处理 URL 参数中的 token 和 mode
onMounted(() => {
const { token, mode } = route.query