feat: 大屏
This commit is contained in:
@@ -78,8 +78,11 @@ axiosInstance.interceptors.response.use(
|
|||||||
// 登录过期
|
// 登录过期
|
||||||
if (code === ResultEnum.TOKEN_OVERDUE) {
|
if (code === ResultEnum.TOKEN_OVERDUE) {
|
||||||
window['$message'].error(window['$t']('http.token_overdue_message'))
|
window['$message'].error(window['$t']('http.token_overdue_message'))
|
||||||
// iframe 嵌入模式下,token 过期不重定向到登录页
|
// token 过期,跳转到源站首页
|
||||||
console.error('[GoView] iframe 模式:token 已过期,请更新 URL 中的 token 参数')
|
console.error('[GoView] token 已过期,即将跳转到源站首页')
|
||||||
|
setTimeout(() => {
|
||||||
|
window.location.href = window.location.origin
|
||||||
|
}, 1500)
|
||||||
return Promise.resolve(responseData)
|
return Promise.resolve(responseData)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +100,8 @@ axiosInstance.interceptors.response.use(
|
|||||||
const status = err.response?.status
|
const status = err.response?.status
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 401:
|
case 401:
|
||||||
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
|
// token 失效,跳转到源站首页
|
||||||
|
window.location.href = window.location.origin
|
||||||
Promise.reject(err)
|
Promise.reject(err)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ export enum PageEnum {
|
|||||||
BASE_HOME_ITEMS = '/project/items',
|
BASE_HOME_ITEMS = '/project/items',
|
||||||
BASE_HOME_ITEMS_NAME = '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 = '/project/my-template',
|
||||||
BASE_HOME_TEMPLATE_NAME = 'Project-My-Template',
|
BASE_HOME_TEMPLATE_NAME = 'Project-My-Template',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { PageEnum } from '@/enums/pageEnum'
|
|||||||
const importPath = {
|
const importPath = {
|
||||||
'PageEnum.BASE_HOME_NAME': () => import('@/views/project/index.vue'),
|
'PageEnum.BASE_HOME_NAME': () => import('@/views/project/index.vue'),
|
||||||
'PageEnum.BASE_HOME_ITEMS_NAME': () => import('@/views/project/items/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_NAME': () => import('@/views/project/mtTemplate/index.vue'),
|
||||||
'PageEnum.BASE_HOME_TEMPLATE_MARKET_NAME': () => import('@/views/project/templateMarket/index.vue')
|
'PageEnum.BASE_HOME_TEMPLATE_MARKET_NAME': () => import('@/views/project/templateMarket/index.vue')
|
||||||
}
|
}
|
||||||
@@ -27,6 +28,14 @@ const projectRoutes: RouteRecordRaw = {
|
|||||||
title: '我的项目'
|
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,
|
path: PageEnum.BASE_HOME_TEMPLATE,
|
||||||
name: PageEnum.BASE_HOME_TEMPLATE_NAME,
|
name: PageEnum.BASE_HOME_TEMPLATE_NAME,
|
||||||
|
|||||||
@@ -111,7 +111,8 @@ export const logout = async () => {
|
|||||||
window['$message'].success(window['$t']('global.logout_success'))
|
window['$message'].success(window['$t']('global.logout_success'))
|
||||||
clearCookie(RequestHttpHeaderEnum.COOKIE)
|
clearCookie(RequestHttpHeaderEnum.COOKIE)
|
||||||
clearLocalStorage(StorageEnum.GO_SYSTEM_STORE)
|
clearLocalStorage(StorageEnum.GO_SYSTEM_STORE)
|
||||||
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
|
// 退出登录后跳转到源站首页
|
||||||
|
window.location.href = window.location.origin
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
window['$message'].success(window['$t']('global.logout_failure'))
|
window['$message'].success(window['$t']('global.logout_failure'))
|
||||||
|
|||||||
@@ -6,16 +6,16 @@ import { Chartype, ChartList } from '../../../index.d'
|
|||||||
import { ResultEnum } from '@/enums/httpEnum'
|
import { ResultEnum } from '@/enums/httpEnum'
|
||||||
|
|
||||||
// 数据初始化
|
// 数据初始化
|
||||||
export const useDataListInit = () => {
|
export const useDataListInit = (filterState?: number) => {
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const paginat = reactive({
|
const paginat = reactive({
|
||||||
// 当前页数
|
// 当前页数
|
||||||
page: 1,
|
page: 1,
|
||||||
// 每页值
|
// 每页值
|
||||||
limit: 10,
|
limit: 12,
|
||||||
// 总数
|
// 总数
|
||||||
count: 10
|
count: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
const list = ref<ChartList>([])
|
const list = ref<ChartList>([])
|
||||||
@@ -23,13 +23,18 @@ export const useDataListInit = () => {
|
|||||||
// 数据请求
|
// 数据请求
|
||||||
const fetchList = async () => {
|
const fetchList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const { code, data }: any = await projectListApi({
|
const params: any = {
|
||||||
page: paginat.page,
|
page: paginat.page,
|
||||||
size: paginat.limit
|
size: paginat.limit
|
||||||
})
|
}
|
||||||
|
// 如果有 filterState 参数,添加到请求中
|
||||||
|
if (filterState !== undefined) {
|
||||||
|
params.state = filterState
|
||||||
|
}
|
||||||
|
const { code, data }: any = await projectListApi(params)
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
paginat.count = data.total
|
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
|
const { identity, projectName, state, createTime, indexImage, createUserId, backgroundImage } = e
|
||||||
return {
|
return {
|
||||||
identity: identity,
|
identity: identity,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<div v-show="!loading">
|
<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 :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
|
<project-items-card
|
||||||
:cardData="item"
|
:cardData="item"
|
||||||
@preview="previewHandle"
|
@preview="previewHandle"
|
||||||
@@ -51,9 +51,14 @@ import { icon } from '@/plugins'
|
|||||||
import { useModalDataInit } from './hooks/useModal.hook'
|
import { useModalDataInit } from './hooks/useModal.hook'
|
||||||
import { useDataListInit } from './hooks/useData.hook'
|
import { useDataListInit } from './hooks/useData.hook'
|
||||||
|
|
||||||
|
// 接收父组件传入的 state 过滤参数
|
||||||
|
const props = defineProps<{
|
||||||
|
filterState?: number
|
||||||
|
}>()
|
||||||
|
|
||||||
const { CopyIcon, EllipsisHorizontalCircleSharpIcon } = icon.ionicons5
|
const { CopyIcon, EllipsisHorizontalCircleSharpIcon } = icon.ionicons5
|
||||||
const { modalData, modalShow, closeModal, previewHandle, resizeHandle, editHandle } = useModalDataInit()
|
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>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
<div class="go-project-items-header">
|
<div class="go-project-items-header">
|
||||||
<project-layout-create :collapsed="false"></project-layout-create>
|
<project-layout-create :collapsed="false"></project-layout-create>
|
||||||
</div>
|
</div>
|
||||||
<project-items-list></project-items-list>
|
<project-items-list :filter-state="filterState"></project-items-list>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted } from 'vue'
|
import { onMounted, computed } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { ProjectItemsList } from './components/ProjectItemsList'
|
import { ProjectItemsList } from './components/ProjectItemsList'
|
||||||
import { ProjectLayoutCreate } from '../layout/components/ProjectLayoutCreate'
|
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 { SystemStoreEnum, SystemStoreUserInfoEnum } from '@/store/modules/systemStore/systemStore.d'
|
||||||
import { ThemeEnum } from '@/enums/styleEnum'
|
import { ThemeEnum } from '@/enums/styleEnum'
|
||||||
import { setHtmlTheme } from '@/utils'
|
import { setHtmlTheme } from '@/utils'
|
||||||
|
import { PageEnum } from '@/enums/pageEnum'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const systemStore = useSystemStore()
|
const systemStore = useSystemStore()
|
||||||
const designStore = useDesignStore()
|
const designStore = useDesignStore()
|
||||||
|
|
||||||
|
// 根据路由判断是否需要过滤 state=1 的数据
|
||||||
|
const filterState = computed(() => {
|
||||||
|
return route.name === PageEnum.BASE_HOME_MANAGEMENT_NAME ? 1 : undefined
|
||||||
|
})
|
||||||
|
|
||||||
// 组件挂载时处理 URL 参数中的 token 和 mode
|
// 组件挂载时处理 URL 参数中的 token 和 mode
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
const { token, mode } = route.query
|
const { token, mode } = route.query
|
||||||
|
|||||||
Reference in New Issue
Block a user