mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	feat: 新增 @pureadmin/table 分页和加载动画示例
				
					
				
			This commit is contained in:
		
							parent
							
								
									9ab3fd19ef
								
							
						
					
					
						commit
						b14f41c8d7
					
				@ -35,8 +35,8 @@
 | 
				
			|||||||
    "@logicflow/core": "^1.1.30",
 | 
					    "@logicflow/core": "^1.1.30",
 | 
				
			||||||
    "@logicflow/extension": "^1.1.30",
 | 
					    "@logicflow/extension": "^1.1.30",
 | 
				
			||||||
    "@pureadmin/descriptions": "^1.1.0",
 | 
					    "@pureadmin/descriptions": "^1.1.0",
 | 
				
			||||||
    "@pureadmin/table": "^1.8.2",
 | 
					    "@pureadmin/table": "^1.8.3",
 | 
				
			||||||
    "@pureadmin/utils": "^1.7.2",
 | 
					    "@pureadmin/utils": "^1.7.4",
 | 
				
			||||||
    "@vueuse/core": "^9.6.0",
 | 
					    "@vueuse/core": "^9.6.0",
 | 
				
			||||||
    "@vueuse/motion": "2.0.0-beta.12",
 | 
					    "@vueuse/motion": "2.0.0-beta.12",
 | 
				
			||||||
    "@wangeditor/editor": "^5.1.21",
 | 
					    "@wangeditor/editor": "^5.1.21",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6004
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6004
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import Page from "./page/index.vue";
 | 
				
			||||||
import RowDrag from "./drag/row/index.vue";
 | 
					import RowDrag from "./drag/row/index.vue";
 | 
				
			||||||
import ColumnDrag from "./drag/column/index.vue";
 | 
					import ColumnDrag from "./drag/column/index.vue";
 | 
				
			||||||
import Contextmenu from "./contextmenu/index.vue";
 | 
					import Contextmenu from "./contextmenu/index.vue";
 | 
				
			||||||
@ -11,6 +12,12 @@ const rendContent = (val: string) =>
 | 
				
			|||||||
  `代码位置:src/views/pure-table/high/${val}/index.vue`;
 | 
					  `代码位置:src/views/pure-table/high/${val}/index.vue`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const list = [
 | 
					export const list = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    key: "page",
 | 
				
			||||||
 | 
					    content: rendContent("page"),
 | 
				
			||||||
 | 
					    title: "分页、加载动画",
 | 
				
			||||||
 | 
					    component: Page
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    key: "rowDrag",
 | 
					    key: "rowDrag",
 | 
				
			||||||
    content: rendContent("drag/row"),
 | 
					    content: rendContent("drag/row"),
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										91
									
								
								src/views/pure-table/high/page/columns.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								src/views/pure-table/high/page/columns.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					import { tableData } from "../data";
 | 
				
			||||||
 | 
					import { clone, delay } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					import { ref, onMounted, reactive, watchEffect } from "vue";
 | 
				
			||||||
 | 
					import type { PaginationProps, LoadingConfig, Align } from "@pureadmin/table";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function useColumns() {
 | 
				
			||||||
 | 
					  const dataList = ref([]);
 | 
				
			||||||
 | 
					  const loading = ref(true);
 | 
				
			||||||
 | 
					  const paginationAlign = ref("right");
 | 
				
			||||||
 | 
					  const columns: TableColumnList = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "日期",
 | 
				
			||||||
 | 
					      prop: "date"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "姓名",
 | 
				
			||||||
 | 
					      prop: "name"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "地址",
 | 
				
			||||||
 | 
					      prop: "address"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 分页配置 */
 | 
				
			||||||
 | 
					  const pagination = reactive<PaginationProps>({
 | 
				
			||||||
 | 
					    pageSize: 10,
 | 
				
			||||||
 | 
					    currentPage: 1,
 | 
				
			||||||
 | 
					    pageSizes: [10, 15, 20],
 | 
				
			||||||
 | 
					    total: 0,
 | 
				
			||||||
 | 
					    align: "right",
 | 
				
			||||||
 | 
					    background: true
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 加载动画配置 */
 | 
				
			||||||
 | 
					  const loadingConfig = reactive<LoadingConfig>({
 | 
				
			||||||
 | 
					    text: "正在加载第一页...",
 | 
				
			||||||
 | 
					    viewBox: "-10, -10, 50, 50",
 | 
				
			||||||
 | 
					    spinner: `
 | 
				
			||||||
 | 
					        <path class="path" d="
 | 
				
			||||||
 | 
					          M 30 15
 | 
				
			||||||
 | 
					          L 28 17
 | 
				
			||||||
 | 
					          M 25.61 25.61
 | 
				
			||||||
 | 
					          A 15 15, 0, 0, 1, 15 30
 | 
				
			||||||
 | 
					          A 15 15, 0, 1, 1, 27.99 7.5
 | 
				
			||||||
 | 
					          L 15 15
 | 
				
			||||||
 | 
					        " style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					    // svg: "",
 | 
				
			||||||
 | 
					    // background: rgba()
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function onSizeChange(val) {
 | 
				
			||||||
 | 
					    console.log("onSizeChange", val);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function onCurrentChange(val) {
 | 
				
			||||||
 | 
					    loadingConfig.text = `正在加载第${val}页...`;
 | 
				
			||||||
 | 
					    loading.value = true;
 | 
				
			||||||
 | 
					    delay(600).then(() => {
 | 
				
			||||||
 | 
					      loading.value = false;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  watchEffect(() => {
 | 
				
			||||||
 | 
					    pagination.align = paginationAlign.value as Align;
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onMounted(() => {
 | 
				
			||||||
 | 
					    delay(600).then(() => {
 | 
				
			||||||
 | 
					      const newList = [];
 | 
				
			||||||
 | 
					      Array.from({ length: 6 }).forEach(() => {
 | 
				
			||||||
 | 
					        newList.push(clone(tableData, true));
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      dataList.value = newList.flat(Infinity);
 | 
				
			||||||
 | 
					      pagination.total = dataList.value.length;
 | 
				
			||||||
 | 
					      loading.value = false;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    loading,
 | 
				
			||||||
 | 
					    columns,
 | 
				
			||||||
 | 
					    dataList,
 | 
				
			||||||
 | 
					    pagination,
 | 
				
			||||||
 | 
					    loadingConfig,
 | 
				
			||||||
 | 
					    paginationAlign,
 | 
				
			||||||
 | 
					    onSizeChange,
 | 
				
			||||||
 | 
					    onCurrentChange
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										46
									
								
								src/views/pure-table/high/page/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/views/pure-table/high/page/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { useColumns } from "./columns";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const {
 | 
				
			||||||
 | 
					  loading,
 | 
				
			||||||
 | 
					  columns,
 | 
				
			||||||
 | 
					  dataList,
 | 
				
			||||||
 | 
					  pagination,
 | 
				
			||||||
 | 
					  loadingConfig,
 | 
				
			||||||
 | 
					  paginationAlign,
 | 
				
			||||||
 | 
					  onSizeChange,
 | 
				
			||||||
 | 
					  onCurrentChange
 | 
				
			||||||
 | 
					} = useColumns();
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <el-space class="float-right mb-2">
 | 
				
			||||||
 | 
					      <p>分页的对齐方式:</p>
 | 
				
			||||||
 | 
					      <el-radio-group v-model="paginationAlign">
 | 
				
			||||||
 | 
					        <el-radio-button label="right">right</el-radio-button>
 | 
				
			||||||
 | 
					        <el-radio-button label="center">center</el-radio-button>
 | 
				
			||||||
 | 
					        <el-radio-button label="left">left</el-radio-button>
 | 
				
			||||||
 | 
					      </el-radio-group>
 | 
				
			||||||
 | 
					    </el-space>
 | 
				
			||||||
 | 
					    <pure-table
 | 
				
			||||||
 | 
					      border
 | 
				
			||||||
 | 
					      row-key="id"
 | 
				
			||||||
 | 
					      alignWhole="center"
 | 
				
			||||||
 | 
					      showOverflowTooltip
 | 
				
			||||||
 | 
					      :loading="loading"
 | 
				
			||||||
 | 
					      :loading-config="loadingConfig"
 | 
				
			||||||
 | 
					      :height="440"
 | 
				
			||||||
 | 
					      :data="
 | 
				
			||||||
 | 
					        dataList.slice(
 | 
				
			||||||
 | 
					          (pagination.currentPage - 1) * pagination.pageSize,
 | 
				
			||||||
 | 
					          pagination.currentPage * pagination.pageSize
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      "
 | 
				
			||||||
 | 
					      :columns="columns"
 | 
				
			||||||
 | 
					      :pagination="pagination"
 | 
				
			||||||
 | 
					      @size-change="onSizeChange"
 | 
				
			||||||
 | 
					      @current-change="onCurrentChange"
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user