封装获取数据列表逻辑

This commit is contained in:
宇阳
2024-08-17 15:19:08 +08:00
parent 73882884cf
commit bd35e09eb8
7 changed files with 117 additions and 22 deletions

View File

@@ -1,5 +1,6 @@
import Request from "@/utils/request"; import Request from "@/utils/request";
import { Article } from "@/types/article"; import { Article } from "@/types/app/article";
import { getListAPI } from '@/utils'
// 新增文章 // 新增文章
export const addArticleDataAPI = (data: Article) => export const addArticleDataAPI = (data: Article) =>
@@ -17,11 +18,22 @@ export const editArticleDataAPI = (data: Article) =>
export const getArticleDataAPI = (id?: number) => Request<Article>("GET", `/article/${id}`) export const getArticleDataAPI = (id?: number) => Request<Article>("GET", `/article/${id}`)
// 获取文章列表 // 获取文章列表
export const getArticleListAPI = (pagination?: Page) => { export const getArticleListAPI = getListAPI<Article>("/article")
if (pagination) {
const { page, size } = pagination // export const getArticleListAPI = (data?: QueryData) => {
return Request<Paginate<Article[]>>("GET", `/article?page=${page}&size=${size}`); // if (data?.pagination) {
} else { // let sort = data?.sort ? `?sort=${data?.sort}` : '?'
return Request<Article[]>("GET", `/article/all`); // const query = ObjectToUrlParam(data?.query as FilterData) ? "&" + ObjectToUrlParam(data?.query as FilterData) : ''
} // const { page, size } = data.pagination
}; // const pagination = page && size ? `&page=${page}&size=${size}` : page && !size ? `&page=${page}` : size && !page ? `&size=${size}` : ''
// if (!query && !pagination) sort = ''
// return Request<Paginate<Article[]>>("GET", `/article${sort}${pagination}${query}`);
// } else {
// let sort = data?.sort ? `?sort=${data?.sort}` : '?'
// const query = ObjectToUrlParam(data?.query as FilterData) ? "&" + ObjectToUrlParam(data?.query as FilterData) : ''
// if (!query) sort = ''
// return Request<Article[]>("GET", `/article/all${sort}${query}`);
// }
// };

View File

@@ -24,4 +24,4 @@ export const getCommentListAPI = (pattern?: "list" | "recursion", pagination?: P
} else { } else {
return Request<Comment[]>("GET", `/comment/all?pattern=${pattern ? pattern : "recursion"}`); return Request<Comment[]>("GET", `/comment/all?pattern=${pattern ? pattern : "recursion"}`);
} }
}; };

View File

@@ -1,5 +1,6 @@
import Request from '@/utils/request' import Request from '@/utils/request'
import { Web, LinkType } from '@/types/app/web' import { Web, LinkType } from '@/types/app/web'
import { getListAPI } from '@/utils'
// 新增网站 // 新增网站
export const addLinkDataAPI = (data: Web) => Request<Web>("POST", "/link", data) export const addLinkDataAPI = (data: Web) => Request<Web>("POST", "/link", data)
@@ -14,14 +15,15 @@ export const editLinkDataAPI = (data: Web) => Request<Web>("PATCH", "/link", dat
export const getLinkDataAPI = (id?: number) => Request<Web>("GET", `/link/${id}`) export const getLinkDataAPI = (id?: number) => Request<Web>("GET", `/link/${id}`)
// 获取网站列表 // 获取网站列表
export const getLinkListAPI = (pagination?: Page) => { // export const getLinkListAPI = (pagination?: Page) => {
if (pagination) { // if (pagination) {
const { page, size } = pagination // const { page, size } = pagination
return Request<Paginate<Web[]>>("GET", `/link?page=${page}&size=${size}`); // return Request<Paginate<Web[]>>("GET", `/link?page=${page}&size=${size}`);
} else { // } else {
return Request<Web[]>("GET", `/link/all`); // return Request<Web[]>("GET", `/link/all`);
} // }
}; // };
export const getLinkListAPI = getListAPI<Web>("/link")
// 获取网站类型列表 // 获取网站类型列表
export const getLinkTypeListAPI = () => { export const getLinkTypeListAPI = () => {

View File

@@ -5,7 +5,8 @@ import { BiEditAlt, BiFolderOpen, BiHomeSmile, BiSliderAlt } from "react-icons/b
import { LuCrown } from "react-icons/lu"; import { LuCrown } from "react-icons/lu";
import { BiCategoryAlt, BiBug } from "react-icons/bi"; import { BiCategoryAlt, BiBug } from "react-icons/bi";
import { LiaRssSolid } from "react-icons/lia"; import { LiaRssSolid } from "react-icons/lia";
import { IoIosStats } from "react-icons/io"; import { BiLineChart } from "react-icons/bi";
import { BiShieldQuarter } from "react-icons/bi";
interface SidebarProps { interface SidebarProps {
sidebarOpen: boolean; sidebarOpen: boolean;
@@ -245,6 +246,30 @@ const Sidebar = ({ sidebarOpen, setSidebarOpen }: SidebarProps) => {
</NavLink> </NavLink>
</li> </li>
<li>
<NavLink
to="/user"
className={({ isActive }) =>
'group relative flex items-center gap-2.5 rounded-md px-4 font-medium text-bodydark2 duration-300 ease-in-out hover:text-white ' +
(isActive && '!text-white')
}
>
</NavLink>
</li>
<li>
<NavLink
to="/role"
className={({ isActive }) =>
'group relative flex items-center gap-2.5 rounded-md px-4 font-medium text-bodydark2 duration-300 ease-in-out hover:text-white ' +
(isActive && '!text-white')
}
>
</NavLink>
</li>
</ul> </ul>
</div> </div>
{/* <!-- Dropdown Menu End --> */} {/* <!-- Dropdown Menu End --> */}
@@ -253,6 +278,16 @@ const Sidebar = ({ sidebarOpen, setSidebarOpen }: SidebarProps) => {
}} }}
</SidebarLinkGroup> </SidebarLinkGroup>
<li>
<NavLink
to="/rights"
className={`${sidebarItemSty} ${pathname.includes('rights') && sidebarItemActiveSty}`}
>
<BiShieldQuarter className='text-[22px]' />
</NavLink>
</li>
<li> <li>
<NavLink <NavLink
to="/setup" to="/setup"
@@ -299,7 +334,7 @@ const Sidebar = ({ sidebarOpen, setSidebarOpen }: SidebarProps) => {
className={`${sidebarItemSty} ${pathname.includes('stats') && 'bg-graydark dark:bg-meta-4' className={`${sidebarItemSty} ${pathname.includes('stats') && 'bg-graydark dark:bg-meta-4'
}`} }`}
> >
<IoIosStats className='text-[22px]' /> <BiLineChart className='text-[22px]' />
</NavLink> </NavLink>
</li> </li>

View File

@@ -29,7 +29,8 @@ const Article: React.FC = () => {
}; };
useEffect(() => { useEffect(() => {
getArticleList(); // getArticleList();
getArticleList()
}, []); }, []);
const delArticleData = async (id: number) => { const delArticleData = async (id: number) => {

View File

@@ -17,4 +17,16 @@ interface Paginate<T> {
interface Page { interface Page {
page?: number, page?: number,
size?: number, size?: number,
} }
interface FilterData {
key?: string,
startDate?: number,
endDate?: number
}
interface QueryData {
sort?: "asc" | "desc",
query?: FilterData,
pagination?: Page
}

View File

@@ -0,0 +1,33 @@
import Request from "@/utils/request";
import { Article } from "@/types/app/article";
// 对象转url参数
export const ObjectToUrlParam = (obj: Object): string => {
return obj && new URLSearchParams(
Object.keys(obj).reduce((acc, key) => {
acc[key] = String(obj[key as keyof Object]);
return acc;
}, {} as Record<string, string>)
).toString();
}
// 查询数据相关逻辑
export const getListAPI = <T>(api: string) => {
return (data?: QueryData) => {
if (data?.pagination) {
let sort = data?.sort ? `?sort=${data?.sort}` : '?'
const query = ObjectToUrlParam(data?.query as FilterData) ? "&" + ObjectToUrlParam(data?.query as FilterData) : ''
const { page, size } = data.pagination
const pagination = page && size ? `&page=${page}&size=${size}` : page && !size ? `&page=${page}` : size && !page ? `&size=${size}` : ''
if (!query && !pagination) sort = ''
return Request<Paginate<T[]>>("GET", `${api}${sort}${pagination}${query}`);
} else {
let sort = data?.sort ? `?sort=${data?.sort}` : '?'
const query = ObjectToUrlParam(data?.query as FilterData) ? "&" + ObjectToUrlParam(data?.query as FilterData) : ''
if (!query) sort = ''
return Request<T[]>("GET", `${api}/all${sort}${query}`);
}
}
};