vue项目简单菜单排序
功能:拖拉后,数据重组,然后返回数组给后台处理
代码如下:
<template> <el-dialog
title="菜单排序"
:close-on-click-modal="false"
:visible.sync="visible"
width="600px"> <div style="margin: 0 auto;height: 400px;overflow-y: auto;overflow-x: hidden;">
<ul class="dragSort">
<transition-group>
<li
draggable="true"
@dragstart="handlerDragstart"
@drag="handlerDrag"
@dragend="handlerDragend"
:id="index"
v-for="(item, index) in dataList"
:key="item.menuId">
【{{index+1}}】 {{item.name}}
<i><span>{{item.orderNum}}</span></i>
</li>
</transition-group>
</ul>
</div> <!--取消与确认按钮-->
<span slot="footer" class="dialog-footer">
<el-button style="background-color: #479dff;color: #ffffff;" type="primary" @click="handlerCancel()">重置</el-button>
<el-button style="background-color: #479dff;color: #ffffff;" type="primary" @click="handlerSubmit()">确定</el-button>
</span> </el-dialog> </template>
<script>
export default {
props: {}, name: 'dragSort', data () {
return {
//是否弹窗
visible: false, //拖动前数据
beforeDataList: [], //拖动后数据
dataList: [],
} }, methods: { init(){
this.visible = true;
this.$http({
url: this.$http.adornUrl(`/sys/menu/selectHomepageMemu`),
method: 'get',
params: this.$http.adornParams()
}).then(({data}) => {
console.log(data)
this.beforeDataList = data.list;
this.dataList = data.list; })
}, handlerDragstart (e) {
const { y, target } = e
target.style.opacity = '.5'
target.oriY = y
target.oriIndex = Number(target.id)
}, handlerDrag (e) {
const { y, target } = e
if (y === 0) return
const offset = y - target.oriY
const length = this.dataList.length
if (Math.abs(offset) > target.offsetHeight) {
const index = target.oriIndex
const copyList = [...this.dataList]
let targetIndex = index + Math.round(offset / target.offsetHeight)
if (targetIndex > length - 1) {
targetIndex = length - 1
} else if (targetIndex < 0) {
targetIndex = 0
}
const readyToAppend = copyList.splice(index, 1)[0]
copyList.splice(targetIndex, 0, readyToAppend)
target.oriIndex = targetIndex
target.oriY = y
this.dataList = copyList
}
}, handlerDragend (e) {
const { y, target } = e
target.style.opacity = '1'
}, //取消
handlerCancel(){
this.dataList = this.beforeDataList;
}, saveSortingData(){ let menuIdArray = []; if(this.dataList.length > 0){
for(let i=0; i<this.dataList.length; i++){
menuIdArray.push(this.dataList[i].menuId);
}
} this.$http({
//返回重组数组给后台接口
url: this.$http.adornUrl(`/xxx/xxx/xxx`),
method: 'post',
data: this.$http.adornData(menuIdArray, false)
}).then(({data}) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.init();
}
})
} else {
this.$message.error(data.msg)
}
})
}, //确定
handlerSubmit(){
this.$confirm("该操作将按顺序重新排序?", '提示', {
distinguishCancelAndClose: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.saveSortingData(); }).catch(() => {
return;
}); } }
}
</script> <style scoped lang="scss">
.dragSort{
width: 400px;
list-style: none;
margin: 0;
padding: 0;
li{
text-align: left;
border: 1px solid #f1f1f1;
padding: 10px;
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .1);
border-radius: 5px;
margin-bottom: 10px;
cursor: move;
width: 100%;
background: #fff;
transition: all .3s;
z-index: 1;
i {
font-size: 16px;
color: #409EFF;
float: right;
}
}
}
</style>
功能效果图:

vue项目简单菜单排序的更多相关文章
- vue项目导航菜单实现
vue项目导航菜单问题 目标:横向菜单点击跳转,颜色变换,刷新可保持状态 // 模板template中通过循环菜单列表生成,动态类名改变颜色 <li v-for="(item, ind ...
- 使用vue-cli搭建vue项目简单教程
一直没有时间来写些东西,今天就写写vue脚手架吧,初建一个vue项目. vue是近段时间来特别火的一个mvvm框架,小巧.简单.易学,如果你的前端基础还好的话,学起来挺简单的.官网地址: https: ...
- VUE项目二级菜单刷新时404 nginx
原因:vue项目的路径时虚拟路径,并不存在,所以用nginx去请求请求不到,所以vue项目做了两部调整: 1.所有的请求后端接口地址前端写死 2.nginx里把所有的接口转发后端删掉,并添加以下内容 ...
- 简单vue项目脚手架(vue+webpack2.0+vuex+vue-router)
github地址 使用技术栈 webpack(^2.6.1) webpack-dev-server(^2.4.5) vue(^2.3.3) vuex(^2.3.1) vue-router(^2.5.3 ...
- VSCode配置简单的vue项目
VSCode配置简单的vue项目 https://www.cnblogs.com/wnxyz8023/p/9989447.html 由于最近要使用的项目框架为前后端分离的,采用的是vue.js+web ...
- 搭建Vue.js环境,建立一个简单的Vue项目
基于vue-cli快速构建 Vue是近年来比较火的一个前端框架,所以搭建Vue.js环境,要装webpack,vue-cli,Vue 安装webpack命令如下 $ cnpm install webp ...
- day 82 Vue学习二之vue结合项目简单使用、this指向问题
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
- 使用VSCode配置简单的vue项目
由于最近要使用的项目框架为前后端分离的,采用的是vue.js+webAPI的形式进行开发的.因为之前我没有接触过vue.js,也只是通过视频文档做了一些简单的练习.今天技术主管说让大家熟悉下VSCod ...
- 三、使用VSCode配置简单的vue项目
由于最近要使用的项目框架为前后端分离的,采用的是vue.js+webAPI的形式进行开发的.因为之前我没有接触过vue.js,也只是通过视频文档做了一些简单的练习.今天技术主管说让大家熟悉下VSCod ...
随机推荐
- JSP内置对象详解及示例
目录 JSP 内置对象 out request response config application session pageContext page exception JSP 内置对象 jsp一 ...
- 用CodePush在React Native App中做热更新
最近在学React Native,学到了CodePush热更新. 老师讲了两种实现的方法,现将其记录一下. 相比较原生开发,使用React Native开发App不仅能节约开发成本,还能做原生开发不能 ...
- SpringBoot 整合 Zookeeper 接入Starring微服务平台
背景 最近接的一个项目是基于公司产品Starring做的微服务支付平台,纯后台项目,实现三方支付公司和银行接口来完成用户账户扣款,整合成通用支付接口发布给前端调用. 但是扯蛋了,这边前端什么都不想做, ...
- php 第1讲 html介绍 html运行原理①
1. html (hypertext mark-up language )是 超文本编辑语言,主要的用处是做网页,可以在网页上显示文字.图形.动画.视频... “标记“有时候也称之为“元素” 动态网页 ...
- selenium无界面执行和反爬
selenium无界面执行和反爬 无界面执行 from selenium import webdriver from selenium.webdriver.chrome.options import ...
- C# 轮流展示照片
代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...
- 网站出现bug,我深夜被叫醒处理,用一个触发器解决了问题
凌晨两点,我正在睡梦之中,此时电话忽然想起,在漆黑的深夜中显得格外刺耳. 这个时间点电话响了肯定没好事,因为我的手机在夜间模式下,除非被同一个电话号码打三次,否则是静音,因此电话那边的人肯定有急事找我 ...
- error Couldn't find a package.json file in
error Couldn't find a package.json file in解决方法:首先初始化,再安装相应的文件 (1). npm init -f //强迫初始化文件 (2). npm in ...
- 浏览器url访问tomcat出现错误 java.lang.NoSuchMethodError解决方法
一般该类错误: 找不到方法或找不到类, 都是maven pom 仓库依赖的问题,有时是 因为缺少该依赖类,可以考虑添加相关依赖: 有时因为依赖冲突, 可以到 maven 的仓库下面把 有关该类的包 全 ...
- Python超简单的爬取网站中图片
1.首先导入相关库 import requests import bs4 import threading #用于多线程爬虫,爬取速度快,可以完成多页爬取 import os 2.使用bs4获取htm ...