JavaScript

超轻量级php框架startmvc

vue 下列表侧滑操作实例代码详解

更新时间:2020-07-17 17:48:01 作者:startmvc
由于是上线的项目且已经按照数据逻辑去渲染了能看懂的看逻辑吧。有点多效果如图<templ

由于是上线的项目且已经按照数据逻辑去渲染了能看懂的看逻辑吧。有点多

效果如图


<template>
 <div class="lottery-management-wrapper">
 <ul>
 <li class="lottery-management-list-wrapper">
 <div class="lottery-management-list" v-for="(item , index) in activityListData">
 <div class="lottery-management-list-left" @click="detailOfTheActivity(item)">
 <dl>
 <dd>
 <h3>{{item.activityName}}</h3>
 <p>活动时间:{{item.beginTime}}至{{item.endTime}}</p>
 </dd>
 <dt :class="item.status == 3 ? 'txt-red': item.status == 0 ? 'txt-blue' : ''">{{item.status == 3 ? '进行中': item.status == 1 ? '已结束': item.status == 0 ? '待启用' : ''}}</dt>
 </dl>
 </div>
 <div class="lottery-management-list-right">
 <a @click="startActivityAlert = true;currentItem = item;currentIndex = index" v-if="item.status == 0">启用活动</a>
 <span @click="delActivityAlert = true;currentItem = item;currentIndex = index" v-if="item.status == 1">删除活动</span>
 <span @click="stopActivityAlert = true;currentItem = item;currentIndex = index" v-if="item.status == 3 || item.status == 0">结束活动</span>
 </div>
 </div>
 </li>
 </ul>
 <div class="add-wrapper" @click="addAwardActivity">
 <span class="iconfont icon-tianjia1"></span>
 <span class="text">新增活动</span>
 </div>
 <h4>商户员工账号只有活动查看权限,没有活动操作权限</h4>
 <transition name="fade">
 <div class="mask-wrapper"
 v-show="delActivityAlert"
 @touchmove.prevent>
 <tipsBox title="操作提示"
 text1="是否删除当前活动"
 button1="取消"
 button2="确定"
 @confirm="delActivity"
 @cancel="delActivityAlert = false">
 </tipsBox>
 </div>
 </transition>
 <transition name="fade2">
 <div class="mask-wrapper"
 v-show="stopActivityAlert"
 @touchmove.prevent>
 <tipsBox title="操作提示"
 text1="是否停止当前活动"
 button1="取消"
 button2="确定"
 @confirm="stopActivity"
 @cancel="stopActivityAlert = false">
 </tipsBox>
 </div>
 </transition>
 <transition name="fade3">
 <div class="mask-wrapper"
 v-show="startActivityAlert"
 @touchmove.prevent>
 <tipsBox title="操作提示"
 text1="是否启用当前活动"
 button1="取消"
 button2="确定"
 @confirm="startActivity"
 @cancel="startActivityAlert = false">
 </tipsBox>
 </div>
 </transition>
 </div>
</template>
<script>
 import TipsBox from 'components/tipsBox/TipsBox';
 import {configs} from 'common/js/config.js';
 import {baseAjaxParam, baseAjaxErr} from 'common/js/publicFn.js';
 const activityListApi = configs.baseApi + '/marketing/rouletter/activityList';
 const overActivityApi = configs.baseApi + '/marketing/rouletter/overActivity';
 const delActivityApi = configs.baseApi + '/marketing/rouletter/delActivity';
 const startActivityApi = configs.baseApi + '/marketing/rouletter/startActivity';
 export default {
 data () {
 return {
 delActivityAlert: false,
 stopActivityAlert: false,
 startActivityAlert: false,
 activityListData: [],
 currentItem: null,
 currentIndex: null
 };
 },
 methods: {
 getActivityList () {
 let data = baseAjaxParam(this);
 this.$http.jsonp(activityListApi, {params: data}).then((res) => {
 if (res.body.code === 0) {
 this.activityListData = res.body.data;
 this.setSlide();
 } else {
 baseAjaxErr(this, res);
 }
 }).catch(function (err) {
 alert('服务器错误:' + err.status);
 console.log(err);
 });
 },
 setSlide () {
 this.$nextTick(() => {
 let list = document.getElementsByClassName('lottery-management-list');
 if (list) {
 if (this.currentIndex !== null) {
 list[this.currentIndex].firstElementChild.style.marginLeft = '0';
 }
 for (let i = 0; i < list.length; i++) {
 (() => {
 let start = 0;
 list[i].ontouchstart = function (e) {
 start = e.touches[0].pageX;
 };
 list[i].ontouchmove = function () {
 list[i].ontouchend = function (e) {
 let end = e.changedTouches[0].pageX;
 let rightWidth = list[i].lastElementChild.offsetWidth;
 if (end < start) {
 list[i].firstElementChild.style.marginLeft = -rightWidth + 'px';
 }
 if (end > start) {
 list[i].firstElementChild.style.marginLeft = '0';
 }
 };
 };
 })(i);
 }
 }
 });
 },
 // 查看详情
 detailOfTheActivity (item) {
 this.$router.push('/detailOfTheActivity?activityId=' + item.activityId);
 },
 // 删除活动
 delActivity () {
 if (this.$store.state.roleId !== '0' && this.$store.state.roleId !== 'ROL197001010800007e4b5ce2fe28308' && this.$store.state.roleId !== 'ROL197001010800004ca4238a0b92382') {
 if (!this.$store.state.authList['AUT20180705181442eQbFSPyr7HTOKji']) {
 this.$store.commit('popSet', {tips: '无权限操作', status: 1, time: 1500});
 return;
 }
 }
 this.delActivityAlert = false;
 let data = baseAjaxParam(this);
 data.activityId = this.currentItem.activityId;
 this.$http.jsonp(delActivityApi, {params: data}).then((res) => {
 if (res.body.code === 0) {
 this.$store.commit('popSet', {tips: '删除动成功', status: 0, time: 1500});
 this.getActivityList();
 } else {
 baseAjaxErr(this, res);
 }
 }).catch(function (err) {
 alert('服务器错误:' + err.status);
 console.log(err);
 });
 },
 // 停止活动
 stopActivity () {
 if (this.$store.state.roleId !== '0' && this.$store.state.roleId !== 'ROL197001010800007e4b5ce2fe28308' && this.$store.state.roleId !== 'ROL197001010800004ca4238a0b92382') {
 if (!this.$store.state.authList['AUT20180705181442eQbFSPyr7HTOKji']) {
 this.$store.commit('popSet', {tips: '无权限操作', status: 1, time: 1500});
 return;
 }
 }
 this.stopActivityAlert = false;
 let data = baseAjaxParam(this);
 data.activityId = this.currentItem.activityId;
 this.$http.jsonp(overActivityApi, {params: data}).then((res) => {
 if (res.body.code === 0) {
 this.$store.commit('popSet', {tips: '结束活动成功', status: 0, time: 1500});
 this.getActivityList();
 } else {
 baseAjaxErr(this, res);
 }
 }).catch(function (err) {
 alert('服务器错误:' + err.status);
 console.log(err);
 });
 },
 // 启用活动
 startActivity () {
 if (this.$store.state.roleId !== '0' && this.$store.state.roleId !== 'ROL197001010800007e4b5ce2fe28308' && this.$store.state.roleId !== 'ROL197001010800004ca4238a0b92382') {
 if (!this.$store.state.authList['AUT20180705181442eQbFSPyr7HTOKji']) {
 this.$store.commit('popSet', {tips: '无权限操作', status: 1, time: 1500});
 return;
 }
 }
 this.startActivityAlert = false;
 let data = baseAjaxParam(this);
 data.activityId = this.currentItem.activityId;
 this.$http.jsonp(startActivityApi, {params: data}).then((res) => {
 if (res.body.code === 0) {
 this.$store.commit('popSet', {tips: '启用活动成功', status: 0, time: 1500});
 this.getActivityList();
 } else {
 baseAjaxErr(this, res);
 }
 }).catch(function (err) {
 alert('服务器错误:' + err.status);
 console.log(err);
 });
 },
 addAwardActivity () {
 if (this.$store.state.roleId !== '0' && this.$store.state.roleId !== 'ROL197001010800007e4b5ce2fe28308' && this.$store.state.roleId !== 'ROL197001010800004ca4238a0b92382') {
 if (!this.$store.state.authList['AUT20180705181442eQbFSPyr7HTOKji']) {
 this.$store.commit('popSet', {tips: '无权限操作', status: 1, time: 1500});
 return;
 }
 }
 this.$router.push('addAwardActivity');
 }
 },
 created () {
 this.getActivityList();
 },
 components: {
 TipsBox
 }
 };
</script>
<style lang="stylus" rel="stylesheet/stylus">
 @import '../../../common/stylus/mixin'
 .lottery-management-wrapper {
 width :100%;
 position :absolute;
 background-color :#ECF0F3;
 min-height :100%;
 .lottery-management-list-wrapper {
 width :100%;
 overflow hidden;
 .lottery-management-list {
 background-color :#fff;
 margin-bottom cal(10);
 overflow :hidden;
 width :200%;
 .lottery-management-list-left {
 width :cal(750);
 float :left;
 transition: margin-left .4s;
 dl {
 overflow :hidden;
 height :cal(128);
 dd {
 float left;
 width :80%;
 h3 {
 font-size :cal(28);
 color: #4A4A4A;
 margin:cal(32) 0 0 cal(50);
 }
 p {
 font-size : cal(18)
 color:#4A4A4A;
 margin:cal(16) 0 0 cal(50);
 }
 }
 dt {
 float :left;
 width :20%;
 color: #9B9B9B;
 font-size :cal(26);
 line-height :cal(128);
 }
 .txt-red {
 color:#D0021B;
 }
 .txt-blue {
 color:#4A90E2;
 }
 }
 }
 .lottery-management-list-right {
 float :left;
 overflow: hidden;
 font-size :cal(24);
 line-height :cal(128);
 color :#ffffff;
 text-align :center;
 a {
 float: left;
 background-color :#70AEF6;
 width :cal(190);
 color :#ffffff;
 }
 span {
 float: left;
 width :cal(128);
 background-color :#FE3A32;
 }
 }
 }
 }
 .add-wrapper {
 height: cal(100)
 box-sizing: border-box
 padding-top: cal(24)
 margin-bottom: cal(72)
 background: #fff
 text-align: center
 font-size: 0
 margin-top :cal(20)
 .icon-tianjia1 {
 color: #fe6f3f
 font-size: cal(54)
 vertical-align: top
 margin-right: cal(12)
 }
 .text {
 line-height: cal(60)
 vertical-align: top
 color: #fe6f3f
 font-size: cal(30)
 }
 }
 h4 {
 color: #D0021B;
 font-size :cal(24);
 text-align: center;
 margin-bottom :cal(100);
 }
 .mask-wrapper {
 position: fixed
 left: 0
 right: 0
 bottom: 0
 top: 0
 background: rgba(0,0,0,.5)
 &.fade-enter-active, &.fade-leave-active {
 transition: all 0.2s linear
 }
 &.fade-enter,&.fade-leave-active{
 opacity: 0
 }
 &.fade2-enter-active, &.fade2-leave-active {
 transition: all 0.2s linear
 }
 &.fade2-enter,&.fade2-leave-active{
 opacity: 0
 }
 &.fade3-enter-active, &.fade3-leave-active {
 transition: all 0.2s linear
 }
 &.fade3-enter,&.fade3-leave-active{
 opacity: 0
 }
 }
 }
</style>

总结

以上所述是小编给大家介绍的vue 下列表侧滑操作实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

vue 列表侧滑 vue 侧滑