1
0
Эх сурвалжийг харах

feat: about界面分页显示

SongZihuan 3 жил өмнө
parent
commit
a865a7ca90

+ 16 - 2
app/auth/views.py

@@ -1,4 +1,6 @@
-from flask import render_template, Blueprint, Flask, request, url_for, redirect, flash
+import math
+
+from flask import render_template, Blueprint, Flask, request, url_for, redirect, flash, abort
 from wtforms import StringField, PasswordField, SubmitField
 from wtforms.validators import DataRequired
 from flask_wtf import FlaskForm
@@ -9,6 +11,8 @@ import qrcode
 from io import BytesIO
 
 from tool.type_ import *
+from tool.page import get_page
+
 from app import views
 from app import web_user
 
@@ -62,7 +66,16 @@ def logout():
 def about():
     user: web_user.WebUser = current_user
     user.update_info()
-    return render_template("auth/about.html", order=user.order, order_list=user.get_order_goods_list())
+
+    try:
+        page = int(request.args.get("page", 1))
+    except (ValueError, TypeError):
+        abort(404)
+    else:
+        count = math.ceil(current_user.get_garbage_list_count() / 10)
+        garbage_list = current_user.get_garbage_list(limit=10, offset=(page - 1) * 10)
+        return render_template("auth/about.html", order=user.order, order_list=user.get_order_goods_list(),
+                               garbage_list=garbage_list, page_list=get_page("auth.about", page, count), page=page)
 
 
 @auth.route("/order")
@@ -70,6 +83,7 @@ def about():
 def order_qr():
     user: web_user.WebUser = current_user
     user.update_info()
+
     order, user = user.get_qr_code()
     image = qrcode.make(data=url_for("store.check", user=user, order=order, _external=True))
     img_buffer = BytesIO()

+ 6 - 3
app/templates/auth/about.html

@@ -38,8 +38,11 @@
                 </ul>
             {% endif %}
         </section>
-        <ul id="garbage-list">
-            {{ about.get_garbage_list(current_user.get_garbage_list()) }}
-        </ul>
+        <section id="garbage-list">
+            <ul>
+                {{ about.get_garbage_list(garbage_list) }}
+            </ul>
+            {{ macro.get_page_list(page_list, page) }}
+        </section>
     </section>
 {% endblock %}

+ 13 - 2
app/web.py

@@ -58,11 +58,22 @@ class AuthWebsite(WebsiteBase):
         name = user.get_name()
         return web_user.WebUser(name, uid=uid)
 
-    def get_user_garbage_list(self, uid: uid_t, limit: int):
+    def get_user_garbage_count(self, uid: uid_t):
+        cur = self._db.search(columns=["count(GarbageID)"],
+                              table="garbage",
+                              where=f"UserID='{uid}'")
+        if cur is None:
+            return 0
+        assert cur.rowcount == 1
+        return int(cur.fetchone()[0])
+
+    def get_user_garbage_list(self, uid: uid_t, limit: int, offset: int = 0):
         cur = self._db.search(columns=["UseTime", "Location", "GarbageType", "CheckResult"],
                               table="garbage",
                               where=f"UserID='{uid}'",
-                              limit=limit)
+                              limit=limit,
+                              offset=offset,
+                              order_by=[("UseTime", "DESC")])
         if cur is None or cur.rowcount == 0:
             return None
         res = []

+ 10 - 3
app/web_user.py

@@ -38,7 +38,11 @@ class WebAnonymous(AnonymousUserMixin):
         return []
 
     @staticmethod
-    def get_garbage_list():
+    def get_garbage_list_count():
+        return 0
+
+    @staticmethod
+    def get_garbage_list(limit, offset):
         return []
 
     @staticmethod
@@ -127,8 +131,11 @@ class WebUser(UserMixin):
             res.append(f"#{i} {re[0]} x {re[1]}")
         return res
 
-    def get_garbage_list(self):
-        return views.website.get_user_garbage_list(self._uid, limit=20)
+    def get_garbage_list_count(self):
+        return views.website.get_user_garbage_count(self._uid)
+
+    def get_garbage_list(self, limit: int, offset: int = 0):
+        return views.website.get_user_garbage_list(self._uid, limit=limit, offset=offset)
 
     def get_user(self) -> User:
         res = views.website.get_user_by_id(self._uid)