Spaces:
Running
Running
Update index.html
Browse files- index.html +144 -0
index.html
CHANGED
|
@@ -31,6 +31,8 @@
|
|
| 31 |
<script src="https://unpkg.com/@tanstack/react-query@4/build/umd/index.production.js"></script>
|
| 32 |
<script src="https://cdn.jsdelivr.net/npm/mitt@3.0.1/dist/mitt.umd.min.js"></script>
|
| 33 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.10.0/localforage.min.js"></script>
|
|
|
|
|
|
|
| 34 |
|
| 35 |
<style>
|
| 36 |
.bi {
|
|
@@ -233,6 +235,18 @@
|
|
| 233 |
//事件监听结束
|
| 234 |
|
| 235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
var settingStorage = localforage.createInstance({
|
| 237 |
name: "setting",
|
| 238 |
driver: localforage.LOCALSTORAGE
|
|
@@ -660,6 +674,25 @@
|
|
| 660 |
};
|
| 661 |
//axios封闭结束
|
| 662 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 663 |
//API定义开始
|
| 664 |
const getFiles = () => {
|
| 665 |
const [response, error, loading, fetchData] = useAxios();
|
|
@@ -681,6 +714,13 @@
|
|
| 681 |
};
|
| 682 |
return [response, error, loading, fetchDataByPage];
|
| 683 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 684 |
//API定义结束
|
| 685 |
|
| 686 |
const Layout = ({ children }) => {
|
|
@@ -794,6 +834,21 @@
|
|
| 794 |
/>
|
| 795 |
离线管理
|
| 796 |
</Nav.Link>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 797 |
</Nav>
|
| 798 |
</Container>
|
| 799 |
</Offcanvas.Body>
|
|
@@ -852,6 +907,94 @@
|
|
| 852 |
);
|
| 853 |
};
|
| 854 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 855 |
|
| 856 |
|
| 857 |
const LocalTasks = () => {
|
|
@@ -1190,6 +1333,7 @@
|
|
| 1190 |
<Route path="/:path?">
|
| 1191 |
<Layout>
|
| 1192 |
<Switch>
|
|
|
|
| 1193 |
<Route path="/" exact component={App} />
|
| 1194 |
<Route path="/:folder?" component={App} />
|
| 1195 |
</Switch>
|
|
|
|
| 31 |
<script src="https://unpkg.com/@tanstack/react-query@4/build/umd/index.production.js"></script>
|
| 32 |
<script src="https://cdn.jsdelivr.net/npm/mitt@3.0.1/dist/mitt.umd.min.js"></script>
|
| 33 |
<script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.10.0/localforage.min.js"></script>
|
| 34 |
+
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.umd.js"></script>
|
| 35 |
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.css" />
|
| 36 |
|
| 37 |
<style>
|
| 38 |
.bi {
|
|
|
|
| 235 |
//事件监听结束
|
| 236 |
|
| 237 |
|
| 238 |
+
Fancybox.bind("[data-fancybox]", {
|
| 239 |
+
Toolbar: {
|
| 240 |
+
display: {
|
| 241 |
+
right: ["slideshow", "download", "thumbs", "close"],
|
| 242 |
+
},
|
| 243 |
+
},
|
| 244 |
+
Images: {
|
| 245 |
+
initialSize: "fit",
|
| 246 |
+
}
|
| 247 |
+
});
|
| 248 |
+
|
| 249 |
+
|
| 250 |
var settingStorage = localforage.createInstance({
|
| 251 |
name: "setting",
|
| 252 |
driver: localforage.LOCALSTORAGE
|
|
|
|
| 674 |
};
|
| 675 |
//axios封闭结束
|
| 676 |
|
| 677 |
+
//分页hooks
|
| 678 |
+
const usePagination = () => {
|
| 679 |
+
const [pagination, setPagination] = useState({
|
| 680 |
+
pageSize: 36,
|
| 681 |
+
pageIndex: 1,
|
| 682 |
+
});
|
| 683 |
+
const { pageSize, pageIndex } = pagination;
|
| 684 |
+
|
| 685 |
+
|
| 686 |
+
return {
|
| 687 |
+
limit: pageSize,
|
| 688 |
+
onPaginationChange: setPagination,
|
| 689 |
+
pagination,
|
| 690 |
+
skip: pageSize * pageIndex,
|
| 691 |
+
};
|
| 692 |
+
}
|
| 693 |
+
//分页结束
|
| 694 |
+
|
| 695 |
+
|
| 696 |
//API定义开始
|
| 697 |
const getFiles = () => {
|
| 698 |
const [response, error, loading, fetchData] = useAxios();
|
|
|
|
| 714 |
};
|
| 715 |
return [response, error, loading, fetchDataByPage];
|
| 716 |
};
|
| 717 |
+
|
| 718 |
+
const paginateLinksGet = async (limit, skip) => {
|
| 719 |
+
const setting = STORE.getState().settings;
|
| 720 |
+
const url = setting.directus_host + `items/Video?limit=${limit}&offset=${skip}&meta[]=filter_count`;
|
| 721 |
+
const { data } = await axios.get(url, { headers: { Authorization: "Bearer " + setting.directus_token } })
|
| 722 |
+
return data
|
| 723 |
+
}
|
| 724 |
//API定义结束
|
| 725 |
|
| 726 |
const Layout = ({ children }) => {
|
|
|
|
| 834 |
/>
|
| 835 |
离线管理
|
| 836 |
</Nav.Link>
|
| 837 |
+
<Nav.Link
|
| 838 |
+
as={Link}
|
| 839 |
+
className="nav-link text-dark"
|
| 840 |
+
to="/videos"
|
| 841 |
+
onClick={
|
| 842 |
+
handleSidebarClose
|
| 843 |
+
}
|
| 844 |
+
>
|
| 845 |
+
<Icon
|
| 846 |
+
icon="movie"
|
| 847 |
+
size="6"
|
| 848 |
+
className="me-2"
|
| 849 |
+
/>
|
| 850 |
+
视频管理
|
| 851 |
+
</Nav.Link>
|
| 852 |
</Nav>
|
| 853 |
</Container>
|
| 854 |
</Offcanvas.Body>
|
|
|
|
| 907 |
);
|
| 908 |
};
|
| 909 |
|
| 910 |
+
const Videos = () => {
|
| 911 |
+
const [reload, setReload] = useState(false);
|
| 912 |
+
const { limit, onPaginationChange, skip, pagination } = usePagination();
|
| 913 |
+
const [meta, setMeta] = useState({ filter_count: 0 })
|
| 914 |
+
const [videos, setVideos] = useState([])
|
| 915 |
+
const { data: linksData, refetch: linksRefetch, isLoading: linksLoading, error: linksError } = useQuery({
|
| 916 |
+
queryKey: ['get_paginate_links', limit, skip],
|
| 917 |
+
queryFn: () => paginateLinksGet(limit, skip)
|
| 918 |
+
})
|
| 919 |
+
|
| 920 |
+
useEffect(() => {
|
| 921 |
+
//linksRefetch()
|
| 922 |
+
}, [pagination, reload]);
|
| 923 |
+
|
| 924 |
+
useEffect(() => {
|
| 925 |
+
if (linksData) {
|
| 926 |
+
setMeta(linksData.meta)
|
| 927 |
+
setVideos([...linksData.data])
|
| 928 |
+
}
|
| 929 |
+
}, [linksData]);
|
| 930 |
+
|
| 931 |
+
|
| 932 |
+
const forceUpdate = () => {
|
| 933 |
+
setReload((pre) => !pre);
|
| 934 |
+
};
|
| 935 |
+
|
| 936 |
+
return (
|
| 937 |
+
<div>
|
| 938 |
+
<div className="d-flex justify-content-between align-items-center p-2 border-bottom bg-light">
|
| 939 |
+
<label className="fs-3">视频列表</label>
|
| 940 |
+
<ButtonToolbar
|
| 941 |
+
aria-label="视频列表"
|
| 942 |
+
className="bg-teal rounded"
|
| 943 |
+
>
|
| 944 |
+
<ButtonGroup className="bg-teal">
|
| 945 |
+
<IconButton
|
| 946 |
+
onClick={() => {
|
| 947 |
+
forceUpdate();
|
| 948 |
+
}}
|
| 949 |
+
text="刷新"
|
| 950 |
+
className="bg-teal border-0"
|
| 951 |
+
icon="reload"
|
| 952 |
+
iconClassName="me-1 text-white"
|
| 953 |
+
iconSize="6"
|
| 954 |
+
/>
|
| 955 |
+
</ButtonGroup>
|
| 956 |
+
</ButtonToolbar>
|
| 957 |
+
</div>
|
| 958 |
+
{linksError && (
|
| 959 |
+
<div className="text-center text-danger">
|
| 960 |
+
发生错误,请稍后重试!!!
|
| 961 |
+
</div>
|
| 962 |
+
)}
|
| 963 |
+
{(linksLoading) && (
|
| 964 |
+
<div className="text-center text-success">
|
| 965 |
+
正在努力加载中......
|
| 966 |
+
</div>
|
| 967 |
+
)}
|
| 968 |
+
|
| 969 |
+
<Container fluid className="p-2">
|
| 970 |
+
<Row>
|
| 971 |
+
<Col xs={12} className="py-2">
|
| 972 |
+
<Paginate page={pagination.pageIndex} onClick={(i) => { onPaginationChange({ pageSize: 36, pageIndex: i }) }} itemsPerPage="36" totalCount={meta.filter_count} />
|
| 973 |
+
</Col>
|
| 974 |
+
</Row>
|
| 975 |
+
{linksData && (
|
| 976 |
+
<Row>
|
| 977 |
+
{videos.map((video, index) => (
|
| 978 |
+
<Col xs={6} md={4} className="py-2">
|
| 979 |
+
<a href={video.poster} target="_blank" data-fancybox="gallery"
|
| 980 |
+
data-download-src={video.src} data-caption={video.title}>
|
| 981 |
+
<img src={video.poster} className="img-fluid rounded" />
|
| 982 |
+
</a>
|
| 983 |
+
</Col>
|
| 984 |
+
))}
|
| 985 |
+
</Row>
|
| 986 |
+
)}
|
| 987 |
+
|
| 988 |
+
<Row>
|
| 989 |
+
<Col xs={12} className="py-2">
|
| 990 |
+
<Paginate page={pagination.pageIndex} onClick={(i) => { onPaginationChange({ pageSize: 36, pageIndex: i }) }} itemsPerPage="36" totalCount={meta.filter_count} />
|
| 991 |
+
</Col>
|
| 992 |
+
</Row>
|
| 993 |
+
</Container>
|
| 994 |
+
</div>
|
| 995 |
+
);
|
| 996 |
+
};
|
| 997 |
+
|
| 998 |
|
| 999 |
|
| 1000 |
const LocalTasks = () => {
|
|
|
|
| 1333 |
<Route path="/:path?">
|
| 1334 |
<Layout>
|
| 1335 |
<Switch>
|
| 1336 |
+
<Route path="/videos" exact component={Videos} />
|
| 1337 |
<Route path="/" exact component={App} />
|
| 1338 |
<Route path="/:folder?" component={App} />
|
| 1339 |
</Switch>
|