@@ -2,7 +2,7 @@ import { useEffect, useState, useRef } from 'react';
2
2
import styles from '@/styles/article.module.scss' ;
3
3
import NavHeader from "@/components/navHeader" ;
4
4
import APP_CONF from "@/data/config" ;
5
- import { Dropdown , Space , Menu , Spin , BackTop } from "antd" ;
5
+ import { Dropdown , Space , Menu , Spin , BackTop , Button } from "antd" ;
6
6
import { OpenOriginUrl , seo } from "@/data/doc" ;
7
7
import { CaretDownOutlined , VerticalAlignTopOutlined } from '@ant-design/icons' ;
8
8
import Head from "next/head" ;
@@ -18,6 +18,8 @@ const Article = (data) => {
18
18
const [ tag_type , setTagType ] = useState ( '' ) ;
19
19
const [ articleList , setArticleList ] = useState ( [ ] ) ;
20
20
const [ spinning , setSpinning ] = useState ( false ) ;
21
+ const [ isAdmin , setIsAdmin ] = useState ( false ) ;
22
+ const [ updating , setUpdating ] = useState ( false ) ;
21
23
const [ clearArticle , setClearArticle ] = useState ( false ) ;
22
24
const [ hasMore , setHasMore ] = useState ( false ) ;
23
25
const firstUpdate = useRef ( true ) ;
@@ -34,6 +36,15 @@ const Article = (data) => {
34
36
35
37
useEffect ( ( ) => {
36
38
setMobile ( isMobile ( window ) ) ;
39
+ setIsAdmin ( window . localStorage . getItem ( "is-admin" ) === 'true' ) ;
40
+ getTagList ( )
41
+ } , [ ] )
42
+
43
+ useEffect ( ( ) => {
44
+ getArticleList ( ) ;
45
+ } , [ tag_id , sort_type , page ] )
46
+
47
+ const getTagList = ( ) => {
37
48
fetch ( `${ fetchUrl } /api/getTagList` )
38
49
. then ( res => res . json ( ) )
39
50
. then ( res => {
@@ -47,11 +58,7 @@ const Article = (data) => {
47
58
setTagType ( tagList ?. [ 0 ] . key ) ;
48
59
setTagList ( tagList || [ ] ) ;
49
60
} )
50
- } , [ ] )
51
-
52
- useEffect ( ( ) => {
53
- getArticleList ( ) ;
54
- } , [ tag_id , sort_type , page ] )
61
+ }
55
62
56
63
// 处理文章数据
57
64
const handleArticleList = ( obj ) => {
@@ -64,6 +71,7 @@ const Article = (data) => {
64
71
setClearArticle ( false )
65
72
}
66
73
74
+ // 获取文章列表
67
75
const getArticleList = ( ) => {
68
76
if ( firstUpdate . current ) {
69
77
handleArticleList ( data )
@@ -87,6 +95,16 @@ const Article = (data) => {
87
95
} )
88
96
}
89
97
98
+ // 更新数据库中的文章数据
99
+ const updateArticleList = ( ) => {
100
+ setUpdating ( true )
101
+ fetch ( `${ fetchUrl } /api/updateArticleList` )
102
+ . finally ( ( ) => {
103
+ setUpdating ( false )
104
+ window . location . reload ( )
105
+ } )
106
+ }
107
+
90
108
const handleSelectSortType = ( sort_type ) => {
91
109
setPage ( '1' )
92
110
setSortType ( sort_type )
@@ -142,6 +160,14 @@ const Article = (data) => {
142
160
< div className = { styles . leftBox } >
143
161
< div className = { styles . sortBox } >
144
162
< div className = { styles . title } > 文章列表</ div >
163
+ < div className = { styles . updateTime } >
164
+ { isAdmin ? (
165
+ < Button loading = { updating } onClick = { updateArticleList } >
166
+ 更新文章数据库
167
+ </ Button >
168
+ ) : null }
169
+ < span > 文章数据更新时间:{ articleList [ 0 ] ?. createTime } </ span >
170
+ </ div >
145
171
< div className = { styles . sortElement } >
146
172
< Dropdown
147
173
overlay = {
@@ -194,7 +220,17 @@ const Article = (data) => {
194
220
< div className = { styles . row } >
195
221
< div > { article . create_date } { mobile ? '' : article . create_time } </ div >
196
222
< a className = { styles . username } href = { 'https://juejin.cn/user/2137106333053912' } target = '_blank' rel = "nofollow noopener noreferrer" > { article . user_name } </ a >
197
- < div className = { styles . viewCount } > < img src = { `${ APP_CONF . IMAGE_DOMAIN } /UEDLanding/Article/eye.svg` } alt = "" /> { article . view_count } </ div >
223
+
224
+ < div className = { styles . countBox } >
225
+ < div >
226
+ < img src = { `${ APP_CONF . IMAGE_DOMAIN } /UEDLanding/Article/eye.svg` } alt = "" />
227
+ { article . view_count }
228
+ </ div >
229
+ < div >
230
+ < img src = { `${ APP_CONF . IMAGE_DOMAIN } /UEDLanding/Article/liked.svg` } alt = "" />
231
+ { article . digg_count }
232
+ </ div >
233
+ </ div >
198
234
</ div >
199
235
</ div >
200
236
)
0 commit comments