💄 update 新闻编辑ui

This commit is contained in:
LittleBoy 2024-12-22 03:44:43 +08:00
parent 9e274a8e46
commit 2d54451052
2 changed files with 97 additions and 42 deletions

View File

@ -29,3 +29,12 @@
} }
} }
} }
.newListTable{
:global{
.header{}
.body{}
.row{
@apply bg-white mt-2 p-4 rounded;
}
}
}

View File

@ -1,4 +1,4 @@
import {Button, Pagination, Table, TableColumnsType, TableProps, Typography} from "antd"; import {Button, Checkbox, Pagination, Space, Table, TableColumnsType, TableProps, Typography} from "antd";
import {Card} from "@/components/card"; import {Card} from "@/components/card";
import React, {useState} from "react"; import React, {useState} from "react";
@ -10,6 +10,9 @@ import EditSearchForm from "@/pages/news/components/edit-search-form.tsx";
import ButtonPush2Video from "@/pages/news/components/button-push2video.tsx"; import ButtonPush2Video from "@/pages/news/components/button-push2video.tsx";
import {Key} from "antd/es/table/interface"; import {Key} from "antd/es/table/interface";
import styles from './components/style.module.scss'
import InfiniteScroller from "@/components/scoller/infinite-scroller.tsx";
export default function NewEdit() { export default function NewEdit() {
const [editId, setEditId] = useState(-1) const [editId, setEditId] = useState(-1)
@ -17,20 +20,17 @@ export default function NewEdit() {
const [params, setParams] = useState<ApiArticleSearchParams>({ const [params, setParams] = useState<ApiArticleSearchParams>({
pagination: {page: 1, limit: 10} pagination: {page: 1, limit: 10}
}) })
const {data, refresh} = useRequest(() => getList(params), {refreshDeps: [params]}) const {data, refresh, loading} = useRequest(() => getList(params), {refreshDeps: [params]})
const columns: TableColumnsType<ListArticleItem> = [ // : TableColumnsType<ListArticleItem>
const columns = [
{ {
title: '标题', title: '标题',
minWidth: 300,
dataIndex: 'title', dataIndex: 'title',
}, render: (_, record) => (<div>
{ <div className="title text-base">{_}</div>
title: '内容', <div className="summary text-sm text-gray-400 line-clamp-1">{record.summary}</div>
dataIndex: 'summary', </div>)
render: (value) => (<Typography.Paragraph style={{marginBottom: 0}} ellipsis={{
rows: 2, expandable: true, symbol: 'More'
}}>{value}</Typography.Paragraph>)
}, },
{ {
title: '来源', title: '来源',
@ -49,48 +49,94 @@ export default function NewEdit() {
title: '操作', title: '操作',
width: 80, width: 80,
align: 'center', align: 'center',
render: (_, record) => (<Button type="link" onClick={() => { render: (_, record) => (<Space>
setEditId(record.id) <Button onClick={() => {
}}></Button>), setEditId(record.id)
}}></Button>
<Button onClick={() => {
setEditId(record.id)
}}></Button>
<Checkbox type="link"/>
</Space>),
}, },
]; ];
const rowSelection: TableProps<ListArticleItem>['rowSelection'] = {
onChange: (selectedRowKeys: Key[]) => {
setSelectedRowKeys(selectedRowKeys as Id[])
},
};
return (<div className="container pb-5 news-edit"> return (<div className="container pb-5 news-edit">
<Card className="search-panel-container my-5"> <div className="search-panel-container my-5">
<div className="search-form flex gap-5 justify-between"> <div className="search-form flex gap-5 justify-between">
<EditSearchForm onSubmit={setParams}/> <EditSearchForm onSubmit={setParams}/>
<Button type="primary" onClick={() => setEditId(0)}></Button> <Button type="primary" onClick={() => setEditId(0)}></Button>
</div> </div>
<div className="news-list-container mt-5"> <div className="news-list-container mt-5">
<Table<ListArticleItem> <div className={styles.newListTable}>
rowSelection={{type: 'checkbox', ...rowSelection}} <div className="header flex gap-2">
columns={columns} <div className="col flex-1"></div>
dataSource={data?.list || []} <div className="col source w-[120px] min-w-[120px]"></div>
rowKey={'id'} <div className="col time w-[120px]"></div>
bordered <div className="col operations min-w-[150px]"></div>
pagination={false} </div>
/> <InfiniteScroller onCallback={(page)=>{
{data?.pagination && data?.pagination.total > 0 && <div className="footer flex justify-between items-center mt-5"> setParams(prev => ({
<Pagination
current={params.pagination.page}
total={data?.pagination.total}
pageSize={10}
showSizeChanger={false}
simple={true}
rootClassName={'simple-pagination'}
onChange={(page) => setParams(prev => ({
...prev, ...prev,
pagination: {page, limit: 10} pagination: {page, limit: 10}
}))} }))
/> }} loading={loading} pagination={data?.pagination}>
<ButtonPush2Video ids={selectedRowKeys} onSuccess={refresh}/> <div className="body">
</div>} {data?.list?.map((item, i) => {
return <div key={i} className="row flex gap-3">
<div className="col flex-1">
<div className="title text-base">{item.title}</div>
<div className="summary text-xs text-gray-400 line-clamp-1">{item.summary}</div>
</div>
<div className="col source w-[120px] min-w-[120px]">
<div className="text-sm text-gray-400">{item.media_name}</div>
</div>
<div className="col time w-[120px]">
<div
className="text-sm text-gray-400">{formatTime(item.publish_time, 'YYYY-MM-DD HH:mm')}</div>
</div>
<div className="col operations w-[150px]">
<Space>
<Button onClick={() => {
setEditId(item.id)
}}></Button>
<Button onClick={() => {
setEditId(item.id)
}}></Button>
<Checkbox type="link"/>
</Space>
</div>
</div>
})}
</div>
</InfiniteScroller>
</div>
{/*<Table<ListArticleItem>*/}
{/* columns={columns}*/}
{/* dataSource={data?.list || []}*/}
{/* rowKey={'id'}*/}
{/* bordered={false}*/}
{/* pagination={false}*/}
{/* rowHoverable={false}*/}
{/* className={styles.newListTable}*/}
{/*/>*/}
{data?.pagination && data?.pagination.total > 0 &&
<div className="footer flex justify-between items-center mt-5">
<Pagination
current={params.pagination.page}
total={data?.pagination.total}
pageSize={10}
showSizeChanger={false}
simple={true}
rootClassName={'simple-pagination'}
onChange={(page) => setParams(prev => ({
...prev,
pagination: {page, limit: 10}
}))}
/>
<ButtonPush2Video ids={selectedRowKeys} onSuccess={refresh}/>
</div>}
</div> </div>
<ArticleEditModal <ArticleEditModal
type="news" id={editId} type="news" id={editId}
@ -98,6 +144,6 @@ export default function NewEdit() {
setEditId(-1) setEditId(-1)
if (saved) refresh() if (saved) refresh()
}}/> }}/>
</Card> </div>
</div>) </div>)
} }