mirror of
https://github.com/LiuYuYang01/ThriveX-Blog.git
synced 2026-06-05 20:29:34 +08:00
重构项目配置,移除过时的项目API,替换为新的配置API,确保代码一致性和可维护性。
This commit is contained in:
11
src/api/config.ts
Executable file
11
src/api/config.ts
Executable file
@@ -0,0 +1,11 @@
|
||||
import Request from "@/utils/request";
|
||||
|
||||
// 获取网站配置
|
||||
export const getWebConfigDataAPI = <T>(type: string) => Request<T>("GET", `/web_config/list/${type}`)
|
||||
|
||||
// 修改网站配置
|
||||
export const editWebConfigDataAPI = (type: string, data: object) => Request<{ [string: string]: string }>("PATCH", `/web_config/${type}`, { data })
|
||||
|
||||
|
||||
// 获取高德地图配置
|
||||
export const getGaodeMapConfigDataAPI = () => Request("GET", `/env_config/gaode_map`)
|
||||
@@ -1,12 +0,0 @@
|
||||
import Request from "@/utils/request";
|
||||
import { EnvConfig, EnvConfigName } from "@/types/app/project";
|
||||
|
||||
// 获取项目配置
|
||||
export const getConfigDataAPI = <T>(type: string) => Request<T>("GET", `/config/list/${type}`)
|
||||
|
||||
// 修改项目配置
|
||||
export const editConfigDataAPI = (type: string, data: object) => Request<{ [string: string]: string }>("PATCH", `/config/${type}`, { data })
|
||||
|
||||
|
||||
// 获取环境配置
|
||||
export const getEnvConfigDataAPI = () => Request("GET", `/env_config/gaode_map`)
|
||||
@@ -1,18 +1,18 @@
|
||||
import { Feed } from 'feed';
|
||||
import { NextResponse } from 'next/server';
|
||||
|
||||
import { Web } from '@/types/app/project';
|
||||
import { Web } from '@/types/app/config';
|
||||
import { User } from '@/types/app/user';
|
||||
import { Article } from '@/types/app/article';
|
||||
import { Record } from '@/types/app/record'
|
||||
|
||||
import { getArticlePagingAPI } from '@/api/article'
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { getUserDataAPI } from '@/api/user'
|
||||
import { getRecordPagingAPI } from '@/api/record';
|
||||
|
||||
export async function GET() {
|
||||
const { data: web } = await getConfigDataAPI<Web>("web") || { data: {} as Web }
|
||||
const { data: web } = await getWebConfigDataAPI<Web>("web") || { data: {} as Web }
|
||||
const { data: user } = await getUserDataAPI() || { data: {} as User }
|
||||
const { data: article } = await getArticlePagingAPI({ pagination: { page: 1, size: 8 } }) || { data: {} as Paginate<Article[]> }
|
||||
const { data: record } = await getRecordPagingAPI({ pagination: { page: 1, size: 8 } }) || { data: {} as Paginate<Record[]> }
|
||||
|
||||
@@ -9,8 +9,8 @@ import 'react-photo-view/dist/react-photo-view.css';
|
||||
import dayjs from 'dayjs'
|
||||
import Masonry from "react-masonry-css";
|
||||
import "./page.scss";
|
||||
import { getEnvConfigDataAPI } from "@/api/project";
|
||||
import { EnvConfig } from "@/types/app/project";
|
||||
import { getGaodeMapConfigDataAPI } from "@/api/config";
|
||||
import { EnvConfig } from "@/types/app/config";
|
||||
|
||||
const breakpointColumnsObj = {
|
||||
default: 4,
|
||||
@@ -40,7 +40,7 @@ export default function MapContainer() {
|
||||
|
||||
// 确保代码仅在客户端执行
|
||||
import('@amap/amap-jsapi-loader').then(async AMapLoader => {
|
||||
const { data } = await getEnvConfigDataAPI() || { data: {} }
|
||||
const { data } = await getGaodeMapConfigDataAPI() || { data: {} }
|
||||
const { key_code, security_code } = data as { key_code: string, security_code: string }
|
||||
|
||||
// @ts-ignore
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Link from "next/link";
|
||||
import { Metadata } from "next";
|
||||
|
||||
import { getConfigDataAPI } from "@/api/project";
|
||||
import { getWebConfigDataAPI } from "@/api/config";
|
||||
import { getWebListAPI, getWebTypeListAPI } from '@/api/web'
|
||||
import { Web as WebLink, WebType } from "@/types/app/web";
|
||||
|
||||
@@ -13,7 +13,7 @@ import CopyableText from "./components/CopyableText";
|
||||
import { ToastContainer } from "react-toastify";
|
||||
import { getUserDataAPI } from "@/api/user";
|
||||
import { User } from "@/types/app/user";
|
||||
import { Web } from "@/types/app/project";
|
||||
import { Web } from "@/types/app/config";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "😇 朋友圈",
|
||||
@@ -22,7 +22,7 @@ export const metadata: Metadata = {
|
||||
|
||||
export default async () => {
|
||||
const { data: user } = await getUserDataAPI() || { data: {} as User }
|
||||
const { data: web } = await getConfigDataAPI<Web>("web") || { data: {} as Web }
|
||||
const { data: web } = await getWebConfigDataAPI<Web>("web") || { data: {} as Web }
|
||||
const { data: linkList } = await getWebListAPI() || { data: [] as WebLink[] }
|
||||
const { data: typeList } = await getWebTypeListAPI() || { data: [] as WebType[] }
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ import Tools from '@/components/Tools';
|
||||
import Confetti from '@/components/Confetti';
|
||||
import RouteChangeHandler from '@/components/RouteChangeHandler'
|
||||
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Web } from '@/types/app/project';
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Web } from '@/types/app/config';
|
||||
|
||||
// 加载样式文件
|
||||
import "@/styles/index.scss";
|
||||
@@ -25,7 +25,7 @@ const LXGWWenKai = localFont({
|
||||
})
|
||||
|
||||
export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
||||
const { data } = (await getConfigDataAPI<Web>("web")) || { data: {} as Web };
|
||||
const { data } = (await getWebConfigDataAPI<Web>("web")) || { data: {} as Web };
|
||||
|
||||
// 尊重开源,禁止删除此版权信息!!!
|
||||
console.log("🚀 欢迎使用 ThriveX 现代化博客管理系统")
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useEffect } from "react";
|
||||
import AOS from 'aos';
|
||||
import 'aos/dist/aos.css';
|
||||
|
||||
import { getEnvConfigDataAPI } from "@/api/project";
|
||||
import { getGaodeMapConfigDataAPI } from "@/api/config";
|
||||
|
||||
export default function MapContainer() {
|
||||
let map: any;
|
||||
@@ -15,7 +15,7 @@ export default function MapContainer() {
|
||||
|
||||
// 确保代码仅在客户端执行
|
||||
import('@amap/amap-jsapi-loader').then(async AMapLoader => {
|
||||
const { data } = await getEnvConfigDataAPI() || { data: {} }
|
||||
const { data } = await getGaodeMapConfigDataAPI() || { data: {} }
|
||||
const { key_code, security_code } = data as { key_code: string, security_code: string }
|
||||
|
||||
// @ts-ignore
|
||||
|
||||
@@ -5,8 +5,8 @@ import Container from "@/components/Container";
|
||||
import ArticleLayout from "@/components/ArticleLayout";
|
||||
import Sidebar from "@/components/Sidebar";
|
||||
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from "@/types/app/project";
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from "@/types/app/config";
|
||||
|
||||
interface Props {
|
||||
searchParams: Promise<{ page: number }>;
|
||||
@@ -15,7 +15,7 @@ interface Props {
|
||||
export default async (props: Props) => {
|
||||
const searchParams = await props.searchParams;
|
||||
const page = searchParams.page || 1;
|
||||
const { data } = (await getConfigDataAPI<Theme>("layout")) || { data: {} as Theme }
|
||||
const { data } = (await getWebConfigDataAPI<Theme>("layout")) || { data: {} as Theme }
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -7,8 +7,8 @@ import { dayFormat } from '@/utils'
|
||||
import Pagination from "@/components/Pagination";
|
||||
import Empty from "@/components/Empty";
|
||||
import Show from "@/components/Show";
|
||||
import { getConfigDataAPI } from "@/api/project";
|
||||
import { Theme } from "@/types/app/project";
|
||||
import { getWebConfigDataAPI } from "@/api/config";
|
||||
import { Theme } from "@/types/app/config";
|
||||
import Editor from "./components/Editor";
|
||||
|
||||
interface Props {
|
||||
@@ -21,7 +21,7 @@ export default async (props: Props) => {
|
||||
|
||||
const { data: user } = (await getUserDataAPI()) || { data: {} as User }
|
||||
const { data: record } = (await getRecordPagingAPI({ pagination: { page, size: 8 } })) || { data: {} as Paginate<Record[]> }
|
||||
const { data: theme } = (await getConfigDataAPI<Theme>("layout")) || { data: {} as Theme }
|
||||
const { data: theme } = (await getWebConfigDataAPI<Theme>("layout")) || { data: {} as Theme }
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -9,15 +9,15 @@ import { GoTag } from "react-icons/go";
|
||||
import Empty from '@/components/Empty';
|
||||
import Show from '@/components/Show';
|
||||
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from '@/types/app/project';
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from '@/types/app/config';
|
||||
|
||||
interface CardProps {
|
||||
data: Paginate<Article[]>;
|
||||
}
|
||||
|
||||
const Card = async ({ data }: CardProps) => {
|
||||
const { data: theme } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: theme } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
|
||||
const covers = JSON.parse(theme.covers || '[]')
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@ import { GoTag } from "react-icons/go";
|
||||
import Empty from '@/components/Empty';
|
||||
import Show from '@/components/Show';
|
||||
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from '@/types/app/project';
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from '@/types/app/config';
|
||||
|
||||
interface ClassicsProps {
|
||||
data: Paginate<Article[]>;
|
||||
}
|
||||
|
||||
const Classics = async ({ data }: ClassicsProps) => {
|
||||
const { data: theme } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: theme } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
|
||||
const covers = JSON.parse(theme.covers || '[]')
|
||||
|
||||
|
||||
@@ -6,15 +6,15 @@ import Card from './Card'
|
||||
import Pagination from "../Pagination"
|
||||
|
||||
import { getArticlePagingAPI } from '@/api/article'
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from '@/types/app/project'
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from '@/types/app/config'
|
||||
import { Article } from '@/types/app/article'
|
||||
import { Swiper as SwiperType } from '@/types/app/swiper'
|
||||
import { getSwiperListAPI } from '@/api/swiper'
|
||||
|
||||
export default async ({ page }: { page: number }) => {
|
||||
const { data: swiper } = await getSwiperListAPI() || { data: [] as SwiperType[] }
|
||||
const { data: theme } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: theme } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const sidebar: string[] = JSON.parse(theme?.right_sidebar || '[]')
|
||||
|
||||
// 如果是瀑布流布局就显示28条数据,否则显示8条
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { getConfigDataAPI } from '@/api/project';
|
||||
import { getWebConfigDataAPI } from '@/api/config';
|
||||
import { getUserDataAPI } from '@/api/user';
|
||||
import { User } from '@/types/app/user';
|
||||
import { Web } from '@/types/app/project';
|
||||
import { Web } from '@/types/app/config';
|
||||
import Tooltip from './components/Tooltip';
|
||||
|
||||
import animals from './images/animals.webp';
|
||||
@@ -11,7 +11,7 @@ import ICP from './images/ICP.png';
|
||||
|
||||
export default async () => {
|
||||
const { data: user } = (await getUserDataAPI()) || { data: {} as User }
|
||||
const { data: web } = (await getConfigDataAPI<Web>("web")) || { data: {} as Web }
|
||||
const { data: web } = (await getWebConfigDataAPI<Web>("web")) || { data: {} as Web }
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -14,10 +14,10 @@ import { BsFillMoonStarsFill, BsTextIndentLeft } from "react-icons/bs";
|
||||
|
||||
import { Cate } from '@/types/app/cate';
|
||||
import { getCateListAPI } from '@/api/cate';
|
||||
import { getConfigDataAPI } from '@/api/project';
|
||||
import { getWebConfigDataAPI } from '@/api/config';
|
||||
|
||||
import { useConfigStore } from '@/stores';
|
||||
import { Theme, Web } from '@/types/app/project';
|
||||
import { Theme, Web } from '@/types/app/config';
|
||||
|
||||
const Header = () => {
|
||||
// 是否暗黑模式
|
||||
@@ -25,10 +25,10 @@ const Header = () => {
|
||||
|
||||
// 获取项目配置
|
||||
const getConfigData = async () => {
|
||||
const { data: web } = (await getConfigDataAPI<Web>("web")) || { data: {} as Web };
|
||||
const { data: web } = (await getWebConfigDataAPI<Web>("web")) || { data: {} as Web };
|
||||
setWeb(web)
|
||||
|
||||
const { data: theme } = (await getConfigDataAPI<Theme>("layout")) || { data: {} as Theme };
|
||||
const { data: theme } = (await getWebConfigDataAPI<Theme>("layout")) || { data: {} as Theme };
|
||||
setTheme(theme)
|
||||
}
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@ import QQ from '@/assets/svg/socializing/QQ.svg'
|
||||
import Weixin from '@/assets/svg/socializing/Weixin.svg'
|
||||
|
||||
import { getUserDataAPI } from '@/api/user';
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { User } from '@/types/app/user';
|
||||
import { Social, Theme } from '@/types/app/project';
|
||||
import { Social, Theme } from '@/types/app/config';
|
||||
|
||||
const Author = async () => {
|
||||
const { data: user } = await getUserDataAPI() || { data: {} as User }
|
||||
const { data: { social } } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: { social } } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
|
||||
const socialList = JSON.parse(social || '[]')?.map((item: string) => JSON.parse(item))
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { getArticleListAPI } from '@/api/article';
|
||||
import { IoIosArrowForward } from "react-icons/io";
|
||||
import fire from '@/assets/svg/other/fire.svg';
|
||||
import "./index.scss";
|
||||
import { Theme } from '@/types/app/project';
|
||||
import { Theme } from '@/types/app/config';
|
||||
import { Article } from '@/types/app/article';
|
||||
|
||||
const RandomArticle = async () => {
|
||||
const { data: theme } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: theme } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: article } = await getArticleListAPI() || { data: [] as Article[] }
|
||||
|
||||
const ids = JSON.parse(theme.reco_article ? theme.reco_article : '[]')
|
||||
|
||||
@@ -3,11 +3,11 @@ import HotArticle from "./HotArticle"
|
||||
import RandomArticle from "./RandomArticle"
|
||||
import Comment from "./Comment"
|
||||
import RunTime from "./RunTime"
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from "@/types/app/project"
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from "@/types/app/config"
|
||||
|
||||
export default async () => {
|
||||
const { data: theme } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data: theme } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const sidebar: string[] = JSON.parse(theme?.right_sidebar || '[]')
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ReactNode } from 'react'
|
||||
import Ripple from '@/components/Ripple'
|
||||
import { getRandom } from '@/utils'
|
||||
import { getConfigDataAPI } from '@/api/project'
|
||||
import { Theme } from '@/types/app/project'
|
||||
import { getWebConfigDataAPI } from '@/api/config'
|
||||
import { Theme } from '@/types/app/config'
|
||||
|
||||
interface Props {
|
||||
src?: string, // 图片列表
|
||||
@@ -11,7 +11,7 @@ interface Props {
|
||||
}
|
||||
|
||||
export default async ({ src, isRipple = true, children }: Props) => {
|
||||
const { data } = await getConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const { data } = await getWebConfigDataAPI<Theme>("layout") || { data: {} as Theme }
|
||||
const covers = JSON.parse(data.covers || '[]')
|
||||
|
||||
const sty = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"use client"
|
||||
|
||||
import { Web } from "@/types/app/project";
|
||||
import { Web } from "@/types/app/config";
|
||||
import { Modal, ModalContent, ModalHeader, ModalBody, UseDisclosureProps, Snippet } from "@heroui/react"
|
||||
|
||||
interface Props {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { create } from 'zustand'
|
||||
import { persist, createJSONStorage } from 'zustand/middleware'
|
||||
import { Theme, Web } from '@/types/app/project';
|
||||
import { Theme, Web } from '@/types/app/config';
|
||||
|
||||
interface ConfigState {
|
||||
// 是否暗黑模式
|
||||
|
||||
Reference in New Issue
Block a user