From a5f3895794c22dc40dc45fed35d9b2089e7465ed Mon Sep 17 00:00:00 2001 From: R2m1liA <15258427350@163.com> Date: Wed, 12 Nov 2025 17:54:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=E5=B0=86=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BB=8Eapp=E7=AB=AF=E7=A7=BB=E8=87=B3server?= =?UTF-8?q?=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整数据获取位置以提升安全性 - 对于后端状态为Archived的数据,通过server控制不进行获取 --- app/composables/directus/useCompanyProfile.ts | 19 +++++++------ app/composables/directus/useContactInfo.ts | 19 +++++++------ app/composables/directus/useDocumentList.ts | 19 +++++++------ app/composables/directus/useHomepage.ts | 16 +++++++---- app/composables/directus/useProduct.ts | 18 ++++++------ app/composables/directus/useProductList.ts | 17 ++++++----- app/composables/directus/useQuestionList.ts | 17 ++++++----- app/composables/directus/useSolution.ts | 17 ++++++----- app/composables/directus/useSolutionList.ts | 16 +++++++---- app/pages/about/index.vue | 4 +-- app/pages/index.vue | 2 +- app/pages/products/[slug].vue | 10 +++---- app/pages/products/index.vue | 2 +- app/pages/solutions/[slug].vue | 2 +- app/pages/solutions/index.vue | 2 +- app/pages/support/contact-us.vue | 2 +- app/pages/support/documents.vue | 4 +-- app/pages/support/faq.vue | 2 +- .../companyProfile.graphql | 0 {app/graphql => graphql}/contactInfo.graphql | 0 {app/graphql => graphql}/documentList.graphql | 0 {app/graphql => graphql}/homepage.graphql | 0 {app/graphql => graphql}/product.graphql | 0 {app/graphql => graphql}/productList.graphql | 0 {app/graphql => graphql}/questionList.graphql | 0 {app/graphql => graphql}/solution.graphql | 0 {app/graphql => graphql}/solutionList.graphql | 0 server/api/cms/companyProfile.ts | 22 +++++++++++++++ server/api/cms/contactInfo.ts | 19 +++++++++++++ server/api/cms/documentList.ts | 22 +++++++++++++++ server/api/cms/homepage.ts | 16 +++++++++++ server/api/cms/product/[id].ts | 28 +++++++++++++++++++ server/api/cms/productList.ts | 19 +++++++++++++ server/api/cms/questionList.ts | 19 +++++++++++++ server/api/cms/solution/[id].ts | 28 +++++++++++++++++++ server/api/cms/solutionList.ts | 19 +++++++++++++ server/utils/directus.ts | 7 +++++ 37 files changed, 302 insertions(+), 85 deletions(-) rename {app/graphql => graphql}/companyProfile.graphql (100%) rename {app/graphql => graphql}/contactInfo.graphql (100%) rename {app/graphql => graphql}/documentList.graphql (100%) rename {app/graphql => graphql}/homepage.graphql (100%) rename {app/graphql => graphql}/product.graphql (100%) rename {app/graphql => graphql}/productList.graphql (100%) rename {app/graphql => graphql}/questionList.graphql (100%) rename {app/graphql => graphql}/solution.graphql (100%) rename {app/graphql => graphql}/solutionList.graphql (100%) create mode 100644 server/api/cms/companyProfile.ts create mode 100644 server/api/cms/contactInfo.ts create mode 100644 server/api/cms/documentList.ts create mode 100644 server/api/cms/homepage.ts create mode 100644 server/api/cms/product/[id].ts create mode 100644 server/api/cms/productList.ts create mode 100644 server/api/cms/questionList.ts create mode 100644 server/api/cms/solution/[id].ts create mode 100644 server/api/cms/solutionList.ts create mode 100644 server/utils/directus.ts diff --git a/app/composables/directus/useCompanyProfile.ts b/app/composables/directus/useCompanyProfile.ts index af3954b..d98385d 100644 --- a/app/composables/directus/useCompanyProfile.ts +++ b/app/composables/directus/useCompanyProfile.ts @@ -1,16 +1,17 @@ -import GetCompanyProfile from '@/graphql/companyProfile.graphql?raw'; - export const useCompanyProfile = () => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`company-profile-${locale}`, async () => { - return await $directus.query<{ company_profile: CompanyProfile }>( - GetCompanyProfile, - { - locale: locale, - } - ); + try { + const data = await $fetch(`/api/cms/companyProfile`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching company profile: ', error); + throw error; + } }); }; diff --git a/app/composables/directus/useContactInfo.ts b/app/composables/directus/useContactInfo.ts index 3bfbc81..532e118 100644 --- a/app/composables/directus/useContactInfo.ts +++ b/app/composables/directus/useContactInfo.ts @@ -1,16 +1,17 @@ -import GetContactInfo from '@/graphql/contactInfo.graphql?raw'; - export const useContactInfo = () => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`contact-info-${locale}`, async () => { - return await $directus.query<{ contact_info: ContactInfo }>( - GetContactInfo, - { - locale: locale, - } - ); + try { + const data = await $fetch('/api/cms/contactInfo', { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching contact info: ', error); + throw error; + } }); }; diff --git a/app/composables/directus/useDocumentList.ts b/app/composables/directus/useDocumentList.ts index 11b0978..d1749a7 100644 --- a/app/composables/directus/useDocumentList.ts +++ b/app/composables/directus/useDocumentList.ts @@ -1,16 +1,17 @@ -import GetDocumentList from '@/graphql/documentList.graphql?raw'; - export const useDocumentList = () => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`document-list-${locale}`, async () => { - return await $directus.query<{ product_documents: ProductDocument[] }>( - GetDocumentList, - { - locale: locale, - } - ); + try { + const data = $fetch(`/api/cms/documentList`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching document list:', error); + throw error; + } }); }; diff --git a/app/composables/directus/useHomepage.ts b/app/composables/directus/useHomepage.ts index af50bfe..89cf811 100644 --- a/app/composables/directus/useHomepage.ts +++ b/app/composables/directus/useHomepage.ts @@ -1,13 +1,17 @@ -import GetHomepage from '@/graphql/homepage.graphql?raw'; - export const useHomepage = () => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`homepage-${locale}`, async () => { - return await $directus.query<{ homepage: Homepage }>(GetHomepage, { - locale: locale, - }); + try { + const data = $fetch(`/api/cms/homepage`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching homepage:', error); + throw error; + } }); }; diff --git a/app/composables/directus/useProduct.ts b/app/composables/directus/useProduct.ts index e264cb0..5e8772a 100644 --- a/app/composables/directus/useProduct.ts +++ b/app/composables/directus/useProduct.ts @@ -1,15 +1,17 @@ -import GetProduct from '@/graphql/product.graphql?raw'; - export const useProduct = (id: string) => { - const { $directus } = useNuxtApp(); - const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`product-${id}-${locale}`, async () => { - return await $directus.query<{ products_by_id: Product }>(GetProduct, { - id: id, - locale: locale, - }); + try { + const data = await $fetch(`/api/cms/product/${id}`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching product: ', error); + throw error; + } }); }; diff --git a/app/composables/directus/useProductList.ts b/app/composables/directus/useProductList.ts index 58bac21..61f6191 100644 --- a/app/composables/directus/useProductList.ts +++ b/app/composables/directus/useProductList.ts @@ -1,14 +1,17 @@ -import GetProductList from '@/graphql/productList.graphql?raw'; - export const useProductList = () => { - const { $directus } = useNuxtApp(); - const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`product-list-${locale}`, async () => { - return await $directus.query<{ products: Product[] }>(GetProductList, { - locale: locale, - }); + try { + const data = await $fetch(`/api/cms/productList`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching product list: ', error); + throw error; + } }); }; diff --git a/app/composables/directus/useQuestionList.ts b/app/composables/directus/useQuestionList.ts index d9c35b2..6b672cf 100644 --- a/app/composables/directus/useQuestionList.ts +++ b/app/composables/directus/useQuestionList.ts @@ -1,14 +1,17 @@ -import GetQuestionList from '@/graphql/questionList.graphql?raw'; - export const useQuestionList = () => { - const { $directus } = useNuxtApp(); - const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`question-list-${locale}`, async () => { - return await $directus.query<{ questions: Question[] }>(GetQuestionList, { - locale: locale, - }); + try { + const data = $fetch(`/api/cms/questionList`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching question list:', error); + throw error; + } }); }; diff --git a/app/composables/directus/useSolution.ts b/app/composables/directus/useSolution.ts index 1ab8f55..e3d4316 100644 --- a/app/composables/directus/useSolution.ts +++ b/app/composables/directus/useSolution.ts @@ -1,14 +1,17 @@ -import GetSolution from '@/graphql/solution.graphql?raw'; - export const useSolution = (id: string) => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`solution-${id}-${locale}`, async () => { - return await $directus.query<{ solutions_by_id: Solution }>(GetSolution, { - id: id, - locale: locale, - }); + try { + const data = await $fetch(`/api/cms/solution/${id}`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching solution: ', error); + throw error; + } }); }; diff --git a/app/composables/directus/useSolutionList.ts b/app/composables/directus/useSolutionList.ts index fcbd25d..3f8a3b0 100644 --- a/app/composables/directus/useSolutionList.ts +++ b/app/composables/directus/useSolutionList.ts @@ -1,13 +1,17 @@ -import GetSolutionList from '@/graphql/solutionList.graphql?raw'; - export const useSolutionList = () => { - const { $directus } = useNuxtApp(); const { getDirectusLocale } = useLocalizations(); const locale = getDirectusLocale(); return useAsyncData(`solution-list-${locale}`, async () => { - return await $directus.query<{ solutions: Solution[] }>(GetSolutionList, { - locale: locale, - }); + try { + const data = $fetch(`/api/cms/solutionList`, { + headers: { 'x-locale': locale }, + }); + + return data; + } catch (error) { + logger.error('Error fetching solution list:', error); + throw error; + } }); }; diff --git a/app/pages/about/index.vue b/app/pages/about/index.vue index 09a775c..64dd05f 100644 --- a/app/pages/about/index.vue +++ b/app/pages/about/index.vue @@ -34,9 +34,7 @@ ]; const { data, pending, error } = await useCompanyProfile(); - const content = computed(() => - toCompanyProfileView(data.value.company_profile) - ); + const content = computed(() => toCompanyProfileView(data.value)); watch(error, (value) => { if (value) { diff --git a/app/pages/index.vue b/app/pages/index.vue index d5d6720..f2eb413 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -16,7 +16,7 @@ const { data, pending, error } = await useHomepage(); const homepageData = computed(() => { - return toHomepageView(data.value.homepage); + return toHomepageView(data.value); }); const pageTilte = $t('page-title.homepage'); diff --git a/app/pages/products/[slug].vue b/app/pages/products/[slug].vue index 6eee50a..fb06327 100644 --- a/app/pages/products/[slug].vue +++ b/app/pages/products/[slug].vue @@ -39,7 +39,7 @@ const { data, pending, error } = await useProduct(id); - const rawProduct = computed(() => data.value.products_by_id ?? null); + const rawProduct = computed(() => data.value ?? null); const product = computed(() => { if (rawProduct.value === null) { @@ -61,10 +61,10 @@ }); // SEO - // usePageSeo({ - // title: product.value.name || $t('page-title.products'), - // description: product.value.summary || '', - // }); + usePageSeo({ + title: product.value.name || $t('page-title.products'), + description: product.value.summary || '', + });