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
							
								
									7472c25c0a
								
							
						
					
					
						commit
						c16ee6cf68
					
				@ -30,6 +30,7 @@
 | 
				
			|||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@amap/amap-jsapi-loader": "^1.0.1",
 | 
					    "@amap/amap-jsapi-loader": "^1.0.1",
 | 
				
			||||||
    "@ctrl/tinycolor": "^3.4.1",
 | 
					    "@ctrl/tinycolor": "^3.4.1",
 | 
				
			||||||
 | 
					    "@howdyjs/mouse-menu": "^2.0.5",
 | 
				
			||||||
    "@logicflow/core": "^1.1.30",
 | 
					    "@logicflow/core": "^1.1.30",
 | 
				
			||||||
    "@logicflow/extension": "^1.1.30",
 | 
					    "@logicflow/extension": "^1.1.30",
 | 
				
			||||||
    "@pureadmin/components": "^1.1.0",
 | 
					    "@pureadmin/components": "^1.1.0",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										15
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@ -6,6 +6,7 @@ specifiers:
 | 
				
			|||||||
  "@commitlint/config-conventional": 13.1.0
 | 
					  "@commitlint/config-conventional": 13.1.0
 | 
				
			||||||
  "@ctrl/tinycolor": ^3.4.1
 | 
					  "@ctrl/tinycolor": ^3.4.1
 | 
				
			||||||
  "@faker-js/faker": ^7.5.0
 | 
					  "@faker-js/faker": ^7.5.0
 | 
				
			||||||
 | 
					  "@howdyjs/mouse-menu": ^2.0.5
 | 
				
			||||||
  "@iconify-icons/carbon": ^1.2.8
 | 
					  "@iconify-icons/carbon": ^1.2.8
 | 
				
			||||||
  "@iconify-icons/ep": ^1.2.7
 | 
					  "@iconify-icons/ep": ^1.2.7
 | 
				
			||||||
  "@iconify-icons/fa": ^1.2.3
 | 
					  "@iconify-icons/fa": ^1.2.3
 | 
				
			||||||
@ -128,6 +129,7 @@ specifiers:
 | 
				
			|||||||
dependencies:
 | 
					dependencies:
 | 
				
			||||||
  "@amap/amap-jsapi-loader": 1.0.1
 | 
					  "@amap/amap-jsapi-loader": 1.0.1
 | 
				
			||||||
  "@ctrl/tinycolor": 3.4.1
 | 
					  "@ctrl/tinycolor": 3.4.1
 | 
				
			||||||
 | 
					  "@howdyjs/mouse-menu": 2.0.5_vue@3.2.45
 | 
				
			||||||
  "@logicflow/core": 1.1.31
 | 
					  "@logicflow/core": 1.1.31
 | 
				
			||||||
  "@logicflow/extension": 1.1.31
 | 
					  "@logicflow/extension": 1.1.31
 | 
				
			||||||
  "@pureadmin/components": 1.1.0_vue@3.2.45
 | 
					  "@pureadmin/components": 1.1.0_vue@3.2.45
 | 
				
			||||||
@ -995,6 +997,18 @@ packages:
 | 
				
			|||||||
      "@floating-ui/core": 1.0.2
 | 
					      "@floating-ui/core": 1.0.2
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /@howdyjs/mouse-menu/2.0.5_vue@3.2.45:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-20e7mmmFOOLNOHC/38zEWnLgZaNTrZ2GSYhUf4XpaE99ehn4Gq0vf5K/DlALliFQ1zsrfdhIrC13+HNQHyBZKQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      vue: ">=3.0.0"
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tslib: 1.14.1
 | 
				
			||||||
 | 
					      vue: 3.2.45
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /@humanwhocodes/config-array/0.11.7:
 | 
					  /@humanwhocodes/config-array/0.11.7:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -8531,7 +8545,6 @@ packages:
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
        integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 | 
					        integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /tslib/2.3.0:
 | 
					  /tslib/2.3.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										70
									
								
								src/views/pure-table/high/contextmenu/columns.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/views/pure-table/high/contextmenu/columns.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					import { ref } from "vue";
 | 
				
			||||||
 | 
					import { tableDataDrag } from "../data";
 | 
				
			||||||
 | 
					import { clone } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					import { message } from "@pureadmin/components";
 | 
				
			||||||
 | 
					import { CustomMouseMenu } from "@howdyjs/mouse-menu";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function useColumns() {
 | 
				
			||||||
 | 
					  const dataList = ref(clone(tableDataDrag, true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const columns: TableColumnList = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "ID",
 | 
				
			||||||
 | 
					      prop: "id"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "日期",
 | 
				
			||||||
 | 
					      prop: "date"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "姓名",
 | 
				
			||||||
 | 
					      prop: "name"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 配置参考:https://kongfandong.cn/howdy/mouse-menu/readme
 | 
				
			||||||
 | 
					  const menuOptions = {
 | 
				
			||||||
 | 
					    menuList: [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        label: ({ id }) => `ID为:${id}`,
 | 
				
			||||||
 | 
					        disabled: true
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        label: "编辑",
 | 
				
			||||||
 | 
					        tips: "Edit",
 | 
				
			||||||
 | 
					        fn: row =>
 | 
				
			||||||
 | 
					          message.success(
 | 
				
			||||||
 | 
					            `您编辑了第 ${
 | 
				
			||||||
 | 
					              dataList.value.findIndex(v => v.id === row.id) + 1
 | 
				
			||||||
 | 
					            } 行,数据为:${JSON.stringify(row)}`
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function showMouseMenu(row, column, event) {
 | 
				
			||||||
 | 
					    event.preventDefault();
 | 
				
			||||||
 | 
					    const { x, y } = event;
 | 
				
			||||||
 | 
					    const ctx = CustomMouseMenu({
 | 
				
			||||||
 | 
					      el: event.currentTarget,
 | 
				
			||||||
 | 
					      params: row,
 | 
				
			||||||
 | 
					      // 菜单容器的CSS设置
 | 
				
			||||||
 | 
					      menuWrapperCss: {
 | 
				
			||||||
 | 
					        background: "var(--el-bg-color)"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      menuItemCss: {
 | 
				
			||||||
 | 
					        labelColor: "var(--el-text-color)",
 | 
				
			||||||
 | 
					        hoverLabelColor: "var(--el-color-primary)",
 | 
				
			||||||
 | 
					        hoverTipsColor: "var(--el-color-primary)"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      ...menuOptions
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    ctx.show(x, y);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    columns,
 | 
				
			||||||
 | 
					    dataList,
 | 
				
			||||||
 | 
					    showMouseMenu
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								src/views/pure-table/high/contextmenu/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/views/pure-table/high/contextmenu/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { useColumns } from "./columns";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const { columns, dataList, showMouseMenu } = useColumns();
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <pure-table
 | 
				
			||||||
 | 
					    row-key="id"
 | 
				
			||||||
 | 
					    border
 | 
				
			||||||
 | 
					    :data="dataList"
 | 
				
			||||||
 | 
					    :columns="columns"
 | 
				
			||||||
 | 
					    @row-contextmenu="showMouseMenu"
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
@ -1,10 +1,11 @@
 | 
				
			|||||||
import Sortable from "sortablejs";
 | 
					import Sortable from "sortablejs";
 | 
				
			||||||
 | 
					import { clone } from "@pureadmin/utils";
 | 
				
			||||||
import { tableDataDrag } from "../../data";
 | 
					import { tableDataDrag } from "../../data";
 | 
				
			||||||
import { ref, nextTick, onMounted } from "vue";
 | 
					import { ref, nextTick, onMounted } from "vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 行拖拽演示
 | 
					// 列拖拽演示
 | 
				
			||||||
export function useColumns() {
 | 
					export function useColumns() {
 | 
				
			||||||
  const dataList = ref(tableDataDrag);
 | 
					  const dataList = ref(clone(tableDataDrag, true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const columnsDrag = ref<TableColumnList>([
 | 
					  const columnsDrag = ref<TableColumnList>([
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,11 @@
 | 
				
			|||||||
import Sortable from "sortablejs";
 | 
					import Sortable from "sortablejs";
 | 
				
			||||||
import { ref, nextTick } from "vue";
 | 
					import { ref, nextTick } from "vue";
 | 
				
			||||||
 | 
					import { clone } from "@pureadmin/utils";
 | 
				
			||||||
import { tableDataDrag } from "../../data";
 | 
					import { tableDataDrag } from "../../data";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 行拖拽演示
 | 
					// 行拖拽演示
 | 
				
			||||||
export function useColumns() {
 | 
					export function useColumns() {
 | 
				
			||||||
  const dataList = ref(tableDataDrag);
 | 
					  const dataList = ref(clone(tableDataDrag, true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const rowDrop = (event: { preventDefault: () => void }) => {
 | 
					  const rowDrop = (event: { preventDefault: () => void }) => {
 | 
				
			||||||
    event.preventDefault();
 | 
					    event.preventDefault();
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const rendContent = (val: string) =>
 | 
					const rendContent = (val: string) =>
 | 
				
			||||||
  `代码位置:src/views/pure-table/high/${val}/index.vue`;
 | 
					  `代码位置:src/views/pure-table/high/${val}/index.vue`;
 | 
				
			||||||
@ -16,5 +17,11 @@ export const list = [
 | 
				
			|||||||
    content: rendContent("drag/column"),
 | 
					    content: rendContent("drag/column"),
 | 
				
			||||||
    title: "拖拽表格(列拖拽)",
 | 
					    title: "拖拽表格(列拖拽)",
 | 
				
			||||||
    component: ColumnDrag
 | 
					    component: ColumnDrag
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    key: "contextmenu",
 | 
				
			||||||
 | 
					    content: rendContent("contextmenu"),
 | 
				
			||||||
 | 
					    title: "右键菜单",
 | 
				
			||||||
 | 
					    component: Contextmenu
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user