update: 新闻素材页面添加全局选择
This commit is contained in:
parent
a5b8e9cd87
commit
7bf1378e90
@ -33,7 +33,8 @@
|
||||
"react-player": "^2.16.0",
|
||||
"react-router-dom": "^6.28.0",
|
||||
"sass": "^1.81.0",
|
||||
"tcplayer.js": "^5.2.0"
|
||||
"tcplayer.js": "^5.2.0",
|
||||
"zustand": "^5.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/file-saver": "^2.0.7",
|
||||
|
136
src/hooks/useCache.ts
Normal file
136
src/hooks/useCache.ts
Normal file
@ -0,0 +1,136 @@
|
||||
import {create} from "zustand"
|
||||
|
||||
|
||||
type StoreInstance<T> = {
|
||||
cache: T[];
|
||||
clear: () => void;
|
||||
set: (values: T[]) => void;
|
||||
add: (value: T) => void;
|
||||
remove: (value: T) => void
|
||||
}
|
||||
// function createStore<T>(set: Get<StoreApi<StoreInstance<Id>>, "setState", never>){
|
||||
// return {
|
||||
// data: [],
|
||||
// set: (values: T[]) => {
|
||||
// set(s=>{
|
||||
//
|
||||
// })
|
||||
// // set()
|
||||
// set({data: values})
|
||||
// },
|
||||
// clear: () => {
|
||||
// set({data: []})
|
||||
// },
|
||||
// add: (id: Id) => {
|
||||
// set((state) => ({
|
||||
// data: [...state.data, id]
|
||||
// }))
|
||||
// },
|
||||
// remove: (id: Id) => {
|
||||
// set((state) => ({
|
||||
// data: state.data.filter((item) => item != id)
|
||||
// }))
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// export const useIndexIdCache = create<StoreInstance<Id>>((set) => {
|
||||
// //createStore<Id>(set)
|
||||
// return {
|
||||
// data: [],
|
||||
// xxx: () => {
|
||||
// set(s => {
|
||||
// s.data = [...s.data, 1]
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
export const useIndexArrayCache = create<StoreInstance<Id>>((set) => ({
|
||||
cache: [],
|
||||
set: (values: Id[]) => {
|
||||
set({cache: values})
|
||||
},
|
||||
clear: () => {
|
||||
set({cache: []})
|
||||
},
|
||||
add: (id: Id) => {
|
||||
set((state) => ({
|
||||
cache: [...(state.cache || []), id]
|
||||
}))
|
||||
},
|
||||
remove: (id: Id) => {
|
||||
set((state) => ({
|
||||
cache: (state.cache || []).filter((item) => item != id)
|
||||
}))
|
||||
}
|
||||
}))
|
||||
//
|
||||
// export const useCacheStore = create<{
|
||||
// [dataKey: string]: Id[];
|
||||
// clear: (key: string) => void;
|
||||
// set: (key: string, value: Id[]) => void;
|
||||
// add: (key: string, id: Id) => void;
|
||||
// remove: (key: string, id: Id) => void
|
||||
// }>((set) => ({
|
||||
// data: {},
|
||||
// clear: (key: string) => {
|
||||
// set(s => {
|
||||
// s[key] = []
|
||||
// return s;
|
||||
// })
|
||||
// },
|
||||
// set: (key: string, value: Id[]) => {
|
||||
// set((s) => {
|
||||
// s[key] = value
|
||||
// return s;
|
||||
// })
|
||||
// },
|
||||
// add: (key: string, id: Id) => {
|
||||
// console.log(id, 'add cache', key)
|
||||
// set((s) => {
|
||||
// if (!s[key]) {
|
||||
// s[key] = [];
|
||||
// }
|
||||
// s[key].push(id)
|
||||
// return s;
|
||||
// })
|
||||
// },
|
||||
// remove: (key: string, id: Id) => {
|
||||
// set((s) => {
|
||||
// if (!s[key]) {
|
||||
// return s;
|
||||
// }
|
||||
// s[key] = s[key].filter((item) => item != id)
|
||||
// return s;
|
||||
// })
|
||||
// }
|
||||
// }))
|
||||
//
|
||||
// function useCache(key: 'index' | 'edit') {
|
||||
// //{data,set,add,remove,clear}
|
||||
// const store = useCacheStore()
|
||||
//
|
||||
// return {
|
||||
// store,
|
||||
// data: store[key],
|
||||
// getCache: () => {
|
||||
// // return cache.data[key] || []
|
||||
// return store[key] || [];
|
||||
// },
|
||||
// setCache: (value: Id[]) => {
|
||||
// store.set(key, value)
|
||||
// },
|
||||
// clearCache: () => {
|
||||
// store.clear(key)
|
||||
// },
|
||||
// addCache: (id: Id, addSame = false) => {
|
||||
// if (!addSame && store[key]?.includes(id)) return;
|
||||
// console.log(id, 'add cache')
|
||||
// store.add(key, id)
|
||||
// },
|
||||
// removeCache: (id: Id) => {
|
||||
// store.remove(key, id)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// export default useCache
|
@ -1,18 +1,20 @@
|
||||
import {App} from "antd";
|
||||
import {showToast} from "@/components/message.ts";
|
||||
import {useState} from "react";
|
||||
import {push2article} from "@/service/api/news.ts";
|
||||
import {IconArrowRight} from "@/components/icons";
|
||||
import {useNavigate} from "react-router-dom";
|
||||
import {useIndexArrayCache} from "@/hooks/useCache.ts";
|
||||
|
||||
export default function ButtonPushNews2Article(props: { ids: Id[]; }) {
|
||||
const {modal} = App.useApp();
|
||||
// const {modal} = App.useApp();
|
||||
const [loading,setLoading] = useState(false)
|
||||
const navigate = useNavigate();
|
||||
const {set} = useIndexArrayCache();
|
||||
const handlePush = () => {
|
||||
setLoading(true)
|
||||
push2article(props.ids).then(() => {
|
||||
showToast('推送成功', 'success')
|
||||
set([])
|
||||
navigate('/edit')
|
||||
}).catch(() => {
|
||||
showToast('推送失败', 'error')
|
||||
@ -26,12 +28,13 @@ export default function ButtonPushNews2Article(props: { ids: Id[]; }) {
|
||||
showToast('请选择要推入编辑的新闻', 'warning')
|
||||
return
|
||||
}
|
||||
modal.confirm({
|
||||
title: '操作提示',
|
||||
content: '是否确定推入素材编辑界面?',
|
||||
onOk: handlePush,
|
||||
centered: true
|
||||
})
|
||||
handlePush();
|
||||
// modal.confirm({
|
||||
// title: '操作提示',
|
||||
// content: '是否确定推入素材编辑界面?',
|
||||
// onOk: handlePush,
|
||||
// centered: true
|
||||
// })
|
||||
}
|
||||
return (
|
||||
<button
|
||||
|
@ -23,7 +23,6 @@ const DEFAULT_STATE = {
|
||||
}
|
||||
export default function SearchPanel({onSearch}: SearchPanelProps) {
|
||||
const tags = useArticleTags();
|
||||
const [panelVisible, {set}] = useBoolean(false)
|
||||
const [params, setParams] = useSetState<ApiArticleSearchParams>({
|
||||
pagination,
|
||||
time_flag:1
|
||||
@ -127,7 +126,7 @@ export default function SearchPanel({onSearch}: SearchPanelProps) {
|
||||
/>
|
||||
<TimeSelect
|
||||
className="w-[120px] ml-1"
|
||||
value={params.time_flag || 1}
|
||||
value={typeof(params.time_flag) != "undefined" ? params.time_flag : 1}
|
||||
onChange={handleTimeFilter}
|
||||
/>
|
||||
</div>
|
||||
|
@ -12,13 +12,16 @@ import ButtonNewsDownload from "@/pages/news/components/button-news-download.tsx
|
||||
import {clsx} from "clsx";
|
||||
import InfiniteScroller, {InfiniteScrollerRef} from "@/components/scoller/infinite-scroller.tsx";
|
||||
import ButtonToTop from "@/components/scoller/button-to-top.tsx";
|
||||
import { useIndexArrayCache} from "@/hooks/useCache.ts";
|
||||
|
||||
export default function NewsIndex() {
|
||||
|
||||
const [params, setParams] = useState<ApiArticleSearchParams>({
|
||||
pagination: {page: 1, limit: 12},time_flag:1
|
||||
})
|
||||
const [checkedId, setCheckedId] = useState<Id[]>([])
|
||||
// const [checkedId, setCheckedId] = useState<Id[]>([])
|
||||
const {cache:checkedId,set:setCheckedId} = useIndexArrayCache()
|
||||
|
||||
const [activeNews, setActiveNews] = useState<NewsInfo>()
|
||||
|
||||
const [state, setState] = useState<{
|
||||
@ -32,8 +35,7 @@ export default function NewsIndex() {
|
||||
onSuccess: (_data) => {
|
||||
if (params.pagination.page === 1) {
|
||||
setData(_data)
|
||||
setCheckedId([])
|
||||
setState({checkAll: false})
|
||||
setState({checkAll: checkedId && _data.list && checkedId.length === _data.list.length})
|
||||
} else {
|
||||
setData({
|
||||
pagination: _data.pagination,
|
||||
@ -69,7 +71,6 @@ export default function NewsIndex() {
|
||||
setCheckedId([...checkedId, id])
|
||||
}
|
||||
}
|
||||
|
||||
return (<div className={'container pb-5'}>
|
||||
<SearchPanel onSearch={setParams}/>
|
||||
{activeNews && <Modal
|
||||
|
@ -3513,3 +3513,8 @@ yocto-queue@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||
|
||||
zustand@^5.0.2:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.npmmirror.com/zustand/-/zustand-5.0.2.tgz#f7595ada55a565f1fd6464f002a91e701ee0cfca"
|
||||
integrity sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==
|
||||
|
Loading…
x
Reference in New Issue
Block a user