shenwu 5 miesięcy temu
rodzic
commit
e459ff7103

+ 6 - 4
src/components/TopNavBar/index.tsx

@@ -8,6 +8,7 @@ import { observer, inject } from 'mobx-react'
 import { BookStore } from '@src/store/book';
 import indexStore from '@src/store/index';
 import { share } from '@src/utils';
+import { ClassifyStore } from '@src/store/classIfy';
 /**顶部自定义导航
  * 
  */
@@ -40,7 +41,8 @@ function CustomNavbar(WrappedComponent, props: Props) {
                 indexStore: {
                     navBarTop: number,
                 },
-                bookStore: BookStore
+                bookStore: BookStore,
+                classifyStore:ClassifyStore
             },
             extraProp: any,
             passThroughProps: any
@@ -67,7 +69,7 @@ function CustomNavbar(WrappedComponent, props: Props) {
 
         selectHandle = (value: string | number) => {
             console.log(value)
-            this.props.store.bookStore.setWorkDirection(value as 0 | 1)
+            this.props.store.classifyStore.setData({workDirection:value as 0 | 1})
         }
         //回上级
         gotoBack = () => {
@@ -105,8 +107,8 @@ function CustomNavbar(WrappedComponent, props: Props) {
         render() {
             const { extraProp, ...passThroughProps } = this.props
             let { navBar, capsuleWidth } = this.state
-            const { indexStore: { navBarTop }, bookStore } = this.props.store
-            let stateIndex = bookStore.workDirection
+            const { indexStore: { navBarTop }, bookStore,classifyStore } = this.props.store
+            let stateIndex = classifyStore.workDirection
             return <View style={{ height: '100vh' }}>
                 <View className='navbarWrap' style={{ paddingTop: navBarTop + 5, height: navBar, backgroundColor: isReloadBook ? bookStore.bookConfig?.off_on ? "#FFF" : "#363738" : "#FFF" }}>
                     <View className='content'>

+ 0 - 2
src/components/TopNavBar/index1.tsx

@@ -5,7 +5,6 @@ import Taro from '@tarojs/taro'
 import { Component } from 'react';
 import searchPng from '../../icon/search.png'
 import { observer, inject } from 'mobx-react'
-import { BookStore } from '@src/store/book';
 import indexStore from '@src/store/index';
 /**顶部自定义导航
  * 
@@ -75,7 +74,6 @@ class CustomNavbar extends Component {
     }
 
     selectHandle = (value: string | number) => {
-        console.log(value)
         this.props.store.bookStore.setWorkDirection(value as 0 | 1)
     }
     //回上级

+ 33 - 19
src/pages/classify/index.tsx

@@ -21,7 +21,7 @@ interface Props {
 }
 
 const Index = forwardRef((props: Props) => {
-    const { bookStore, classifyStore, indexStore } = props.store
+    const { classifyStore, indexStore } = props.store
     const { getBookPageList } = useApi()
     const [pageShow, setPageShow] = useState(false)//防止小程序切换页面组件不会被真实卸载,阻止不必要的操作
     const [open, setOpen] = useState(false)
@@ -30,23 +30,28 @@ const Index = forwardRef((props: Props) => {
     // 获取分类列表
     useEffect(() => {
         if (pageShow) {
-            let { workDirection } = bookStore
-            getBookCategoryList(workDirection)
+            let { workDirection } = classifyStore
+            getBookCategoryList(workDirection).then((res: any) => {
+                if (res?.data?.code === 200) {
+                    classifyStore.setData({ classifyData: res?.data?.data })
+                }
+            })
         }
-    }, [bookStore.workDirection, pageShow]); // Dependency array, runs effect only once on mount and unmount
+    }, [classifyStore.workDirection, pageShow]); // Dependency array, runs effect only once on mount and unmount
     //获取书籍列表
     useEffect(() => {
         if (pageShow) {
-            let { workDirection } = bookStore
+            let { workDirection } = classifyStore
             let { categoryId } = classifyStore
-            showEmpty && setShowEmpty(false)
-            categoryId.id != 0 && classifyStore.categoryId && getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize: 10 }).then((res: any) => {
+            categoryId.id != 0 && classifyStore.categoryId && getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize: 10, type: 'class' }).then((res: any) => {
                 if (res?.data?.data?.total === 0) {
-                    !showEmpty && setShowEmpty(true)
+                    setShowEmpty(true)
+                }else{
+                    setShowEmpty(false)
                 }
             })
         }
-    }, [bookStore.workDirection, classifyStore.categoryId, pageShow])
+    }, [classifyStore.workDirection, classifyStore.categoryId, pageShow])
     // 使用 useDidShow 代替 onShow
     useDidShow(() => {
         setPageShow(true)
@@ -54,20 +59,25 @@ const Index = forwardRef((props: Props) => {
     // 使用 useDidHide 如果需要在页面隐藏时做一些处理
     useDidHide(() => {
         setPageShow(false)
-        bookStore.setData({ bookList: [] })
     });
     //上拉刷新
     const refresh = async () => {
-        let { workDirection } = bookStore
+        let { workDirection } = classifyStore
         let { categoryId } = classifyStore
-        getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize: 10 })
+        getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize: 10, type: 'class' }).then((res: any) => {
+            if (res?.data?.data?.total === 0) {
+                setShowEmpty(true)
+            }else{
+                setShowEmpty(false)
+            }
+        })
     }
     //下拉加载
     const load = () => {
         return new Promise((resolve, reject) => {
-            let { size, total, records } = bookStore.bookList
+            let { size, total, records } = classifyStore.bookList
             let pageSize = size + 10
-            let { workDirection } = bookStore
+            let { workDirection } = classifyStore
             let { categoryId } = classifyStore
             if (records?.length >= total) {
                 Taro.showToast({
@@ -78,8 +88,12 @@ const Index = forwardRef((props: Props) => {
                 reject()
                 return
             } else {
-                getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize }).then(res => {
-                    console.log("Res", res)
+                getList({ workDirection, categoryId: categoryId.id, pageNum: 1, pageSize, type: 'class' }).then((res:any) => {
+                    if (res?.data?.data?.total === 0) {
+                        setShowEmpty(true)
+                    }else{
+                        setShowEmpty(false)
+                    }
                     resolve(true)
                 })
             }
@@ -109,8 +123,8 @@ const Index = forwardRef((props: Props) => {
     })
     return (
         <View className='index'>
-            {bookStore?.classifyData?.length > 0 && <View style={{ background: "#fff" }} className='classList' onClick={() => { setIsSetOpen(false) }}>
-                <BookTypeTabs open={open} onCallback={setOpen} typeValue={bookStore?.classifyData} typeTabIndex={classifyStore.categoryId} workDirection={bookStore.workDirection} ></BookTypeTabs>
+            {classifyStore?.classifyData?.length > 0 && <View style={{ background: "#fff" }} className='classList' onClick={() => { setIsSetOpen(false) }}>
+                <BookTypeTabs open={open} onCallback={setOpen} typeValue={classifyStore?.classifyData} typeTabIndex={classifyStore.categoryId} workDirection={classifyStore.workDirection} ></BookTypeTabs>
             </View>}
             <View onTouchStart={() => { setIsSetOpen(true) }}>
                 <ScrollViewHoc
@@ -126,7 +140,7 @@ const Index = forwardRef((props: Props) => {
                     }} load={load} refresh={refresh} reloadState={open} filterClassName='.classList' navHeight={indexStore.navHeight}>
                     <View className='w  row for_top1 pd_btm'>
                         {
-                            bookStore?.bookList?.records?.length > 0 && bookStore?.bookList?.records?.map((item, index) => {
+                            classifyStore?.bookList?.records?.length > 0 && classifyStore?.bookList?.records?.map((item, index) => {
                                 return <>
                                     <View key={item.bookId} ><BookboxRowBig {...item} /></View>
                                 </>

+ 7 - 4
src/pages/index/index.tsx

@@ -26,6 +26,7 @@ const Index: React.FC<Props> = ({ store }) => {
     const { bookStore, indexStore } = store
     const { indexComponents, getBookPageList } = useApi()
     const [pageShow, setPageShow] = useState(false)//防止小程序切换页面组件不会被真实卸载,阻止不必要的操作
+    const [oldworkDirection, setoldworkDirection] = useState<any>(null)
     // 首页配置信息
     const indexConfig = useMemo(() => {
         let obj = {}
@@ -52,12 +53,10 @@ const Index: React.FC<Props> = ({ store }) => {
     // 使用 useDidHide 如果需要在页面隐藏时做一些处理
     useDidHide(() => {
         setPageShow(false)
-        bookStore.setData({ bookList: [] })
         // log("Page is hidden or sent to background");
     });
     // 处理首页展示的组件的请求
     const indexCompontent = () => {
-        console.log("indexConfig", indexConfig)
         // 小程序的组件配置
         Object.keys(indexConfig)?.forEach(key => {
             switch (key) {
@@ -106,14 +105,17 @@ const Index: React.FC<Props> = ({ store }) => {
         indexComponents?.hot_category(bookStore.workDirection).then((res: any) => {
             let data = res?.data?.data
             if (data?.bookCategoryList?.length > 0) {
-                getHotBooks(data?.bookCategoryList?.[0].id)
+                if (!bookStore?.bookList?.total || oldworkDirection !== bookStore?.workDirection) {
+                    getHotBooks(data?.bookCategoryList?.[0].id)
+                    setoldworkDirection(bookStore.workDirection)
+                }
             }
         })
     }
     // 热门分类书籍
     const getHotBooks = (categoryId) => {
         if (categoryId) {
-            getBookPageList({ pageNum: 1, pageSize: 8, workDirection: bookStore.workDirection, categoryId })
+            getBookPageList({ pageNum: 1, pageSize: 8, workDirection: bookStore.workDirection, categoryId, type: 'index' })
         }
     }
     // 今日热书
@@ -184,6 +186,7 @@ const Index: React.FC<Props> = ({ store }) => {
         }
         return {}
     })
+    console.log("bookStore?.bookList", bookStore?.bookList?.total)
     return <ScrollViewHoc load={load} filterClassName='.searchTs' navHeight={indexStore.navHeight}>
         <TopNavBar1 {...{
             tab: true,

+ 12 - 2
src/server/book/short/index.tsx

@@ -1,6 +1,7 @@
 
 import Taro from "@tarojs/taro";
 import bookStore from "@src/store/book";
+import classifyStore from "@src/store/classIfy";
 import { setReadLog } from "@src/utils/loginSto";
 
 interface BookParams {
@@ -8,19 +9,28 @@ interface BookParams {
     categoryId: number,//分类ID
     pageNum: number,//分页
     pageSize: number//页数
+    type: 'index' | 'class',//区分存放至哪个store
 }
 /**
  * 获取短篇小说
  * */
 export function getShortBookInfoAppListOfPage(data: BookParams) {
+    let { type, ...newData } = data
     return new Promise(async (resolve, reject) => {
         try {
             Taro.request({
                 url: '/app/shortBookInfo/appListOfPage',
                 method: 'GET',
-                data,
+                data: data,
                 success: (res) => {
-                    bookStore.setData({ bookList: res.data.data })
+                    switch (type) {
+                        case 'index':
+                            bookStore.setData({ bookList: res.data.data })
+                            break;
+                        case 'class':
+                            classifyStore.setData({ bookList: res.data.data })
+                            break;
+                    }
                     resolve(res)
                 },
                 fail: (err) => {

+ 2 - 6
src/server/classify/index.tsx

@@ -1,5 +1,4 @@
 import Taro from "@tarojs/taro";
-import bookStore from "@src/store/book";
 import classifyStore from "@src/store/classIfy";
 /**
  * 获取分类列表
@@ -13,11 +12,8 @@ export function getBookCategoryList(workDirection) {
                 method: 'GET',
                 data: { workDirection },
                 success: (res) => {
-                    if(JSON.stringify(bookStore.classifyData) !== JSON.stringify(res.data.data)){
-                        bookStore.setClassifyData(res.data.data)//存放本次拿到的数据
-                        if(res.data.data.length > 0 ){
-                            classifyStore.setData({categoryId:res.data.data[0]})//存放数据的第一个值为默认首次选中
-                        }
+                    if(res.data.data.length > 0 ){
+                        classifyStore.setData({categoryId:res.data.data[0]})//存放数据的第一个值为默认首次选中
                     }
                     resolve(res)
                 },

+ 6 - 2
src/store/book.ts

@@ -76,7 +76,9 @@ const Book: BookStore = observable({
     },
     setOpenBookData(openBookData: OpenBookData) {
         if (openBookData) {
-            this.openBookData = openBookData
+            if(JSON.stringify(this.openBookData) !== JSON.stringify(openBookData)){
+                this.openBookData = openBookData
+            }
         }
     },
     setWorkDirection(workDirection: 0 | 1) {
@@ -84,7 +86,9 @@ const Book: BookStore = observable({
     },
     setClassifyData(classifyData: ClassifyData[]) {
         if (classifyData) {
-            this.classifyData = classifyData
+            if(JSON.stringify(this.classifyData) !== JSON.stringify(classifyData)){
+                this.classifyData = classifyData
+            }
         }
     }
 })

+ 17 - 4
src/store/classIfy.ts

@@ -1,7 +1,17 @@
 import { observable } from 'mobx'
+interface ClassifyData {
+    id: number,
+    name: string,//分类名称
+    workDirection: number,//频道
+}
+
 export interface ClassifyStore {
     /**分类id*/
     categoryId: { id: number, name: string },//分类ID
+    workDirection: 0 | 1,
+    bookList: any,
+    /**分类列表*/
+    classifyData: ClassifyData[],
     setData: (data: { [key: string]: any }) => void
 }
 /**
@@ -9,13 +19,16 @@ export interface ClassifyStore {
  * */
 const classifyStore: ClassifyStore = observable({
     categoryId: { id: 0, name: "" },
+    workDirection: 0,
+    bookList: [],
+    classifyData: [],
     setData(data: { [key: string]: any }) {
         if (data) {
             Object.keys(data).forEach(key => {
-               //数据不同才存放
-               if(JSON.stringify(this[key]) !== JSON.stringify(data[key])){
-                this[key] = data[key]
-            }
+                //数据不同才存放
+                if (JSON.stringify(this[key]) !== JSON.stringify(data[key])) {
+                    this[key] = data[key]
+                }
             })
         }
     },