From cf2d81bf9a7bcabd1f7be726faa80b9150c1dda3 Mon Sep 17 00:00:00 2001 From: keven Date: Sat, 19 Jul 2025 22:29:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(front):=20=E4=BC=98=E5=8C=96=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=AE=A1=E7=90=86=E5=92=8C=E7=BB=84=E4=BB=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E7=AE=80=E5=8C=96GlobalDrawer=E5=92=8CTiptap?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/app.vue | 26 +++++++------- front/components/GlobalDrawer.vue | 21 ++++++------ front/components/Tiptap.vue | 56 ++++++++++++++++++------------- front/composables/useStore.ts | 39 ++++++--------------- front/lib/showDrawer.ts | 7 ++-- 5 files changed, 69 insertions(+), 80 deletions(-) diff --git a/front/app.vue b/front/app.vue index 9de59e6..13a6a0d 100644 --- a/front/app.vue +++ b/front/app.vue @@ -1,19 +1,19 @@ \ No newline at end of file + + + + diff --git a/front/components/GlobalDrawer.vue b/front/components/GlobalDrawer.vue index 45895ab..73ef78f 100644 --- a/front/components/GlobalDrawer.vue +++ b/front/components/GlobalDrawer.vue @@ -3,24 +3,25 @@ import { Drawer, DrawerContent } from '@/components/ui/drawer' import { createVNode } from 'vue' import useStore from '@/composables/useStore' -const store = useStore('drawer') -const drawer = computed(() => store?._get('drawer')) -const currentDrawer = computed(() => drawer?.value?.[drawer?.value?.length - 1]) +const store = useStore() +const currentDrawer = computed(() => store.drawer?.[store.drawer?.length - 1]) -const render = computed<() => Component>(() => currentDrawer?.value?.render) -const hide = computed<() => void>(() => currentDrawer?.value?.onClose) +const render = computed(() => currentDrawer?.value?.render) +const hide = computed(() => currentDrawer?.value?.onClose) const Children = () => - createVNode(render.value, { - hide: hide?.value, - }) + render.value + ? createVNode(render.value, { + hide: hide?.value, + }) + : null diff --git a/front/composables/useStore.ts b/front/composables/useStore.ts index ed29d3d..69926a1 100644 --- a/front/composables/useStore.ts +++ b/front/composables/useStore.ts @@ -1,34 +1,17 @@ import { defineStore } from 'pinia' -import { cloneDeep, get, isEmpty, isUndefined, set, isString } from 'lodash-es' -type StoreType = Record +type renderComponent = Component | ((props: { hide: () => null }) => VNode) -const initState: StoreType = {} -// 做了一点小小的改进,可以传入key,会自动初始化,如果不初始化的话容易导致不存在值而丢失响应式 -const useStore = (key?: string) => { - const store = defineStore('store', { - state: () => ({ - ...initState, - }), - actions: { - _get(path?: string) { - if (isEmpty(path) || isUndefined(path)) { - return this.$state - } - return get(this.$state, path) - }, - _set(path: string, value: any) { - const newState = cloneDeep(this.$state) - set(newState, path, value) - this.$patch(newState) - }, - }, - })() - if (!isEmpty(key) && isString(key) && isUndefined(store?._get(key))) { - // console.log('reset', key, store?._get(key)) - store?._set(key, null) - } - return store +type StoreProps = { + tiptapCommandsView?: any + drawer?: { render?: renderComponent; onClose: (data?: any) => void; key: string }[] } +const useStore = defineStore('store', () => { + return { + tiptapCommandsView: null, + drawer: [], + } +}) + export default useStore diff --git a/front/lib/showDrawer.ts b/front/lib/showDrawer.ts index 24ebc20..be1acfb 100644 --- a/front/lib/showDrawer.ts +++ b/front/lib/showDrawer.ts @@ -7,14 +7,11 @@ const showDrawer = (props: DrawerProps) => { return new Promise((res) => { const { render } = props || {} const onClose = (data?: any) => { - store._set( - 'drawer', - (store._get('drawer')?.value ?? [])?.filter((item: any) => item.key !== key) - ) + store.drawer = (store.drawer ?? [])?.filter((item: any) => item.key !== key) res(data) } const store = useStore() - store._set('drawer', [...(store._get('drawer')?.value || []), { render, onClose, key }]) + store.drawer = [...(store.drawer || []), { render, onClose, key }] }) }