<template> <view class="page"> <u-navbar title="套餐列表" :border-bottom="false" :background="bgc" title-color='#fff' back-icon-color="#fff" title-size='36' height='42'></u-navbar> <view class="box" v-if="loading"> <view class="" style="width: 100%;color: #ccc;font-weight: 600;"> 长按拖动可更改排序 </view> <!-- <view class="box_list" v-for="(item, index) in list" :key="index" @click="btnactive(item.suitId,index)" > <view :class="['boxlist', { active: tcidlist.includes(item.suitId) }]"> <view :class="['toptime', { activewz: tcidlist.includes(item.suitId) }]"> <text>{{item.name.length > 5 ? item.name.substring(0,4) + '...' : item.name}}(通电时长:{{item.value}} <text v-if="item.timeUnit == 1">日</text> <text v-if="item.timeUnit == 2">时</text> <text v-if="item.timeUnit == 3">分钟</text> <text v-if="item.timeUnit == 4">秒</text> )</text> <text>¥{{item.price}}</text> </view> <view class="ccc"> <view class="bumday" v-if="item.description == null"> <text class="shi"></text></text> </view> <view class="bumday" v-else> <text :class="['shi', { activewz: tcidlist.includes(item.suitId) }]">{{item.description.length > 20 ? item.description.substring(0, 20) + '...' : item.description}}</text></text> </view> </view> </view> </view> --> <HM-dragSorts ref="dragSorts" :list="newobj" :tcidlist="tcidlist" @update:tcidlist="handleTcidlistUpdate" :autoScroll="true" :feedbackGenerator="false" @newList="handleNewList" rowHeight='50' @change="change" @confirm="confirm" @onclick="onclick" :listBackgroundColor='F7FAFE'></HM-dragSorts> <view class="" v-if="newobj == ''" style="color: #ccc;font-size: 36rpx;margin-top: 200rpx;text-align: center;"> 暂无可用套餐 </view> <view class="anniu"> <!-- <view class="xinz" @click="btnadd"> 新建套餐 </view> --> <view class="xinz" @click="btnqd"> 确定 </view> </view> </view> <view v-if="btnmsk" style="width: 100%;height: 100vh;position: fixed;top: 0;left: 0;background-color: #000;opacity: .1;z-index: 999;"></view> </view> </template> <script> import dragSorts from '@/page_fenbao/HM-dragSorts/HM-dragSorts.vue' export default { components: { 'HM-dragSorts': dragSorts }, data() { return { btnmsk:false, list: '', loading: false, disabled: false, btnWidth: 180, show: false, options: [{ text: '删除', style: { backgroundColor: '#dd524d' } }], deviceId: '', bgc: { backgroundColor: "#8883f0", }, activeid: '', checkboxes: [], tcidlist: [], titaoc: [], newobj: [] }; }, onLoad(option) { this.deviceId = option.id }, created() { // 初始化checkboxes数组,每个元素都设为false(表示初始时不显示复选框) this.checkboxes = new Array(this.list.length).fill(false); }, onShow() { this.tcidlist = [] this.getlist() }, // 分享到好友(会话) onShareAppMessage: function() { return { title: '创想物联', path: '/pages/shouye/index' } }, // 分享到朋友圈 onShareTimeline: function() { return { title: '创想物联', query: '', path: '/pages/shouye/index' } }, methods: { handleTcidlistUpdate(newTcidlist) { // 这里是处理接收到的新 tcidlist 的地方 // console.log('接收到的 tcidlist:', newTcidlist); this.tcidlist = newTcidlist }, handleNewList(newList) { let list = [this.list, ...newList] const newSortedList = list.map((item, index) => { return { suitId: item.suitId, sort: index + 1 // 使用索引值加 1 作为 groupSort } }) let filteredArr = newSortedList.filter(item => item.suitId !== undefined) // console.log("新的排列数据:", filteredArr) setTimeout(() => { this.$u.put("/app/suit/sort", filteredArr).then((res) => { if (res.code == 200) { // this.getgroup() } }); }, 200) }, change() { }, confirm(e) { }, onclick(e) { }, // 查询本人套餐 getao() { this.$u.get(`/app/suit/listByDeviceId/${this.deviceId}`).then(res => { if (res.code == 200) { if (res.data.length > 0) { this.titaoc = res.data let uniqueSuitIds = new Set() this.list.forEach(item => { if (this.titaoc.some(titaocItem => titaocItem.sourceId === item.suitId || titaocItem.suitId === item.suitId)) { uniqueSuitIds.add(item.suitId) } }) this.tcidlist = Array.from(uniqueSuitIds) let matchedItems = this.list.filter(item => uniqueSuitIds.has(item.suitId)) let unmatchedItems = this.list.filter(item => !uniqueSuitIds.has(item.suitId)) this.list = matchedItems.concat(unmatchedItems) this.newobj = this.list }else{ this.newobj = this.list if(this.newobj.length == 0){ uni.showModal({ title: '提示', content: '未存有套餐,是否去新建?', success: function(res) { if (res.confirm) { uni.navigateTo({ url:'/page_fenbao/statulist/taocanlist/addtaocan/index' }) } else if (res.cancel) { } } }) } this.tcidlist = [] } } }) }, btnactive(id, index) { const indexInTcidList = this.tcidlist.indexOf(id); if (indexInTcidList !== -1) { this.tcidlist.splice(indexInTcidList, 1); } else { this.tcidlist.push(id); } // console.log(this.tcidlist); }, // 点击确定 btnqd() { this.btnmsk = true this.$u.delete(`/app/suit/delByDevice/${this.deviceId}`).then(res => {}) let numArr = this.tcidlist.map(item => parseInt(item, 10)) let data = { deviceId: this.deviceId, suitIds: numArr } this.$u.put(`/app/device`, data).then((res) => { if (res.code == 200) { uni.showToast({ title: res.msg, icon: 'success', duration: 1000, }) this.getao() setTimeout(() => { this.btnmsk = false uni.navigateBack() }, 1000) }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 1000, }) this.btnmsk = false } }) }, getlist() { let data = { pageNum: 1, pageSize: 99 } this.$u.get(`/app/suit/tempList`, data).then((res) => { if (res.code == 200) { this.getao() this.list = res.rows this.list = this.list.map(item => ({ ...item, tcidlist: this.tcidlist })) // console.log(this.list); this.loading = true } }); }, btnedit(item) { uni.navigateTo({ url: '/page_fenbao/statulist/taocanlist/addtaocan/index?id=' + this.deviceId + '&suitId=' + item.suitId }) }, click(item) { this.$u.delete(`/app/suit/${item.suitId}`).then((res) => { if (res.code == 200) { this.$u.toast(`删除成功`) this.getlist() } else { uni.showToast({ title: res.msg, icon: 'none', duration: 1000, }) } }) }, open(index) { this.list[index].show = true this.list.map((val, idx) => { if (index != idx) this.list[idx].show = false; }) }, btnadd() { uni.navigateTo({ url: '/page_fenbao/statulist/taocanlist/addtaocan/index?id=' + '' }) } } }; </script> <style lang="scss"> // /deep/ .u-title { // padding-bottom: 22rpx; // } // /deep/ .u-icon__icon { // padding-bottom: 22rpx; // } .active { background-color: #8883F0 !important; border-radius: 20rpx; } .activewz { color: #fff !important; } page { background: #F4F5F7; } .page { width: 750rpx; padding-bottom: 200rpx; .box { width: 750rpx; height: 100%; background: #F4F5F7; border-radius: 0rpx 0rpx 0rpx 0rpx; padding: 50rpx; .box_list { background-color: #fff; margin-top: 20rpx; border-radius: 20rpx; } .anniu { position: fixed; bottom: 0; left: 50%; transform: translateX(-50%); display: flex; height: 200rpx; padding-top: 40rpx; background-color: #fff; // justify-content: space-between; width: 100%; padding-left: 50rpx; padding-right: 50rpx; } .xinz { width: 100%; height: 84rpx; background: #8883F0; filter: blur(0px); text-align: center; line-height: 84rpx; font-size: 36rpx; color: #FFFFFF; border-radius: 18rpx; } .boxlist { padding: 40rpx 42rpx; box-sizing: border-box; .ccc { display: flex; align-items: center; justify-content: space-between; } .toptime { font-size: 32rpx; color: #000000; display: flex; justify-content: space-between; } .bumday { margin-top: 10rpx; text { font-size: 32rpx; color: #95989D; } } } /deep/ .u-swipe-action { margin-top: 30rpx; border-radius: 20rpx; width: 654rpx; height: 182rpx; background: #FFFFFF; box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1); filter: blur(0px); border: 0; } /deep/ .u-swipe-del { height: 190rpx; } } } </style>