From 98f4b7ec4164ec1c6798c8c4188b93f4ce48ec46 Mon Sep 17 00:00:00 2001
From: xuxy <1059738716@qq.com>
Date: 星期三, 10 七月 2024 23:39:57 +0800
Subject: [PATCH] update收获地址
---
sub_pages/customer/trade/trade.vue | 603 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 597 insertions(+), 6 deletions(-)
diff --git a/sub_pages/customer/trade/trade.vue b/sub_pages/customer/trade/trade.vue
index 8183fd0..523f096 100644
--- a/sub_pages/customer/trade/trade.vue
+++ b/sub_pages/customer/trade/trade.vue
@@ -1,22 +1,613 @@
<template>
- <view>
-
+ <view class="container-canteen" style="min-height: calc(100vh - 20rpx );">
+
+ <view class="canteen-items" style="min-height: calc(100vh - 360rpx);">
+ <view v-if="(!list||list.length==0)&&true" style="width: 100%;min-height: 200rpx;">
+
+ </view>
+ <no-data v-if="(!list||list.length==0)&&true" style="width: 100%;margin-top: 220rpx;"></no-data>
+ <view class="" style="display: flex;flex-wrap: inherit;" v-else>
+ <view class="type-list">
+ <view v-for="(item,index) of types" @click="changeType(item)"
+ :class="[query.typeId==item.id?'current':'']" :key="index" class="p10 flex type-item">
+ {{item.name || '-'}}
+ </view>
+ </view>
+ <view class="canteen-item-container">
+ <view v-for="(item,index) of listFilter" :key="item.id" class="p10 canteen-item list"
+ style="display: flex;flex-wrap: inherit;">
+ <view class="m-r-10">
+ <image :src="item.cover" mode="scaleToFill" class="cover" @click="previewImg(item.cover)">
+ </image>
+ </view>
+ <view class="cateen_infos list">
+ <view class="title">{{item.name}}</view>
+ <view class="desc">月售:{{item.monthSale || '0'}}</view>
+ <view class="flex bottom-buttons flex">
+ <view class="price flex">
+ <view class="icon">¥</view>
+ <view class='num'>{{item.price || '-'}}</view>
+ </view>
+ <view class="icons flex">
+ <uni-icons v-if="item.shopnum&&item.shopnum>=1" type="minus" size="32"
+ @click="mulnum(item)"></uni-icons>
+ <view class="curnums" v-if="item.shopnum&&item.shopnum>=1">{{item.shopnum}}</view>
+ <uni-icons type="plus-filled" size="32" @click="addnum(item)"></uni-icons>
+ </view>
+ </view>
+ </view>
+ <view style="padding-bottom:100rpx">
+ </view>
+ </view>
+
+ <footer-msg v-if="query.block&&query.schoolArea"
+ :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
+
+ </view>
+ </view>
+
+ </view>
+
+
+
+ <view style="min-height:200rpx">
+ </view>
+ <common-footer flg="1"></common-footer>
+
</view>
</template>
<script>
+ import {
+ mapState
+ } from 'vuex'
export default {
data() {
return {
-
+ list: [],
+ showpop: false,
+ query: {
+ name: '',
+ // status:'',
+ schoolArea: '',
+ schoolAreaStr: '',
+ block: '',
+ blockStr: '',
+ typeId: '',
+ },
+ types: [{
+ name: '全部',
+ id: ''
+ }],
+ schools: [],
+ schoolIndex: -1,
+ blockIndex: -1,
+ blocks: [],
+ shoptotal: 0,
+ cal: 0,
}
},
+ async onLoad() {
+ // this.list = [{
+ // 'shopnum': 0
+ // }, {
+ // 'shopnum': 1
+ // }]
+
+ //加载分类
+ this.$http.request('get', '/api/canteen/goods/type/list', {
+ params: {
+ size: 100
+ }
+ }).then(async res => {
+ if (res.code == 0) {
+ this.types = res.data && res.data.records || []
+ this.types.unshift({
+ name: '全部',
+ id: ''
+ });
+
+ }
+ })
+
+ this.listApi = '/api/canteen/customer/goods/list'
+
+ // this.getList()
+ //加载校区、楼栋
+ this.$http.request('get', '/api/school/area/list', {
+
+ }).then(async res => {
+ if (res.code == 0) {
+ this.schools = res.data || []
+ // this.schools = [{
+ // 'name': '全部',
+ // 'id': '',
+ // }]
+ // for (var item of arr) {
+ // this.schools.push(item)
+ // }
+ }
+ console.log('schools', this.schools)
+ var schoolIndex = uni.getStorageSync('schoolIndex')
+ if (!schoolIndex && schoolIndex !== 0) {
+ // await this.getList()
+ // this.list.forEach(item => {
+ // if (!item.shopnum) {
+ // item.shopnum = 0
+ // }
+ // })
+ } else {
+ this.schoolIndex = schoolIndex
+ if (this.schoolIndex >= 0) {
+ this.PickerChangeSchool({
+ detail: {
+ value: this.schoolIndex
+ }
+ })
+ // await this.getList()
+ // this.list.forEach(item => {
+ // if (!item.shopnum) {
+ // item.shopnum = 0
+ // }
+ // })
+ }
+ }
+
+ })
+
+
+ },
methods: {
-
+ changeType(item) {
+ this.query.typeId = item.id || ''
+ },
+ async PickerChangeSchool(e) {
+ if (e.detail.value == '-1') {
+ this.$message.showToast('未选择校区')
+ return
+ }
+ this.schoolIndex = parseInt(e.detail.value)
+ this.query.schoolArea = this.schools[this.schoolIndex].id
+ this.blockIndex = -1
+
+ this.$message.showLoading()
+ var {
+ data
+ } = await this.$http.request('get', '/api/school/block/list', {
+ params: {
+ schoolArea: this.query.schoolArea,
+ size: 200
+ }
+ })
+
+ this.blocks = data && data.records || []
+ // var arr = data.records || []
+ // this.blocks = [{
+ // 'name': '全部',
+ // 'id': '',
+ // }]
+ // for (var item of arr) {
+ // this.blocks.push(item)
+ // }
+ this.$message.hideLoading()
+ if (this.blocks.length >= 1) {
+ this.query.block = this.blocks[0].id
+ this.query.blockStr = this.blocks[0].name
+ this.page.current = 1
+ this.blockIndex = 0
+ this.list = []
+ this.getList()
+ } else {
+ this.page.current = 1
+ this.list = []
+ }
+
+
+
+ },
+ async PickerChangeBlock(e) {
+ if (e.detail.value == '-1') {
+ this.$message.showToast('未选择楼栋')
+ return
+ }
+ this.blockIndex = parseInt(e.detail.value)
+ this.query.block = this.blocks[this.blockIndex].id
+ this.page.current = 1
+ // this.list = []
+ this.list = []
+ // this.getList()
+ await this.getList()
+ this.list.forEach(item => {
+ if (!item.shopnum) {
+ item.shopnum = 0
+ }
+ })
+
+ },
+ mulnum(item) {
+ if (item.shopnum > 0) {
+ item.shopnum -= 1
+ }
+ this.shoptotal -= 1
+ this.cal += 1
+ this.$forceUpdate()
+
+ },
+ addnum(item) {
+ // console.log('addnum', item)
+ if (item.shopnum) {
+ item.shopnum += 1
+ } else {
+ item.shopnum = 1
+ }
+ this.shoptotal += 1
+ this.cal += 1
+ this.$forceUpdate()
+ },
+ openShopDetail() {
+ // this.showpop = false
+ // this.$forceUpdate()
+ this.cal += 1
+ this.$refs.popup_shop_detail.open()
+ this.$nextTick(() => {
+ this.$refs.addressselect && this.$refs.addressselect.init()
+ })
+ },
+ closeShopDetail() {
+ // this.showpop = true
+ this.$refs.popup_shop_detail.close()
+ },
+ async submitGood() {
+ var values = []
+ for (var item of this.list) {
+ if (item.shopnum > 0) {
+ values.push({
+ id: item.id,
+ num: item.shopnum
+ })
+ }
+ }
+ //购买
+ if (!this.address.id) {
+ this.$message.showToast('请先选择收获地址')
+ return
+ }
+
+ await this.$message.confirm('确定购买吗?')
+ this.$message.showLoading()
+ const {
+ code,
+ data
+ } = await this.$http.request('post', '/api/canteen/customer/order', {
+ data: {
+ customerAddress: (this.address.schoolAreaStr || '') + (this.address.blockStr || '') + (
+ this
+ .address.room || '') + (this.address.address || ''),
+ customerTel: this.address.tel,
+ customer: this.address.name,
+ goodsList: values, //规格
+ }
+ })
+
+ this.$message.hideLoading()
+ if (code == 0) {
+
+ this.list.forEach(item => {
+ item.shopnum = 0
+ })
+ this.shoptotal = 0
+ this.cal += 1
+ this.$refs.popup_shop_detail.close()
+ this.$forceUpdate()
+
+ //todo,预支付
+ //深夜食堂的逻辑不太一样
+ if (true) {
+ const orderInfo = await this.$http.request('get', '/api/canteen/customer/payment/' + data
+ .orderId, {})
+ //支付准备
+ var info = orderInfo.data
+ let that = this
+ wx.requestPayment({
+ ...info,
+ success(res) {
+ console.log('pay success', res)
+ uni.navigateTo({
+ url: '/pages/canteen/canteen-success/canteen-success'
+ })
+ },
+ fail(err) {
+ console.error('pay fail', err)
+ that.$message.showToast('支付失败')
+ }
+ })
+ } else {
+ uni.navigateTo({
+ url: '/pages/canteen/canteen-success/canteen-success'
+ })
+ }
+
+
+ }
+ }
+ },
+ computed: {
+ ...mapState({
+ address: state => {
+ return state.defaultaddress || {}
+ },
+ }),
+ selectprices() {
+ var arr = 0
+ for (var item of this.list) {
+ if (item.shopnum > 0) {
+ // arr.push(item)
+ arr += (item.price >= 0 ? item.price : 0) * item.shopnum
+ }
+ }
+ if (this.cal > 0) {
+ return arr
+
+ }
+ return 0
+ },
+ selectgoods() {
+ var arr = []
+ for (var item of this.list) {
+ if (item.shopnum > 0) {
+ arr.push(item)
+ }
+ }
+ if (this.cal > 0) {
+ return arr
+
+ }
+ return arr
+
+ },
+ listFilter() {
+ if (this.query.typeId) {
+ var arr = []
+ if (this.list && this.list.length > 0) {
+ for (var item of this.list) {
+ if (item.typeId === this.query.typeId || item.type === this.query.typeId) {
+ arr.push(item)
+ }
+ }
+ }
+ return arr
+ } else {
+ return this.list
+ }
+
+ },
+ // shoptotal() {
+ // var a = 0
+ // for (var item of this.list) {
+ // a += item.shopnum || 0
+ // }
+ // console.log('shoptotal',a,this.list)
+ // return a
+ // }
}
}
</script>
-<style>
+<style lang="scss" scoped>
+ .container-canteen {
+ background-color: #FFFFFF;
-</style>
+ .type-list {
+ max-width: 178rpx;
+ width: 178rpx;
+ min-width: 178rpx;
+ background: #EEF7F5;
+ border-radius: 8rpx;
+ min-height: calc(100vh - 300rpx);
+ max-height: calc(100vh - 300rpx);
+ overflow-y: scroll;
+ margin-left: 30rpx;
+
+ .type-item {
+ text-align: center;
+ font-weight: 400;
+ font-size: 28rpx;
+ color: #000000;
+ line-height: 88rpx;
+ // padding-left: 30rpx;
+ // padding-right: 30rpx;
+ }
+
+ .type-item.current {
+ font-weight: 600;
+ font-size: 28rpx;
+ color: #04BA97;
+ }
+ }
+
+ .title-before-blue.green {
+ padding-left: 30rpx;
+ padding-bottom: 0rpx;
+ }
+
+ .title-before-blue:before {
+ color: #04BA97;
+ font-weight: 600;
+ min-width: 14rpx;
+ background: #04BA97;
+ border-radius: 8rpx;
+ display: inline-block;
+ }
+
+ .popup_shop_detail {
+ background: #FFFFFF;
+ // padding: 30rpx 0rpx;
+ padding-bottom: 30rpx;
+
+ .footer-shop {
+ margin: 0 auto;
+ margin-top: 46rpx;
+ }
+
+ .common-address-select {
+ margin-left: 20rpx;
+ margin-right: 20rpx;
+ }
+
+ .close-parent {
+ margin-right: 20rpx;
+ }
+
+ .canteen-items {
+ .canteen-item {
+ margin-left: 20rpx;
+ margin-right: 0rpx;
+
+ .cateen_infos {
+ width: 440rpx;
+
+ }
+
+ .cateen_infos.list {
+ max-width: 30 0rpx;
+ min-width: 200rpx;
+ }
+ }
+ }
+ }
+
+ .canteen-items {
+ // margin-left: 30rpx;
+
+ .canteen-item {
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ // width: 690rpx;
+ // max-width: 690rpx;
+ height: 206rpx;
+ background: #FFFFFF;
+ border-radius: 16rpx;
+ display: flex;
+ margin-bottom: 24rpx;
+
+ .cover {
+ width: 202rpx;
+ height: 202rpx;
+ }
+
+ .title {
+ font-weight: 600;
+ font-size: 32rpx;
+ color: #000000;
+ line-height: 44rpx;
+ }
+
+ .desc {
+ font-weight: 400;
+ font-size: 24rpx;
+ color: #666666;
+ line-height: 34rpx;
+ }
+
+ .price {
+
+ font-size: 24rpx;
+
+ .icon {
+ line-height: 60rpx;
+ }
+
+ .num {
+ font-weight: 600;
+ font-size: 36rpx;
+ color: #000000;
+ // line-height: 50rpx;
+ }
+ }
+
+ .cateen_infos {
+ width: 400rpx;
+ position: relative;
+ }
+
+ .cateen_infos.list {
+ max-width: 300rpx;
+ min-width: 200rpx;
+
+ }
+
+ .bottom-buttons {
+ // width: 400rpx;
+ position: absolute;
+ bottom: 0rpx;
+
+ left: 0;
+ right: 0;
+
+ .icons {
+ margin-left: auto;
+ margin-right: 0;
+
+ .curnums {
+ line-height: 60rpx;
+ }
+ }
+ }
+ }
+
+ .canteen-item-container {
+ width: 100%;
+ min-height: 300rpx;
+ max-height: calc(100vh - 300rpx);
+ overflow-y: scroll;
+ }
+
+ .canteen-item.list {
+ margin-right: 0rpx;
+ flex: 1;
+ margin-bottom: 0rpx;
+
+ .cover {
+ width: 158rpx;
+ height: 158rpx;
+ }
+ }
+ }
+
+ .canteen-footer-shop {
+ position: absolute;
+ position: fixed;
+ left: 30rpx;
+ bottom: 30rpx;
+ }
+
+ .area-select {
+ .area {
+
+ margin-right: 0rpx;
+
+ .t {
+ font-weight: 400;
+ font-size: 32rpx;
+ color: #000000;
+ line-height: 44rpx;
+ }
+
+ .i {}
+ }
+
+ .area-1 {
+ margin-left: auto;
+ }
+
+ .area-2 {
+ margin-left: 84rpx;
+ }
+ }
+
+ .canteen-banner {
+ width: 750rpx;
+ min-height: 360rpx;
+ }
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.3