123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <template>
- <view class="content">
- <!-- 参数
- * @property {ObjectArray} list = [] 列表数据,自定义数据,会传递到name="rowContent"插槽
- * @property {Boolean} feedbackGeneratorState = [true|false] 是否开启拖动触感反馈
- * @property {Boolean} isLongTouch = [true|false] 是否开启长按拖动
- * @property {Boolean} isAutoScroll = [true|false] 是否拖拽至边缘自动滚动列表
- * @property {Number} longTouchTime = [] 选填,触发长按时长,单位:ms,默认350ms,不支持微信小程序
- * @property {Number} listHeight = [] 选填,可拖动列表整体的高度,单位:px,默认等于窗口高度
- * @property {Number} rowHeight = [] 必填,行高,单位:px,默认44px
- * @event {Function} change 行位置发生改变时触发事件 返回值:{index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据'}
- * @event {Function} confirm 拖拽结束且行位置发生了改变触发事件 返回值:{index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据',list:'整个列表拖动后的数据'}
- * @event {Function} onclick 点击行触发事件 返回值:{index:'被点击行下标',value:'被点击行数据'}
- */
- -->
- <!-- 当前属性设置 isLongTouch关闭长按拖动 isAutoScroll开启自动滚动 feedbackGeneratorState开启触感反馈 rowHeight行高55 -->
- <HM-dragSorts :list="list" :isLongTouch="false" :isAutoScroll="true" :feedbackGeneratorState="true"
- :rowHeight="55" @change="change" @confirm="confirm" @onclick="onclick">
- <template v-slot:rowContent="{row}">
- <view class="row">
- <!-- <image v-if="row.icon" class="icon" :src="row.icon"></image> -->
- <image v-if="row.index%7 == 1" class="icon" src="./icon/01.png" mode=""></image>
- <image v-if="row.index%7 == 2" class="icon" src="./icon/02.png" mode=""></image>
- <image v-if="row.index%7 == 3" class="icon" src="./icon/03.png" mode=""></image>
- <image v-if="row.index%7 == 4" class="icon" src="./icon/04.png" mode=""></image>
- <image v-if="row.index%7 == 5" class="icon" src="./icon/05.png" mode=""></image>
- <image v-if="row.index%7 == 6" class="icon" src="./icon/06.png" mode=""></image>
- <image v-if="row.index%7 == 7" class="icon" src="./icon/07.png" mode=""></image>
- <image v-if="row.index%7 == 0" class="icon" src="./icon/08.png" mode=""></image>
- <text class="text">{{row.page_name}}</text>
- </view>
- </template>
- </HM-dragSorts>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- /*
- 0.数据结构说明 可以在结构中添加其他的数据,比如id,value等,不影响组件使用,拖动调整顺序后,组件会把传入的数据排序后原封不动在@confirm中返回。
-
- 1.动态修改list数据,组件会响应变化,但拖动排序不会影响list,
- 所以,要特别注意,在动态修改list数据时候,由于组件内数据可能已经拖动重新排序过,页面的list顺序和组件内数据顺序不一致了,
- 最好在操作list时候,先和@confirm返回的值同步一下,或者直接操作@confirm返回的值,然后赋值给list。
-
- n.最后,组件你下载了,代码你也看了,不给个五星好评,我可要打人了啊 (╬ ̄皿 ̄)=○ ヽ(#`Д´)ノ
- */
- list: [],
- ispush: false,
-
- index:0
- }
- },
- onLoad() {
- this.$api.getCommonMenuList({
- }).then((res) => {
- console.log(res.data)
- this.list = res.data.data
-
- this.list.forEach((item,index) => {
- item.index = index;
- })
-
- console.log(this.list)
-
- })
- },
- methods: {
- onclick(e) {
- // console.log('=== onclick start ===');
- // console.log("被点击行: " + JSON.stringify(e.value));
- // console.log("被点击下标: " + JSON.stringify(e.index));
- // console.log('=== onclick end ===');
- uni.showActionSheet({
- itemList: ['移除常用'],
- success: (res) => {
- console.log(e.value.id)
- console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
- if (res.tapIndex == 0) {
- console.log(e.value.id)
- this.list.forEach((item, index) => {
- console.log(item.id, e.value.id, index)
- if (item.id == e.value.id) {
- console.log(item)
- this.list.splice(index, 1)
- }
- })
- console.log(this.list);
- uni.showLoading({
- mask: true
- })
- this.$api.editCommonMenu({
- data: JSON.stringify(this.list)
- }).then((res) => {
- uni.hideLoading()
- uni.showToast({
- icon: "none",
- title: "移除成功"
- })
- console.log(res)
- })
- }
- },
- fail: (res) => {
- console.log(res.errMsg);
- }
- });
- },
- change(e) {
- // console.log('=== change start ===');
- // console.log("被拖动行: " + JSON.stringify(e.moveRow));
- // console.log('原始下标:', e.index);
- // console.log('移动到:', e.moveTo);
- // console.log('=== change end ===');
- },
- confirm(e) {
- console.log("this.list: ", this.list);
- console.log("e.list: ", e.list);
- this.list = e.list
- console.log(this.list);
- uni.showLoading({
- mask: true
- })
- this.$api.editCommonMenu({
- data: JSON.stringify(this.list)
- }).then((res) => {
- uni.hideLoading()
- uni.showToast({
- icon: "none",
- title: "排序成功"
- })
- console.log(res)
- })
- // console.log('=== confirm start ===');
- // console.log("被拖动行: " + JSON.stringify(e.moveRow));
- // console.log('原始下标:', e.index);
- // console.log('移动到:', e.moveTo);
- // console.log('=== confirm end ===');
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- //scoped css只在当前页生效 不影响子组件
- page {
- // background-color: #efeff4;
- }
- .content {
- .row {
- display: flex;
- flex-direction: row;
- align-items: center;
- .icon {
- width: 40rpx;
- height: 40rpx;
- margin-right: 13px;
- }
- .text {
- font-size: 14px;
- }
- }
- }
- </style>
|