完成rss订阅配置

This commit is contained in:
宇阳
2024-08-14 19:17:32 +08:00
parent 2a19d00c63
commit 0f5b0fb609
6 changed files with 87 additions and 28 deletions

12
src/api/Rss.ts Normal file
View File

@@ -0,0 +1,12 @@
import Request from '@/utils/request'
import { Rss } from '@/types/rss';
// 获取订阅数据列表
export const getRssListAPI = (pagination?: Page) => {
if (pagination) {
const { page, size } = pagination
return Request<Paginate<Rss[]>>("GET", `/rss?page=${page}&size=${size}`);
} else {
return Request<Rss[]>("GET", `/rss/all`);
}
};

View File

@@ -4,6 +4,8 @@ import SidebarLinkGroup from './SidebarLinkGroup';
import Logo from '../../images/logo/logo.svg';
import { BiEditAlt, BiFolderOpen, BiHomeSmile, BiSliderAlt } from "react-icons/bi";
import { BiCategoryAlt } from "react-icons/bi";
import { LiaRssSolid } from "react-icons/lia";
interface SidebarProps {
sidebarOpen: boolean;
@@ -273,7 +275,7 @@ const Sidebar = ({ sidebarOpen, setSidebarOpen }: SidebarProps) => {
className={`${sidebarItemSty} ${pathname.includes('chart') && 'bg-graydark dark:bg-meta-4'
}`}
>
<BiFolderOpen className='text-[22px]' />
<LiaRssSolid className='text-[22px]' />
</NavLink>
</li>

View File

@@ -7,28 +7,14 @@ import ChatCard from '../../components/Chat/ChatCard';
import MapOne from '../../components/Maps/MapOne';
import TableOne from '../../components/Tables/TableOne';
import { IoStatsChartSharp } from "react-icons/io5";
const ECommerce: React.FC = () => {
return (
<>
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 md:gap-6 xl:grid-cols-4 2xl:gap-7.5">
<CardDataStats title="Total views" total="$3.456K" rate="0.43%" levelUp>
<svg
className="fill-primary dark:fill-white"
width="22"
height="16"
viewBox="0 0 22 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M11 15.1156C4.19376 15.1156 0.825012 8.61876 0.687512 8.34376C0.584387 8.13751 0.584387 7.86251 0.687512 7.65626C0.825012 7.38126 4.19376 0.918762 11 0.918762C17.8063 0.918762 21.175 7.38126 21.3125 7.65626C21.4156 7.86251 21.4156 8.13751 21.3125 8.34376C21.175 8.61876 17.8063 15.1156 11 15.1156ZM2.26876 8.00001C3.02501 9.27189 5.98126 13.5688 11 13.5688C16.0188 13.5688 18.975 9.27189 19.7313 8.00001C18.975 6.72814 16.0188 2.43126 11 2.43126C5.98126 2.43126 3.02501 6.72814 2.26876 8.00001Z"
fill=""
/>
<path
d="M11 10.9219C9.38438 10.9219 8.07812 9.61562 8.07812 8C8.07812 6.38438 9.38438 5.07812 11 5.07812C12.6156 5.07812 13.9219 6.38438 13.9219 8C13.9219 9.61562 12.6156 10.9219 11 10.9219ZM11 6.625C10.2437 6.625 9.625 7.24375 9.625 8C9.625 8.75625 10.2437 9.375 11 9.375C11.7563 9.375 12.375 8.75625 12.375 8C12.375 7.24375 11.7563 6.625 11 6.625Z"
fill=""
/>
</svg>
<CardDataStats title="总访客" total="8,765" rate="0.43%" levelUp>
<IoStatsChartSharp className="fill-primary dark:fill-white" />
</CardDataStats>
<CardDataStats title="Total Profit" total="$45,2K" rate="4.35%" levelUp>

View File

@@ -1,15 +1,69 @@
import { useEffect } from 'react';
import React, { useEffect, useState } from 'react';
import { MessageOutlined } from '@ant-design/icons';
import { Avatar, Card, List, Space, Spin } from 'antd';
import Title from '@/components/Title';
import { getRssListAPI } from '@/api/Rss';
import { Rss } from '@/types/rss';
import { BiCategory } from "react-icons/bi";
import { LuTimer } from "react-icons/lu";
import dayjs from 'dayjs';
const IconText = ({ icon, text }: { icon: React.FC; text: string }) => (
<Space>
{React.createElement(icon)} {text}
</Space>
);
const RssPage = () => {
const [list, setList] = useState<Rss[]>([]);
const [loading, setLoading] = useState<boolean>(true);
const getRssList = async () => {
setLoading(true);
const { data } = await getRssListAPI();
setList(data as Rss[]);
setLoading(false);
};
const RSSFeed = () => {
useEffect(() => {
getRssList();
}, []);
return (
<div>
<h1>RSS Feed</h1>
</div>
<>
<Title value='订阅中心' />
<Card className='mt-2'>
<Spin spinning={loading}>
<List
dataSource={list}
size="large"
itemLayout="vertical"
pagination={{
align: "center",
pageSize: 8
}}
renderItem={(item: Rss) => (
<List.Item
key={item.title}
actions={[
<IconText icon={BiCategory} text={item.type} key="list-vertical-star-o" />,
<IconText icon={LuTimer} text={dayjs(+item.createTime!).format('YYYY-MM-DD HH:mm:ss')} key="list-vertical-like-o" />,
]}
// extra={<img alt="logo" src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png" className='h-30' />}
>
<List.Item.Meta
avatar={<Avatar src={item.image} className='w-15 h-15 mr-2' />}
title={<a href={item.url} target='_blank'>{item.title}</a>}
description={item.description}
/>
</List.Item>
)}
/>
</Spin>
</Card>
</>
);
};
export default RSSFeed;
export default RssPage;

View File

@@ -79,7 +79,7 @@ const LinkPage = () => {
await editLinkDataAPI({ ...link, ...values });
message.success('🎉 编辑网站成功');
} else {
await addLinkDataAPI(values);
await addLinkDataAPI({ ...values, createTime: new Date().getTime().toString() });
message.success('🎉 新增网站成功');
}

5
src/types/rss.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
import { Web } from "./web";
export interface Rss extends Omit<Web, "id" | "type" | "typeId" | "rss"> {
type: string
}