xuxy
2024-07-27 4250e140336ac40e10ab4c3b650030f82098ca92
update bug和样式
已修改8个文件
937 ■■■■■ 文件已修改
App.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.vue 531 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/user/supplier-user.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/self/collect.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shop/shop.vue 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/shopping/shopping.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/trade/detail.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sub_pages/customer/trade/trade.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
App.vue
@@ -234,12 +234,19 @@
        padding-top: 40rpx;
        padding-bottom: 40rpx;
        font-size: var(--title_font_size2);
        color: #20613D;
        font-weight: 600;
    }
    .title-before-blue:before {
        content: "|";
        color: #3140A2;
        content: "||";
        margin-right: 20rpx;
        color: #20613D;
        margin-right: 20rpx;
        min-width: 20rpx;
        background-color: #20613D;
        border-radius: 6rpx;
    }
    .blue {
@@ -1085,7 +1092,7 @@
            margin-right: 20rpx;
            border: 2rpx solid #FFFFFF;
            background-size: 100% 100%;
                background-color: #fff;
            background-color: #fff;
        }
        .store-name {
@@ -1095,6 +1102,7 @@
            line-height: 40rpx;
            margin-top: 20rpx;
        }
        .store-name.t1 {
            color: #666;
        }
@@ -1106,6 +1114,7 @@
            line-height: 34rpx;
            margin-top: 8rpx;
        }
        .store-address.t1 {
            color: #666;
        }
@@ -1120,6 +1129,7 @@
            color: #5B8C71;
            line-height: 52rpx;
            text-align: center;
            margin-top: 30rpx;
        }
        .store-sc {
@@ -1132,6 +1142,7 @@
            color: #FFFFFF;
            line-height: 64rpx;
            display: flex;
            margin-top: 20rpx;
            .icon-view {
                // margin-top: 8rpx;
pages/home/home.vue
@@ -1,280 +1,319 @@
<template>
  <view class="main-container user-home">
    <view class="bg-top-green"></view>
    <!-- 顶部,可能 -->
    <view class="school" :style="{'padding-top':(StatusBar)+'px'
    <view class="main-container user-home">
        <view class="bg-top-green"></view>
        <!-- 顶部,可能 -->
        <view class="school" :style="{'padding-top':(StatusBar)+'px'
        ,height:CustomBar+'rpx','line-height':CustomBar+'rpx' }">
      <picker @change="PickerChangeSchool" :value="areaIndex" :range="schools" range-key="name">
            <!--   <picker @change="PickerChangeSchool" :value="areaIndex" :range="schools" range-key="name">
        <view class="picker flex">
          <uni-icons type="location" class="m-r-5" size="18"></uni-icons>
          <view>
            {{ areaIndex >= 0 && schools[areaIndex].name ? schools[areaIndex].name : '选择位置' }}
          </view>
        </view>
      </picker>
    </view>
    <view class="search-container m-t-12 flex">
      <view class="flex1 input">
        <u-input placeholder="请输入花名" v-model="search_flow">
          <template slot="suffix">
            <uni-icons color="#20613D" type="search" size="24" @tap="buttonSearchFlow"></uni-icons>
          </template>
        </u-input>
      </view>
    </view>
      </picker> -->
            <view class="picker flex" @click.stop="goToAddress">
                <uni-icons type="location" class="m-r-5" size="18"></uni-icons>
                <view>
                    {{ address&&address.id?address.address: '选择地址' }}
                </view>
            </view>
        </view>
        <view class="search-container m-t-12 flex">
            <view class="flex1 input">
                <u-input placeholder="请输入花名" v-model="search_flow">
                    <template slot="suffix">
                        <uni-icons color="#20613D" type="search" size="24" @tap="buttonSearchFlow"></uni-icons>
                    </template>
                </u-input>
            </view>
        </view>
    <!-- banner -->
    <uni-swiper-dot class="uni-swiper-dot-box" @clickItem=clickItem :info="info" :current="currentBanner"
                    :mode="'dot'" :dots-styles="dotsStyles[0]" field="content">
      <swiper class="swiper-box" @change="changeBanner" :interval="10000" :circular="true" :current="0"
              v-if="banners&&banners.length>0" :autoplay="true">
        <swiper-item v-for="(item, index) in banners" :key="index">
          <view class="swiper-item" :class="'swiper-item' + index">
            <image @click="previewImg(item.imageSmall||item.image)" class="home-banner-image"
                   mode="aspectFit" :src="item.imageSmall||item.image">
            </image>
          </view>
        </swiper-item>
      </swiper>
      <swiper class="swiper-box" @change="changeBanner" :current="0" v-if="!banners||banners.length==0">
        <swiper-item v-for="(item, index) in 1" :key="index">
          <view class="swiper-item" :class="'swiper-item' + index">
            <image class="home-banner-image" mode="scaleToFill"
                   src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/62/62ddac6297104e369aba646be704064dbanner@2x.png">
            </image>
          </view>
        </swiper-item>
      </swiper>
    </uni-swiper-dot>
    <!-- tip -->
    <view class="m-t-12" @click="getNoticeMore">
      <uni-notice-bar class="notice-bar" color="#333" background-color="#fff" show-get-more show-icon
                      :scrollable="scrollable" :text="currentNotice.title||'暂无公告'" :key="currentNotice.id"/>
      <span v-if="!currentNotice||!currentNotice.id">&nbsp;</span>
    </view>
    <!-- 当前分类 -->
    <home-category></home-category>
    <!-- 特别的几个公告图片 -->
    <home-banner-imgs></home-banner-imgs>
    <!-- 均价情况 -->
    <home-price></home-price>
    <!-- 几个专区 -->
    <home-zones></home-zones>
    <!-- 置顶的花列表 -->
    <home-top-flow></home-top-flow>
        <!-- banner -->
        <uni-swiper-dot class="uni-swiper-dot-box" @clickItem=clickItem :info="info" :current="currentBanner"
            :mode="'dot'" :dots-styles="dotsStyles[0]" field="content">
            <swiper class="swiper-box" @change="changeBanner" :interval="10000" :circular="true" :current="0"
                v-if="banners&&banners.length>0" :autoplay="true">
                <swiper-item v-for="(item, index) in banners" :key="index">
                    <view class="swiper-item" :class="'swiper-item' + index">
                        <image @click="previewImg(item.imageSmall||item.image)" class="home-banner-image"
                            mode="aspectFit" :src="item.imageSmall||item.image">
                        </image>
                    </view>
                </swiper-item>
            </swiper>
            <swiper class="swiper-box" @change="changeBanner" :current="0" v-if="!banners||banners.length==0">
                <swiper-item v-for="(item, index) in 1" :key="index">
                    <view class="swiper-item" :class="'swiper-item' + index">
                        <image class="home-banner-image" mode="scaleToFill"
                            src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/62/62ddac6297104e369aba646be704064dbanner@2x.png">
                        </image>
                    </view>
                </swiper-item>
            </swiper>
        </uni-swiper-dot>
        <!-- tip -->
        <view class="m-t-12" @click="getNoticeMore">
            <uni-notice-bar class="notice-bar" color="#333" background-color="#fff" show-get-more show-icon
                :scrollable="scrollable" :text="currentNotice.title||'暂无公告'" :key="currentNotice.id" />
            <span v-if="!currentNotice||!currentNotice.id">&nbsp;</span>
        </view>
        <!-- 当前分类 -->
        <home-category></home-category>
        <!-- 特别的几个公告图片 -->
        <home-banner-imgs></home-banner-imgs>
        <!-- 均价情况 -->
        <home-price></home-price>
        <!-- 几个专区 -->
        <home-zones></home-zones>
        <!-- 置顶的花列表 -->
        <home-top-flow></home-top-flow>
    <view style="min-height:200rpx">
    </view>
    <common-footer flg="0"></common-footer>
        <view style="min-height:200rpx">
        </view>
        <common-footer flg="0"></common-footer>
  </view>
    </view>
</template>
<script>
import homePrice from './components/home-price.vue'
import homeBannerImgs from './components/home-banner-imgs.vue'
import homeZones from './components/home-zones.vue'
import homeTopFlow from './components/home-top-flow.vue'
import homeCategory from './components/home-category.vue'
    import {
        mapState
    } from 'vuex'
    import homePrice from './components/home-price.vue'
    import homeBannerImgs from './components/home-banner-imgs.vue'
    import homeZones from './components/home-zones.vue'
    import homeTopFlow from './components/home-top-flow.vue'
    import homeCategory from './components/home-category.vue'
export default {
  components: {
    homeCategory,
    homePrice,
    homeBannerImgs,
    homeZones,
    homeTopFlow
  },
    export default {
        computed: {
            ...mapState({
                address: state => {
                    return state.defaultaddress || {}
                },
                currentInfo: state => {
                    return state.currentInfo || {}
                },
            }),
        },
        components: {
            homeCategory,
            homePrice,
            homeBannerImgs,
            homeZones,
            homeTopFlow
        },
  data() {
    return {
      search_flow: '',
      CustomBar: uni.getStorageSync('CustomBar'),
      StatusBar: uni.getStorageSync('StatusBar'),
      // StatusBar:0,
      color: '#fff',
      schools: [],
      areaIndex: -1,
      scrollable: false,
        data() {
            return {
                search_flow: '',
                CustomBar: uni.getStorageSync('CustomBar'),
                StatusBar: uni.getStorageSync('StatusBar'),
                // StatusBar:0,
                color: '#fff',
                schools: [],
                areaIndex: -1,
                scrollable: false,
      info: [{
        colorClass: 'uni-bg-red',
        url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
        content: '内容 A'
      },
        {
          colorClass: 'uni-bg-green',
          url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
          content: '内容 B'
        },
        {
          colorClass: 'uni-bg-blue',
          url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
          content: '内容 C'
        }
      ],
      dotStyle: [{
        backgroundColor: 'rgba(0, 0, 0, .3)',
        border: '1px rgba(0, 0, 0, .3) solid',
        color: '#fff',
        selectedBackgroundColor: 'rgba(0, 0, 0, .9)',
        selectedBorder: '1px rgba(0, 0, 0, .9) solid'
      },
        {
          backgroundColor: 'rgba(255, 90, 95,0.3)',
          border: '1px rgba(255, 90, 95,0.3) solid',
          color: '#fff',
          selectedBackgroundColor: 'rgba(255, 90, 95,0.9)',
          selectedBorder: '1px rgba(255, 90, 95,0.9) solid'
        },
        {
          backgroundColor: 'rgba(83, 200, 249,0.3)',
          border: '1px rgba(83, 200, 249,0.3) solid',
          color: '#fff',
          selectedBackgroundColor: 'rgba(83, 200, 249,0.9)',
          selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
        }
      ],
      currentBanner: 0,
      banners: [],
      tripList: [],
      tuangouList: [],
      hide_footer: false,
      noticeList: [],
      currentNoticeIndex: 0,
      currentNotice: {}
    };
  },
  // onShareAppMessage() {
  // let that = this;
  // var url =
  //     `/pages/home/home?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${this.currentInfo&&this.currentInfo.nickName||''}`; //你的转发页面路径拼接参数
  // return {
  //     title: "校购GO小狗狗",
  //     path: url,
  // }
  // },
  // onShareTimeline() {
  //     let that = this;
  //     var url = "/pages/home/home" //你的分享页面路径
  //     return {
  //         title: '校购GO小狗狗',
  //         path: url,
  //         query: `shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${this.currentInfo&&this.currentInfo.nickName||''}`, //你的参数拼接,注意:不需要加?
  //         // imageUrl: 'https://cdn.uviewui.com/uview/swiper/1.jpg' //你分享的封面
  //     };
  // },
                info: [{
                        colorClass: 'uni-bg-red',
                        url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
                        content: '内容 A'
                    },
                    {
                        colorClass: 'uni-bg-green',
                        url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
                        content: '内容 B'
                    },
                    {
                        colorClass: 'uni-bg-blue',
                        url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
                        content: '内容 C'
                    }
                ],
                dotStyle: [{
                        backgroundColor: 'rgba(0, 0, 0, .3)',
                        border: '1px rgba(0, 0, 0, .3) solid',
                        color: '#fff',
                        selectedBackgroundColor: 'rgba(0, 0, 0, .9)',
                        selectedBorder: '1px rgba(0, 0, 0, .9) solid'
                    },
                    {
                        backgroundColor: 'rgba(255, 90, 95,0.3)',
                        border: '1px rgba(255, 90, 95,0.3) solid',
                        color: '#fff',
                        selectedBackgroundColor: 'rgba(255, 90, 95,0.9)',
                        selectedBorder: '1px rgba(255, 90, 95,0.9) solid'
                    },
                    {
                        backgroundColor: 'rgba(83, 200, 249,0.3)',
                        border: '1px rgba(83, 200, 249,0.3) solid',
                        color: '#fff',
                        selectedBackgroundColor: 'rgba(83, 200, 249,0.9)',
                        selectedBorder: '1px rgba(83, 200, 249,0.9) solid'
                    }
                ],
                currentBanner: 0,
                banners: [],
                tripList: [],
                tuangouList: [],
                hide_footer: false,
                noticeList: [],
                currentNoticeIndex: 0,
                currentNotice: {}
            };
        },
        // onShareAppMessage() {
        // let that = this;
        // var url =
        //     `/pages/home/home?shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${this.currentInfo&&this.currentInfo.nickName||''}`; //你的转发页面路径拼接参数
        // return {
        //     title: "校购GO小狗狗",
        //     path: url,
        // }
        // },
        // onShareTimeline() {
        //     let that = this;
        //     var url = "/pages/home/home" //你的分享页面路径
        //     return {
        //         title: '校购GO小狗狗',
        //         path: url,
        //         query: `shareId=${this.currentInfo&&this.currentInfo.id||''}&shareName=${this.currentInfo&&this.currentInfo.nickName||''}`, //你的参数拼接,注意:不需要加?
        //         // imageUrl: 'https://cdn.uviewui.com/uview/swiper/1.jpg' //你分享的封面
        //     };
        // },
  onLoad() {
    // console.log('home created')
    //这里进行一次初始化即可
    // this.$http.request('get', '/api/school/area/list', {
        onLoad() {
            // console.log('home created')
            //这里进行一次初始化即可
            // this.$http.request('get', '/api/school/area/list', {
    // }).then(res => {
    //     if (res.code == 0) {
    //         this.schools = res.data || []
    //     }
    // })
            // }).then(res => {
            //     if (res.code == 0) {
            //         this.schools = res.data || []
            //     }
            // })
    // uni.navigateTo({
    //     url: '/sub_pages/customer/trade/detail'
    // })
            // uni.navigateTo({
            //     url: '/sub_pages/customer/trade/detail'
            // })
    //获取banner图
    this.$http.request('get', '/api/pub/banner/list', {}).then(res => {
      if (res.code == 0) {
        this.banners = res.data.records || []
      }
    })
            //获取banner图
            this.$http.request('get', '/api/pub/banner/list', {}).then(res => {
                if (res.code == 0) {
                    this.banners = res.data.records || []
                }
            })
    var areaIndex = uni.getStorageSync('areaIndex')
    if (!areaIndex && areaIndex !== 0) {
            var areaIndex = uni.getStorageSync('areaIndex')
            if (!areaIndex && areaIndex !== 0) {
    } else {
      this.areaIndex = areaIndex
    }
            } else {
                this.areaIndex = areaIndex
            }
            //如果已经登录,加载一下默认地址
            let that = this
            setTimeout(()=>{
                if(that.currentInfo.id&&!that.address.id){
                    that.$http.request('get', '/api/address/default/detail').then(res=>{
                        if(res.data){
                            that.$store.commit('setDefaultAddress', {...res.data})
                        }
                    })
                }
            },2000)
            //公告
            this.$http.request('get', '/api/announcement/page', {
                params: {
                    size: 5,
                    status: 'A'
                }
            }).then(res => {
                if (res.code === 0) {
                    this.noticeList = (res.data && res.data.records || [])
                    console.log('this.noticeList', this.noticeList)
                    if (this.noticeList.length > 0) {
                        this.currentNotice = this.noticeList[0]
                        if (this.currentNotice.title && this.currentNotice.title.length >= 30) {
                            this.scrollable = true
                        } else {
                            this.scrollable = false
                        }
                        let that = this
                        if (this.noticeList.length >= 1) {
                            setInterval(() => {
                                console.log('interval,1')
                                that.currentNoticeIndex += 1
                                that.currentNoticeIndex %= that.noticeList.length
                                that.currentNotice = that.noticeList[that.currentNoticeIndex]
                                that.scrollable = false
                                that.$nextTick(() => {
                                    if (that.currentNotice.title && that.currentNotice.title
                                        .length >= 30) {
                                        that.scrollable = true
                                    } else {
                                        that.scrollable = false
                                    }
                                })
                            }, 8000)
                        }
                    }
                }
            })
    //公告
    this.$http.request('get', '/api/announcement/page', {
      params: {
        size: 5,
        status: 'A'
      }
    }).then(res => {
      if (res.code === 0) {
        this.noticeList = (res.data && res.data.records || [])
        console.log('this.noticeList', this.noticeList)
        if (this.noticeList.length > 0) {
          this.currentNotice = this.noticeList[0]
          if (this.currentNotice.title && this.currentNotice.title.length >= 30) {
            this.scrollable = true
          } else {
            this.scrollable = false
          }
          let that = this
          if (this.noticeList.length >= 1) {
            setInterval(() => {
              console.log('interval,1')
              that.currentNoticeIndex += 1
              that.currentNoticeIndex %= that.noticeList.length
              that.currentNotice = that.noticeList[that.currentNoticeIndex]
              that.scrollable = false
              that.$nextTick(() => {
                if (that.currentNotice.title && that.currentNotice.title
                    .length >= 30) {
                  that.scrollable = true
                } else {
                  that.scrollable = false
                }
              })
        },
        methods: {
            goToAddress() {
                if (!this.currentInfo.id) {
                    this.$message.showToast('请先前往登录')
                    return
                }
                uni.navigateTo({
                    url: '/pages/user/address/address?source=select'
                })
            },
            buttonSearchFlow() {
                console.log('buttonSearchFlow')
                uni.navigateTo({
                    url: '/sub_pages/trade/list?name=' + this.search_flow
                })
            },
            pop(status) {
                this.hide_footer = !!status
            },
            changeBanner(e) {
                this.currentBanner = e.detail.current
            },
            }, 8000)
          }
        }
      }
    })
            getNoticeMore() {
                uni.navigateTo({
                    url: '/pages/notice/list?id=' + this.currentNotice.id
                })
            },
            PickerChangeSchool(e) {
                if (e.detail.value == '-1') {
                    this.$message.showToast('未选择位置')
                    return
                }
                console.log(' this.schools', this.schools, parseInt(e.detail.value), e);
  },
  methods: {
    buttonSearchFlow() {
      console.log('buttonSearchFlow')
      uni.navigateTo({
        url: '/sub_pages/trade/list?name=' + this.search_flow
      })
    },
    pop(status) {
      this.hide_footer = !!status
    },
    changeBanner(e) {
      this.currentBanner = e.detail.current
    },
                this.areaIndex = parseInt(e.detail.value)
                uni.setStorageSync('areaId', this.schools[parseInt(e.detail.value)].id);
                uni.setStorageSync('areaIndex', parseInt(e.detail.value));
    getNoticeMore() {
      uni.navigateTo({
        url: '/pages/notice/list?id=' + this.currentNotice.id
      })
    },
    PickerChangeSchool(e) {
      if (e.detail.value == '-1') {
        this.$message.showToast('未选择位置')
        return
      }
      console.log(' this.schools', this.schools, parseInt(e.detail.value), e);
            },
      this.areaIndex = parseInt(e.detail.value)
      uni.setStorageSync('areaId', this.schools[parseInt(e.detail.value)].id);
      uni.setStorageSync('areaIndex', parseInt(e.detail.value));
    },
  }
}
        }
    }
</script>
<style lang="scss" scoped>
@import "./home.scss";
    @import "./home.scss";
</style>
pages/user/supplier-user.vue
@@ -130,11 +130,14 @@
                        </image>
                        <view>新手帮助</view>
                    </view>
                    <view class="service-icons" @click.stop="$meesage.showToast('敬请期待')">
        <!--             <view class="service-icons" @click.stop="$meesage.showToast('敬请期待')">
                        <image src="../../static/images/customer/service/service-icon-6.png" class="t2 service-icon ">
                        </image>
                        <view>运费详查</view>
                    </view>
                    </view> -->
                    <view class="service-icons"></view>
                    <view class="service-icons"></view>
                    <view class="service-icons"></view>
                </view>
sub_pages/customer/self/collect.vue
@@ -1,64 +1,3 @@
<template>
    <view class="page-collect p20">
        <view class="search-container bg-white flex">
            <view class="flex1 input">
                <u-input placeholder="请输入花名" v-model="query.name">
                    <template slot="suffix">
                        <uni-icons color="#20613D" type="search" size="24" @tap="refreshList"></uni-icons>
                    </template>
                </u-input>
            </view>
        </view>
        <view class="component-filter-container p10 bg-white">
            <view class="flex1" @click.stop="order_show=true">
                {{ this.query.columnStr || '排序' }}
                <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
            </view>
            <view class="flex1" @click.stop="level_show=true">
                {{ this.query.levelStr || '级别' }}
                <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
            </view>
        </view>
        <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data>
        <u-picker :show="level_show" @confirm="select_level" keyName="label" :columns="level_columns"
            @cancel="level_show=false"></u-picker>
        <u-picker :show="order_show" @confirm="select_order" keyName="label" :columns="order_columns"
            @cancel="order_show=false"></u-picker>
        <view class="trade-list-container">
            <view class="trade-info-container" v-for="(dto,index) of list" :key="index">
                <view class="title">
                    <view class="level m-r-15">{{ dto.levelStr || '-' }}级</view>
                    <view class="">
                        {{ dto.name || '-' }}
                    </view>
                </view>
                <view class="desc m-t-12">
                    <view class="m-r-15">已售:{{ dto.sales || 0 }}</view>
                    <view class="m-r-15">剩余:{{ dto.stock || 0 }}</view>
                    <view class=" ">{{ dto.unit || '-' }}支/扎</view>
                </view>
                <view class="flex m-t-12">
                    <view class="price m-r-a">
                        <span class="num">{{ dto.price || '-' }}</span>
                        元/扎
                    </view>
                    <view class="m-l-a m-r-15">
                        <image src="../../../static/common/icon-kf.png" class="icon-kf m-l-15 img100"></image>
                    </view>
                    <view class="m-r-0 gwc" @click="submitShopping(dto)">
                        + 购物车
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        async onPullDownRefresh() {
@@ -116,6 +55,11 @@
            })
        },
        methods: {
            toDetail(item) {
                uni.navigateTo({
                    url: `/sub_pages/customer/trade/detail?id=${item.id}`
                })
            },
            async submitShopping(dto) {
                //提交到购物车中
                this.$message.showLoading()
@@ -140,6 +84,73 @@
    }
</script>
<template>
    <view class="page-collect " style="background: #E1F0E7;">
        <view style="padding-bottom: 0rpx;" class="p20">
            <view class="search-container flex">
                <view class="flex1 input">
                    <u-input placeholder="请输入花名" v-model="query.name">
                        <template slot="suffix">
                            <uni-icons color="#20613D" type="search" size="24" @tap="refreshList"></uni-icons>
                        </template>
                    </u-input>
                </view>
            </view>
            <view class="component-filter-container p10">
                <view class="flex1" @click.stop="order_show=true">
                    {{ this.query.columnStr || '排序' }}
                    <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
                </view>
                <view class="flex1" @click.stop="level_show=true">
                    {{ this.query.levelStr || '级别' }}
                    <image src="../../../static/common/icon-arrow-down.png" class="icon-arrow-down"></image>
                </view>
            </view>
        </view>
        <no-data v-if="!list||list.length===0" style="width: 100%;"></no-data>
        <u-picker :show="level_show" @confirm="select_level" keyName="label" :columns="level_columns"
            @cancel="level_show=false"></u-picker>
        <u-picker :show="order_show" @confirm="select_order" keyName="label" :columns="order_columns"
            @cancel="order_show=false"></u-picker>
        <view class="trade-list-container">
            <view class="trade-info-container flex" v-for="(dto,index) of list" :key="index" @click.stop="toDetail(dto)">
                <image class="img img100 br-4 m-r-10" :src="dto.url||dto.cover"></image>
                <view class="flex1">
                    <view class="flex">
                        <view class="title">
                            <span class="m-r-5" style="display: inline-block;"
                                v-if="item.categoryStr">{{item.categoryStr||''}}</span>
                            <span v-if="item.levelStr" class="m-r-5"
                                style="display: inline-block;">{{ item.levelStr || '' }}</span>
                            {{ dto.name || '-' }}
                        </view>
                        <view class="price m-l-a m-r-0">
                            ¥{{ dto.price || '-' }}/扎
                        </view>
                    </view>
                    <view class="flex">
                        <view class="desc m-t-12 flex">
                            <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 m-t-20">
                            <view class="m-r-0 gwc" @click.stop="submitShopping(dto)">
                                + 购物车
                            </view>
                        </view>
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
<style lang="scss" scoped>
    .page-collect {
        .search-container {
@@ -162,5 +173,71 @@
                line-height: 70rpx !important;
            }
        }
        .trade-info-container {
            background-color: #fff;
            border-top-right-radius: 40rpx;
            border-top-left-radius: 40rpx;
            padding: 30rpx;
            overflow: hidden;
            min-height: calc(100vh - 300rpx);
            overflow-y: scroll;
            .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 {
                    margin-left: 10rpx;
                    margin-right: 10rpx;
                }
            }
            .gwc {
                width: 168rpx;
                height: 48rpx;
                border-radius: 30rpx;
                border: 2rpx solid #20613D;
                font-size: 24rpx;
                color: #20613D;
                line-height: 48rpx;
                text-align: center;
            }
        }
    }
</style>
sub_pages/customer/shop/shop.vue
@@ -83,36 +83,40 @@
                    @click.stop="toDetail(item)">
                    <view class="img">
                        <image class="img img100"
                            src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/ff/fff3027bd0a146478fd1f0aae816a028%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240710224139.png">
                            :src="item.cover" lazy-load>
                        </image>
                        <view class="level">
                            A级
                            {{item.levelStr||''}}
                        </view>
                    </view>
                    <view class="m-l-12 info-container flex1">
                        <view class="title">
                            橙色芭比
                            {{item.name}}
                            <view class="price">
                                ¥6.60/扎
                                ¥{{item.price}}/扎
                            </view>
                        </view>
                        <view class="shop-name">
                            牛油果泡泡·白色
                            {{item.categoryStr}}
                        </view>
                        <view class="other-info flex">
                            <view class="m-r-15">
                                已售:7
                                已售:{{item.sales || 0}}
                            </view>
                            <view class="m-r-15">
                                剩余:13
                                剩余:{{item.stock || 0}}
                            </view>
                            <view class="m-r-15">
                                1支/扎
                                {{item.unit}}
                            </view>
                        </view>
                        <view class="bottom-buttons  flex">
                            <view class="m-l-0 m-r-a">
                                <view class="m-r-15">
                                    颜色:{{item.color||'-'}}
                                </view>
                            </view>
                            <view class="icons flex">
                                <uni-icons v-if="item.shopnum&&item.shopnum>=1" type="minus" size="32"
                                    @click.stop="addnum(item,-1)"></uni-icons>
@@ -127,7 +131,10 @@
            </view>
            <view v-if="flg==='1'" class="brand-info-1">
                <trade :hidefooter="true"></trade>
                <trade :hidefooter="true" :catgoryTree="catgoryTree" v-if="catgoryTree" ref="trade"></trade>
                <!-- // 构建一个分类树 -->
                <!-- catgoryTree -->
            </view>
            <view v-if="flg==='2'" class="brand-info-3">
                <view class="title">
@@ -182,32 +189,63 @@
                    },
                ],
                dto: {},
                list: [{}, {}],
                list: [],
                id: '',
                catgoryTree:undefined,
            }
        },
        onLoad(options) {
            this.id = options.id || ''
            // this.page.size =
            if (this.id) {
                this.getDetail()
            }
            this.listApi =  `/api/customer/flower/list`
            this.query.supplierId = this.id
            this.getList('post')
        },
        onReachBottom(){
            if(this.flg==='0'){
                this.getMore('post')
            }
        },
        methods: {
            async getDetail() {
                this.$message.showLoading()
                const {
                    code,
                    data
                } = await this.$http.request('get', `/api/pub/supplier/detail/${this.id}`, {
                    params: {}
                })
                if (code === 0) {
                    this.dto = {
                        ...data,
                {
                    this.$message.showLoading()
                    const {
                        code,
                        data
                    } = await this.$http.request('get', `/api/pub/supplier/detail/${this.id}`, {
                        params: {}
                    })
                    if (code === 0) {
                        this.dto = {
                            ...data,
                        }
                    }
                }
                this.$message.hideLoading()
                    this.$message.hideLoading()
                }
                //获取商家下的商品列表
                // {
                //     this.$message.showLoading()
                //     const {
                //         code,
                //         data
                //     } = await this.$http.request('post', `/api/customer/flower/list`, {
                //         data: {
                //             supplierId: this.id,
                //             size: 20
                //         }
                //     })
                //     if (code === 0) {
                //         this.list = data.records || []
                //     }
                //     this.$message.hideLoading()
                // }
            },
            //update 关注
@@ -232,10 +270,35 @@
            },
            changeTab(flg) {
            async changeTab(flg) {
                console.log('changeTab', flg)
                this.flg = ''+flg
                if('1'===(''+flg)){
                    if(!this.catgoryTree){
                        this.$message.showLoading()
                        const {
                            code,data
                        } = await this.$http.request('get', `/api/customer/flower/category/tree`, {
                            data: {
                                supplierId: this.dto.supplierId || this.dto.id
                            },
                            params: {
                                supplierId: this.dto.supplierId || this.dto.id
                            }
                        })
                        if (code === 0) {
                            // data 分类树
                            this.catgoryTree = data || []
                            let tmp = this
                            this.$nextTick(()=>{
                                tmp.$refs.trade.refInit(tmp.catgoryTree)
                            })
                        }
                        this.$message.hideLoading()
                    }
                }
                this.flg = '' + flg
                //如果没有加载数据,需要加载一下
            },
            buttonSearchFlow() {
@@ -304,9 +367,13 @@
                    padding-left: 20rpx;
                }
            }
            .brand-info-1{
                // padding: 40rpx 30rpx;
            }
            .brand-info-3 {
                padding: 40rpx 30rpx;
                .title {
                    font-weight: 600;
                    font-size: 32rpx;
@@ -318,22 +385,21 @@
                .form-input {
                    display: flex;
                    border-bottom: 2rpx solid #EEEEEE;
                    line-height: 80rpx;
                    .label {
                        font-weight: 600;
                        font-size: 28rpx;
                        color: #000000;
                        line-height: 40rpx;
                    }
                    .value {
                        font-weight: 400;
                        font-size: 28rpx;
                        color: #666666;
                        line-height: 40rpx;
                        margin-left: auto;
                        margin-right: 0;
                        text-align: right;
                        .check {
sub_pages/customer/shopping/shopping.vue
@@ -27,7 +27,7 @@
                        <u-swipe-action-item :options="options1" @click="(e)=>{clickSwipeButton(dto)}">
                            <view class="item-each flex">
                                <radio :checked="ids.indexOf(dto.id)>=0" @click="changeItem(dto,'flower')"></radio>
                                <image class="img img100 m-r-6" :src="dto.url||dto.cover"></image>
                                <image class="img img100 m-r-6 br-4" :src="dto.url||dto.cover"></image>
                                <view class="flex1">
                                    <view class="title"><span class="m-r-5"
                                            style="display: inline-block;">{{item.categoryStr||''}}</span><span
sub_pages/customer/trade/detail.vue
@@ -3,7 +3,12 @@
        <view class="top-img-container">
            <image :src="dto.cover" class="top-img" mode="aspectFill"></image>
            <view class="icon-container">
                <image src="../../../static/common/icon-sc.png" @click="collectItem(dto)" class="icon-sc"></image>
                <image v-if="!dto.collection" src="../../../static/common/icon-sc.png" @click="collectItem(dto)"
                    class="icon-sc"></image>
                <image v-if="dto.collection" src="../../../static/common/icon-sc.png" @click="collectItem(dto)"
                    class="icon-sc"></image>
                <!--        <view class="num">12</view>-->
            </view>
            <view class="icon-container">
@@ -14,7 +19,7 @@
        </view>
        <view class="trade-info-container">
            <view class="title flex">
                <view class="level m-r-15">{{ dto.levelStr || '-' }}级</view>
                <view class="level m-r-15">{{ dto.levelStr || '-' }}</view>
                <view class="">
                    {{ dto.name || '-' }}
                </view>
@@ -133,21 +138,27 @@
            }
        },
        methods: {
            async collectItem(dto){
                await this.$message.confirm('是否添加到收藏')
            async collectItem(dto) {
                await this.$message.confirm(`是否${dto.collection?'移除':'添加到'}收藏`)
                this.$message.showLoading()
                const {
                    code,
                    data
                } = await this.$http.request('post', '/api/collect/add', {
                    data: {
                        flowerId: dto.id
                    }
                })
                } = await this.$http.request(dto.collection ? "get" : 'post', dto.collection ? '/api/collect/delete' :
                    '/api/collect/add', {
                        data: {
                            flowerId: dto.id
                        },
                        params: {
                            id: dto.id
                        }
                    })
                if (code === 0) {
                    this.$message.showToast('收藏成功')
                    this.$message.showToast('操作成功')
                    dto.collection = !dto.collection
                    this.$forceUpdate()
                }
                this.$message.hideLoading()
            },
            async submitShopping(dto) {
@@ -353,10 +364,12 @@
                position: absolute;
                top: 20rpx;
                width: 80rpx;
                left: 40rpx;
                right: 140rpx;
                height: 80rpx;
                background: rgba(0, 0, 0, 0);
                background: rgba(0, 0, 0, 0.42);
                border-radius: 50%;
                display:flex;
                .icon-sc {
                    width: 54rpx;
                    height: 54rpx;
@@ -386,7 +399,7 @@
            }
            .icon-container:last-child {
                left: 100rpx;
                right: 20rpx;
            }
            // .icon-container:first-child {
sub_pages/customer/trade/trade.vue
@@ -1,5 +1,5 @@
<template>
    <view class="container-trade" style="min-height: calc(100vh - 20rpx );">
    <view class="container-trade"  :style="{'min-height':hidefooter?'':'calc(100vh - 20rpx)'}">
        <view class="search-container m-t-12 flex" v-if="!(!list||list.length==0)&&true&&!hidefooter">
            <view class="flex1 input">
                <u-input placeholder="请输入分类名称" v-model="query.name">
@@ -9,7 +9,7 @@
                </u-input>
            </view>
        </view>
        <view class="canteen-items" style="min-height: calc(100vh - 160rpx);">
        <view class="canteen-items" :style="{'min-height':hidefooter?'':'calc(100vh - 160rpx)'}">
            <view v-if="(!list||list.length==0)&&true" style="width: 100%;min-height: 200rpx;">
                &nbsp;
            </view>
@@ -59,7 +59,7 @@
                        </view>
                    </view>
                    <footer-msg
                    <footer-msg v-if="!hidefooter"
                        :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
                </view>
@@ -103,6 +103,7 @@
    export default {
        props: {
            hidefooter: false,
            catgoryTree:[],
        },
        data() {
            return {
@@ -143,6 +144,13 @@
            })
        },
        methods: {
            refInit(catgoryTree){
                this.list = catgoryTree || []
                if (this.list.length > 0) {
                    this.query.categoryId = this.list[0].id || ''
                    this.currentCategory = this.list[0] || {}
                }
            },
            async updateParamsAndSearch(){
                //todo 设置参数并查询
                await this.refreshList()