浏览代码

feat: 新增渠道页面选择每页显示数量

CaIon 2 年之前
父节点
当前提交
3595e352d0
共有 2 个文件被更改,包括 41 次插入22 次删除
  1. 5 1
      controller/channel.go
  2. 36 21
      web/src/components/ChannelsTable.js

+ 5 - 1
controller/channel.go

@@ -11,10 +11,14 @@ import (
 
 
 func GetAllChannels(c *gin.Context) {
 func GetAllChannels(c *gin.Context) {
 	p, _ := strconv.Atoi(c.Query("p"))
 	p, _ := strconv.Atoi(c.Query("p"))
+	pageSize, _ := strconv.Atoi(c.Query("page_size"))
 	if p < 0 {
 	if p < 0 {
 		p = 0
 		p = 0
 	}
 	}
-	channels, err := model.GetAllChannels(p*common.ItemsPerPage, common.ItemsPerPage, false)
+	if pageSize < 0 {
+		pageSize = common.ItemsPerPage
+	}
+	channels, err := model.GetAllChannels(p*pageSize, pageSize, false)
 	if err != nil {
 	if err != nil {
 		c.JSON(http.StatusOK, gin.H{
 		c.JSON(http.StatusOK, gin.H{
 			"success": false,
 			"success": false,

+ 36 - 21
web/src/components/ChannelsTable.js

@@ -55,16 +55,17 @@ const ChannelsTable = () => {
   const [searchKeyword, setSearchKeyword] = useState('');
   const [searchKeyword, setSearchKeyword] = useState('');
   const [searching, setSearching] = useState(false);
   const [searching, setSearching] = useState(false);
   const [updatingBalance, setUpdatingBalance] = useState(false);
   const [updatingBalance, setUpdatingBalance] = useState(false);
+  const [pageSize, setPageSize] = useState(ITEMS_PER_PAGE);
 
 
   const loadChannels = async (startIdx) => {
   const loadChannels = async (startIdx) => {
-    const res = await API.get(`/api/channel/?p=${startIdx}`);
+    const res = await API.get(`/api/channel/?p=${startIdx}&page_size=${pageSize}`);
     const { success, message, data } = res.data;
     const { success, message, data } = res.data;
     if (success) {
     if (success) {
       if (startIdx === 0) {
       if (startIdx === 0) {
         setChannels(data);
         setChannels(data);
       } else {
       } else {
         let newChannels = [...channels];
         let newChannels = [...channels];
-        newChannels.splice(startIdx * ITEMS_PER_PAGE, data.length, ...data);
+        newChannels.splice(startIdx * pageSize, data.length, ...data);
         setChannels(newChannels);
         setChannels(newChannels);
       }
       }
     } else {
     } else {
@@ -75,14 +76,21 @@ const ChannelsTable = () => {
 
 
   const onPaginationChange = (e, { activePage }) => {
   const onPaginationChange = (e, { activePage }) => {
     (async () => {
     (async () => {
-      if (activePage === Math.ceil(channels.length / ITEMS_PER_PAGE) + 1) {
+      if (activePage === Math.ceil(channels.length / pageSize) + 1) {
         // In this case we have to load more data and then append them.
         // In this case we have to load more data and then append them.
-        await loadChannels(activePage - 1);
+        await loadChannels(activePage - 1, pageSize);
       }
       }
       setActivePage(activePage);
       setActivePage(activePage);
     })();
     })();
   };
   };
 
 
+  const setItemsPerPage = (e) => {
+    console.log(e.target.value);
+    //parseInt(e.target.value);
+    setPageSize(parseInt(e.target.value));
+    loadChannels(0);
+  }
+
   const refresh = async () => {
   const refresh = async () => {
     setLoading(true);
     setLoading(true);
     await loadChannels(activePage - 1);
     await loadChannels(activePage - 1);
@@ -124,7 +132,7 @@ const ChannelsTable = () => {
       showSuccess('操作成功完成!');
       showSuccess('操作成功完成!');
       let channel = res.data.data;
       let channel = res.data.data;
       let newChannels = [...channels];
       let newChannels = [...channels];
-      let realIdx = (activePage - 1) * ITEMS_PER_PAGE + idx;
+      let realIdx = (activePage - 1) * pageSize + idx;
       if (action === 'delete') {
       if (action === 'delete') {
         newChannels[realIdx].deleted = true;
         newChannels[realIdx].deleted = true;
       } else {
       } else {
@@ -195,7 +203,7 @@ const ChannelsTable = () => {
     const { success, message, time } = res.data;
     const { success, message, time } = res.data;
     if (success) {
     if (success) {
       let newChannels = [...channels];
       let newChannels = [...channels];
-      let realIdx = (activePage - 1) * ITEMS_PER_PAGE + idx;
+      let realIdx = (activePage - 1) * pageSize + idx;
       newChannels[realIdx].response_time = time * 1000;
       newChannels[realIdx].response_time = time * 1000;
       newChannels[realIdx].test_time = Date.now() / 1000;
       newChannels[realIdx].test_time = Date.now() / 1000;
       setChannels(newChannels);
       setChannels(newChannels);
@@ -221,7 +229,7 @@ const ChannelsTable = () => {
     const { success, message, balance } = res.data;
     const { success, message, balance } = res.data;
     if (success) {
     if (success) {
       let newChannels = [...channels];
       let newChannels = [...channels];
-      let realIdx = (activePage - 1) * ITEMS_PER_PAGE + idx;
+      let realIdx = (activePage - 1) * pageSize + idx;
       newChannels[realIdx].balance = balance;
       newChannels[realIdx].balance = balance;
       newChannels[realIdx].balance_updated_time = Date.now() / 1000;
       newChannels[realIdx].balance_updated_time = Date.now() / 1000;
       setChannels(newChannels);
       setChannels(newChannels);
@@ -369,8 +377,8 @@ const ChannelsTable = () => {
         <Table.Body>
         <Table.Body>
           {channels
           {channels
             .slice(
             .slice(
-              (activePage - 1) * ITEMS_PER_PAGE,
-              activePage * ITEMS_PER_PAGE
+              (activePage - 1) * pageSize,
+              activePage * pageSize
             )
             )
             .map((channel, idx) => {
             .map((channel, idx) => {
               if (channel.deleted) return <></>;
               if (channel.deleted) return <></>;
@@ -485,7 +493,7 @@ const ChannelsTable = () => {
 
 
         <Table.Footer>
         <Table.Footer>
           <Table.Row>
           <Table.Row>
-            <Table.HeaderCell colSpan='9'>
+            <Table.HeaderCell colSpan='10'>
               <Button size='small' as={Link} to='/channel/add' loading={loading}>
               <Button size='small' as={Link} to='/channel/add' loading={loading}>
                 添加新的渠道
                 添加新的渠道
               </Button>
               </Button>
@@ -494,18 +502,25 @@ const ChannelsTable = () => {
               </Button>
               </Button>
               <Button size='small' onClick={updateAllChannelsBalance}
               <Button size='small' onClick={updateAllChannelsBalance}
                       loading={loading || updatingBalance}>更新所有已启用通道余额</Button>
                       loading={loading || updatingBalance}>更新所有已启用通道余额</Button>
-              <Pagination
-                floated='right'
-                activePage={activePage}
-                onPageChange={onPaginationChange}
-                size='small'
-                siblingRange={1}
-                totalPages={
-                  Math.ceil(channels.length / ITEMS_PER_PAGE) +
-                  (channels.length % ITEMS_PER_PAGE === 0 ? 1 : 0)
-                }
-              />
+
+              <div style={{ float: 'right' }}>
+                <div className="ui labeled input" style={{marginRight: '10px'}}>
+                  <div className="ui label">每页数量</div>
+                  <Input type="number" style={{width: '70px'}} defaultValue={ITEMS_PER_PAGE} onBlur={setItemsPerPage}></Input>
+                </div>
+                <Pagination
+                    activePage={activePage}
+                    onPageChange={onPaginationChange}
+                    size='small'
+                    siblingRange={1}
+                    totalPages={
+                        Math.ceil(channels.length / pageSize) +
+                        (channels.length % pageSize === 0 ? 1 : 0)
+                    }
+                />
+              </div>
               <Button size='small' onClick={refresh} loading={loading}>刷新</Button>
               <Button size='small' onClick={refresh} loading={loading}>刷新</Button>
+
             </Table.HeaderCell>
             </Table.HeaderCell>
           </Table.Row>
           </Table.Row>
         </Table.Footer>
         </Table.Footer>