From 891b5db055a1d27c6bda2e9700aa57f8bacd7cd2 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期四, 15 八月 2024 09:58:44 +0800 Subject: [PATCH] add 部分ui --- sub_pages/customer/shopping/shopping.vue | 533 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 526 insertions(+), 7 deletions(-) diff --git a/sub_pages/customer/shopping/shopping.vue b/sub_pages/customer/shopping/shopping.vue index 63c4619..f5a0f50 100644 --- a/sub_pages/customer/shopping/shopping.vue +++ b/sub_pages/customer/shopping/shopping.vue @@ -1,25 +1,544 @@ <template> - <view> - - <view style="min-height:200rpx"> + <view class="shopping-container"> + <view class="top-title"><span class="t-red">*</span> 花满芫报价已包含打包材料费、交易佣金 + </view> + <view class="top-desc"> + 全程鲜花冷链专线,时效快,损耗小 + </view> + <view class="flex top-kf"> + <image class="icon-clock m-r-6" src="../../../static/common/icon-kf.png"></image> + <view class="name"> + 15974805814 + </view> + </view> + <view class=""> + <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data> + <view class="shopping-item m-t-20" v-for="(item,index) of list" :key="index"> + + + <view class="sup-title"> + <radio :checked="ids.indexOf('supplier@'+item.supplierId)>=0" @click="changeItem(item,'supplier')"> + </radio> + {{ item.supplierName || '-' }} + </view> + <u-divider></u-divider> + <view v-for="(dto,j) of item.flowerList" :key="dto.id"> + <u-divider v-if="j>0"></u-divider> + <u-swipe-action> + <u-swipe-action-item :options="options1" @click="(e)=>{clickSwipeButton(dto,true)}"> + <view class="item-each flex"> + <radio :checked="ids.indexOf(dto.id)>=0" @click="changeItem(dto,'flower')"></radio> + <image class="img img100 m-r-6 br-4" :class="[!dto.stock?'component-stock-zero':'']" + :src="dto.url||dto.cover"></image> + <view class="flex1"> + <view class="title" @click.stop="toDetail(dto)"><span class="m-r-5" + style="display: inline-block;">{{dto.categoryStr||''}}</span><span + v-if="dto.levelStr" class="m-r-5" + style="display: inline-block;">{{ dto.levelStr || '' }}</span>{{ dto.name || '-' }} + </view> + <view class="price" @click.stop="toDetail(dto)"> + {{ dto.price || '-' }}元/扎 + </view> + <view class="flex"> + <view class="desc flex p-t-5" @click.stop="toDetail(dto)"> + <view class="m-r-15">剩余:{{ dto.stock || 0 }}</view> + <view class="m-r-15">颜色:{{ dto.color || '-' }}</view> + </view> + <view class="button-icons flex m-l-a m-r-0"> + <uni-icons v-if="dto.num&&dto.num>=1" type="minus" size="32" + @click.stop="addnum(dto,-1)"></uni-icons> + <view class="curnums" @click.stop="updateItemNum(dto)" + v-if="dto.num&&dto.num>=1">{{ dto.num }}</view> + <uni-icons type="plus-filled" size="32" + @click.stop="addnum(dto,1)"></uni-icons> + </view> + </view> + </view> + </view> + </u-swipe-action-item> + </u-swipe-action> + </view> + + + </view> + + </view> + <view style="min-height:140rpx;background-color: #fff;"> + </view> + <view class="bottom-price flex"> + <view class="m-t-12"> + <radio :checked="checkall" @click="selectAll"></radio> + 全选 + </view> + <view class="m-t-12 m-l-a m-r-20 text-center"> + 合计 <span class="t-red">¥ {{ totalprice || 0 }}</span> 元 + </view> + <view class="button-green-1 m-l-a m-r-0" style="min-width: 240rpx" @click="submitPay"> + 提交订单 + </view> + </view> + <view style="min-height:140rpx"> </view> <common-footer flg="2"></common-footer> </view> </template> <script> + import http from "../../../plugins/http"; + export default { data() { return { - + tel: '15974805814', + ids: [], + checkall: false, + options1: [{ + text: '删除' + }], + list: [] } }, + onShow() { + // if (this.sign['shopping']) { + + // } + this.init() + }, + mounted() { + // this.init() + }, + async onPullDownRefresh() { + await this.init() + uni.stopPullDownRefresh() + }, + computed: { + totalprice() { + + let totalprice = 0 + this.list && this.list.forEach(dto => { + dto.flowerList && dto.flowerList.forEach(item => { + if (this.ids.indexOf(item.id) >= 0) { + totalprice += item.price * item.num + } + }) + }) + return totalprice.toFixed(2) + }, + }, methods: { - + async submitPay() { + // order/confirm/info + var arr = [] + for (var j = 0; j < this.list.length; j++) { + if (!this.list[j].flowerList) { + continue + } + for (var k = 0; k < this.list[j].flowerList.length; k++) { + if (this.ids.indexOf(this.list[j].flowerList[k].id) >= 0) { + arr.push({ + id: this.list[j].flowerList[k].id, + num: this.list[j].flowerList[k].num + }) + } else { + // console.log('skip', arr, this.list.flowerList[j],this.list.flowerList[j].id) + } + } + + } + if (arr.length < 1) { + console.log('请选择商品', arr, this.ids) + this.$message.showToast('请选择商品') + return + } + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('post', '/api/customer/flower/order/confirm/info', { + data: { + flowers: arr, + } + }) + let that = this + if (code === 0) { + that.$message.hideLoading() + that.$storage.setItem('_cache_shopping_dto', JSON.stringify(data)) + uni.navigateTo({ + url: '/sub_pages/customer/shopping/confirm' + }) + } else { + //提示消失快 + setTimeout(() => { + that.$message.hideLoading() + }, 2000) + } + + }, + async clickSwipeButton(item, check) { + // console.log('clickSwipeButton', e) + //删除商品,重新加载数据? + if (check) { + await this.$message.confirm('是否删除商品') + + } + + this.$message.showLoading() + const { + code + } = await this.$http.request('get', '/api/customer/flower/cart/delete', { + params: { + id: item.id, + } + }) + this.$message.hideLoading() + if (code === 0) { + this.$store.dispatch('sign_add', 'shopnum'); + + if (this.ids.indexOf(item.id) >= 0) { + this.ids.splice(this.ids.indexOf(item.id), 1) + } + for (var i = 0; i < this.list.length; i++) { + if (this.list[i].supplierId === item.supplierId) { + // this.list[i].flowerList.splice(i, 1) + if (this.list[i].flowerList.length === 1) { + if (this.ids.indexOf('supplier@' + this.list[i].supplierId) >= 0) { + this.ids.splice(this.ids.indexOf('supplier@' + this.list[i].supplierId), 1) + } + this.list[i].flowerList.splice(0, 1) + this.list.splice(i, 1) + } else { + //只需要清楚这个元素 + var k = -1 + for (var j = 0; j < this.list[i].flowerList.length; j++) { + if (this.list[i].flowerList[j].id === item.id) { + k = j; + break + } + } + this.list[i].flowerList.splice(k, 1) + } + this.$forceUpdate() + break + } + } + // console.log('this.list', this.list) + // 解决滑动的swipe不自动关闭的问题 + if (check) { + let arr = this.list + this.list = [] + this.$nextTick(() => { + this.list = arr + }) + } + + + } + }, + + selectAll() { + console.log('selectAll', this.checkall) + if (this.checkall) { + this.ids = [] + this.checkall = false + // this.$forceUpdate() + } else { + this.list.forEach(dto => { + if (this.ids.indexOf(dto.id) < 0) { + this.ids.push(dto.id) + } + dto.flowerList.forEach(item => { + if (this.ids.indexOf(item.id) < 0) { + this.ids.push(item.id) + } + }) + if (this.ids.indexOf('supplier@' + dto.supplierId) < 0) { + this.ids.push('supplier@' + dto.supplierId) + } + }) + this.checkall = true + } + }, + changeItem(dto, type) { + console.log('click changeItem', dto, type, this.ids) + if (type === 'supplier') { + //全选上 + if (this.ids.indexOf('supplier@' + dto.supplierId) < 0) { + this.ids.push('supplier@' + dto.supplierId) + dto.flowerList.forEach(item => { + if (this.ids.indexOf(item.id) < 0) { + this.ids.push(item.id) + } + }) + //如果所有的话都悬赏了,设置为return true; + var tmpSelectAll = true + for (var i = 0; i < this.list.length; i++) { + for (var j = 0; j < this.list[i].flowerList.length; j++) { + if (this.ids.indexOf(this.list[i].flowerList[j].id) < 0) { + tmpSelectAll = false + break + } + } + + } + this.checkall = tmpSelectAll + + + } else { + this.checkall = false + this.ids.splice(this.ids.indexOf('supplier@' + dto.supplierId), 1) + console.log('this.ids splice', this.ids) + dto.flowerList.forEach(item => { + this.ids.splice(this.ids.indexOf(item.id), 1) + }) + } + + } else { + //更换个人的 + if (this.ids.indexOf(dto.id) < 0) { + this.ids.push(dto.id) + var has = true + + //判断如果都有,那么顶部的按钮也勾选上 + for (var i = 0; i < this.list.length; i++) { + if (this.list[i].supplierId === dto.supplierId) { + for (var j = 0; j < this.list[i].flowerList.length; j++) { + if (this.ids.indexOf(this.list[i].flowerList[j].id) < 0) { + has = false + break + } + } + break + } + } + if (has) { + if (this.ids.indexOf('supplier@' + dto.supplierId) < 0) { + this.ids.push('supplier@' + dto.supplierId) + this.$forceUpdate() + } + + } else { + console.log('has', this.ids, dto) + } + //如果所有的话都悬赏了,设置为return true; + var tmpSelectAll = true + for (var i = 0; i < this.list.length; i++) { + for (var j = 0; j < this.list[i].flowerList.length; j++) { + if (this.ids.indexOf(this.list[i].flowerList[j].id) < 0) { + tmpSelectAll = false + break + } + } + + } + this.checkall = tmpSelectAll + + } else { + this.checkall = false + + if (this.ids.indexOf(dto.id) >= 0) { + this.ids.splice(this.ids.indexOf(dto.id), 1) + } + //还要删除供应商的id + if (this.ids.indexOf('supplier@' + dto.supplierId) >= 0) { + this.ids.splice(this.ids.indexOf('supplier@' + dto.supplierId), 1) + } + + } + + } + }, + async updateItemNum(item) { + const res = await this.$message.confirm('', { + editable: true, + title: '请输入想要购买的数量' + }) + if (res.content && res.confirm) { + // 发送请求 + var t = parseInt(res.content) + if (isNaN(t) || t < 0) { + this.$message.showToast('数目需要大于等于0') + + } else { + if (!item.stock || t > item.stock) { + this.$message.showToast('库存不足无法修改') + return + } + this.addnum(item, (t - item.num)) + + } + } else { + + } + }, + async addnum(dto, addnum) { + if (dto.num + addnum >= 0) { + + } else { + console.log('addnum', dto, addnum) + return + } + if (!dto.stock) { + dto.stock = 0 + } + if (addnum > 0 && dto.num + addnum > dto.stock) { + this.$message.showToast('库存不足,无法修改') + return + } + this.$message.showLoading() + const { + code + } = await this.$http.request('post', '/api/customer/flower/cart/change-num', { + data: { + id: dto.id, + num: addnum + } + }) + this.$message.hideLoading() + if (code === 0) { + dto.num += addnum + if (dto.num < 1) { + //id删除清空,并且 + await this.clickSwipeButton(dto, false) + // await this.init() + } + this.$store.dispatch('sign_add', 'shopnum'); + this.$forceUpdate() + } + }, + async init() { + + this.ids = [] + this.checkall = false + + if (!this.currentInfo.id) { + this.$message.showToast('请先登录') + return + } + if (!this.currentInfo.customerDTO) { + this.$message.showToast('请先前往个人中心补充个人信息') + return + } + this.$message.showLoading() + await this.$store.dispatch('sign_clear', 'shopping'); + const { + code, + data + } = await this.$http.request('get', '/api/customer/flower/cart/list', {}) + this.$message.hideLoading() + this.list = [] + if (code === 0) { + this.list = data || [] + + } + }, + toDetail(dto) { + uni.navigateTo({ + url: '/sub_pages/customer/trade/detail?id=' + dto.id + }) + } } } </script> -<style> +<style lang="scss" scoped> + .shopping-container { + background-color: rgba(255, 255, 255, 0.4); + padding: 20rpx 30rpx; -</style> + .bottom-price { + position: fixed; + background-color: #ffffff; + left: 0rpx; + padding: 20rpx; + right: 0rpx; + // bottom: 160rpx; + bottom: 120rpx; + z-index: 11; + } + + .shopping-item { + padding: 28rpx 22rpx; + position: relative; + background-color: #ffffff; + + .sup-title { + margin-left: 10rpx; + margin-top: 10rpx; + } + + .item-each { + padding-left: 40rpx; + + .img { + width: 124rpx; + height: 124rpx; + } + + .title { + font-weight: 600; + font-size: 28rpx; + + color: #000000; + line-height: 40rpx; + + .level { + color: #20613D; + } + } + + .price { + font-weight: 400; + font-size: 28rpx; + color: #CF0000; + line-height: 40rpx; + } + + .desc { + font-weight: 400; + font-size: 24rpx; + color: #666666; + line-height: 34rpx; + } + } + + .button-icons { + //position: absolute; + //z-index: 10; + line-height: 40rpx; + + .curnums { + padding-left: 20rpx; + padding-right: 20rpx; + } + } + } + + .top-title { + font-size: 32rpx; + color: #000000; + line-height: 40rpx; + } + + .top-desc { + font-size: 28rpx; + color: #666666; + line-height: 40rpx; + } + + .top-kf { + background: linear-gradient(270deg, rgba(219, 244, 229, 0) 0%, #D5ECDE 100%); + border-radius: 8rpx; + font-weight: 400; + font-size: 24rpx; + margin-top: 10rpx; + color: #20613D; + line-height: 52rpx; + height: 52rpx; + padding-left: 26rpx; + + .icon-clock { + margin-top: 12rpx; + } + } + } +</style> \ No newline at end of file -- Gitblit v1.9.3