浏览代码

Merge branch 'dev1.0' of http://git.ycjcjy.com/civilized_city/miniapp into dev1.0

Yansen 2 年前
父节点
当前提交
db599f15e4

+ 2
- 2
config/dev.js 查看文件

@@ -3,8 +3,8 @@ module.exports = {
3 3
     NODE_ENV: '"development"',
4 4
   },
5 5
   defineConstants: {
6
-    // HOST: '"http://127.0.0.1:9087"',
7
-    HOST: '"http://192.168.89.147:9087"',
6
+    HOST: '"http://127.0.0.1:9087"',
7
+    // HOST: '"http://192.168.89.147:9087"',
8 8
     AD_IMAGE: '"https://h5.njyunzhi.com/images/citizen_banner.png"',
9 9
     DEFAULT_POS: '"116.3476917447715,31.409912844296578"', // 霍山县人民政府 gcj02
10 10
     VERSION: '"1.1.13-20230325"',

+ 54
- 29
src/components/PowerList/index.jsx 查看文件

@@ -3,19 +3,19 @@ import Taro from "@tarojs/taro";
3 3
 import { View } from "@tarojs/components";
4 4
 import { PowerScrollView } from "@antmjs/vantui";
5 5
 import useShow from "@/layouts/hooks/useShow";
6
+import useHide from "@/layouts/hooks/useHide";
7
+import { throttle } from "@/utils/tools";
6 8
 
7 9
 export default React.forwardRef((props, ref) => {
8
-  const { request, params, renderItem, onLoadingChange, onDataChange } = props;
10
+  const { sid, request, params, renderItem, onLoadingChange, onDataChange } = props;
9 11
 
10 12
   const pageSize = 5;
11
-  const pageNumRef = React.useRef(0);
13
+  const pageShowRef = React.useRef(false);
12 14
   const [loading, setLoading] = React.useState(false);
13 15
   const [list, setList] = React.useState([]);
14 16
   const [finished, setFinished] = React.useState(true);
15 17
   const listRef = React.useRef([]);
16
-  const paramsRef = React.useRef();
17 18
   listRef.current = list;
18
-  paramsRef.current = params || {};
19 19
 
20 20
   const changeLoading = (val) => {
21 21
     setLoading(val);
@@ -24,17 +24,19 @@ export default React.forwardRef((props, ref) => {
24 24
     }
25 25
   };
26 26
 
27
-  const queryData = React.useCallback(
27
+  const queryData = React.useCallback(throttle(
28 28
     (options = {}) => {
29 29
       return new Promise((resolve, reject) => {
30 30
         changeLoading(true);
31
-        request({
31
+
32
+        const queryParams = {
32 33
           pageSize,
33
-          ...paramsRef.current,
34 34
           ...options,
35
-        })
35
+        }
36
+
37
+        request(queryParams)
36 38
           .then((res) => {
37
-            const { records, current, pages } = res;
39
+            const { records, current, total } = res;
38 40
 
39 41
             let dataset =
40 42
               current == 1
@@ -45,51 +47,74 @@ export default React.forwardRef((props, ref) => {
45 47
             }
46 48
             setList(dataset);
47 49
 
48
-            setFinished(current >= pages);
50
+            setFinished(dataset.length >= total);
49 51
             changeLoading(false);
50 52
             resolve();
53
+
54
+            // 写入缓存
55
+            Taro.setStorage({
56
+              key: `list-${sid}`,
57
+              data: JSON.stringify({
58
+                params: queryParams,
59
+              }),
60
+            })
61
+
51 62
           })
52 63
           .catch((err) => {
53 64
             changeLoading(false);
54 65
             reject(err);
55 66
           });
56 67
       });
57
-    },
68
+    }),
58 69
     []
59 70
   );
60 71
 
61
-  const refresh = React.useCallback(() => {
62
-    console.log(pageNumRef);
63
-    pageNumRef.current = 1;
64
-
65
-    queryData({ pageNum: pageNumRef.current });
66
-    console.log("refresh" + pageNumRef.current);
67
-  }, [queryData]);
72
+  const refresh = React.useCallback((options = {}) => {
73
+    queryData({ ...options, pageNum: 1 });
74
+  }, []);
68 75
 
69 76
   const onScrollToLower = React.useCallback(
70
-    (event = 0, isRefresh = false) => {
71
-      console.log("onScrollToLower" + pageNumRef.current);
72
-      pageNumRef.current += 1;
73
-      queryData({ pageNum: pageNumRef.current });
77
+    (page) => {
78
+      const currentPage = Math.ceil(page / pageSize);
79
+      queryData({ pageNum: currentPage + 1, ...(params || {}) });
74 80
     },
75
-    []
81
+    [params]
76 82
   );
77 83
 
78 84
   useShow(() => {
79
-    refresh();
85
+    pageShowRef.current = true;
86
+
87
+    const paramStr = Taro.getStorageSync(`list-${sid}`);
88
+    const finalParams = paramStr ? JSON.parse(paramStr).params : { ...params || {} };
89
+
90
+    // 如果已经加载多页数据
91
+    // 那么需要重新加载
92
+    if (finalParams.pageNum && finalParams.pageNum > 1) {
93
+      finalParams.pageSize = finalParams.pageNum * finalParams.pageSize;
94
+      finalParams.pageNum = 1;
95
+    }
96
+
97
+    refresh(finalParams);
80 98
   });
81 99
 
100
+  useHide(() => {
101
+    pageShowRef.current = false;
102
+    Taro.removeStorageSync(`list-${sid}`);
103
+  });
82 104
   
105
+  // 页面隐藏之后, 还会执行一次 useEffect
106
+  // 不知道是否是 Taro 的 bug
83 107
   React.useEffect(() => {
84
-    refresh();
85
-  }, [refresh, params]);
108
+    if (pageShowRef.current) {
109
+      refresh(params);
110
+    }
111
+  }, [params]);
86 112
 
87 113
   React.useImperativeHandle(ref, () => ({
88
-    refresh,
114
+    refresh: () => refresh(params),
89 115
     updateData: (dt) => setList(dt),
90
-  }));
116
+  }), [params]);
91 117
  
92
-
93 118
   return (
94 119
     <PowerScrollView
95 120
       scrollY

+ 11
- 20
src/layouts/hooks/useHide.js 查看文件

@@ -1,34 +1,25 @@
1 1
 import React from "react";
2
-import evtBus from '@/utils/event_bus';
2
+import Taro from '@tarojs/taro';
3 3
 
4 4
 /**
5 5
  * 页面显示, 隐藏 hook, 可以在 component 中使用
6 6
  */
7
-export default (fn, deps) => {
7
+export default (fn) => {
8 8
   const fnRef = React.useRef();
9 9
   fnRef.current = fn;
10 10
 
11
-  const [evt, func] = React.useMemo(() => {
12
-    const evt1 = evtBus.current();
13
-    const func1 = () => fnRef.current();
11
+  const evt = React.useMemo(() => {
12
+    const _evt = Taro.getCurrentInstance().router.onHide;
13
+    Taro.eventCenter.on(_evt, fnRef.current);
14 14
 
15
-    evt1.addEventListener('hide', func1);
16
-    evt1.addEventListener('unload', func1);
17
-
18
-    return [
19
-      evt1,
20
-      func1,
21
-    ];
15
+    return _evt;
22 16
   }, []);
23 17
 
24 18
   React.useEffect(() => {
25
-    evt.addEventListener('hide', func);
26
-    evt.addEventListener('unload', func);
27
-
28 19
     return () => {
29
-      evt.removeEventListener('hide', func);
30
-      evt.removeEventListener('unload', func);
31
-    };
32
-    // eslint-disable-next-line react-hooks/exhaustive-deps
33
-  }, deps);
20
+      fnRef.current(); // 卸载的时候也执行一次
21
+      Taro.eventCenter.off(evt, fnRef.current);
22
+    }
23
+  }, []);
34 24
 }
25
+

+ 9
- 17
src/layouts/hooks/useShow.js 查看文件

@@ -1,31 +1,23 @@
1 1
 import React from "react";
2
-import evtBus from '@/utils/event_bus';
2
+import Taro from '@tarojs/taro';
3 3
 
4 4
 /**
5 5
  * 页面显示, 隐藏 hook, 可以在 component 中使用
6 6
  */
7
-export default (fn, deps) => {
7
+export default (fn) => {
8 8
   const fnRef = React.useRef();
9 9
   fnRef.current = fn;
10 10
 
11
-  const [evt, func] = React.useMemo(() => {
12
-    const evt1 = evtBus.current();
13
-    const func1 = () => console.log('--show-->') || fnRef.current();
11
+  const evt = React.useMemo(() => {
12
+    const _evt = Taro.getCurrentInstance().router.onShow;
13
+    Taro.eventCenter.on(_evt, fnRef.current);
14 14
 
15
-    evt1.addEventListener('show', func1);
16
-
17
-    return [
18
-      evt1,
19
-      func1,
20
-    ];
15
+    return _evt;
21 16
   }, []);
22 17
 
23 18
   React.useEffect(() => {
24
-    evt.addEventListener('show', func);
25
-
26 19
     return () => {
27
-      evt.removeEventListener('show', func);
28
-    };
29
-    // eslint-disable-next-line react-hooks/exhaustive-deps
30
-  }, deps);
20
+      Taro.eventCenter.off(evt, fnRef.current);
21
+    }
22
+  }, []);
31 23
 }

+ 0
- 25
src/layouts/index.jsx 查看文件

@@ -5,7 +5,6 @@ import { useModel } from '@/store';
5 5
 import { Loading, Notify, Dialog } from '@antmjs/vantui';
6 6
 import NavLoading from '@/components/NavLoading';
7 7
 import Auth from '@/components/Auth';
8
-import evtBus from '@/utils/event_bus';
9 8
 import TabBar from './TabBar';
10 9
 import laySty from './layout.module.less';
11 10
 
@@ -15,10 +14,6 @@ export default (props) => {
15 14
   const { person, user, duty } = useModel('user');
16 15
   const containerClass = `${laySty['page-conatiner']} ${tabBar ? laySty['with-tabbar'] : ''} ${className}`;
17 16
 
18
-  const evt = React.useMemo(() => {
19
-    return evtBus.current();
20
-  }, []);
21
-
22 17
   React.useEffect(() => {
23 18
     if (person && !user) {
24 19
       const currentPage = Taro.getCurrentPages().slice().pop();
@@ -36,26 +31,6 @@ export default (props) => {
36 31
     };
37 32
   });
38 33
 
39
-  Taro.useDidShow(() => {
40
-    // useDidShow 比 React Hook 要早
41
-    // 所以使用 nextTick
42
-    Taro.nextTick(() => {
43
-      evt.dispatchEvent('show');
44
-    });
45
-  });
46
-
47
-  Taro.useDidHide(() => {
48
-    Taro.nextTick(() => {
49
-      evt.dispatchEvent('hide');
50
-    });
51
-  })
52
-
53
-  Taro.useUnload(() => {
54
-    Taro.nextTick(() => {
55
-      evt.dispatchEvent('unload');
56
-    });
57
-  })
58
-
59 34
   return (
60 35
       <View className={laySty['page-wrapper']}>
61 36
         <Notify id="vanNotify" />

+ 5
- 0
src/pages/apply/list/index.jsx 查看文件

@@ -14,6 +14,9 @@ const tabStyle = {
14 14
   overflow: "hidden",
15 15
 };
16 16
 
17
+const sid1 = Math.random().toString(36).substring(2, 8);
18
+const sid2 = Math.random().toString(36).substring(2, 8);
19
+
17 20
 export default (props) => {
18 21
   const router = Taro.useRouter();
19 22
   const { title, applyType = "" } = router.params;
@@ -66,6 +69,7 @@ export default (props) => {
66 69
       <Tabs sticky>
67 70
         <Tab title="督查员" style={tabStyle}>
68 71
           <PowerList
72
+            sid={sid1}
69 73
             request={getTaIssueApply}
70 74
             params={{ applyType, sourceType: "inspector", duty, issueId }}
71 75
             renderItem={(item) => (
@@ -80,6 +84,7 @@ export default (props) => {
80 84
         </Tab>
81 85
         <Tab title="市民" style={tabStyle}>
82 86
           <PowerList
87
+            sid={sid2}
83 88
             request={getTaIssueApply}
84 89
             params={{ applyType, sourceType: "feedback", duty }}
85 90
             renderItem={(item) => (

+ 3
- 0
src/pages/check/list/index.jsx 查看文件

@@ -9,6 +9,8 @@ import { getTaCheck } from '@/services/tacheck';
9 9
 import Card from './components/Card';
10 10
 
11 11
 const queryParams = {isValid: true};
12
+const sid1 = Math.random().toString(36).substring(2, 8);
13
+
12 14
 export default (props) => {
13 15
 
14 16
   const onClick = (typ, item) => {
@@ -26,6 +28,7 @@ export default (props) => {
26 28
   return (
27 29
     <Page roles={[ROLE_INSPECTOR]}>
28 30
       <PowerList
31
+        sid={sid1}
29 32
         request={getTaCheck}
30 33
         params={queryParams}
31 34
         renderItem={item => (

+ 3
- 0
src/pages/check/loc/list/index.jsx 查看文件

@@ -7,6 +7,8 @@ import PowerList from '@/components/PowerList';
7 7
 import { getTaCheckItem } from '@/services/tacheckitem';
8 8
 import { ROLE_INSPECTOR } from '@/utils/user';
9 9
 
10
+const sid1 = Math.random().toString(36).substring(2, 8);
11
+
10 12
 export default (props) => {
11 13
 
12 14
   const router = Taro.useRouter();
@@ -38,6 +40,7 @@ export default (props) => {
38 40
   return (
39 41
     <Page loading={loading} roles={[ROLE_INSPECTOR]}>
40 42
       <PowerList
43
+        sid={sid1}
41 44
         request={getTaCheckItem}
42 45
         params={params}
43 46
         renderItem={item => {

+ 3
- 0
src/pages/checkStand/list/index.jsx 查看文件

@@ -7,6 +7,8 @@ import PowerList from "@/components/PowerList";
7 7
 import { getTaCheckStand } from "@/services/tacheckstand";
8 8
 import { ROLE_INSPECTOR } from "@/utils/user";
9 9
 
10
+const sid1 = Math.random().toString(36).substring(2, 8);
11
+
10 12
 export default (props) => {
11 13
   const router = Taro.useRouter();
12 14
   const { checkId } = router.params;
@@ -40,6 +42,7 @@ export default (props) => {
40 42
   return (
41 43
     <Page tabBar="check" loading={loading}>
42 44
       <PowerList
45
+        sid={sid1}
43 46
         request={getTaCheckStand}
44 47
         params={params}
45 48
         renderItem={(item) => {

+ 3
- 0
src/pages/feedback/issuelist/index.jsx 查看文件

@@ -7,6 +7,8 @@ import Card from '@/components/IssueCard';
7 7
 import { getTaFeedback } from '@/services/tafeedback';
8 8
 import { getIssueStatus } from '@/utils/biz';
9 9
 
10
+const sid1 = Math.random().toString(36).substring(2, 8);
11
+
10 12
 export default (props) => {
11 13
 
12 14
   const router = Taro.useRouter();
@@ -29,6 +31,7 @@ export default (props) => {
29 31
   return (
30 32
     <Page>
31 33
       <PowerList
34
+        sid={sid1}
32 35
         request={getTaFeedback}
33 36
         params={{bizStatus, isMine: true}}
34 37
         renderItem={(item) => (

+ 5
- 3
src/pages/home/components/StatCard.jsx 查看文件

@@ -9,6 +9,8 @@ export default React.forwardRef((props, ref) => {
9 9
   const { duty } = props;
10 10
 
11 11
   const [list, setList] = React.useState([]);
12
+  const dutyRef = React.useRef();
13
+  dutyRef.current = duty;
12 14
 
13 15
   const classNames = React.useMemo(() => {
14 16
     return [
@@ -32,10 +34,10 @@ export default React.forwardRef((props, ref) => {
32 34
   }), [duty]);
33 35
 
34 36
   useShow(() => {
35
-    if (duty) {
36
-      getIndexData(duty).then(setList);
37
+    if (dutyRef.current) {
38
+      getIndexData(dutyRef.current).then(setList);
37 39
     }
38
-  }, [duty]);
40
+  });
39 41
 
40 42
   return (
41 43
     <View className={classNames}>

+ 13
- 0
src/pages/issue/list/index.jsx 查看文件

@@ -15,6 +15,13 @@ const tabStyle = {
15 15
   overflow: 'hidden',
16 16
 }
17 17
 
18
+const sid1 = Math.random().toString(36).substring(2, 8);
19
+const sid2 = Math.random().toString(36).substring(2, 8);
20
+const sid3 = Math.random().toString(36).substring(2, 8);
21
+const sid4 = Math.random().toString(36).substring(2, 8);
22
+const sid5 = Math.random().toString(36).substring(2, 8);
23
+const sid6 = Math.random().toString(36).substring(2, 8);
24
+
18 25
 // 只有督查员能看到当前页面
19 26
 export default (props) => {
20 27
   // const { user } = useModel('user');
@@ -41,6 +48,7 @@ export default (props) => {
41 48
         <Tab title="全部" style={tabStyle}>
42 49
           {active == 0 && (
43 50
             <PowerList
51
+              sid={sid1}
44 52
               request={getTaIssue}
45 53
               params={{ mine }}
46 54
               renderItem={(item) => (
@@ -52,6 +60,7 @@ export default (props) => {
52 60
         <Tab title="未交办" style={tabStyle}>
53 61
         {active == 1 && (
54 62
           <PowerList
63
+            sid={sid2}
55 64
             request={getTaIssue}
56 65
             params={{ mine, bizStatus: PROCESS_START }}
57 66
             renderItem={(item) => (
@@ -63,6 +72,7 @@ export default (props) => {
63 72
         <Tab title="已交办" style={tabStyle}>
64 73
           {active == 2 && (
65 74
           <PowerList
75
+            sid={sid3}
66 76
             request={getTaIssue}
67 77
             params={{ mine, bizStatus: PROCESS_ASSIGNED }}
68 78
             renderItem={(item) => (
@@ -74,6 +84,7 @@ export default (props) => {
74 84
         <Tab title="已办结" style={tabStyle}>
75 85
           {active == 3 && (
76 86
           <PowerList
87
+            sid={sid4}
77 88
             request={getTaIssue}
78 89
             params={{ mine, bizStatus: PROCESS_END }}
79 90
             renderItem={(item) => (
@@ -85,6 +96,7 @@ export default (props) => {
85 96
         <Tab title="已逾期" style={tabStyle}>
86 97
           {active == 4 && (
87 98
           <PowerList
99
+            sid={sid5}
88 100
             request={getTaIssue}
89 101
             params={{ mine, bizStatus: 'expired' }}
90 102
             renderItem={(item) => (
@@ -96,6 +108,7 @@ export default (props) => {
96 108
         <Tab title="已打回" style={tabStyle}>
97 109
           {active == 5 && (
98 110
           <PowerList
111
+            sid={sid6}
99 112
             request={getTaIssue}
100 113
             params={{ mine, bizStatus: 'reject' }}
101 114
             renderItem={(item) => (

+ 5
- 0
src/pages/issue/list2/index.jsx 查看文件

@@ -16,6 +16,9 @@ const tabStyle = {
16 16
   overflow: "hidden",
17 17
 };
18 18
 
19
+const sid1 = Math.random().toString(36).substring(2, 8);
20
+const sid2 = Math.random().toString(36).substring(2, 8);
21
+
19 22
 export default (props) => {
20 23
   const router = Taro.useRouter();
21 24
   const { title, bizStatus = "", mine = "" } = router.params;
@@ -51,6 +54,7 @@ export default (props) => {
51 54
       <Tabs sticky>
52 55
         <Tab title="督查员" style={tabStyle}>
53 56
           <PowerList
57
+            sid={sid1}
54 58
             request={getTaIssue}
55 59
             params={{ bizStatus, mine, sourceType: "inspector", issueId }}
56 60
             renderItem={(item) => (
@@ -64,6 +68,7 @@ export default (props) => {
64 68
         </Tab>
65 69
         <Tab title="市民" style={tabStyle}>
66 70
           <PowerList
71
+            sid={sid2}
67 72
             request={getTaIssue}
68 73
             params={{ bizStatus, mine, sourceType: "feedback" }}
69 74
             renderItem={(item) => (

+ 4
- 0
src/pages/message/list/index.jsx 查看文件

@@ -7,12 +7,16 @@ import { getTaMessage } from '@/services/tamessage';
7 7
 import { useModel } from '@/store';
8 8
 import Card from './components/Card';
9 9
 
10
+const sid1 = Math.random().toString(36).substring(2, 8);
11
+// const sid2 = Math.random().toString(36).substring(2, 8);
12
+
10 13
 export default (props) => {
11 14
   const { duty } = useModel('user');
12 15
   
13 16
   return (
14 17
     <Page>
15 18
       <PowerList
19
+        sid={sid1}
16 20
         request={getTaMessage}
17 21
         renderItem={(item) => (
18 22
           <Card key={item.msgId} item={item} duty={duty} />

+ 4
- 0
src/pages/notice/index.jsx 查看文件

@@ -4,6 +4,9 @@ import PowerList from '@/components/PowerList';
4 4
 import { getTaNotice } from '@/services/tanotice';
5 5
 import Card from './components/Card/index';
6 6
 
7
+const sid1 = Math.random().toString(36).substring(2, 8);
8
+// const sid2 = Math.random().toString(36).substring(2, 8);
9
+
7 10
 export default (props) => {
8 11
 
9 12
   const [loading, setLoading] = React.useState(false);
@@ -11,6 +14,7 @@ export default (props) => {
11 14
   return (
12 15
     <Page tabBar="notice">
13 16
       <PowerList
17
+        sid={sid1}
14 18
         request={getTaNotice}
15 19
         params={{status: 1}}
16 20
         renderItem={(item) => (

+ 5
- 0
src/pages/org/issue/list/index.jsx 查看文件

@@ -15,6 +15,9 @@ const tabStyle = {
15 15
   overflow: "hidden",
16 16
 };
17 17
 
18
+const sid1 = Math.random().toString(36).substring(2, 8);
19
+const sid2 = Math.random().toString(36).substring(2, 8);
20
+
18 21
 export default (props) => {
19 22
   const router = Taro.useRouter();
20 23
   const { title, bizStatus, color } = router.params;
@@ -55,6 +58,7 @@ export default (props) => {
55 58
       <Tabs sticky>
56 59
         <Tab title="督查员" style={tabStyle}>
57 60
           <PowerList
61
+            sid={sid1}
58 62
             request={getTaOrgIssue}
59 63
             params={{ bizStatus, sourceType: "inspector" ,issueId}}
60 64
             renderItem={(item) => (
@@ -70,6 +74,7 @@ export default (props) => {
70 74
         </Tab>
71 75
         <Tab title="市民" style={tabStyle}>
72 76
           <PowerList
77
+            sid={sid2}
73 78
             request={getTaOrgIssue}
74 79
             params={{ bizStatus, sourceType: "feedback" }}
75 80
             renderItem={(item) => (

+ 4
- 0
src/pages/user/list/index.jsx 查看文件

@@ -8,6 +8,9 @@ import PowerList from "@/components/PowerList";
8 8
 import { getSysUser, deleteSysUser } from "@/services/sysuser";
9 9
 import styles from "./index.module.less";
10 10
 
11
+const sid1 = Math.random().toString(36).substring(2, 8);
12
+// const sid2 = Math.random().toString(36).substring(2, 8);
13
+
11 14
 export default (props) => {
12 15
   const [loading, setLoading] = React.useState(false);
13 16
   const listRef = React.useRef();
@@ -52,6 +55,7 @@ export default (props) => {
52 55
       <view className={styles["user-warpper"]}>
53 56
         <view className={styles["user-warpper-list"]}>
54 57
           <PowerList
58
+            sid={sid1}
55 59
             ref={listRef}
56 60
             request={getSysUser}
57 61
             onLoadingChange={setLoading}

+ 20
- 0
src/utils/tools.js 查看文件

@@ -0,0 +1,20 @@
1
+
2
+// @fn 是对应请求数据
3
+// @ms 是用户多次触发事件的时间间隔 是一个毫秒数
4
+export function throttle(fn, ms = 800){
5
+  let flag = true;
6
+
7
+  return (...args) => {
8
+    console.log('-----flag----', flag);
9
+    if(!flag) return;
10
+
11
+    flag = false;
12
+    
13
+    const t = setTimeout(()=>{
14
+      clearTimeout(t);
15
+      flag = true
16
+    }, ms);
17
+
18
+    return fn(...args);
19
+  }
20
+}