• 小程序:实现翻页功能(解决数据过载)


    效果

    核心代码

    ①wxml设置翻页标签

    0}}">

          上一页

          {{ page }}

          /

          {{ totalPage }}

          下一页

    ②wxss设置翻页样式

    /* 分页 */

    .pagination {

      display: flex;

      align-items: center;

      justify-content: left;

      /* margin-bottom: 0; */

      /* border: 1px solid black; */

    }

    .page-button {

      height: 30px;

      line-height: 30px;

      padding: 0 10px;

      border: 1px solid white;

      border-radius: 5px;

      margin: 3%;

      cursor: pointer;

    }

    .page-info {

      font-weight: bold;

    }

    ③js设置翻页功能

    a.设置data数据

    page: 1, // 当前页数

    pageSize: 2, // 每页展示的数据条数

    totalPage: 0, //总页数,

    b.设置左右翻页功能

    prevPage() {

        if (this.data.page > 1) {

          this.setData({

            page: this.data.page - 1,

            selList: [],

          })

          this.getdata();

        }

      },

      nextPage() {

        if (this.data.page < this.data.totalPage) {

          this.setData({

            page: this.data.page + 1,

            selList: [],

          })

          this.getdata();

        }

      },

    c.传递当前页码和页面需要展示的数量去查询数据,并将返回的数据计算页数

    getdata(){

        wx.request({

          url: app.globalData.position + 'Repair/select_never_repaired',

          data: {

            username:app.globalData.username,

            like_info1: this.data.like_info1,

            page: this.data.page,

            pageSize: this.data.pageSize

          },

          header: {

            "Content-Type": "application/x-www-form-urlencoded"

          },

          method: 'POST',

          dataType: 'json',

          success: res => {

            console.log(res.data)

            this.setData({

              list: res.data.info,

              count: res.data.count,

              totalPage: Math.ceil(res.data.total / this.data.pageSize)

            })

          },

          fail(res) {

            console.log("查询失败")

          }

        })

      },

    ④后端查询数据,并限制查询条件(这里采用thinkphp) 

     //查询从未维修过的单据
        public function select_never_repaired()
        {
            $username = input('post.username');
            $like_num = input('post.like_info1', '');
            $page = input('post.page', 1); // 获取当前页数,默认为第一页
            $pageSize = input('post.pageSize', 10); // 获取每页展示的数据条数,默认为10条

            $start = ($page - 1) * $pageSize; // 计算查询的起始位置
            //通过账户查询到对应id
            $account_id = db::table('fa_account_info')->where(['username' => $username])->value('id');
            //当前员工下以工单号模糊查询
            $data['info'] = db::table('rep_info_base')
            ->where(['account_id' => $account_id, 'order_status' => '', 'main_status' => '已分配', 'if_arrange' => '是'])
            ->where(['order_number' => ['like', '%' . $like_num . '%']])
            ->limit($start,$pageSize)
            ->select();
            for ($i = 0; $i < count($data['info']); $i++) {
                //创建时间
                $data['info'][$i]['creation_time'] = date('Y-m-d H:i:s', $data['info'][$i]['creation_time']);
                //期望完成时间
                $data['info'][$i]['expect_complete_time'] = date('Y-m-d H:i:s', $data['info'][$i]['expect_complete_time']);
                //分配时间
                $data['info'][$i]['distribute_time'] = date('Y-m-d H:i:s', $data['info'][$i]['distribute_time']);
                //排程时间
                $data['info'][$i]['arrange_time'] = date('Y-m-d H:i:s', $data['info'][$i]['arrange_time']);
                //维修状态设置为未维修
                $data['info'][$i]['order_status'] = '待维修';
            }
            $data['total'] = db::table('rep_info_base')
            ->where(['account_id' => $account_id, 'order_status' => '', 'main_status' => '已分配', 'if_arrange' => '是'])
            ->where(['order_number' => ['like', '%' . $like_num . '%']])
            ->count();
            $data['count'] = $data['total'];
            echo json_encode($data);
        }

    完整代码

    wxml

    1. <view style="margin-bottom:5%">
    2. <view class="top">
    3. <view class="search">
    4. <view class="search_in">
    5. <image src="{{search}}">image>
    6. <input type="text" placeholder="请输入工单号" placeholder-style="color:#CCCCCC" bindconfirm="search_wait_list" />
    7. view>
    8. view>
    9. view>
    10. <view class="main">
    11. <view class="main_left"><text>{{count}}条数据text>view>
    12. <view class="main_right">
    13. view>
    14. view>
    15. <view class="nodata" wx:if="{{list==''}}">暂无数据view>
    16. <view class="item_all_position" wx:for="{{list}}" wx:key="index" data-id='{{item.id}}'>
    17. <view class=" flex-def flex-cCenter flex-zBetween item_all">
    18. <icon wx:if="{{iconStatu}}" bindtap="toggleSel" type="success" size="30" color="{{item.selStatu?'#80c2e2':'#999'}}" data-id='{{item.id}}' />
    19. <view class="position" bindtap="allocating_detial" data-id='{{item.id}}'>
    20. <view class="vv_1">
    21. <view class="type">
    22. <view>{{item.fault_type}}view>
    23. view>
    24. <view class="vv_1_text">
    25. <view class="vv_1_text1">{{item.product_name}}view>
    26. <view class="vv_1_text2">{{item.order_number}}view>
    27. view>
    28. view>
    29. <view class="vv_4"><text>故障描述:text>{{item.fault_description}}view>
    30. <text class="vv_4" space="ensp"><text>期望时间:text>{{item.expect_complete_time}}text>
    31. <text class="vv_3" space="ensp"><text>故障地点:text>{{item.report_address}}text>
    32. <view class="vv_5"><text>维修状态:text>{{item.order_status}}view>
    33. view>
    34. view>
    35. view>
    36. <view class="pagination" wx:if="{{list.length>0}}">
    37. <view class="page-button" bindtap="prevPage">上一页view>
    38. <view class="page-info">{{ page }}view>
    39. <view class="page-info">/view>
    40. <view class="page-info">{{ totalPage }}view>
    41. <view class="page-button" bindtap="nextPage">下一页view>
    42. view>
    43. view>

     wxss

    1. /* flex类名 */
    2. /* 定义 */
    3. .flex-def {
    4. display: -webkit-box;
    5. display: -moz-box;
    6. display: -ms-flexbox;
    7. display: -webkit-flex;
    8. display: flex;
    9. }
    10. /* 侧轴居中 */
    11. .flex-cCenter {
    12. -webkit-box-align: center;
    13. -moz-align-items: center;
    14. -webkit-align-items: center;
    15. align-items: center;
    16. }
    17. .flex-wrap {
    18. flex-wrap: wrap;
    19. }
    20. /* 主体信息布局 */
    21. .main {
    22. width: 100%;
    23. display: flex;
    24. align-items: center;
    25. justify-content: center;
    26. }
    27. .main_left {
    28. width: 60%;
    29. }
    30. .main_left text {
    31. margin-left: 7%;
    32. color: #777A7C;
    33. }
    34. .main_right {
    35. width: 40%;
    36. text-align: right;
    37. padding-right: 5%;
    38. color: #777A7C;
    39. }
    40. /* 列表布局 */
    41. .item_all_position {
    42. width: 100%;
    43. display: flex;
    44. align-items: center;
    45. justify-content: center;
    46. }
    47. .item_all {
    48. box-sizing: border-box;
    49. width: 95%;
    50. border-radius: 10rpx;
    51. padding: 0 2% 2% 2%;
    52. margin-top: 5%;
    53. background-color: #FFFFFF;
    54. border-bottom: 2px solid rgba(202, 202, 202, 0.856);
    55. /* border: 1px solid black; */
    56. }
    57. /* 第一行 */
    58. .vv_1 {
    59. font-size: 18px;
    60. background-color: #ffffff;
    61. }
    62. /* 第一行文字 */
    63. .vv_1_text {
    64. display: flex;
    65. width: 80%;
    66. align-items: center;
    67. padding-left: 3%;
    68. }
    69. .vv_1_text1 {
    70. font-size: 110%;
    71. color: #76b5d4;
    72. font-weight: bold;
    73. }
    74. .vv_1_text2 {
    75. color: #7e7e7e;
    76. font-size: 90%;
    77. margin-left: 5%;
    78. }
    79. /* 第一行类型 */
    80. .type {
    81. background-color: #65b5dd;
    82. padding: 1% 5%;
    83. font-size: medium;
    84. text-align: center;
    85. margin-bottom: 2%;
    86. float: right;
    87. }
    88. .vv_3 {
    89. padding: 3% 0 3% 3%;
    90. /* margin-left: 3%; */
    91. background-color: #ffffff;
    92. display: flex;
    93. color: gray;
    94. font-size: 95%;
    95. }
    96. .vv_4 {
    97. word-break: break-all;
    98. padding: 3% 0 3% 3%;
    99. /* margin-left: 3%; */
    100. color: gray;
    101. /* border:1px solid black; */
    102. }
    103. .vv_5{
    104. padding: 0 0 3% 3%;
    105. color: rgb(192, 82, 82);
    106. }
    107. .vv_5 text {
    108. color: rgb(97, 97, 97);
    109. }
    110. .vv_4 text {
    111. color: rgb(97, 97, 97);
    112. }
    113. .vv_3 text {
    114. color: rgb(97, 97, 97);
    115. }
    116. .footer {
    117. position: fixed;
    118. display: flex;
    119. bottom: 0;
    120. width: 100%;
    121. height: 80prx;
    122. line-height: 80rpx;
    123. text-align: center;
    124. }
    125. .footer1 {
    126. background-color: #80c2e2;
    127. width: 50%;
    128. height: 80prx;
    129. line-height: 80rpx;
    130. text-align: center;
    131. border-right: 2px solid rgb(219, 219, 219);
    132. }
    133. .footer2 {
    134. background-color: #80c2e2;
    135. width: 50%;
    136. height: 80prx;
    137. line-height: 80rpx;
    138. text-align: center;
    139. }
    140. .position {
    141. width: 90%;
    142. }
    143. /* 搜索框 */
    144. .search {
    145. display: flex;
    146. align-items: center;
    147. justify-content: center;
    148. padding: 5% 0 5% 0;
    149. }
    150. .search .search_in {
    151. display: flex;
    152. align-items: center;
    153. justify-content: space-between;
    154. padding: 0 20rpx;
    155. box-sizing: border-box;
    156. height: 70rpx;
    157. width: 95%;
    158. border-radius: 5px;
    159. background-color: white;
    160. }
    161. .search_in image {
    162. height: 45rpx;
    163. width: 50rpx;
    164. margin-right: 10px;
    165. }
    166. .search input {
    167. width: 100%;
    168. }
    169. /* 暂无数据样式 */
    170. .nodata {
    171. display: flex;
    172. align-items: center;
    173. justify-content: center;
    174. color: gray;
    175. font-size: 90%;
    176. margin-top: 50%;
    177. }
    178. /* 分页 */
    179. .pagination {
    180. display: flex;
    181. align-items: center;
    182. justify-content: left;
    183. /* margin-bottom: 0; */
    184. /* border: 1px solid black; */
    185. }
    186. .page-button {
    187. height: 30px;
    188. line-height: 30px;
    189. padding: 0 10px;
    190. border: 1px solid white;
    191. border-radius: 5px;
    192. margin: 3%;
    193. cursor: pointer;
    194. }
    195. .page-info {
    196. font-weight: bold;
    197. }

    js

    1. const app = getApp()
    2. let handname = ''
    3. Page({
    4. data: {
    5. search: app.globalData.icon + 'index/search.png',
    6. page: 1, // 当前页数
    7. pageSize: 2, // 每页展示的数据条数
    8. totalPage: 0, //总页数,
    9. like_info1: '', //待排期的模糊查询条件
    10. },
    11. //模糊查询待排程信息
    12. search_wait_list(event) {
    13. this.page = 1;
    14. this.data.like_info1 = event.detail.value;
    15. this.getdata();
    16. },
    17. //进入已分配工单详情页
    18. allocating_detial: function (e) {
    19. // console.log(e.currentTarget.dataset.id) //待分配数据
    20. wx.navigateTo({
    21. url: '/pages/mine/detail/detail?id=' + e.currentTarget.dataset.id,
    22. })
    23. },
    24. getdata(){
    25. wx.request({
    26. url: app.globalData.position + 'Repair/select_never_repaired',
    27. data: {
    28. username:app.globalData.username,
    29. like_info1: this.data.like_info1,
    30. page: this.data.page,
    31. pageSize: this.data.pageSize
    32. },
    33. header: {
    34. "Content-Type": "application/x-www-form-urlencoded"
    35. },
    36. method: 'POST',
    37. dataType: 'json',
    38. success: res => {
    39. console.log(res.data)
    40. this.setData({
    41. list: res.data.info,
    42. count: res.data.count,
    43. totalPage: Math.ceil(res.data.total / this.data.pageSize)
    44. })
    45. },
    46. fail(res) {
    47. console.log("查询失败")
    48. }
    49. })
    50. },
    51. prevPage() {
    52. if (this.data.page > 1) {
    53. this.setData({
    54. page: this.data.page - 1,
    55. selList: [],
    56. })
    57. this.getdata();
    58. }
    59. },
    60. nextPage() {
    61. if (this.data.page < this.data.totalPage) {
    62. this.setData({
    63. page: this.data.page + 1,
    64. selList: [],
    65. })
    66. this.getdata();
    67. }
    68. },
    69. //进入页面显示
    70. onLoad: async function (options) {
    71. this.getdata();
    72. },
    73. //分享
    74. onShareAppMessage:function(){
    75. //清空登录信息
    76. wx.removeStorageSync('username');
    77. //返回登录页面
    78. return {
    79. title: '维修系统',
    80. path: '/pages/login/main/main',
    81. imageUrl: '/images/share/title.png',
    82. }
    83. },
    84. })

    thinkphp

    1. //查询从未维修过的单据
    2. public function select_never_repaired()
    3. {
    4. $username = input('post.username');
    5. $like_num = input('post.like_info1', '');
    6. $page = input('post.page', 1); // 获取当前页数,默认为第一页
    7. $pageSize = input('post.pageSize', 10); // 获取每页展示的数据条数,默认为10条
    8. $start = ($page - 1) * $pageSize; // 计算查询的起始位置
    9. //通过账户查询到对应id
    10. $account_id = db::table('fa_account_info')->where(['username' => $username])->value('id');
    11. //当前员工下以工单号模糊查询
    12. $data['info'] = db::table('rep_info_base')
    13. ->where(['account_id' => $account_id, 'order_status' => '', 'main_status' => '已分配', 'if_arrange' => '是'])
    14. ->where(['order_number' => ['like', '%' . $like_num . '%']])
    15. ->limit($start,$pageSize)
    16. ->select();
    17. for ($i = 0; $i < count($data['info']); $i++) {
    18. //创建时间
    19. $data['info'][$i]['creation_time'] = date('Y-m-d H:i:s', $data['info'][$i]['creation_time']);
    20. //期望完成时间
    21. $data['info'][$i]['expect_complete_time'] = date('Y-m-d H:i:s', $data['info'][$i]['expect_complete_time']);
    22. //分配时间
    23. $data['info'][$i]['distribute_time'] = date('Y-m-d H:i:s', $data['info'][$i]['distribute_time']);
    24. //排程时间
    25. $data['info'][$i]['arrange_time'] = date('Y-m-d H:i:s', $data['info'][$i]['arrange_time']);
    26. //维修状态设置为未维修
    27. $data['info'][$i]['order_status'] = '待维修';
    28. }
    29. $data['total'] = db::table('rep_info_base')
    30. ->where(['account_id' => $account_id, 'order_status' => '', 'main_status' => '已分配', 'if_arrange' => '是'])
    31. ->where(['order_number' => ['like', '%' . $like_num . '%']])
    32. ->count();
    33. $data['count'] = $data['total'];
    34. echo json_encode($data);
    35. }

  • 相关阅读:
    位、比特、字节、字、帧等概念关系的理解
    AnsibleFATE部署过程
    java解析c结构体的数据
    混入组件 (mixin)
    移动流量的爆发式增长,社交电商如何选择商业模式
    高云USB下载器仿真器用户手册(包括在线逻辑分析仪的使用方法)
    开发指导—利用组件&插值器动画实现 HarmonyOS 动效
    java毕业设计Vue框架龙猫宠物交易平台源码+系统+数据库+lw文档+调试运行
    设计模式——策略模式
    【吴恩达机器学习笔记】六、过拟合及正则化
  • 原文地址:https://blog.csdn.net/weixin_46001736/article/details/132737621