From 171e0aa408ef791bb6da45edf8fd447c7b94d6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?= <1262327911@qq.com> Date: Tue, 30 Aug 2022 15:03:25 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AE=8C=E5=96=84=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/router.ts | 4 ++-- src/views/preview/utils/storage.ts | 2 +- .../components/ProjectItemsCard/index.vue | 16 ++++++++++---- .../ProjectItemsList/hooks/useModal.hook.ts | 14 +++++++++---- .../components/ProjectItemsList/index.vue | 21 ++++--------------- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/utils/router.ts b/src/utils/router.ts index 5a117357..5f104f56 100644 --- a/src/utils/router.ts +++ b/src/utils/router.ts @@ -205,9 +205,9 @@ export const loginCheck = () => { * * 预览地址 * @returns */ - export const previewPath = () => { + export const previewPath = (id?: string | number) => { const { origin, pathname } = document.location const path = fetchPathByName(PreviewEnum.CHART_PREVIEW_NAME, 'href') - const previewPath = `${origin}${pathname}${path}/${fetchRouteParamsLocation()}` + const previewPath = `${origin}${pathname}${path}/${id || fetchRouteParamsLocation()}` return previewPath } \ No newline at end of file diff --git a/src/views/preview/utils/storage.ts b/src/views/preview/utils/storage.ts index b708488c..494315c7 100644 --- a/src/views/preview/utils/storage.ts +++ b/src/views/preview/utils/storage.ts @@ -16,7 +16,7 @@ export const getSessionStorageInfo = async () => { ) // 是否本地预览 - if (!storageList) { + if (!storageList || storageList.findIndex(e => e.id === id.toString()) === -1) { // 接口调用 const res = await fetchProjectApi({ projectId: id }) as unknown as MyResponseType if (res.code === ResultEnum.SUCCESS) { diff --git a/src/views/project/items/components/ProjectItemsCard/index.vue b/src/views/project/items/components/ProjectItemsCard/index.vue index d9622c95..a0f847cf 100644 --- a/src/views/project/items/components/ProjectItemsCard/index.vue +++ b/src/views/project/items/components/ProjectItemsCard/index.vue @@ -7,7 +7,7 @@ <mac-os-control-btn class="top-btn" :hidden="['remove']" - @close="deleteHanlde" + @close="deleteHandle" @resize="resizeHandle" ></mac-os-control-btn> </div> @@ -98,7 +98,7 @@ const { SendIcon } = icon.ionicons5 -const emit = defineEmits(['delete', 'resize', 'edit', 'release']) +const emit = defineEmits(['preview', 'delete', 'resize', 'edit', 'release']) const props = defineProps({ cardData: Object as PropType<Chartype> @@ -165,8 +165,11 @@ const selectOptions = ref([ const handleSelect = (key: string) => { switch (key) { + case 'preview': + previewHandle() + break case 'delete': - deleteHanlde() + deleteHandle() break case 'release': releaseHandle() @@ -177,8 +180,13 @@ const handleSelect = (key: string) => { } } +// 预览处理 +const previewHandle = () => { + emit('preview', props.cardData) +} + // 删除处理 -const deleteHanlde = () => { +const deleteHandle = () => { emit('delete', props.cardData) } diff --git a/src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts b/src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts index af74d44a..e28b1f91 100644 --- a/src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts +++ b/src/views/project/items/components/ProjectItemsList/hooks/useModal.hook.ts @@ -1,6 +1,6 @@ import { ref } from 'vue' import { ChartEnum } from '@/enums/pageEnum' -import { fetchPathByName, routerTurnByPath } from '@/utils' +import { fetchPathByName, routerTurnByPath, openNewWindow, previewPath } from '@/utils' import { Chartype } from '../../../index.d' export const useModalDataInit = () => { const modalShow = ref<boolean>(false) @@ -12,25 +12,31 @@ export const useModalDataInit = () => { modalData.value = null } - // 打开 modal + // 缩放处理 const resizeHandle = (cardData: Chartype) => { if (!cardData) return modalShow.value = true modalData.value = cardData } - // 打开 modal + // 编辑处理 const editHandle = (cardData: Chartype) => { if (!cardData) return const path = fetchPathByName(ChartEnum.CHART_HOME_NAME, 'href') routerTurnByPath(path, [cardData.id], undefined, true) } + // 预览处理 + const previewHandle = (cardData: Chartype) => { + openNewWindow(previewPath(cardData.id)) + } + return { modalData, modalShow, closeModal, resizeHandle, - editHandle + editHandle, + previewHandle } } diff --git a/src/views/project/items/components/ProjectItemsList/index.vue b/src/views/project/items/components/ProjectItemsList/index.vue index 73783e8a..2ce7145c 100644 --- a/src/views/project/items/components/ProjectItemsList/index.vue +++ b/src/views/project/items/components/ProjectItemsList/index.vue @@ -6,15 +6,11 @@ </div> <!-- 列表 --> <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"> <project-items-card :cardData="item" + @preview="previewHandle" @resize="resizeHandle" @delete="deleteHandle(item)" @release="releaseHandle(item, index)" @@ -56,17 +52,8 @@ import { useModalDataInit } from './hooks/useModal.hook' import { useDataListInit } from './hooks/useData.hook' const { CopyIcon, EllipsisHorizontalCircleSharpIcon } = icon.ionicons5 -const { modalData, modalShow, closeModal, resizeHandle, editHandle } = - useModalDataInit() -const { - loading, - paginat, - list, - changeSize, - changePage, - releaseHandle, - deleteHandle, -} = useDataListInit() +const { modalData, modalShow, closeModal, previewHandle, resizeHandle, editHandle } = useModalDataInit() +const { loading, paginat, list, changeSize, changePage, releaseHandle, deleteHandle } = useDataListInit() </script> <style lang="scss" scoped>