diff --git a/web/src/components/generic-manager.vue b/web/src/components/generic-manager.vue
index 43f742d..2ff2701 100644
--- a/web/src/components/generic-manager.vue
+++ b/web/src/components/generic-manager.vue
@@ -150,6 +150,11 @@
上一页
下一页
第一页
+
+ 跳转到第 页
+ (共 {{ total_pages }} 页)
+
+
当前显示第 {{ offset + 1 }} - {{ Math.min(offset + meta.limit, meta.total_count) }} 条数据,共 {{ meta.total_count }} 条数据
@@ -195,6 +200,7 @@ export default {
detail_object: null,
search_query: '',
current_query: '',
+ jump_page: 1,
};
},
computed: {
@@ -254,6 +260,9 @@ export default {
}
return uri;
},
+ total_pages: function() {
+ return Math.ceil(this.meta?.total_count / this.meta?.limit) || 1;
+ },
},
methods: {
do_search: function() {
@@ -270,6 +279,10 @@ export default {
this.offset = new_val;
this.reload_data();
}
+ this.update_jump_page();
+ },
+ update_jump_page: function() {
+ this.jump_page = Math.ceil((this.offset + 1) / this.meta.limit);
},
select_all: function() {
for (var x in this.rows) {
@@ -370,6 +383,13 @@ export default {
get_handle_btn: function(i,j){
return "handle-btn-"+i+"-"+j
},
+ jump_to_page: function() {
+ if (!this.jump_page) return;
+ const page = parseInt(this.jump_page);
+ if (page < 1 || page > this.total_pages) return;
+ const new_offset = (page - 1) * this.meta.limit;
+ this.goto_page(new_offset - this.offset);
+ },
},
mounted() {
this.reload();
@@ -407,5 +427,15 @@ td {
.public-badge {
margin-left: 1rem;
}
+.page-jump {
+ display: inline-block;
+ margin-left: 1rem;
+}
+
+.page-input {
+ width: 60px;
+ margin: 0 0.5rem;
+ padding: 0.1rem 0.3rem;
+}