Browse Source

Merge branch 'developerX' of http://git.caimei365.com/caimei-repository/caimei-applets-caimei into developer

xiebaomin 1 year ago
parent
commit
31559b6ca2
43 changed files with 6117 additions and 2374 deletions
  1. 1 0
      common/config/wxLogin.js
  2. 221 0
      components/cm-share-popup/cm-seller-modal.vue
  3. 218 0
      components/cm-share-popup/cm-share-popup.vue
  4. 198 0
      components/cm-share-popup/draw-poster.js
  5. 139 0
      components/cm-share-popup/simple-share-popup/simple-share-popup.vue
  6. 45 0
      components/cm-share-popup/uni-popup/keypress.js
  7. 26 0
      components/cm-share-popup/uni-popup/popup.js
  8. 437 0
      components/cm-share-popup/uni-popup/uni-popup.vue
  9. 1 1
      main.js
  10. 1 0
      mixins/appMixins.js
  11. 49 2
      pages.json
  12. 68 0
      pages/goods/mixins/share.helper.js
  13. 615 588
      pages/goods/product.vue
  14. 1 0
      pages/login/bindOperator.vue
  15. 875 796
      pages/login/register.vue
  16. 15 3
      pages/notice/club/components/notice-cell.vue
  17. 12 2
      pages/notice/club/mixins/notice.mixins.js
  18. 11 0
      pages/notice/club/notice-serve.vue
  19. 1012 967
      pages/seller/club/list.vue
  20. 219 0
      pages/seller/components/message.vue
  21. 12 1
      pages/seller/components/user.vue
  22. 40 9
      pages/seller/index/index.vue
  23. 91 0
      pages/seller/notice/components/notice-cell.vue
  24. 75 0
      pages/seller/notice/components/time-axis.vue
  25. 91 0
      pages/seller/notice/components/trajectory.vue
  26. 98 0
      pages/seller/notice/components/visits-cell.vue
  27. 31 0
      pages/seller/notice/mixins/notice.mixins.js
  28. 77 0
      pages/seller/notice/service/Institutional_visits.vue
  29. 210 0
      pages/seller/notice/service/service.vue
  30. 64 0
      pages/seller/notice/service/visits_details.vue
  31. 133 0
      pages/seller/remarks/business-card.vue
  32. 91 0
      pages/seller/remarks/components/activity-analysis.vue
  33. 71 0
      pages/seller/remarks/components/analysis-card-item.vue
  34. 86 0
      pages/seller/remarks/components/analysis-card.vue
  35. 137 0
      pages/seller/remarks/components/countUp.vue
  36. 123 0
      pages/seller/remarks/components/mine-card.vue
  37. 193 0
      pages/seller/remarks/institutional-activity-analysis.vue
  38. 46 0
      pages/seller/remarks/mine-card.vue
  39. 121 0
      pages/seller/remarks/mine-qrcode.vue
  40. 26 3
      pages/tabBar/home/index.vue
  41. 1 1
      services/ajax.service.js
  42. 104 1
      services/sellse.service.js
  43. 32 0
      store/index.js

+ 1 - 0
common/config/wxLogin.js

@@ -40,6 +40,7 @@ const wxLoginQuick = async function(){// 根据微信的code获取用户登录
             store.commit('login',response.data)
             uni.setStorageSync('token',response.data.token)
             uni.setStorageSync('unionId',response.data.unionId)
+            uni.setStorageSync('spUserId', response.data.spUserId)
             if(response.data.userIdentity ==1){
                 uni.navigateTo({url:'/pages/seller/index/index'})
             }else if(response.data.userIdentity === 3){

+ 221 - 0
components/cm-share-popup/cm-seller-modal.vue

@@ -0,0 +1,221 @@
+<template>
+    <view class="seller-card" v-if="userId > 0">
+        <view class="seller-card-mine" v-if="!modal" @click="changeModal">
+            <image
+                :src="userInfo.image || 'https://static.caimei365.com/app/img/icon/default-head.png'"
+                style="width: 100%;height: 100%;object-fit: contain;border-radius: 50%;"
+                mode=""
+            ></image>
+        </view>
+        <tui-modal class="sellerMode" @cancel="hideModal" :show="modal" custom>
+            <view class="tui-modal-custom">
+                <view class="close" @click="changeModal">
+                    <image
+                        src="https://static.caimei365.com/app/img/supplier-login/close.png"
+                        style="width: 100%;height: 100%;"
+                        mode=""
+                    ></image>
+                </view>
+                <view class="card" :style="{ backgroundImage: `url(${imgUrl})`, backgroundSize: '100% 100%' }">
+                    <view class="logo">
+                        <image
+                            src="https://static.caimei365.com/app/img/icon/logo-fanbai.png"
+                            mode=""
+                            class="titleImgUrl"
+                        ></image>
+                    </view>
+                    <view class="card-contain">
+                        <view style="display: flex;">
+                            <view class="card-head">
+                                <image
+                                    :src="
+                                        userInfo.image || 'https://static.caimei365.com/app/img/icon/default-head.png'
+                                    "
+                                    mode=""
+                                    class="head"
+                                ></image>
+                            </view>
+                            <view class="card-info">
+                                <view class="card-info-head">
+                                    <view class="card-name">{{ userInfo.linkMan }}</view>
+                                    <view class="card-info-tab">客户经理</view>
+                                </view>
+                                <view class="card-info-iphone">{{ userInfo.contractMobile && userInfo.contractMobile.replace(/(?=(\d{4})+$)/g,"-") }}</view>
+                            </view>
+                        </view>
+                        <view class="card-qrcode">
+                            <view class="qrcode-message">
+                                <image
+                                    :show-menu-by-longpress="true"
+                                    :src="userInfo.qrCode || ''"
+                                    class="qrcode"
+                                    mode=""
+                                ></image>
+                            </view>
+                            <view class="tips">
+                                <view class="">
+                                    长按或扫二维码
+                                </view>
+                                <view style="white-space: nowrap;">——联系我——</view>
+                        </view>
+                    </view>
+                </view>
+            </view>
+        </tui-modal>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        sellerUserId: {
+            type: Number,
+            default: 0
+        }
+    },
+    data() {
+        return {
+            modal: false,
+            imgUrl: 'https://static.caimei365.com/app/img/icon/bg-card.png',
+            userInfo: {},
+            userId: ''
+        }
+    },
+    mounted() {
+        this.initData()
+    },
+    methods: {
+        hideModal() {
+            this.modal = false
+            uni.setStorageSync('sellerCardChange', 2)
+        },
+        initData() {
+            this.userId = uni.getStorageSync('sellerUserId') || this.sellerUserId
+            if(this.userId > 0) {
+                this.getUserInfo()
+                if (uni.getStorageSync('sellerCardChange') === 1) {
+                    this.modal = true
+                } else {
+                    this.modal = false
+                }
+            }
+        },
+        async getUserInfo() {
+            const { data } = await this.SellerService.GetSellerHome({ userId: this.userId })
+            this.userInfo = data
+        },
+        changeModal() {
+            this.modal = !this.modal
+            uni.setStorageSync('sellerCardChange', this.modal ? 1 : 2)
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.seller-card-mine {
+    position: fixed;
+    right: 20rpx;
+    width: 80rpx;
+    height: 80rpx;
+    z-index: 99;
+    bottom: 460rpx;
+    border-radius: 50%;
+    &::after {
+        content: '客户经理';
+        width: 100rpx;
+        height: 30rpx;
+        position: absolute;
+        color: #fff;
+        font-size: 18rpx;
+        font-weight: bold;
+        background-color: #FF5B00;
+        bottom: 0;
+        left: 0;
+        border-radius: 20rpx;
+        text-align: center;
+        line-height: 30rpx;
+        box-shadow: 0rpx 3rpx 6rpx 1rpx rgba(255,92,0,0.16);
+        transform: translate(-12%, 70%);
+    }
+}
+.tui-modal-custom {
+    .close {
+        position: fixed;
+        right: -20px;
+        top: -200rpx;
+        width: 60rpx;
+        height: 60rpx;
+    }
+}
+.card {
+    position: fixed;
+    left: -34rpx;
+    top: -150%;
+    width: 702rpx;
+    height: 340rpx;
+    background: #ff5b00;
+    border-radius: 16rpx;
+    opacity: 1;
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 16rpx 32rpx;
+    .titleImgUrl {
+        width: 241rpx;
+        height: 80rpx;
+    }
+    .card-contain {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .head {
+            width: 128rpx;
+            height: 128rpx;
+            border-radius: 50%;
+            object-fit: contain;
+        }
+        .card-info {
+            height: 128rpx;
+            margin-left: 30rpx;
+        }
+        .card-info-head {
+            display: flex;
+            align-items: center;
+            margin-bottom: 13rpx;
+            .card-name {
+                color: #ffffff;
+                font-size: 40rpx;
+                font-weight: bold;
+            }
+            .card-info-tab {
+                width: 88rpx;
+                height: 31rpx;
+                background-color: #ffbb00;
+                color: #fff;
+                font-size: 22rpx;
+                padding: 0 8rpx;
+                margin-left: 10rpx;
+            }
+        }
+        .card-info-iphone {
+            color: #ffffff;
+            font-size: 28rpx;
+        }
+        .card-qrcode {
+            .qrcode {
+                width: 126rpx;
+                height: 126rpx;
+                object-fit: contain;
+                margin-bottom: 6rpx;
+            }
+            .tips {
+                font-size: 18rpx;
+                color: #fff;
+                text-align: center;
+                width: 126rpx;
+                line-height: 24rpx;
+            }
+        }
+    }
+}
+</style>

+ 218 - 0
components/cm-share-popup/cm-share-popup.vue

@@ -0,0 +1,218 @@
+<template>
+    <view class="cm-share-popup">
+        <!-- 分享弹窗 -->
+        <simple-share-popup ref="sharePopup" :posterUrl="posterUrl" @click="onPopupClick" @close="onClose">
+            <slot name="title"></slot>
+        </simple-share-popup>
+        <!-- 海报画布 -->
+        <canvas canvas-id="poster" class="poster-canvas"></canvas>
+    </view>
+</template>
+
+<script>
+import DrawPoster from './draw-poster.js'
+import { mapState } from 'vuex'
+import { generateWxUnlimited, enCodeQueryStr } from '@/pages/goods/mixins/share.helper.js'
+import simpleSharePopup from './simple-share-popup/simple-share-popup.vue'
+export default {
+    name: 'cm-share-popup',
+    components: {
+        simpleSharePopup
+    },
+    props: {
+        data: {
+            type: Object,
+            default: () => {}
+        },
+        type: {
+            type: String,
+            default: 'normal',
+            validator: value => {
+                return ['product', 'normal', 'activity'].indexOf(value) > -1
+            }
+        }
+    },
+    data() {
+        return {
+            posterUrl: '',
+            ctx: '',
+            posterData: {
+                /* 用户信息 */
+                image: '', // 用户头像
+                qrCode: '', // 用户二维码
+                linkMan: '', // 用户名
+                contractMobile: '', // 用户手机号
+                /* 页面参数 */
+                query: '', // 查询参数字符串
+                path: '', // 页面路径
+                qrCodeImage: '', //页面二维码,小程序二维码
+
+                /* 产品参数 */
+                porductName: '', // 产品名
+                productPrice: '', // 产品价格
+                productOriginPrice: '', // 产品原价
+                productImage: '', // 产品图片
+                id: '', //商品id
+
+                /* 活动参数 */
+                activityName: '', // 活动名称
+                activityImage: 'https://picsum.photos/400/400' //活动封面
+            }
+        }
+    },
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    methods: {
+        async getUserInfo() {
+            const { data } = await this.SellerService.GetSellerHome({ userId: this.userInfo.userId })
+            this.posterData.image =
+                data.image === 'undefined' || !data.image
+                    ? 'https://static.caimei365.com/app/img/icon/default-head.png'
+                    : data.image // 用户头像
+            this.posterData.qrCode = data.qrCode // 用户二维码
+            this.posterData.linkMan = data.linkMan // 用户名
+            this.posterData.contractMobile = data.contractMobile // 用户手机号
+        },
+        // 分享操作
+        onPopupClick(e) {
+            if (e.type === 'create-poster') {
+                console.log('生成海报')
+                this.createPoster()
+            } else {
+                console.log('普通分享')
+                this.$refs.sharePopup.close()
+                this.onShare()
+            }
+        },
+        // 打开弹窗
+        open() {
+            this.$refs.sharePopup.open()
+            this.$emit('open')
+        },
+        close() {
+            this.$refs.sharePopup.close()
+        },
+        onClose() {
+            uni.hideLoading()
+            this.$emit('close')
+        },
+        onShare() {
+            this.$emit('share')
+            console.log('分享')
+        },
+        // 创建海报
+        async createPoster() {
+            try {
+                uni.showLoading({ title: '正在生成海报' })
+                if (!this.posterUrl) {
+                    await this.getUserInfo()
+                    this.posterData = { ...this.posterData, ...this.data }
+                    const { data: qrCodeImage } = await generateWxUnlimited(this, {
+                        pagePath: this.posterData.path,
+                        queryStr: 'sellerUserId=' + this.userInfo.userId + '&id=' + this.posterData.id
+                    })
+                    this.posterData.qrCodeImage = qrCodeImage
+                    switch (this.type) {
+                        case 'product':
+                            await this.createProductPoster()
+                            break
+                    }
+                    const { tempFilePath } = await this.canvasToTempFilePath()
+                    this.posterUrl = tempFilePath
+                }
+                uni.hideLoading()
+                // 下载完成后转发
+                wx.showShareImageMenu({ path: this.posterUrl })
+                this.onShare()
+            } catch (e) {
+                console.log(e)
+            } finally {
+                uni.hideLoading()
+            }
+        },
+
+        // 画布转图片临时链接
+        canvasToTempFilePath() {
+            return new Promise((resolve, reject) => {
+                uni.canvasToTempFilePath(
+                    {
+                        canvasId: 'poster',
+                        success: res => {
+                            resolve(res)
+                        },
+                        fail() {
+                            reject(false)
+                        }
+                    },
+                    this
+                )
+            })
+        },
+
+        // 生成绘制文本数组
+        generateTextArray() {
+            const textArray = []
+            const { productPrice, productOriginPrice, productName, activityName } = this.posterData
+
+            // 处理价格
+            let priceText = ''
+            if (this.type === 'product') {
+                if (productPrice) {
+                    priceText += productPrice
+                }
+                if (productOriginPrice) {
+                    priceText += '¥' + productOriginPrice
+                }
+            }
+            textArray.push(priceText)
+            // 处理产品名称
+            if (productName) {
+                const nameStr = productName || activityName
+                textArray.push(nameStr.substring(0, 12))
+                if (nameStr.length > 24) {
+                    textArray.push(nameStr.substring(12, 23) + '...')
+                } else {
+                    textArray.push(nameStr.substring(12))
+                }
+            }
+            return textArray
+        },
+
+        // 商品海报
+        async createProductPoster() {
+            try {
+                const [error, result] = await uni.downloadFile({ url: this.posterData.productImage })
+                const [error2, result2] = await uni.downloadFile({ url: this.posterData.qrCodeImage })
+                this.posterData.productImage = result.tempFilePath
+                this.posterData.qrCodeImage = result2.tempFilePath
+                const ctx = uni.createCanvasContext('poster', this)
+                const drawPoster = new DrawPoster(ctx, {
+                    avatarUrl: this.posterData.avatar,
+                    userName: this.posterData.username,
+                    coverUrl: this.posterData.productImage,
+                    ewmUrl: this.posterData.qrCodeImage,
+                    textArray: this.generateTextArray(),
+                    image: this.posterData.image,
+                    qrCode: this.posterData.qrCode, // 用户二维码
+                    linkMan: this.posterData.linkMan, // 用户名
+                    contractMobile: this.posterData.contractMobile.replace(/(?=(\d{4})+$)/g,"-") // 用户手机号
+                })
+                return await drawPoster.draw()
+            } catch (e) {
+                throw e
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.poster-canvas {
+    position: fixed;
+    top: -9999px;
+    left: -9999px;
+    width: 375px;
+    height: 620px;
+}
+</style>

+ 198 - 0
components/cm-share-popup/draw-poster.js

@@ -0,0 +1,198 @@
+// 默认配置参数
+const defaultOptions = () => ({
+    avatarUrl: '',
+    userName: '采美',
+    subTitle: '强烈为你推荐该商城',
+    coverUrl: '',
+    bgImageUrl: 'https://static.caimei365.com/app/img/icon/bgImage.png',
+    userBg: 'https://static.caimei365.com/app/img/icon/bg-card.png',
+    userTitleBg: 'https://static.caimei365.com/app/img/icon/logo-fanbai.png',
+    ewmUrl: '',
+    textArray: [],
+    scale: 0.5,
+    duty: {
+        text: '客户经理',
+        bgColor: '#FFBB00',
+        color: '#fff'
+    }
+})
+// 绘制海报
+export default class DrawPoster {
+    constructor(ctx, options = {}) {
+        this.ctx = ctx
+        this.options = Object.assign(defaultOptions(), options)
+    }
+    // 开始绘制
+    draw() {
+        return new Promise(async (resolve, reject) => {
+            try {
+                await this.drawBgImage()
+                await this.drawUserCoverImage()
+                await this.drawCenterInfo()
+            } catch (e) {
+                console.log(e)
+                reject(e)
+            } finally {
+                this.ctx.draw(true, res => {
+                    resolve(true)
+                })
+            }
+        })
+    }
+    // 绘制背景
+    async drawBgImage() {
+        try {
+            const { bgImageUrl, scale } = this.options
+            const [error, result] = await uni.downloadFile({ url: bgImageUrl })
+            if (error) return
+            this.ctx.drawImage(result.tempFilePath, 0, 0, 750 * scale, 1240 * scale)
+            this.ctx.save()
+            return Promise.resolve(true)
+        } catch (e) {
+            return Promise.reject(e)
+        }
+    }
+    // 绘制圆角矩形
+    drawRoundRect(x, y, w, h, r, color) {
+        this.ctx.save()
+        this.ctx.beginPath()
+        this.ctx.moveTo(x + r , y)
+        this.ctx.arcTo(x + w, y, x + w, y + h, r)
+        this.ctx.arcTo(x + w, y + h, x , y + h, r)
+        this.ctx.arcTo(x, y + h, x, y, r)
+        this.ctx.arcTo(x, y, x + w, y , r)
+        this.ctx.setFillStyle(color)
+        this.ctx.fill()
+        // this.ctx.clip()
+    }
+    // 绘制中心区域
+    async drawCenterInfo() {
+        try {
+            const { scale, coverUrl, ewmUrl } = this.options
+            this.ctx.beginPath()
+            await this.drawRoundRect(28 * scale, 28 * scale, 694 * scale, 878 * scale, 8, '#FFFFFF')
+            await this.drawFooterText()
+            this.ctx.drawImage(coverUrl, 56 * scale, 56 * scale, 638 * scale, 658 * scale)
+            this.ctx.drawImage(ewmUrl, 524 * scale, 730 * scale, 160 * scale, 160 * scale)
+            return Promise.resolve(true)
+        } catch (e) {
+            return Promise.reject(e)
+        }
+    }
+    // 绘制封面图片
+    async drawCoverImage() {
+        try {
+            this.ctx.beginPath()
+            const { coverUrl, scale } = this.options
+            this.ctx.drawImage(coverUrl, 56 * scale, 56 * scale, 638 * scale, 658 * scale)
+            this.ctx.save()
+            return Promise.resolve(true)
+        } catch (e) {
+            console.log(e)
+        }
+    }
+    // 绘制名片封面
+    async drawUserCoverImage() {
+        try {
+            const { userBg, scale, image, qrCode, linkMan, contractMobile, duty } = this.options
+            await this.drawBorderReduisImage(userBg, 28 * scale, 920 * scale, 694 * scale, 290 * scale, 8)
+            await this.drawUserCardInner() // 绘制名片内容
+            await this.drawCircleImg(image, 120 * scale, 1090 * scale, 30) //头像
+            this.drawFontText(36 * scale, 200 * scale, 1070 * scale, '#fff', linkMan, 'bold', true)
+            this.drawFontText(30 * scale, 200 * scale, 1130 * scale, '#fff', contractMobile, '400')
+            await this.drawBorderReduisImage(qrCode, 556 * scale, 1010 * scale, 120 * scale, 120 * scale, 6)
+            this.drawFontText(18 * scale, 550 * scale, 1160 * scale, '#fff', ['长按或扫二维码', '——联系我——'], '400')
+            return Promise.resolve(true)
+        } catch (e) {
+            return Promise.reject(e)
+        }
+    }
+    async drawUserCardInner() {
+        try {
+            const { userTitleBg, scale } = this.options
+            const [error, result] = await uni.downloadFile({ url: userTitleBg })
+            if (error) return
+            this.ctx.drawImage(result.tempFilePath, 56 * scale, 940 * scale, 200 * scale, 70 * scale)
+            return Promise.resolve(true)
+        } catch (e) {
+            return Promise.reject(e)
+        }
+    }
+    async drawCircleImg(img, x, y, r) {
+        const [error, result] = await uni.downloadFile({ url: img })
+        if (error) return
+        this.ctx.save()
+        this.ctx.beginPath()
+        let size = 2 * r
+        this.ctx.arc(x, y, r, 0, 2 * Math.PI)
+        this.ctx.clip()
+        this.ctx.drawImage(result.tempFilePath, x - r, y - r, size, size)
+        this.ctx.restore()
+    }
+    async drawBorderReduisImage(imgUrl, bg_x, bg_y, bg_w, bg_h, bg_r) {
+        const [error, result] = await uni.downloadFile({ url: imgUrl })
+        if (error) return
+        this.ctx.save()
+        this.ctx.beginPath()
+        this.ctx.arc(bg_x + bg_r, bg_y + bg_r, bg_r, Math.PI, Math.PI*1.5)
+        this.ctx.arc(bg_x + bg_w - bg_r, bg_y + bg_r, bg_r, Math.PI * 1.5, Math.PI * 2)
+        this.ctx.arc(bg_x + bg_w - bg_r, bg_y + bg_h - bg_r, bg_r, 0, Math.PI * 0.5)
+        this.ctx.arc(bg_x + bg_r, bg_y + bg_h - bg_r, bg_r, Math.PI * 0.5, Math.PI)
+        this.ctx.clip()
+        this.ctx.drawImage(result.tempFilePath, bg_x, bg_y, bg_w, bg_h)
+        this.ctx.restore()
+    }
+    // 绘制文字
+    async drawFontText(fontsize, x, y, color, text, bold, isDuty = false) {
+        this.ctx.save()
+        if (Array.isArray(text)) {
+            this.ctx.beginPath()
+            this.ctx.font = `${bold} ${fontsize}px sans-serif`
+            this.ctx.setFillStyle(color)
+            text.forEach((e, i) => {
+                this.ctx.fillText(e, x, y + fontsize * i)
+            })
+        } else {
+            this.ctx.beginPath()
+            this.ctx.font = `${bold} ${fontsize}px sans-serif`
+            this.ctx.setFillStyle(color)
+            this.ctx.fillText(text, x, y)
+            if (isDuty) {
+                await this.drawRoundRect(x + (text.length * fontsize) + 10,  y-fontsize, 66, fontsize + 4, 6, '#FFBB00')
+                // this.ctx.fillStyle = `${this.options.duty.bgColor}`
+                // this.ctx.fillRect(x + (text.length * fontsize) + 10, y-fontsize, 66, fontsize + 4)
+                this.ctx.font = `${400} ${fontsize-4}px sans-serif`
+                this.ctx.setFillStyle('#fff')
+                this.ctx.fillText(this.options.duty.text, x + (text.length * fontsize) + 15, y - 2)
+            }
+        }
+    }
+    // 绘制底部
+    drawFooterText(callback) {
+        const { scale, textArray } = this.options
+        this.ctx.beginPath()
+        if (callback) {
+            callback({ scale, ctx: this.ctx, textArray })
+        } else {
+            textArray.forEach((txt, index) => {
+                this.ctx.setFontSize(30 * scale)
+                this.ctx.setFillStyle('#333')
+                this.ctx.fillText(txt, 56 * scale, (710 + 56 * index) * scale)
+            })
+        }
+        this.ctx.save()
+    }
+    // 绘制底部二维码
+    async drawEwmImage() {
+        try {
+            const { ewmUrl, scale } = this.options
+            // const [error, result] = await uni.downloadFile({ url: ewmUrl })
+            console.log(ewmUrl, this.options)
+            // if (error) return
+            this.ctx.drawImage(ewmUrl, 524 * scale, 730 * scale, 160 * scale, 160 * scale)
+            return Promise.resolve(true)
+        } catch (e) {
+            return Promise.reject(e)
+        }
+    }
+}

+ 139 - 0
components/cm-share-popup/simple-share-popup/simple-share-popup.vue

@@ -0,0 +1,139 @@
+<template>
+    <view class="simple-share-popup">
+        <cm-popup ref="sharePopup" type="bottom" :safe-area="safeArea">
+            <!-- 操作栏 -->
+            <view class="share-popup__control" @click.stop>
+                <view class="share-popup__slot"><slot></slot></view>
+                <view class="share-popup__row share-popup__items">
+                    <button
+                        open-type="share"
+                        class="share-popup__item share-popup__button share-popup__default"
+                        @click="onClick('share')"
+                    >
+                        <view class="share-popup__icon"><image :src="baseUrl + 'icon-share-wechat.png'"></image></view>
+                        <text class="share-popup__label">分享给好友</text>
+                    </button>
+                    <view class="share-popup__item share-popup__button" @click="onClick('create-poster')">
+                        <view class="share-popup__icon"><image :src="baseUrl + 'icon-poster.png'"></image></view>
+                        <text class="share-popup__label">生成海报</text>
+                    </view>
+                </view>
+                <view class="share-popup__row"><view class="share-popup__cancel" @click.stop="close">取消</view></view>
+            </view>
+        </cm-popup>
+    </view>
+</template>
+<script>
+    import cmPopup from '../uni-popup/uni-popup.vue'
+export default {
+    props: {
+        baseUrl: {
+            type: String,
+            default: 'https://static.caimei365.com/app/mini-hehe/icon/'
+        },
+        safeArea: {
+            type: Boolean,
+            default: true
+        }
+    },
+    components: {
+        cmPopup
+    },
+    methods: {
+        open() {
+            this.$refs.sharePopup.open()
+            this.$emit('open')
+        },
+        close() {
+            this.$refs.sharePopup.close()
+            this.$emit('close')
+        },
+        onClick(type) {
+            this.$emit('click', { type })
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.simple-share-popup {
+    .share-popup__control {
+        width: 100%;
+        background-color: #fff;
+        border-radius: 16rpx 16rpx 0 0;
+        padding-top: 40rpx;
+
+        &.share-popup__no__safeArea {
+            transform: translateY(34px);
+        }
+
+        &::after {
+            content: '';
+            position: absolute;
+            width: 100%;
+            height: 38px;
+            bottom: -38px;
+            background-color: #fff;
+        }
+
+        .share-popup__row {
+            display: flex;
+            justify-content: space-evenly;
+            align-items: center;
+        }
+
+        .share-popup__items {
+            padding-bottom: 40rpx;
+        }
+
+        .share-popup__button {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            flex-direction: column;
+
+            &.share-popup__default {
+                line-height: inherit;
+                padding: 0;
+                margin: 0;
+                border: 0;
+                background: transparent;
+                &::after {
+                    border: 0;
+                }
+            }
+
+            .share-popup__icon {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                width: 100rpx;
+                height: 100rpx;
+                border-radius: 50%;
+                background-color: #f7f7f7;
+
+                image {
+                    width: 64rpx;
+                    height: 64rpx;
+                }
+            }
+
+            .share-popup__label {
+                font-size: 26rpx;
+                color: #333;
+                margin-top: 16rpx;
+            }
+        }
+
+        .share-popup__cancel {
+            width: 100%;
+            padding: 32rpx 0;
+            border-top: 1rpx solid #e1e1e1;
+            font-size: 28rpx;
+            color: #666;
+            font-weight: bold;
+            text-align: center;
+        }
+    }
+}
+</style>

+ 45 - 0
components/cm-share-popup/uni-popup/keypress.js

@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+  name: 'Keypress',
+  props: {
+    disable: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    const keyNames = {
+      esc: ['Esc', 'Escape'],
+      tab: 'Tab',
+      enter: 'Enter',
+      space: [' ', 'Spacebar'],
+      up: ['Up', 'ArrowUp'],
+      left: ['Left', 'ArrowLeft'],
+      right: ['Right', 'ArrowRight'],
+      down: ['Down', 'ArrowDown'],
+      delete: ['Backspace', 'Delete', 'Del']
+    }
+    const listener = ($event) => {
+      if (this.disable) {
+        return
+      }
+      const keyName = Object.keys(keyNames).find(key => {
+        const keyName = $event.key
+        const value = keyNames[key]
+        return value === keyName || (Array.isArray(value) && value.includes(keyName))
+      })
+      if (keyName) {
+        // 避免和其他按键事件冲突
+        setTimeout(() => {
+          this.$emit(keyName, {})
+        }, 0)
+      }
+    }
+    document.addEventListener('keyup', listener)
+    // this.$once('hook:beforeDestroy', () => {
+    //   document.removeEventListener('keyup', listener)
+    // })
+  },
+	render: () => {}
+}
+// #endif

+ 26 - 0
components/cm-share-popup/uni-popup/popup.js

@@ -0,0 +1,26 @@
+
+export default {
+	data() {
+		return {
+			
+		}
+	},
+	created(){
+		this.popup = this.getParent()
+	},
+	methods:{
+		/**
+		 * 获取父元素实例
+		 */
+		getParent(name = 'uniPopup') {
+			let parent = this.$parent;
+			let parentName = parent.$options.name;
+			while (parentName !== name) {
+				parent = parent.$parent;
+				if (!parent) return false
+				parentName = parent.$options.name;
+			}
+			return parent;
+		},
+	}
+}

+ 437 - 0
components/cm-share-popup/uni-popup/uni-popup.vue

@@ -0,0 +1,437 @@
+<template>
+	<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']" @touchmove.stop.prevent="clear">
+		<view @touchstart="touchstart" >
+			<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass" :duration="duration" :show="showTrans" @click="onTap" />
+			<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration" :show="showTrans" @click="onTap">
+				<view class="uni-popup__wrapper" :style="{ backgroundColor: bg }" :class="[popupstyle]" @click="clear"><slot /></view>
+			</uni-transition>
+		</view>
+		<!-- #ifdef H5 -->
+		<keypress v-if="maskShow" @esc="onTap" />
+		<!-- #endif -->
+	</view>
+</template>
+
+<script>
+// #ifdef H5
+import keypress from './keypress.js'
+// #endif
+
+/**
+ * PopUp 弹出层
+ * @description 弹出层组件,为了解决遮罩弹层的问题
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+ * @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
+ * 	@value top 顶部弹出
+ * 	@value center 中间弹出
+ * 	@value bottom 底部弹出
+ * 	@value left		左侧弹出
+ * 	@value right  右侧弹出
+ * 	@value message 消息提示
+ * 	@value dialog 对话框
+ * 	@value share 底部分享示例
+ * @property {Boolean} animation = [true|false] 是否开启动画
+ * @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
+ * @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
+ * @property {String}  backgroundColor 主窗口背景色
+ * @property {String}  maskBackgroundColor 蒙版颜色
+ * @property {Boolean} safeArea		   是否适配底部安全区
+ * @event {Function} change 打开关闭弹窗触发,e={show: false}
+ * @event {Function} maskClick 点击遮罩触发
+ */
+
+export default {
+	name: 'uniPopup',
+	components: {
+		// #ifdef H5
+		keypress
+		// #endif
+	},
+	emits:['change','maskClick'],
+	props: {
+		// 开启动画
+		animation: {
+			type: Boolean,
+			default: true
+		},
+		// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+		// message: 消息提示 ; dialog : 对话框
+		type: {
+			type: String,
+			default: 'center'
+		},
+		// maskClick
+		isMaskClick: {
+			type: Boolean,
+			default: null
+		},
+		// TODO 2 个版本后废弃属性 ,使用 isMaskClick
+		maskClick: {
+			type: Boolean,
+			default: null
+		},
+		backgroundColor: {
+			type: String,
+			default: 'none'
+		},
+		safeArea:{
+			type: Boolean,
+			default: true
+		},
+		maskBackgroundColor: {
+			type: String,
+			default: 'rgba(0, 0, 0, 0.4)'
+		},
+	},
+
+	watch: {
+		/**
+		 * 监听type类型
+		 */
+		type: {
+			handler: function(type) {
+				if (!this.config[type]) return
+				this[this.config[type]](true)
+			},
+			immediate: true
+		},
+		isDesktop: {
+			handler: function(newVal) {
+				if (!this.config[newVal]) return
+				this[this.config[this.type]](true)
+			},
+			immediate: true
+		},
+		/**
+		 * 监听遮罩是否可点击
+		 * @param {Object} val
+		 */
+		maskClick: {
+			handler: function(val) {
+				this.mkclick = val
+			},
+			immediate: true
+		},
+		isMaskClick: {
+			handler: function(val) {
+				this.mkclick = val
+			},
+			immediate: true
+		},
+		// H5 下禁止底部滚动
+		showPopup(show) {
+			// #ifdef H5
+			// fix by mehaotian 处理 h5 滚动穿透的问题
+			document.getElementsByTagName('body')[0].style.overflow = show ? 'hidden' : 'visible'
+			// #endif
+		}
+	},
+	data() {
+		return {
+			duration: 300,
+			ani: [],
+			showPopup: false,
+			showTrans: false,
+			popupWidth: 0,
+			popupHeight: 0,
+			config: {
+				top: 'top',
+				bottom: 'bottom',
+				center: 'center',
+				left: 'left',
+				right: 'right',
+				message: 'top',
+				dialog: 'center',
+				share: 'bottom'
+			},
+			maskClass: {
+				position: 'fixed',
+				bottom: 0,
+				top: 0,
+				left: 0,
+				right: 0,
+				backgroundColor: 'rgba(0, 0, 0, 0.4)'
+			},
+			transClass: {
+				position: 'fixed',
+				left: 0,
+				right: 0
+			},
+			maskShow: true,
+			mkclick: true,
+			popupstyle: this.isDesktop ? 'fixforpc-top' : 'top'
+		}
+	},
+	computed: {
+		isDesktop() {
+			return this.popupWidth >= 500 && this.popupHeight >= 500
+		},
+		bg() {
+			if (this.backgroundColor === '' || this.backgroundColor === 'none') {
+				return 'transparent'
+			}
+			return this.backgroundColor
+		}
+	},
+	mounted() {
+		const fixSize = () => {
+			const { windowWidth, windowHeight, windowTop, safeArea,screenHeight ,safeAreaInsets } = uni.getSystemInfoSync()
+			this.popupWidth = windowWidth
+			this.popupHeight = windowHeight + windowTop
+			// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
+			if(safeArea){
+				// #ifdef MP-WEIXIN
+				this.safeAreaInsets = screenHeight - safeArea.bottom
+				// #endif
+				// #ifndef MP-WEIXIN
+				this.safeAreaInsets = safeAreaInsets.bottom
+				// #endif
+			}else{
+				this.safeAreaInsets = 0
+			}
+		}
+		fixSize()
+		// #ifdef H5
+		// window.addEventListener('resize', fixSize)
+		// this.$once('hook:beforeDestroy', () => {
+		// 	window.removeEventListener('resize', fixSize)
+		// })
+		// #endif
+	},
+	created() {
+		// this.mkclick =  this.isMaskClick || this.maskClick
+		if(this.isMaskClick === null && this.maskClick === null){
+			this.mkclick  = true
+		}else{
+			this.mkclick = this.isMaskClick !== null ? this.isMaskClick : this.maskClick
+		}
+		if (this.animation) {
+			this.duration = 300
+		} else {
+			this.duration = 0
+		}
+		// TODO 处理 message 组件生命周期异常的问题
+		this.messageChild = null
+		// TODO 解决头条冒泡的问题
+		this.clearPropagation = false
+		this.maskClass.backgroundColor = this.maskBackgroundColor
+	},
+	methods: {
+		/**
+		 * 公用方法,不显示遮罩层
+		 */
+		closeMask() {
+			this.maskShow = false
+		},
+		/**
+		 * 公用方法,遮罩层禁止点击
+		 */
+		disableMask() {
+			this.mkclick = false
+		},
+		// TODO nvue 取消冒泡
+		clear(e) {
+			// #ifndef APP-NVUE
+			e.stopPropagation()
+			// #endif
+			this.clearPropagation = true
+		},
+
+		open(direction) {
+			let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
+			if (!(direction && innerType.indexOf(direction) !== -1)) {
+				direction = this.type
+			}
+			if (!this.config[direction]) {
+				console.error('缺少类型:', direction)
+				return
+			}
+			this[this.config[direction]]()
+			this.$emit('change', {
+				show: true,
+				type: direction
+			})
+		},
+		close(type) {
+			this.showTrans = false
+			this.$emit('change', {
+				show: false,
+				type: this.type
+			})
+			clearTimeout(this.timer)
+			// // 自定义关闭事件
+			// this.customOpen && this.customClose()
+			this.timer = setTimeout(() => {
+				this.showPopup = false
+			}, 300)
+		},
+		// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
+		touchstart(){
+			this.clearPropagation = false
+		},
+
+		onTap() {
+			if (this.clearPropagation) {
+				// fix by mehaotian 兼容 nvue
+				this.clearPropagation = false
+				return
+			}
+			this.$emit('maskClick')
+			if (!this.mkclick) return
+			this.close()
+		},
+		/**
+		 * 顶部弹出样式处理
+		 */
+		top(type) {
+			this.popupstyle = this.isDesktop ? 'fixforpc-top' : 'top'
+			this.ani = ['slide-top']
+			this.transClass = {
+				position: 'fixed',
+				left: 0,
+				right: 0,
+				backgroundColor: this.bg
+			}
+			// TODO 兼容 type 属性 ,后续会废弃
+			if (type) return
+			this.showPopup = true
+			this.showTrans = true
+			this.$nextTick(() => {
+				if (this.messageChild && this.type === 'message') {
+					this.messageChild.timerClose()
+				}
+			})
+		},
+		/**
+		 * 底部弹出样式处理
+		 */
+		bottom(type) {
+			this.popupstyle = 'bottom'
+			this.ani = ['slide-bottom']
+			this.transClass = {
+				position: 'fixed',
+				left: 0,
+				right: 0,
+				bottom: 0,
+				paddingBottom: this.safeAreaInsets+'px',
+				backgroundColor: this.bg
+			}
+			// TODO 兼容 type 属性 ,后续会废弃
+			if (type) return
+			this.showPopup = true
+			this.showTrans = true
+		},
+		/**
+		 * 中间弹出样式处理
+		 */
+		center(type) {
+			this.popupstyle = 'center'
+			this.ani = ['zoom-out', 'fade']
+			this.transClass = {
+				position: 'fixed',
+				/* #ifndef APP-NVUE */
+				display: 'flex',
+				flexDirection: 'column',
+				/* #endif */
+				bottom: 0,
+				left: 0,
+				right: 0,
+				top: 0,
+				justifyContent: 'center',
+				alignItems: 'center'
+			}
+			// TODO 兼容 type 属性 ,后续会废弃
+			if (type) return
+			this.showPopup = true
+			this.showTrans = true
+		},
+		left(type) {
+			this.popupstyle = 'left'
+			this.ani = ['slide-left']
+			this.transClass = {
+				position: 'fixed',
+				left: 0,
+				bottom: 0,
+				top: 0,
+				backgroundColor: this.bg,
+				/* #ifndef APP-NVUE */
+				display: 'flex',
+				flexDirection: 'column'
+				/* #endif */
+			}
+			// TODO 兼容 type 属性 ,后续会废弃
+			if (type) return
+			this.showPopup = true
+			this.showTrans = true
+		},
+		right(type) {
+			this.popupstyle = 'right'
+			this.ani = ['slide-right']
+			this.transClass = {
+				position: 'fixed',
+				bottom: 0,
+				right: 0,
+				top: 0,
+				backgroundColor: this.bg,
+				/* #ifndef APP-NVUE */
+				display: 'flex',
+				flexDirection: 'column'
+				/* #endif */
+			}
+			// TODO 兼容 type 属性 ,后续会废弃
+			if (type) return
+			this.showPopup = true
+			this.showTrans = true
+		}
+	}
+}
+</script>
+<style lang="scss" >
+.uni-popup {
+	position: fixed;
+	/* #ifndef APP-NVUE */
+	z-index: 99;
+	/* #endif */
+	&.top,
+	&.left,
+	&.right {
+		/* #ifdef H5 */
+		top: var(--window-top);
+		/* #endif */
+		/* #ifndef H5 */
+		top: 0;
+		/* #endif */
+	}
+	.uni-popup__wrapper {
+		/* #ifndef APP-NVUE */
+		display: block;
+		/* #endif */
+		position: relative;
+		/* iphonex 等安全区设置,底部安全区适配 */
+		/* #ifndef APP-NVUE */
+		// padding-bottom: constant(safe-area-inset-bottom);
+		// padding-bottom: env(safe-area-inset-bottom);
+		/* #endif */
+		&.left,
+		&.right {
+			/* #ifdef H5 */
+			padding-top: var(--window-top);
+			/* #endif */
+			/* #ifndef H5 */
+			padding-top: 0;
+			/* #endif */
+			flex: 1;
+		}
+	}
+}
+
+.fixforpc-z-index {
+	/* #ifndef APP-NVUE */
+	z-index: 999;
+	/* #endif */
+}
+
+.fixforpc-top {
+	top: 0;
+}
+</style>

+ 1 - 1
main.js

@@ -9,7 +9,7 @@ import ResidenceTime from './plugins/simple-residence-time'
 import residence from './utils/residence.js'
 
 // 友盟
-import Uma from './plugins/uma'
+// import Uma from './plugins/uma'
 
 // 公共组件 全局组件
 import { msg, modal, prePage, boundingClientRect } from './utils/util'

+ 1 - 0
mixins/appMixins.js

@@ -21,6 +21,7 @@ const appMixins = {
                     this.updateRossShow()
                     uni.setStorageSync('token',response.data.token)
                     uni.setStorageSync('unionId',response.data.unionId)
+                    uni.setStorageSync('spUserId', response.data.spUserId)
                 })
                 .catch(error =>{
                     this.logout(error.data)

+ 49 - 2
pages.json

@@ -909,8 +909,55 @@
 					"style": {
 						"navigationBarTitleText": "关联咨询记录"
 					}
-				}
-			]
+				},
+                {
+                	"path": "remarks/business-card",
+                	"style": {
+                		"navigationBarTitleText": "我的名片"
+                	}
+                },
+                {
+                	"path": "remarks/mine-qrcode",
+                	"style": {
+                		"navigationBarTitleText": "二维码"
+                	}
+                },
+                {
+                	"path": "remarks/mine-card",
+                	"style": {
+                		"navigationBarTitleText": "我的名片"
+                	}
+                },
+                {
+                	"path": "remarks/institutional-activity-analysis",
+                	"style": {
+                		"navigationBarTitleText": "机构活跃分析",
+                        "enablePullDownRefresh": true,
+                        "navigationStyle": "custom"
+                	}
+                },
+                {
+                    "path" : "notice/service/service",
+                    "style" : {
+                        "navigationBarTitleText": "服务通知",
+                        "enablePullDownRefresh": true
+                    }
+                },
+                {
+                    "path" : "notice/service/Institutional_visits",
+                    "style" : {
+                        "navigationBarTitleText": "机构访问通知",
+                        "enablePullDownRefresh": true
+                    }
+                },
+                {
+                    "path" : "notice/service/visits_details",
+                    "style" : {
+                        "navigationBarTitleText": "访问详情",
+                        "enablePullDownRefresh": true
+                    }
+                }
+            ]
 		},
 		{
 			"root": "pages/h5/", //活动分包模块

+ 68 - 0
pages/goods/mixins/share.helper.js

@@ -0,0 +1,68 @@
+// import { encrypt } from '@/common/crypto.js'
+/* 小程序码 */
+import store from '@/store/index.js'
+import { wxUnlimited } from '@/services/sellse.service.js'
+
+
+/*
+ * queryStringify
+ * 将url?k=v&k1=v1的序列化转成k-v对象
+ */
+export function queryParse(query = '') {
+    if (query.startsWith('?')) {
+        query = query.slice(0)
+    }
+    const obj = Object.create(null)
+    query.split('&').forEach(str => {
+        const v = str.split('=')
+        obj[v[0]] = v[1]
+    })
+    return obj
+}
+
+/* 生成二维码链接 */
+export const generateWxUnlimited = async (that, params) => {
+    try {
+        // 从服务端获取二维码arrayBuffer
+        return await that.SellerService.wxUnlimited({
+            page: params.pagePath,
+            scene: params.queryStr, // codeQueryStr(params.queryStr)
+            check_path: process.env.NODE_ENV === 'production', // 是否校验页面
+            env_version: process.env.NODE_ENV === 'production' ? 'release' : 'trial', // 正式版 or 开发版
+            width: 200, // 二维码宽度
+            auto_color: false, // 自动颜色
+            line_color: { 'r': 0, 'g': 0, 'b': 0 }, // 线条颜色
+            is_hyaline: true // 透明底
+        })
+    } catch (e) {
+        return Promise.reject(e)
+    }
+}
+
+// 编码查询参数
+export function codeQueryStr(query = '') {
+    const keys = Object.keys(queryKeyOfMap)
+    return query.split('&').map(str => {
+        return str.split('=').map((substr, index) => {
+            if (!index) {
+                return queryKeyOfMap[keys.find(item => substr === item)]
+            } else {
+                return substr
+            }
+        }).join('=')
+    }).join('&')
+}
+
+// 反编码查询参数
+export function enCodeQueryStr(query) {
+    const keys = Object.keys(enQueryKeyOfMap)
+    return query.split('&').map(str => {
+        return str.split('=').map((substr, index) => {
+            if (!index) {
+                return enQueryKeyOfMap[keys.find(item => substr === item)]
+            } else {
+                return substr
+            }
+        }).join('=')
+    }).join('&')
+}

File diff suppressed because it is too large
+ 615 - 588
pages/goods/product.vue


+ 1 - 0
pages/login/bindOperator.vue

@@ -121,6 +121,7 @@
 					this.$store.commit('updateStatus',response.data)
 					uni.setStorageSync('token',response.data.token)
 					uni.setStorageSync('unionId',response.data.unionId)
+                    uni.setStorageSync('spUserId', response.data.spUserId)
 					setTimeout(()=>{
 						if(response.data.userIdentity === 1){
 							this.$api.navigateTo('/pages/seller/index/index')

+ 875 - 796
pages/login/register.vue

@@ -1,109 +1,125 @@
 <template>
-	<view class="container register" :style="{ paddingTop: CustomBar + 'px' }">
-		<cu-custom :navbar-data="nvabarData" @navigateBack="hanldNavigateBack"></cu-custom>
-		<view class="register-main clearfix">
-			<view class="register-logo">
-				<image class="logo" src="https://static.caimei365.com/app/img/icon/logo@2x.png" mode=""></image>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">联系人:</view>
-					<input
-						class="row-input"
-						type="text"
-						name="input"
-						v-model="params.userName"
-						placeholder="请输入机构联系人姓名"
-						maxlength="6"
-					/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">手机号:</view>
-					<input
-						class="row-input"
-						type="number"
-						name="input"
-						v-model="params.bindMobile"
-						placeholder="请输入联系人常用手机号"
-						maxlength="11"
-					/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">短信验证码:</view>
-					<input
-						class="row-input code"
-						type="text"
-						v-model="params.smsCode"
-						placeholder="请输入短信验证码"
-						maxlength="6"
-					/>
-					<view class="row-btn" :class="[isMobileDisabled ? 'disabled' : '']">
-						<button
-							class="row-input"
-							type="button"
-							@click.stop="getMobileCodeFn"
-							:disabled="isMobileDisabled"
-						>
-							{{ mobileCodeText }}
-						</button>
-					</view>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">登录密码:</view>
-					<input
-						class="row-input"
-						type="password"
-						name="input"
-						v-model="params.password"
-						placeholder="密码必须为8-16位字母数字组合"
-						maxlength="16"
-					/>
-				</view>
-			</view>
-			<view class="register-row clearfix">
-				<view class="register-from">
-					<view class="label">确认密码:</view>
-					<input
-						class="row-input"
-						type="password"
-						name="input"
-						v-model="params.passWordConfirm"
-						placeholder="请确认密码"
-						maxlength="16"
-					/>
-				</view>
-			</view>
-			<view class="register-main clearfix">
-				<view class="register-agree">
-					<view class="agree-text" @tap.stop="agreeCheck()">
-						<button
-							class="checkbox iconfont"
-							:class="[isCheck ? 'icon-gouxuan' : 'icon-weigouxuan']"
-						></button>
-						我已阅读并同意
-						<text @click.stop="this.$api.navigateTo('/pages/service/service?id=1036&title=机构协议')"
-							>《机构协议》</text
-						>
-						<text @click.stop="this.$api.navigateTo('/pages/service/service?id=1023&title=用户协议')"
-							>《用户协议》</text
-						>及
-						<text @click.stop="this.$api.navigateTo('/pages/service/service?id=1013&title=隐私权政策')"
-							>《隐私权政策》</text
-						>
-					</view>
-				</view>
-				<view class="register-row ">
-					<view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
-				</view>
-			</view>
-		</view>
-	</view>
+    <view class="container register" :style="{ paddingTop: CustomBar + 'px' }">
+        <cu-custom :navbar-data="nvabarData" @navigateBack="hanldNavigateBack"></cu-custom>
+        <view class="register-main clearfix">
+            <view class="register-logo">
+                <image class="logo" src="https://static.caimei365.com/app/img/icon/logo@2x.png" mode=""></image>
+            </view>
+            <view class="register-row clearfix">
+                <view class="register-from">
+                    <view class="label">联系人:</view>
+                    <input
+                        class="row-input"
+                        type="text"
+                        name="input"
+                        v-model="params.userName"
+                        placeholder="请输入机构联系人姓名"
+                        maxlength="6"
+                    />
+                </view>
+            </view>
+            <view class="register-row clearfix">
+                <view class="register-from">
+                    <view class="label">手机号:</view>
+                    <input
+                        class="row-input"
+                        type="number"
+                        name="input"
+                        v-model="params.bindMobile"
+                        placeholder="请输入联系人常用手机号"
+                        maxlength="11"
+                    />
+                </view>
+            </view>
+            <view class="register-row clearfix">
+                <view class="register-from">
+                    <view class="label">短信验证码:</view>
+                    <input
+                        class="row-input code"
+                        type="text"
+                        v-model="params.smsCode"
+                        placeholder="请输入短信验证码"
+                        maxlength="6"
+                    />
+                    <view class="row-btn" :class="[isMobileDisabled ? 'disabled' : '']">
+                        <button
+                            class="row-input"
+                            type="button"
+                            @click.stop="getMobileCodeFn"
+                            :disabled="isMobileDisabled"
+                        >
+                            {{ mobileCodeText }}
+                        </button>
+                    </view>
+                </view>
+            </view>
+            <view class="register-row clearfix">
+                <view class="register-from">
+                    <view class="label">登录密码:</view>
+                    <input
+                        class="row-input"
+                        type="password"
+                        name="input"
+                        v-model="params.password"
+                        placeholder="密码必须为8-16位字母数字组合"
+                        maxlength="16"
+                    />
+                </view>
+            </view>
+            <view class="register-row clearfix">
+                <view class="register-from">
+                    <view class="label">确认密码:</view>
+                    <input
+                        class="row-input"
+                        type="password"
+                        name="input"
+                        v-model="params.passWordConfirm"
+                        placeholder="请确认密码"
+                        maxlength="16"
+                    />
+                </view>
+            </view>
+            <view class="register-row clearfix">
+                <view class="tab-label">是否需要为你匹配专属客户经理:</view>
+                <view class="tips">建议选择“需要”,采美专业的客户经理会为您提供更多支持,帮助您 轻松采购!</view>
+                <view class="check">
+                    <view
+                        class="radio"
+                        :class="item.id === params.isSp ? 'isActive' : ''"
+                        @click="params.isSp = item.id"
+                        v-for="(item, index) in checkRadio"
+                        :key="item.id"
+                    >
+                        {{ item.label }}
+                    </view>
+                </view>
+            </view>
+            <view class="register-main clearfix">
+                <view class="register-agree">
+                    <view class="agree-text" @tap.stop="agreeCheck()">
+                        <button
+                            class="checkbox iconfont"
+                            :class="[isCheck ? 'icon-gouxuan' : 'icon-weigouxuan']"
+                        ></button>
+                        我已阅读并同意
+                        <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1036&title=机构协议')">
+                            《机构协议》
+                        </text>
+                        <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1023&title=用户协议')">
+                            《用户协议》
+                        </text>
+                        及
+                        <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1013&title=隐私权政策')">
+                            《隐私权政策》
+                        </text>
+                    </view>
+                </view>
+                <view class="register-row ">
+                    <view class="register-btn sub" @click.stop="registerStepsfirst">注册</view>
+                </view>
+            </view>
+        </view>
+    </view>
 </template>
 
 <script>
@@ -114,702 +130,765 @@ import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
 import { beautyList, mentuzCampNullList, medicaCampNullList } from '@/common/json/data.json.js' //本地数据
 import { uploadFileImage } from '@/services/public.js'
 export default {
-	components: {
-		mpvueCityPicker
-	},
-	data() {
-		return {
-			nvabarData: {
-				//顶部自定义导航
-				showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
-				showSearch: 0,
-				title: '机构注册', // 导航栏 中间的标题
-				haveBack: true,
-				textLeft: this.$store.state.isIphone
-			},
-			CustomBar: this.CustomBar, // 顶部导航栏高度
-			isMobileDisabled: false, //手机验证码按钮控制
-			mobilCount: '', //倒计时
-			mobileCodeText: '获取验证码',
-			mobilTime: null,
-			params: {
-				userName: '',
-				bindMobile: '',
-				isAgreed: 0,
-				password: '',
-				passWordConfirm: '',
-				smsCode: '',
-				avatarUrl: '',
-				nickName: '',
-				source: 1,
-				unionId: ''
-			},
-			imageCode: '', //图形验证码
-			imageCodeUrl: '', //图形验证码图片
-			imageCodetoken: '', //图形验证校验
-			isCheck: false, //是否勾选协议
-			userID: '', //机构userID
-			clubID: '' //机构ID
-		}
-	},
-	onLoad(option) {},
-	computed: {
-		...mapState(['isWxAuthorize'])
-	},
-	methods: {
-		...mapMutations(['login', 'wxLogin']),
-		hanldNavigateBack() {
-			this.$util.modal('', '注册尚未完成,确定放弃注册吗?', '确定', '取消', true, () => {
-				uni.navigateBack({
-					delta: 1
-				})
-			})
-		},
+    components: {
+        mpvueCityPicker
+    },
+    data() {
+        return {
+            nvabarData: {
+                //顶部自定义导航
+                showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+                showSearch: 0,
+                title: '机构注册', // 导航栏 中间的标题
+                haveBack: true,
+                textLeft: this.$store.state.isIphone
+            },
+            checkRadio: [
+                // 是否需要分配客户经理
+                {
+                    id: 1,
+                    label: '需要'
+                },
+                {
+                    id: 0,
+                    label: '不需要'
+                }
+            ],
+            CustomBar: this.CustomBar, // 顶部导航栏高度
+            isMobileDisabled: false, //手机验证码按钮控制
+            mobilCount: '', //倒计时
+            mobileCodeText: '获取验证码',
+            mobilTime: null,
+            params: {
+                userName: '',
+                bindMobile: '',
+                isAgreed: 0,
+                password: '',
+                passWordConfirm: '',
+                smsCode: '',
+                avatarUrl: '',
+                nickName: '',
+                source: 1,
+                unionId: '',
+                isSp: 1,
+                spId: uni.getStorageSync('sellerUserId') || '', // 协销分享的id
+            },
+            imageCode: '', //图形验证码
+            imageCodeUrl: '', //图形验证码图片
+            imageCodetoken: '', //图形验证校验
+            isCheck: false, //是否勾选协议
+            userID: '', //机构userID
+            clubID: '' //机构ID
+        }
+    },
+    onLoad(option) {},
+    computed: {
+        ...mapState(['isWxAuthorize'])
+    },
+    methods: {
+        ...mapMutations(['login', 'wxLogin']),
+        hanldNavigateBack() {
+            this.$util.modal('', '注册尚未完成,确定放弃注册吗?', '确定', '取消', true, () => {
+                uni.navigateBack({
+                    delta: 1
+                })
+            })
+        },
 
-		registerStepsfirst() {
-			if (this.params.userName == '') {
-				this.$util.msg('请输入联系人名称', 2000)
-				return
-			}
-			if (this.params.bindMobile == '') {
-				this.$util.msg('请输入手机号', 2000)
-				return
-			}
-			if (!this.$reg.isMobile(this.params.bindMobile)) {
-				this.$util.msg('手机格式不正确', 2000)
-				return
-			}
-			if (this.params.smsCode == '') {
-				this.$util.msg('请输入手机验证码', 2000)
-				return
-			}
-			if (!this.$reg.isMobileCode(this.params.smsCode)) {
-				this.$util.msg('验证码格式不正确', 2000)
-				return
-			}
-			if (this.params.password == '') {
-				this.$util.msg('请输入密码', 2000)
-				return
-			}
-			if (!this.$reg.checkPwd(this.params.password)) {
-				this.$util.msg('密码必须为8-16位字母数字的组合', 2000)
-				return
-			}
-			if (this.params.passWordConfirm == '') {
-				this.$util.msg('请再次确认密码', 2000)
-				return
-			}
-			if (this.params.passWordConfirm !== this.params.password) {
-				this.$util.msg('两次输入的密码不一致', 2000)
-				return
-			}
-			if (this.params.isAgreed == 0) {
-				this.$util.msg('请勾选同意协议', 2000)
-				return
-			}
-			this.params.unionId = uni.getStorageSync('unionId')
-			this.GetUserProfile()
-		},
-		GetUserProfile() {
-			//获取用户微信个人信息
-			const self = this
-			wx.getUserProfile({
-				desc: '采美采购商城小程序获取您的信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
-				success(res) {
-					console.log('微信获取用户信息新API', res)
-					self.wxLogin(res.userInfo)
-					self.params.nickName = res.userInfo.nickName
-					self.params.avatarUrl = res.userInfo.avatarUrl
-					self.UserRegisterClub(self.params)
-					// 友盟自定义事件
-					if (process.env.NODE_ENV != 'development') {
-						self.$uma.trackEvent('Um_Event_ConfirmRegister', {
-							Um_Key_PageName: '注册机构',
-							Um_Key_PageCategory: '注册机构页面'
-						})
-					}
-				},
-				fail() {
-					self.$util.msg('授权失败', 2000)
-				}
-			})
-		},
-		UserRegisterClub(params) {
-			this.UserService.UserRegisterClub(params)
-				.then(response => {
-					wxLogin.wxLoginAuthorize()
-					setTimeout(() => {
-						this.$api.switchTabTo('/pages/tabBar/user/user')
-					}, 2000)
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		storeUpdataeStatus(data) {
-			uni.setStorageSync('token', data.token)
-			this.$store.commit('updateStatus', data)
-			this.login(data)
-		},
-		getMobileCodeFn() {
-			if (this.params.bindMobile == '') {
-				this.$util.msg('请输入手机号', 2000)
-				return
-			}
-			if (!this.$reg.isMobile(this.params.bindMobile)) {
-				this.$util.msg('请输入正确的手机号', 2000)
-				return
-			}
-			let params = {
-				mobile: this.params.bindMobile,
-				isCheckCaptcha: 1,
-				activateCodeType: 2,
-				platformType: 2
-			}
-			this.isMobileDisabled = true
-			this.PublicService.GetRegisterMobileCode(params)
-				.then(response => {
-					this.$util.msg('验证短信已发送', 2000)
-					const TIME_COUNT = 60
-					if (!this.mobilTime) {
-						this.mobilCount = TIME_COUNT
-						this.isMobileDisabled = true
-						this.mobilTime = setInterval(() => {
-							if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
-			  			this.mobilCount--
-								this.mobileCodeText = this.mobilCount + 's重新发送'
-							} else {
-								this.isMobileDisabled = false
-								clearInterval(this.mobilTime)
-								this.mobilTime = null
-								this.mobileCodeText = '获取验证码'
-							}
-						}, 1000)
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-					this.isMobileDisabled = false
-				})
-		},
-		agreeCheck() {
-			this.isCheck = !this.isCheck
-			if (this.isCheck) {
-				this.params.isAgreed = 1
-			} else {
-				this.params.isAgreed = 0
-			}
-		},
-		async InitAuthorize() {
-			//是否已授权 0:为取消授权 1:为已授权 2:为未操作
-			wxLogin.wxLoginQuick()
-		}
-	},
-	onShow() {
-		this.InitAuthorize()
-	}
+        registerStepsfirst() {
+            if (this.params.userName == '') {
+                this.$util.msg('请输入联系人名称', 2000)
+                return
+            }
+            if (this.params.bindMobile == '') {
+                this.$util.msg('请输入手机号', 2000)
+                return
+            }
+            if (!this.$reg.isMobile(this.params.bindMobile)) {
+                this.$util.msg('手机格式不正确', 2000)
+                return
+            }
+            if (this.params.smsCode == '') {
+                this.$util.msg('请输入手机验证码', 2000)
+                return
+            }
+            if (!this.$reg.isMobileCode(this.params.smsCode)) {
+                this.$util.msg('验证码格式不正确', 2000)
+                return
+            }
+            if (this.params.password == '') {
+                this.$util.msg('请输入密码', 2000)
+                return
+            }
+            if (!this.$reg.checkPwd(this.params.password)) {
+                this.$util.msg('密码必须为8-16位字母数字的组合', 2000)
+                return
+            }
+            if (this.params.passWordConfirm == '') {
+                this.$util.msg('请再次确认密码', 2000)
+                return
+            }
+            if (this.params.passWordConfirm !== this.params.password) {
+                this.$util.msg('两次输入的密码不一致', 2000)
+                return
+            }
+            if (this.params.isAgreed == 0) {
+                this.$util.msg('请勾选同意协议', 2000)
+                return
+            }
+            this.params.unionId = uni.getStorageSync('unionId')
+            this.GetUserProfile()
+        },
+        GetUserProfile() {
+            //获取用户微信个人信息
+            const self = this
+            wx.getUserProfile({
+                desc: '采美采购商城小程序获取您的信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
+                success(res) {
+                    console.log('微信获取用户信息新API', res)
+                    self.wxLogin(res.userInfo)
+                    self.params.nickName = res.userInfo.nickName
+                    self.params.avatarUrl = res.userInfo.avatarUrl
+                    self.UserRegisterClub(self.params)
+                    // 友盟自定义事件
+                    if (process.env.NODE_ENV != 'development') {
+                        self.$uma.trackEvent('Um_Event_ConfirmRegister', {
+                            Um_Key_PageName: '注册机构',
+                            Um_Key_PageCategory: '注册机构页面'
+                        })
+                    }
+                },
+                fail() {
+                    self.$util.msg('授权失败', 2000)
+                }
+            })
+        },
+        UserRegisterClub(params) {
+            this.UserService.UserRegisterClub(params)
+                .then(response => {
+                    wxLogin.wxLoginAuthorize()
+                    setTimeout(() => {
+                        this.$api.switchTabTo('/pages/tabBar/user/user')
+                    }, 2000)
+                })
+                .catch(error => {
+                    this.$util.msg(error.msg, 2000)
+                })
+        },
+        storeUpdataeStatus(data) {
+            uni.setStorageSync('token', data.token)
+            this.$store.commit('updateStatus', data)
+            this.login(data)
+        },
+        getMobileCodeFn() {
+            if (this.params.bindMobile == '') {
+                this.$util.msg('请输入手机号', 2000)
+                return
+            }
+            if (!this.$reg.isMobile(this.params.bindMobile)) {
+                this.$util.msg('请输入正确的手机号', 2000)
+                return
+            }
+            let params = {
+                mobile: this.params.bindMobile,
+                isCheckCaptcha: 1,
+                activateCodeType: 2,
+                platformType: 2
+            }
+            this.isMobileDisabled = true
+            this.PublicService.GetRegisterMobileCode(params)
+                .then(response => {
+                    this.$util.msg('验证短信已发送', 2000)
+                    const TIME_COUNT = 60
+                    if (!this.mobilTime) {
+                        this.mobilCount = TIME_COUNT
+                        this.isMobileDisabled = true
+                        this.mobilTime = setInterval(() => {
+                            if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
+                                this.mobilCount--
+                                this.mobileCodeText = this.mobilCount + 's重新发送'
+                            } else {
+                                this.isMobileDisabled = false
+                                clearInterval(this.mobilTime)
+                                this.mobilTime = null
+                                this.mobileCodeText = '获取验证码'
+                            }
+                        }, 1000)
+                    }
+                })
+                .catch(error => {
+                    this.$util.msg(error.msg, 2000)
+                    this.isMobileDisabled = false
+                })
+        },
+        agreeCheck() {
+            this.isCheck = !this.isCheck
+            if (this.isCheck) {
+                this.params.isAgreed = 1
+            } else {
+                this.params.isAgreed = 0
+            }
+        },
+        async InitAuthorize() {
+            //是否已授权 0:为取消授权 1:为已授权 2:为未操作
+            wxLogin.wxLoginQuick()
+        }
+    },
+    onShow() {
+        this.InitAuthorize()
+    }
 }
 </script>
 
 <style lang="scss">
 .register {
-	width: 100%;
-	height: 100%;
-	box-sizing: border-box;
-	background-size: contain;
-	.register-main {
-		width: 100%;
-		height: auto;
-		position: relative;
-		.register-consult {
-			width: 110rpx;
-			height: 68rpx;
-			background: linear-gradient(223deg, rgba(225, 86, 21, 0.6) 0%, rgba(225, 86, 10, 0.3) 100%);
-			border-radius: 34rpx 0 0 34rpx;
-			position: absolute;
-			right: 0;
-			bottom: 120rpx;
-			text-align: left;
-			line-height: 68rpx;
-			padding-left: 20rpx;
-			.icon-kefunv {
-				font-size: 48rpx;
-				color: #31313b;
-				float: left;
-			}
-			.text {
-				font-size: $font-size-24;
-				display: block;
-				float: left;
-				width: 60rpx;
-				line-height: 30rpx;
-				color: #ffffff;
-				margin-top: 6rpx;
-			}
-		}
-		.register-agree {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			margin: 100rpx 0 20rpx 0;
-			.agree-text {
-				.checkbox {
-					float: left;
-					margin: 4rpx 6rpx 0 0;
-					color: #999999;
-					font-size: $font-size-34;
-					&.icon-gouxuan {
-						color: $color-system;
-					}
-				}
-				font-size: $font-size-22;
-				line-height: 44rpx;
-				color: #999999;
-				text {
-					color: #1890f9;
-				}
-			}
-		}
-		.register-logo {
-			width: 100%;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			height: 284rpx;
-			padding: 60rpx 0 40rpx 0;
-			.logo {
-				width: 611rpx;
-				height: 284rpx;
-				display: block;
-			}
-		}
-		&.detailed {
-			padding-bottom: 330rpx;
-		}
-		.register-row {
-			width: 100%;
-			height: auto;
-			padding: 0 75rpx;
-			margin-bottom: 30rpx;
-			box-sizing: border-box;
-			&.none {
-				margin-bottom: 0;
-			}
-			&.login {
-				display: flex;
-			}
-			.register-text {
-				line-height: 44rpx;
-				margin-top: 100rpx;
-				font-size: $font-size-24;
-				color: #999999;
-				text-align: justify;
-				.txt {
-					margin-right: 15rpx;
-				}
-			}
-			.register-title {
-				line-height: 44rpx;
-				font-size: $font-size-24;
-				color: $text-color;
-				text-align: left;
-				&.first {
-					margin-top: 20rpx;
-				}
-			}
-			.register-tip {
-				line-height: 64rpx;
-				font-size: $font-size-24;
-				color: #cecece;
-				text-align: left;
-			}
-			.register-from {
-				width: 100%;
-				height: 80rpx;
-				background: #ffffff;
-				position: relative;
-				border-bottom: 1px solid #e1e1e1;
-				.label {
-					text-align: left;
-					font-size: $font-size-28;
-					color: #666666;
-					line-height: 88rpx;
-					float: left;
-				}
-				.row-input {
-					width: 440rpx;
-					padding-left: 10rpx;
-					font-size: $font-size-28;
-					color: $text-color;
-					line-height: 80rpx;
-					float: left;
-					height: 80rpx;
-					&.none {
-						color: #999999;
-					}
-					&.picker {
-						text-align: left;
-						color: #333333;
-					}
-					&.keshi {
-						width: 550rpx;
-					}
-					&.code {
-						width: 264rpx;
-					}
-				}
-				&.img-btn {
-					width: 220rpx;
-					height: 80rpx;
-					padding: 0;
-					float: left;
-					background: #ffffff;
-					display: block;
-					.vscodeimg {
-						width: 150rpx;
-						height: 80rpx;
-						float: left;
-						display: flex;
-						flex-direction: column;
-						align-items: center;
-						border-radius: 14rpx;
-						image {
-							width: 150rpx;
-							height: 80rpx;
-							border-radius: 14rpx;
-						}
-					}
-					.vscod-refresh {
-						width: 70rpx;
-						float: right;
-						text-align: right;
-						display: flex;
-						flex-direction: column;
-						align-items: center;
-						line-height: 44rpx;
-						.icon-shuaxin {
-							font-size: 48rpx;
-							color: #333333;
-						}
-						.ref-text {
-							font-size: 24rpx;
-							color: #333333;
-						}
-					}
-				}
-				&.imgcode {
-					width: 410rpx;
-					float: left;
-					margin-right: 20rpx;
-					.row-input {
-						width: 230rpx;
-					}
-				}
-				.row-btn {
-					width: 180rpx;
-					height: 64rpx;
-					float: left;
-					background: $btn-confirm;
-					padding: 0;
-					border-radius: 32rpx;
-					.row-input {
-						width: 180rpx;
-						height: 64rpx;
-						line-height: 64rpx;
-						padding: 0;
-						color: #ffffff;
-						background: $btn-confirm;
-						text-align: center;
-						border-radius: 32rpx;
-						&.other {
-							width: 180rpx;
-							background: #f7f7f7;
-							margin-right: 20rpx;
-						}
-						&.none {
-							background: #f7f7f7;
-						}
-					}
-					&.disabled {
-						background: #f7f7f7;
-						.row-input {
-							background: #f7f7f7;
-							color: #999999;
-							font-size: 24rpx;
-						}
-					}
-				}
-				&.picker {
-					padding: 0 24rpx;
-					width: 654rpx;
-					height: 88rpx;
-					line-height: 88rpx;
-					.label {
-						line-height: 88rpx;
-					}
-					.row-input {
-						width: 470rpx;
-						height: 88rpx;
-						line-height: 88rpx;
-						padding-left: 30rpx;
-					}
-				}
-				&.radio {
-					padding: 0 24rpx;
-					width: 654rpx;
-					height: 288rpx;
-					.row-input {
-						width: 100%;
-						height: 88rpx;
-						line-height: 88rpx;
-						padding-left: 0;
-					}
-					.row-radio {
-						float: left;
-						transform: scale(0.8);
-					}
-					.row-text {
-						width: 100rpx;
-						text-align: center;
-						float: left;
-					}
-				}
-				&.group {
-					padding: 0 24rpx;
-					width: 654rpx;
-					height: auto;
-					background: #ffffff;
-					margin-top: 30rpx;
-					.label {
-						line-height: 76rpx;
-					}
-					.row-input {
-						width: 100%;
-						height: 88rpx;
-						line-height: 88rpx;
-						padding-left: 0;
-					}
-					.row-radio {
-						float: left;
-					}
-					.row-text {
-						width: 100rpx;
-						text-align: center;
-						float: left;
-					}
-				}
-				&.btn {
-					margin-top: 0;
-				}
-				.content-class {
-					margin: 20rpx auto;
-					display: flex;
-					flex-flow: row wrap;
-					justify-content: space-between;
-					align-items: center;
-					&.btn {
-						margin: 0 auto;
-						margin-left: 116rpx;
-					}
-					.row-input {
-						display: flex;
-						width: 220rpx;
-						height: 40rpx;
-						padding: 24rpx;
-						text-align: left;
-						border-radius: 10rpx;
-						font-size: $font-size-28;
-						color: $text-color;
-					}
-					.confirm-btn {
-						width: 200rpx;
-						height: 88rpx;
-						border-radius: 10rpx;
-						line-height: 88rpx;
-						text-align: center;
-						&.other {
-							width: 213rpx;
-						}
-						&.none {
-							color: #ffffff;
-							background: $btn-confirm;
-						}
-						&.disabled {
-							color: #999999;
-						}
-					}
-					.item {
-						width: 155rpx;
-						height: 60rpx;
-						font-size: $font-size-28;
-						line-height: 60rpx;
-						border-radius: 10rpx;
-						margin: 10rpx;
-						text-align: center;
-						box-sizing: border-box;
-						border: 1rpx solid #efefef;
-						float: left;
-						checkbox {
-							display: none;
-						}
-					}
-					.on {
-						border-color: $color-system;
-						color: $color-system;
-					}
-				}
-			}
-			.row-login {
-				flex: 1;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: left;
-			}
-			.row-logincode {
-				flex: 1;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: right;
-			}
-			.icon-xiayibu {
-				width: 88rpx;
-				height: 88rpx;
-				position: absolute;
-				right: 0;
-				top: 0;
-				line-height: 88rpx;
-				text-align: center;
-			}
-			&.text-textarea {
-				background: #ffffff;
-				.textarea {
-					width: 654rpx;
-					height: 180rpx;
-					background: #f7f7f7;
-					padding: 24rpx;
-					font-size: $font-size-28;
-					color: $text-color;
-					z-index: 1;
-					border-radius: 14rpx;
-				}
-				.textarea.hide {
-					opacity: 0;
-				}
-				.textarea.show {
-					color: #999999;
-				}
-			}
-		}
-		.register-picture {
-			height: 102rpx;
-			margin: 30rpx 0;
-			width: 42%;
-			float: left;
-			&.zz {
-				width: 100%;
-			}
-			.label {
-				float: left;
-				font-size: $font-size-28;
-				color: $text-color;
-				line-height: 102rpx;
-				width: 150rpx;
-				text-align: right;
-				&.zz {
-					width: 230rpx;
-				}
-			}
-			.upload-picture {
-				float: left;
-				height: 100rpx;
-				.upload-none {
-					width: 100rpx;
-					height: 100rpx;
-					text-align: center;
-					line-height: 100rpx;
-					color: #999999;
-					border: 1px solid #999999;
-					border-radius: 10rpx;
-					margin: 0 20rpx;
-					.iconfont {
-						font-size: $font-size-28;
-					}
-				}
-				.upload-image {
-					width: 100rpx;
-					height: 100rpx;
-					border-radius: 10rpx;
-					margin: 0 20rpx;
-					position: relative;
-					image {
-						width: 100rpx;
-						height: 100rpx;
-						border-radius: 10rpx;
-					}
-					.upload-del {
-						width: 40rpx;
-						height: 40rpx;
-						position: absolute;
-						top: -20rpx;
-						right: -20rpx;
-						line-height: 40rpx;
-						text-align: center;
-						.iconfont {
-							font-size: $font-size-32;
-							color: #999999;
-						}
-					}
-				}
-			}
-		}
-		.register-input {
-			width: 654rpx;
-			height: 40rpx;
-			padding: 24rpx;
-			margin: 0 auto;
-			margin-bottom: 60rpx;
-			background: #f7f7f7;
-			border-radius: 14rpx;
-			.input {
-				width: 100%;
-				height: 100%;
-				background: #f7f7f7;
-				font-size: $font-size-28;
-				line-height: 40rpx;
-				color: #333333;
-				border-radius: 14rpx;
-			}
-		}
-		.register-fiexd {
-			width: 100%;
-			height: auto;
-			position: fixed;
-			bottom: 0;
-			left: 0;
-			z-index: 999;
-			background: #ffffff;
-		}
-		.register-btn {
-			width: 100%;
-			height: 88rpx;
-			border-radius: 44rpx;
-			font-size: $font-size-28;
-			line-height: 88rpx;
-			color: #ffffff;
-			margin: 0 auto;
-			text-align: center;
-			background: $btn-confirm;
-			margin-top: 96rpx;
-			&.none {
-				border: 1px solid $color-system;
-				background: #ffffff;
-				color: $color-system;
-				margin-top: 0;
-			}
-			&.sub {
-				margin-top: 0;
-			}
-		}
-	}
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    background-size: contain;
+    .register-main {
+        width: 100%;
+        height: auto;
+        position: relative;
+        .register-consult {
+            width: 110rpx;
+            height: 68rpx;
+            background: linear-gradient(223deg, rgba(225, 86, 21, 0.6) 0%, rgba(225, 86, 10, 0.3) 100%);
+            border-radius: 34rpx 0 0 34rpx;
+            position: absolute;
+            right: 0;
+            bottom: 120rpx;
+            text-align: left;
+            line-height: 68rpx;
+            padding-left: 20rpx;
+            .icon-kefunv {
+                font-size: 48rpx;
+                color: #31313b;
+                float: left;
+            }
+            .text {
+                font-size: $font-size-24;
+                display: block;
+                float: left;
+                width: 60rpx;
+                line-height: 30rpx;
+                color: #ffffff;
+                margin-top: 6rpx;
+            }
+        }
+        .register-agree {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            margin: 100rpx 0 20rpx 0;
+            .agree-text {
+                .checkbox {
+                    float: left;
+                    margin: 4rpx 6rpx 0 0;
+                    color: #999999;
+                    font-size: $font-size-34;
+                    &.icon-gouxuan {
+                        color: $color-system;
+                    }
+                }
+                font-size: $font-size-22;
+                line-height: 44rpx;
+                color: #999999;
+                text {
+                    color: #1890f9;
+                }
+            }
+        }
+        .register-logo {
+            width: 100%;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            height: 284rpx;
+            padding: 60rpx 0 40rpx 0;
+            .logo {
+                width: 611rpx;
+                height: 284rpx;
+                display: block;
+            }
+        }
+        &.detailed {
+            padding-bottom: 330rpx;
+        }
+        .register-row {
+            width: 100%;
+            height: auto;
+            padding: 0 75rpx;
+            margin-bottom: 30rpx;
+            box-sizing: border-box;
+            .tab-label {
+                color: #666666;
+                font-size: 28rpx;
+            }
+            .tips {
+                color: #ff5b00;
+                font-size: 20rpx;
+            }
+            .check{
+                display: flex;
+                align-item: center;
+                margin-top: 24rpx;
+                .radio {
+                    color: #666666;
+                    font-size: 28rpx;
+                    padding-left: 60rpx;
+                    position: relative;
+                    margin-right: 56rpx;
+                    &::before {
+                        content: '';
+                        width: 32rpx;
+                        height: 32rpx;
+                        border: 1px solid #B2B2B2;
+                        border-radius: 50%;
+                        position: absolute;
+                        left: 0;
+                    }
+                }
+                .isActive {
+                    &::before {
+                        border: 1px solid #FF5B00;
+                        content: '';
+                        width: 32rpx;
+                        height: 32rpx;
+                        border-radius: 50%;
+                        position: absolute;
+                        left: 0;
+                    }
+                    &::after {
+                        content: '';
+                        width: 16rpx;
+                        height: 16rpx;
+                        border-radius: 50%;
+                        position: absolute;
+                        left: 0;
+                        background-color: #FF5B00;
+                        transform: translate(60%, 60%);
+                    }
+                }
+            }
+            &.none {
+                margin-bottom: 0;
+            }
+            &.login {
+                display: flex;
+            }
+            .register-text {
+                line-height: 44rpx;
+                margin-top: 100rpx;
+                font-size: $font-size-24;
+                color: #999999;
+                text-align: justify;
+                .txt {
+                    margin-right: 15rpx;
+                }
+            }
+            .register-title {
+                line-height: 44rpx;
+                font-size: $font-size-24;
+                color: $text-color;
+                text-align: left;
+                &.first {
+                    margin-top: 20rpx;
+                }
+            }
+            .register-tip {
+                line-height: 64rpx;
+                font-size: $font-size-24;
+                color: #cecece;
+                text-align: left;
+            }
+            .register-from {
+                width: 100%;
+                height: 80rpx;
+                background: #ffffff;
+                position: relative;
+                border-bottom: 1px solid #e1e1e1;
+                .label {
+                    text-align: left;
+                    font-size: $font-size-28;
+                    color: #666666;
+                    line-height: 88rpx;
+                    float: left;
+                }
+                .row-input {
+                    width: 440rpx;
+                    padding-left: 10rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    line-height: 80rpx;
+                    float: left;
+                    height: 80rpx;
+                    &.none {
+                        color: #999999;
+                    }
+                    &.picker {
+                        text-align: left;
+                        color: #333333;
+                    }
+                    &.keshi {
+                        width: 550rpx;
+                    }
+                    &.code {
+                        width: 264rpx;
+                    }
+                }
+                &.img-btn {
+                    width: 220rpx;
+                    height: 80rpx;
+                    padding: 0;
+                    float: left;
+                    background: #ffffff;
+                    display: block;
+                    .vscodeimg {
+                        width: 150rpx;
+                        height: 80rpx;
+                        float: left;
+                        display: flex;
+                        flex-direction: column;
+                        align-items: center;
+                        border-radius: 14rpx;
+                        image {
+                            width: 150rpx;
+                            height: 80rpx;
+                            border-radius: 14rpx;
+                        }
+                    }
+                    .vscod-refresh {
+                        width: 70rpx;
+                        float: right;
+                        text-align: right;
+                        display: flex;
+                        flex-direction: column;
+                        align-items: center;
+                        line-height: 44rpx;
+                        .icon-shuaxin {
+                            font-size: 48rpx;
+                            color: #333333;
+                        }
+                        .ref-text {
+                            font-size: 24rpx;
+                            color: #333333;
+                        }
+                    }
+                }
+                &.imgcode {
+                    width: 410rpx;
+                    float: left;
+                    margin-right: 20rpx;
+                    .row-input {
+                        width: 230rpx;
+                    }
+                }
+                .row-btn {
+                    width: 180rpx;
+                    height: 64rpx;
+                    float: left;
+                    background: $btn-confirm;
+                    padding: 0;
+                    border-radius: 32rpx;
+                    .row-input {
+                        width: 180rpx;
+                        height: 64rpx;
+                        line-height: 64rpx;
+                        padding: 0;
+                        color: #ffffff;
+                        background: $btn-confirm;
+                        text-align: center;
+                        border-radius: 32rpx;
+                        &.other {
+                            width: 180rpx;
+                            background: #f7f7f7;
+                            margin-right: 20rpx;
+                        }
+                        &.none {
+                            background: #f7f7f7;
+                        }
+                    }
+                    &.disabled {
+                        background: #f7f7f7;
+                        .row-input {
+                            background: #f7f7f7;
+                            color: #999999;
+                            font-size: 24rpx;
+                        }
+                    }
+                }
+                &.picker {
+                    padding: 0 24rpx;
+                    width: 654rpx;
+                    height: 88rpx;
+                    line-height: 88rpx;
+                    .label {
+                        line-height: 88rpx;
+                    }
+                    .row-input {
+                        width: 470rpx;
+                        height: 88rpx;
+                        line-height: 88rpx;
+                        padding-left: 30rpx;
+                    }
+                }
+                &.radio {
+                    padding: 0 24rpx;
+                    width: 654rpx;
+                    height: 288rpx;
+                    .row-input {
+                        width: 100%;
+                        height: 88rpx;
+                        line-height: 88rpx;
+                        padding-left: 0;
+                    }
+                    .row-radio {
+                        float: left;
+                        transform: scale(0.8);
+                    }
+                    .row-text {
+                        width: 100rpx;
+                        text-align: center;
+                        float: left;
+                    }
+                }
+                &.group {
+                    padding: 0 24rpx;
+                    width: 654rpx;
+                    height: auto;
+                    background: #ffffff;
+                    margin-top: 30rpx;
+                    .label {
+                        line-height: 76rpx;
+                    }
+                    .row-input {
+                        width: 100%;
+                        height: 88rpx;
+                        line-height: 88rpx;
+                        padding-left: 0;
+                    }
+                    .row-radio {
+                        float: left;
+                    }
+                    .row-text {
+                        width: 100rpx;
+                        text-align: center;
+                        float: left;
+                    }
+                }
+                &.btn {
+                    margin-top: 0;
+                }
+                .content-class {
+                    margin: 20rpx auto;
+                    display: flex;
+                    flex-flow: row wrap;
+                    justify-content: space-between;
+                    align-items: center;
+                    &.btn {
+                        margin: 0 auto;
+                        margin-left: 116rpx;
+                    }
+                    .row-input {
+                        display: flex;
+                        width: 220rpx;
+                        height: 40rpx;
+                        padding: 24rpx;
+                        text-align: left;
+                        border-radius: 10rpx;
+                        font-size: $font-size-28;
+                        color: $text-color;
+                    }
+                    .confirm-btn {
+                        width: 200rpx;
+                        height: 88rpx;
+                        border-radius: 10rpx;
+                        line-height: 88rpx;
+                        text-align: center;
+                        &.other {
+                            width: 213rpx;
+                        }
+                        &.none {
+                            color: #ffffff;
+                            background: $btn-confirm;
+                        }
+                        &.disabled {
+                            color: #999999;
+                        }
+                    }
+                    .item {
+                        width: 155rpx;
+                        height: 60rpx;
+                        font-size: $font-size-28;
+                        line-height: 60rpx;
+                        border-radius: 10rpx;
+                        margin: 10rpx;
+                        text-align: center;
+                        box-sizing: border-box;
+                        border: 1rpx solid #efefef;
+                        float: left;
+                        checkbox {
+                            display: none;
+                        }
+                    }
+                    .on {
+                        border-color: $color-system;
+                        color: $color-system;
+                    }
+                }
+            }
+            .row-login {
+                flex: 1;
+                font-size: $font-size-28;
+                color: $text-color;
+                text-align: left;
+            }
+            .row-logincode {
+                flex: 1;
+                font-size: $font-size-28;
+                color: $text-color;
+                text-align: right;
+            }
+            .icon-xiayibu {
+                width: 88rpx;
+                height: 88rpx;
+                position: absolute;
+                right: 0;
+                top: 0;
+                line-height: 88rpx;
+                text-align: center;
+            }
+            &.text-textarea {
+                background: #ffffff;
+                .textarea {
+                    width: 654rpx;
+                    height: 180rpx;
+                    background: #f7f7f7;
+                    padding: 24rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    z-index: 1;
+                    border-radius: 14rpx;
+                }
+                .textarea.hide {
+                    opacity: 0;
+                }
+                .textarea.show {
+                    color: #999999;
+                }
+            }
+        }
+        .register-picture {
+            height: 102rpx;
+            margin: 30rpx 0;
+            width: 42%;
+            float: left;
+            &.zz {
+                width: 100%;
+            }
+            .label {
+                float: left;
+                font-size: $font-size-28;
+                color: $text-color;
+                line-height: 102rpx;
+                width: 150rpx;
+                text-align: right;
+                &.zz {
+                    width: 230rpx;
+                }
+            }
+            .upload-picture {
+                float: left;
+                height: 100rpx;
+                .upload-none {
+                    width: 100rpx;
+                    height: 100rpx;
+                    text-align: center;
+                    line-height: 100rpx;
+                    color: #999999;
+                    border: 1px solid #999999;
+                    border-radius: 10rpx;
+                    margin: 0 20rpx;
+                    .iconfont {
+                        font-size: $font-size-28;
+                    }
+                }
+                .upload-image {
+                    width: 100rpx;
+                    height: 100rpx;
+                    border-radius: 10rpx;
+                    margin: 0 20rpx;
+                    position: relative;
+                    image {
+                        width: 100rpx;
+                        height: 100rpx;
+                        border-radius: 10rpx;
+                    }
+                    .upload-del {
+                        width: 40rpx;
+                        height: 40rpx;
+                        position: absolute;
+                        top: -20rpx;
+                        right: -20rpx;
+                        line-height: 40rpx;
+                        text-align: center;
+                        .iconfont {
+                            font-size: $font-size-32;
+                            color: #999999;
+                        }
+                    }
+                }
+            }
+        }
+        .register-input {
+            width: 654rpx;
+            height: 40rpx;
+            padding: 24rpx;
+            margin: 0 auto;
+            margin-bottom: 60rpx;
+            background: #f7f7f7;
+            border-radius: 14rpx;
+            .input {
+                width: 100%;
+                height: 100%;
+                background: #f7f7f7;
+                font-size: $font-size-28;
+                line-height: 40rpx;
+                color: #333333;
+                border-radius: 14rpx;
+            }
+        }
+        .register-fiexd {
+            width: 100%;
+            height: auto;
+            position: fixed;
+            bottom: 0;
+            left: 0;
+            z-index: 999;
+            background: #ffffff;
+        }
+        .register-btn {
+            width: 100%;
+            height: 88rpx;
+            border-radius: 44rpx;
+            font-size: $font-size-28;
+            line-height: 88rpx;
+            color: #ffffff;
+            margin: 0 auto;
+            text-align: center;
+            background: $btn-confirm;
+            margin-top: 96rpx;
+            &.none {
+                border: 1px solid $color-system;
+                background: #ffffff;
+                color: $color-system;
+                margin-top: 0;
+            }
+            &.sub {
+                margin-top: 0;
+            }
+        }
+    }
 }
 </style>

+ 15 - 3
pages/notice/club/components/notice-cell.vue

@@ -39,12 +39,24 @@
 		<template v-if="cellType === 3">
 			<view class="tui-notice-cell clearfix">
 				<view class="tui-cell-top">
-					<view class="cell-title"> {{ cell.messageType | noticeUsersFilters }} </view>
+                    <view class="cell-title" v-if="cell.shopTieredType > 1"> 客户经理分配通知 </view>
+					<view class="cell-title" v-else> {{ cell.messageType | noticeUsersFilters }} </view>
 					<view class="cell-time"> {{ cell.time }} </view>
 				</view>
-				<view class="tui-cell-content"> 
-					{{ noticeUsersText(cell)}}
+                <view class="tui-cell-seller" v-if="cell.shopTieredType > 4">
+                    <view class="seller">
+                       客户经理:<text>{{cell.userName}}</text>
+                    </view>
+                    <view class="seller">
+                        手机号码:<text>{{cell.mobile}}</text>
+                    </view>
+                </view>
+				<view class="tui-cell-content" v-if="cell.shopTieredType > 1"> 
+					{{ noticeSellerFilters(cell)}}
 				</view> 
+                <view class="tui-cell-content" v-else>
+                	{{ noticeUsersText(cell)}}
+                </view> 
 			</view>
 		</template>
 		<!-- 机构优惠促销通知 -->

+ 12 - 2
pages/notice/club/mixins/notice.mixins.js

@@ -37,7 +37,7 @@ const noticeMixins = {
                 3: '优惠券待领取通知'
             }
             return map[value]
-        }
+        },
     },
     methods: {
         getUserAuthClubMessageList() {
@@ -118,6 +118,14 @@ const noticeMixins = {
                     console.log('error=>', error.msg)
                 })
         },
+        noticeSellerFilters(cell) {
+            // 客户经理分配通知  5,客户经理分配通知。6,客户经理重新分配通知
+            const map = {
+                5: '采美平台已为您匹配专属客户经理,为您提供专业咨询服务。',
+                6: '因公司内部人员调整需要,采美平台已为您更换了新客户经理。',
+            }
+            return map[cell.shopTieredType]
+        },
         noticeOrderText(cell) { // 交易物流通知文案
             const map = {
                 1: '您已成功下单!',
@@ -137,7 +145,9 @@ const noticeMixins = {
                 4: `您已获得采美平台赠送的${cell.content}超级会员,在服务期内每月可领多张大额优惠券,还有更多超级会员专属权益等您体验,快去看看吧 >>>`,
                 5: '恭喜您成功升级为资质机构用户!现在可以查看更多商品的信息啦,采美平台也将为您提供更多专业服务。',
                 6: '您的账号升级资质机构失败!赶快去修改资料重新提交吧 >>>',
-                7: `恭喜您(微信昵称:${cell.content})成功成为机构运营人员,祝您开启愉快的采购之旅。`
+                7: `恭喜您(微信昵称:${cell.content})成功成为机构运营人员,祝您开启愉快的采购之旅。`,
+                8: '采美平台已为您匹配专属客户经理,为您提供专业咨询服务。',
+                9: '因公司内部人员调整需要,采美平台已为您更换了新客户经理。'
             }
             return map[cell.accountType]
         },

+ 11 - 0
pages/notice/club/notice-serve.vue

@@ -139,6 +139,17 @@ page {
 			float: right;
 		}
 	}
+    .tui-cell-seller {
+        margin-bottom: 16rpx;
+        .seller {
+            color: #333333;
+            font-size: 28rpx;
+            margin-bottom: 16rpx;
+            text {
+                color: #666666;
+            }
+        }
+    }
 	.tui-cell-content{
 		width: 100%;
 		height: auto;

+ 1012 - 967
pages/seller/club/list.vue

@@ -1,235 +1,259 @@
 <template>
-	<view class="container club clearfix" :style="{ paddingBottom: isIphoneX ? '140rpx' : '98rpx' }">
-		<view class="club-search clearfix" :style="{ paddingTop: StatusBar + 'px' }">
-			<view class="search-top" :style="{ height: CustomBar - StatusBar + 'px' }">
-				<view
-					class="search-icon"
-					:style="{
-						width: CustomBar - StatusBar + 'px',
-						height: CustomBar - StatusBar + 'px',
-						lineHeight: CustomBar - StatusBar + 'px;'
-					}"
-				>
-					<text v-if="isShowIndex" @click="handleNavigateIndex" class="iconfont icon-shouye"></text>
-					<text v-else @click="handleNavigateBack" class="iconfont icon-fanhui"></text>
-				</view>
-				<view
-					class="search-from name"
-					:style="{ height: capsule.height + 'px', borderRadius: capsule.height / 2 + 'px' }"
-				>
-					<text
-						:style="{
-							width: capsule.height + 'px',
-							height: capsule.height + 'px',
-							lineHeight: capsule.height + 'px;'
-						}"
-						class="iconfont icon-iconfonticonfontsousuo1"
-					></text>
-					<input
-						class="input"
-						type="text"
-						confirm-type="search"
-						v-model="listQuery.name"
-						@input="onShowClose"
-						@confirm="GetSellerClubList()"
-						placeholder="机构名称/联系人/手机号"
-						maxlength="16"
-						:style="{ lineHeight: capsule.height + 'px' }"
-					/>
-					<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
-				</view>
-				<view
-					class="search-btn"
-					:style="{
-						width: CustomBar - StatusBar + 'px',
-						height: capsule.height + 'px',
-						lineHeight: capsule.height + 'px;'
-					}"
-					v-if="isManage && tabSmallCurrentIndex == 1"
-					@click="showRightDrawer"
-				>
-					<text class="iconfont icon-shaixuan"></text>
-				</view>
-			</view>
-			<view class="search-tab">
-				<view
-					class="tab-item"
-					v-for="(item, index) in listTab"
-					:key="index"
-					:class="{ current: tabCurrentNum === index }"
-					@click="tabCurrentClick(index)"
-				>
-					<text class="item-text">{{ item.name }}<text class="line"></text></text>
-				</view>
-			</view>
-			<view class="search-smalltab" v-if="isManage">
-				<view
-					class="tab-item"
-					v-for="(item, index) in listItemTab"
-					:key="index"
-					:class="{ current: tabSmallCurrentIndex === index }"
-					@click="tabSmallCurrentClick(index)"
-				>
-					<text class="item-text">{{ item.name }}</text>
-				</view>
-			</view>
-		</view>
-		<view class="club-main" :style="{ paddingTop: isManage ? '374rpx' : '254rpx' }">
-			<view v-if="isEmpty" class="empty-container">
-				<image
-					class="club-empty-image"
-					src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
-					mode="aspectFit"
-				></image>
-				<view class="txt">暂无机构数据</view>
-			</view>
-			<view v-else class="club-list">
-				<scroll-view scroll-y="true">
-					<view class="list" v-for="(club, index) in clubList" :key="index">
-						<view class="list-cell-top">
-							<view class="list-logo">
-								<image
-									:src="
-										club.headpic
-											? club.headpic
-											: 'https://static.caimei365.com/app/img/icon/icon-club@3x.png'
-									"
-									mode=""
-								></image>
-								<text class="list-id">编号:{{ club.newClubId }}</text>
-							</view>
-							<view class="list-content">
-								<view class="list-name">
-									{{ club.userIdentity === 2 ? club.name : club.linkMan }}
-									<text class="tags" v-if="club.vipFlag == 0 && club.userIdentity === 2">VIP</text>
-									<text class="tags sv" v-if="club.vipFlag == 1">SVIP</text>
-									<text class="tags xf" v-if="club.newDeal === 1">新分配</text>
-								</view>
-								<view class="list-tags">
-									<text
-										class="tags"
-										@click.stop="
-											this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
-										"
-										>{{ club.activeState }} <text class="iconfont icon-xiayibu"></text
-									></text>
-									<text
-										class="tags"
-										@click.stop="
-											this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
-										"
-										>{{ club.customerValue }} <text class="iconfont icon-xiayibu"></text
-									></text>
-									<text class="tags-or" @click.stop="handleOrderHistory(club)">
-										<text class="iconfont icon-dingdan"></text> 订单列表
-										<text
-											v-if="club.orderNum > 0"
-											class="opea-badge uni-badge uni-badge-error uni-small uni-badge--small icon-num"
-										>
-											{{ showBadge(club.orderNum) }}
-										</text>
-									</text>
-								</view>
-								<view class="list-ntel" v-if="tabSmallCurrentIndex === 1">
-									<text class="list-link">销售:{{ club.serviceName ? club.serviceName : '' }}</text>
-								</view>
-								<view class="list-ntel" v-else>
-									<text class="list-link">{{ club.linkMan ? club.linkMan : '' }}</text>
-									<text class="list-texl">{{ club.contractMobile ? club.contractMobile : '' }}</text>
-								</view>
-							</view>
-						</view>
-						<view class="club-list-bot">
-							<template v-if="tabSmallCurrentIndex === 0">
-								<view class="btn" @click.stop="handleClickOper(1, club)">
-									<text class="iconfont icon-jigouhuaxiang"></text> 机构画像</view
-								>
-								<view class="btn" @click.stop="handleClickOper(2, club)">
-									<text class="iconfont icon-tianxie"></text> 填写咨询记录</view
-								>
-								<view class="btn" @click.stop="handleClickOper(3, club)">
-									<text class="iconfont icon-shangcheng"></text>商城访问记录
-								</view>
-								<view
-									class="btn"
-									v-if="tabSmallCurrentIndex === 0"
-									@click.stop="handleShowBubble(club, index)"
-								>
-									<text class="iconfont icon-gengduo2"></text>
-									<view
-										class="btn-bubble"
-										:style="{
-											height: isManage ? '160rpx' : '80rpx',
-											top: isManage ? '-154rpx' : '-76rpx'
-										}"
-										v-if="currentIndex === index && club.bubble"
-									>
-										<view class="btn-view border" @click.stop="handleClickOper(4, club)">
-											<text class="iconfont icon-xiugaiziliao"></text> 修改资料
-										</view>
-										<view
-											class="btn-view"
-											v-if="isManage && club.serviceProviderId != 1342"
-											@click.stop="handleClickOper(5, club)"
-										>
-											<text class="iconfont icon-xiaoshou"></text> 更换协销
-										</view>
-									</view>
-								</view>
-							</template>
-							<template v-if="tabSmallCurrentIndex === 1">
-								<view class="btn" @click.stop="handleClickOper(1, club)">
-									<text class="iconfont icon-jigouhuaxiang"></text> 机构画像</view
-								>
-								<view class="btn" @click.stop="handleClickOper(3, club)">
-									<text class="iconfont icon-tianxie"></text>商城访问记录</view
-								>
-								<view
-									class="btn none"
-									v-if="isManage && club.serviceProviderId != 1342"
-									@click.stop="handleClickOper(5, club)"
-								>
-									<text class="iconfont icon-xiaoshou"></text>更换协销</view
-								>
-							</template>
-						</view>
-					</view>
-					<!--加载loadding-->
-					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-					<tui-nomore :visible="!pullUpOn" bgcolor="#f7f7f7" :text="nomoreText"></tui-nomore>
-				</scroll-view>
-			</view>
-		</view>
-		<view class="tabBar" :style="{ height: isIphoneX ? '140rpx' : '98rpx' }" v-if="tabCurrentNum === 0">
-			<view class="tabBar_list" :style="{ paddingBottom: isIphoneX ? '40rpx' : '' }">
-				<view class="tabBar_item" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick(0)">
-					<text class="iconfont icon-shenhetongguo"></text> <view class="tabBar_name">待升级</view>
-				</view>
-				<view class="tabBar_item" :class="{ current1: tabCurrentIndex === 1 }" @click="tabClick(1)">
-					<text class="iconfont icon-lishidingdan"></text> <view class="tabBar_name">升级中</view>
-				</view>
-				<view class="tabBar_item" :class="{ current2: tabCurrentIndex === 2 }" @click="tabClick(2)">
-					<text class="iconfont icon-shenhebutongguo"></text> <view class="tabBar_name">升级失败</view>
-				</view>
-			</view>
-		</view>
-		<!-- 筛选抽屉 -->
-		<cm-clubDrawer
-			ref="screendrawer"
-			v-if="rightDrawer"
-			:rightDrawer="rightDrawer"
-			@handSearchConfirm="handSearchConfirmData"
-		>
-		</cm-clubDrawer>
-		<!-- 选择弹窗 -->
-		<cm-seller-popup
-			ref="cmresellerpopup"
-			v-if="isSellerpopup"
-			:show="isSellerpopup"
-			@handleChoiceaSeller="handleChoiceaSellerData"
-		>
-		</cm-seller-popup>
-	</view>
+    <view class="container club clearfix" :style="{ paddingBottom: isIphoneX ? '140rpx' : '98rpx' }">
+        <view class="club-search clearfix" :style="{ paddingTop: StatusBar + 'px' }">
+            <view class="search-top" :style="{ height: CustomBar - StatusBar + 'px' }">
+                <view
+                    class="search-icon"
+                    :style="{
+                        width: CustomBar - StatusBar + 'px',
+                        height: CustomBar - StatusBar + 'px',
+                        lineHeight: CustomBar - StatusBar + 'px;'
+                    }"
+                >
+                    <text v-if="isShowIndex" @click="handleNavigateIndex" class="iconfont icon-shouye"></text>
+                    <text v-else @click="handleNavigateBack" class="iconfont icon-fanhui"></text>
+                </view>
+                <view class="title">机构列表</view>
+            </view>
+            <view style="display: flex;align-items: center;">
+                <view
+                    class="search-from name"
+                    :style="{ height: capsule.height + 'px', borderRadius: capsule.height / 2 + 'px' }"
+                >
+                    <text
+                        :style="{
+                            width: capsule.height + 'px',
+                            height: capsule.height + 'px',
+                            lineHeight: capsule.height + 'px;'
+                        }"
+                        class="iconfont icon-iconfonticonfontsousuo1"
+                    ></text>
+                    <input
+                        class="input"
+                        type="text"
+                        confirm-type="search"
+                        v-model="listQuery.name"
+                        @input="onShowClose"
+                        @confirm="GetSellerClubList()"
+                        placeholder="机构名称/联系人/手机号"
+                        maxlength="16"
+                        :style="{ lineHeight: capsule.height + 'px' }"
+                    />
+                    <text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
+                </view>
+                <view
+                    class="search-btn"
+                    :style="{
+                        width: CustomBar - StatusBar + 'px',
+                        height: capsule.height + 'px',
+                        lineHeight: capsule.height + 'px;'
+                    }"
+                    v-if="isManage && tabSmallCurrentIndex == 1"
+                    @click="showRightDrawer"
+                >
+                    <text class="iconfont icon-shaixuan"></text>
+                </view>
+                <view class="search-btn" @click="GetSellerClubList" v-if="!isManage || tabSmallCurrentIndex != 1">搜索</view>
+            </view>
+            <view class="search-tab">
+                <view
+                    class="tab-item"
+                    v-for="(item, index) in listTab"
+                    :key="index"
+                    :class="{ current: tabCurrentNum === index }"
+                    @click="tabCurrentClick(index)"
+                >
+                    <text class="item-text">
+                        {{ item.name }}
+                        <text class="line"></text>
+                    </text>
+                </view>
+            </view>
+            <view class="search-smalltab">
+                <view
+                    class="tab-item"
+                    v-for="(item, index) in listItemTab"
+                    :key="index"
+                    :class="{ current: tabSmallCurrentIndex === index }"
+                    @click="tabSmallCurrentClick(index)"
+                >
+                    <text class="item-text">{{ item.name }}</text>
+                </view>
+            </view>
+        </view>
+        <view class="club-main" style="margin-top: 508rpx;">
+            <view v-if="isEmpty" class="empty-container">
+                <image
+                    class="club-empty-image"
+                    src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
+                    mode="aspectFit"
+                ></image>
+                <view class="txt">暂无机构数据</view>
+            </view>
+            <view v-else class="club-list">
+                <scroll-view scroll-y="true">
+                    <view class="list" v-for="(club, index) in clubList" :key="index">
+                        <view class="list-cell-top">
+                            <view class="list-logo">
+                                <image
+                                    :src="
+                                        club.headpic
+                                            ? club.headpic
+                                            : 'https://static.caimei365.com/app/img/icon/icon-club@3x.png'
+                                    "
+                                    mode=""
+                                ></image>
+                                <text class="list-id">编号:{{ club.newClubId }}</text>
+                            </view>
+                            <view class="list-content">
+                                <view class="list-name">
+                                    {{ club.userIdentity === 2 ? club.name : club.linkMan }}
+                                    <text class="tags" v-if="club.vipFlag == 0 && club.userIdentity === 2">VIP</text>
+                                    <text class="tags sv" v-if="club.vipFlag == 1">SVIP</text>
+                                    <text class="tags xf" v-if="club.newDeal === 1">新分配</text>
+                                </view>
+                                <view class="list-tags">
+                                    <text
+                                        class="tags"
+                                        @click.stop="
+                                            this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
+                                        "
+                                    >
+                                        {{ club.activeState }}
+                                        <text class="iconfont icon-xiayibu"></text>
+                                    </text>
+                                    <text
+                                        class="tags"
+                                        @click.stop="
+                                            this.$api.navigateTo('/pages/service/service?id=1041&title=标签说明')
+                                        "
+                                    >
+                                        {{ club.customerValue }}
+                                        <text class="iconfont icon-xiayibu"></text>
+                                    </text>
+                                    <text class="tags-or" @click.stop="handleOrderHistory(club)">
+                                        <text class="iconfont icon-dingdan"></text>
+                                        订单列表
+                                        <text
+                                            v-if="club.orderNum > 0"
+                                            class="opea-badge uni-badge uni-badge-error uni-small uni-badge--small icon-num"
+                                        >
+                                            {{ showBadge(club.orderNum) }}
+                                        </text>
+                                    </text>
+                                </view>
+                                <view class="list-ntel" v-if="tabSmallCurrentIndex === 1">
+                                    <text class="list-link">销售:{{ club.serviceName ? club.serviceName : '' }}</text>
+                                </view>
+                                <view class="list-ntel" v-if="tabSmallCurrentIndex !== 1">
+                                    <text class="list-link">{{ club.linkMan ? club.linkMan : '' }}</text>
+                                    <text class="list-texl">{{ club.contractMobile ? club.contractMobile : '' }}</text>
+                                </view>
+                                <view class="list-ntel" v-if="listQuery.type === 6">
+                                    <text class="list-link">分配时间:{{ club.providerTime | dateConversion }}</text>
+                                </view>
+                            </view>
+                        </view>
+                        <view class="club-list-bot">
+                            <template v-if="tabSmallCurrentIndex === 0">
+                                <view class="btn" @click.stop="handleClickOper(1, club)">
+                                    <text class="iconfont icon-jigouhuaxiang"></text>
+                                    机构画像
+                                </view>
+                                <view class="btn" @click.stop="handleClickOper(2, club)">
+                                    <text class="iconfont icon-tianxie"></text>
+                                    填写咨询记录
+                                </view>
+                                <view class="btn" @click.stop="handleClickOper(3, club)">
+                                    <text class="iconfont icon-shangcheng"></text>
+                                    商城访问记录
+                                </view>
+                                <view
+                                    class="btn"
+                                    v-if="tabSmallCurrentIndex === 0"
+                                    @click.stop="handleShowBubble(club, index)"
+                                >
+                                    <text class="iconfont icon-gengduo2"></text>
+                                    <view
+                                        class="btn-bubble"
+                                        :style="{
+                                            height: isManage ? '160rpx' : '80rpx',
+                                            top: isManage ? '-154rpx' : '-76rpx'
+                                        }"
+                                        v-if="currentIndex === index && club.bubble"
+                                    >
+                                        <view class="btn-view border" @click.stop="handleClickOper(4, club)">
+                                            <text class="iconfont icon-xiugaiziliao"></text>
+                                            修改资料
+                                        </view>
+                                        <view
+                                            class="btn-view"
+                                            v-if="isManage && club.serviceProviderId != 1342"
+                                            @click.stop="handleClickOper(5, club)"
+                                        >
+                                            <text class="iconfont icon-xiaoshou"></text>
+                                            更换协销
+                                        </view>
+                                    </view>
+                                </view>
+                            </template>
+                            <template v-if="tabSmallCurrentIndex === 1">
+                                <view class="btn" @click.stop="handleClickOper(1, club)">
+                                    <text class="iconfont icon-jigouhuaxiang"></text>
+                                    机构画像
+                                </view>
+                                <view class="btn" @click.stop="handleClickOper(3, club)">
+                                    <text class="iconfont icon-tianxie"></text>
+                                    商城访问记录
+                                </view>
+                                <view
+                                    class="btn none"
+                                    v-if="isManage && club.serviceProviderId != 1342"
+                                    @click.stop="handleClickOper(5, club)"
+                                >
+                                    <text class="iconfont icon-xiaoshou"></text>
+                                    更换协销
+                                </view>
+                            </template>
+                        </view>
+                    </view>
+                    <!--加载loadding-->
+                    <tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
+                    <tui-nomore :visible="!pullUpOn" bgcolor="#f7f7f7" :text="nomoreText"></tui-nomore>
+                </scroll-view>
+            </view>
+        </view>
+        <view class="tabBar" :style="{ height: isIphoneX ? '140rpx' : '98rpx' }" v-if="tabCurrentNum === 0">
+            <view class="tabBar_list" :style="{ paddingBottom: isIphoneX ? '40rpx' : '' }">
+                <view class="tabBar_item" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick(0)">
+                    <text class="iconfont icon-shenhetongguo"></text>
+                    <view class="tabBar_name">待升级</view>
+                </view>
+                <view class="tabBar_item" :class="{ current1: tabCurrentIndex === 1 }" @click="tabClick(1)">
+                    <text class="iconfont icon-lishidingdan"></text>
+                    <view class="tabBar_name">升级中</view>
+                </view>
+                <view class="tabBar_item" :class="{ current2: tabCurrentIndex === 2 }" @click="tabClick(2)">
+                    <text class="iconfont icon-shenhebutongguo"></text>
+                    <view class="tabBar_name">升级失败</view>
+                </view>
+            </view>
+        </view>
+        <!-- 筛选抽屉 -->
+        <cm-clubDrawer
+            ref="screendrawer"
+            v-if="rightDrawer"
+            :rightDrawer="rightDrawer"
+            @handSearchConfirm="handSearchConfirmData"
+        ></cm-clubDrawer>
+        <!-- 选择弹窗 -->
+        <cm-seller-popup
+            ref="cmresellerpopup"
+            v-if="isSellerpopup"
+            :show="isSellerpopup"
+            @handleChoiceaSeller="handleChoiceaSellerData"
+        ></cm-seller-popup>
+    </view>
 </template>
 
 <script>
@@ -242,762 +266,783 @@ import cmClubDrawer from '../components/cm-club-drawer'
 import cmSellerPopup from '../components/cm-seller-popup'
 
 const defaultListQuery = {
-	userIdentity: 4,
-	name: '',
-	pageNum: 1,
-	pageSize: 10,
-	spId: 0,
-	status: 90,
-	type: 1,
-	groupServiceId: 0
+    userIdentity: 4,
+    name: '',
+    pageNum: 1,
+    pageSize: 10,
+    spId: 0,
+    status: 90,
+    type: 1,
+    groupServiceId: 0
 }
 export default {
-	components: {
-		tuiLoadmore,
-		tuiNomore,
-		cmClubDrawer,
-		cmSellerPopup
-	},
-	data() {
-		return {
-			listTab: [{ name: '个人机构' }, { name: '资质机构' }],
-			listItemTab: [{ name: '我的机构' }, { name: '组员机构' }],
-			listQuery: Object.assign({}, defaultListQuery),
-			isShowClose: false,
-			isEmpty: false,
-			nomoreText: '上拉显示更多',
-			pageNum: 1,
-			pageSize: 10,
-			hasNextPage: false,
-			loadding: false,
-			pullUpOn: true,
-			pullFlag: true,
-			tabCurrentNum: 0,
-			tabCurrentIndex: 0,
-			tabSmallCurrentIndex: 0,
-			clubList: [],
-			isIphoneX: this.$store.state.isIphoneX,
-			CustomBar: this.CustomBar,
-			StatusBar: this.StatusBar,
-			capsule: this.capsule,
-			show_index: 0, //控制显示那个组件
-			rightDrawer: false,
-			isSellerpopup: false,
-			salesParams: {
-				choseServiceId: 0,
-				clubId: 0,
-				spId: 0
-			},
-			isShowIndex: false,
-			currentIndex: 0
-		}
-	},
-	onLoad(option) {
-		if (option.type === 'wechat') {
-			this.isShowIndex = true
-		}
-	},
-	computed: {
-		...mapState(['isManage'])
-	},
-	methods: {
-		async initGetStotage() {
-			// 初始化
-			const userInfo = await this.$api.getStorage()
-			this.listQuery.spId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
-			this.salesParams.choseServiceId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
-			this.GetSellerClubList()
-		},
-		GetSellerClubList() {
-			this.SellerService.GetSellerClubList(this.listQuery)
-				.then(response => {
-					let data = response.data
-					if (data.list && data.list.length > 0) {
-						this.isEmpty = false
-						this.hasNextPage = response.data.hasNextPage
-						this.clubList = data.list.map((el, index) => {
-							el.bubble = false
-							return el
-						})
-						this.pullFlag = false
-						setTimeout(() => {
-							this.pullFlag = true
-						}, 500)
-						if (this.hasNextPage) {
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						} else {
-							this.pullUpOn = true
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					} else {
-						this.isEmpty = true
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		getOnReachBottomData() {
-			this.listQuery.pageNum += 1
-			this.SellerService.GetSellerClubList(this.listQuery)
-				.then(response => {
-					let data = response.data
-					if (data.list && data.list.length > 0) {
-						this.hasNextPage = response.data.hasNextPage
-						this.clubList = this.clubList.concat(data.list)
-						this.pullFlag = false // 防上拉暴滑
-						setTimeout(() => {
-							this.pullFlag = true
-						}, 500)
-						if (this.hasNextPage) {
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						} else {
-							this.pullUpOn = false
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		userClubChoseSales(param) {
-			//分配或更换协销
-			this.SellerService.userClubChoseSales(param)
-				.then(response => {
-					this.$util.msg('操作成功~', 2000, true, 'success')
-					setTimeout(() => {
-						this.GetSellerClubList()
-					}, 1000)
-				})
-				.catch(error => {
-					console.log('分配协销异常')
-				})
-		},
-		tabClick(index) {
-			//tab切换
-			this.tabCurrentIndex = index
-			switch (index) {
-				case 0:
-					this.listQuery.status = 90
-					break
-				case 1:
-					this.listQuery.status = 1
-					break
-				case 2:
-					this.listQuery.status = 92
-					break
-			}
-			this.GetSellerClubList()
-		},
-		tabCurrentClick(index) {
-			//商品详情&&供应商信息tab切换
-			this.tabCurrentNum = index
-			switch (index) {
-				case 0:
-					this.tabCurrentIndex = 0
-					this.listQuery.userIdentity = 4
-					this.listQuery.status = 90
-					this.listQuery.pageNum = 1
-					this.GetSellerClubList()
-					break
-				case 1:
-					this.listQuery.pageNum = 1
-					this.listQuery.userIdentity = 2
-					this.listQuery.status = 90
-					this.GetSellerClubList()
-					break
-			}
-		},
-		tabSmallCurrentClick(index) {
-			//商品详情&&供应商信息tab切换
-			this.tabSmallCurrentIndex = index
-			switch (index) {
-				case 0:
-					this.tabCurrentIndex = 0
-					this.listQuery.type = 1
-					this.listQuery.status = 90
-					this.listQuery.pageNum = 1
-					this.listQuery.groupServiceId = 0
-					this.GetSellerClubList()
-					break
-				case 1:
-					this.listQuery.type = 2
-					this.listQuery.status = 90
-					this.listQuery.pageNum = 1
-					this.listQuery.groupServiceId = 0
-					this.GetSellerClubList()
-					break
-				case 2:
-					this.listQuery.type = 3
-					this.listQuery.status = 90
-					this.listQuery.pageNum = 1
-					this.listQuery.groupServiceId = 0
-					this.GetSellerClubList()
-					break
-			}
-		},
-		handSearchConfirmData(data) {
-			console.log('确定筛选', data)
-			//确定筛选
-			this.listQuery.groupServiceId = data.serviceProviderId
-			this.GetSellerClubList()
-		},
-		handleChoiceaSellerData(data) {
-			// 确定搜索
-			this.salesParams.spId = data.serviceProviderId
-			this.userClubChoseSales(this.salesParams)
-		},
-		showRightDrawer() {
-			//显示筛选抽屉
-			this.rightDrawer = true
-		},
-		// 按钮操作
-		handleClickOper(type, club) {
-			/**
-			 * 1:机构画像 2:填写咨询记录 3:商城访问记录 4:修改资料 5:更换协销
-			 * */
+    components: {
+        tuiLoadmore,
+        tuiNomore,
+        cmClubDrawer,
+        cmSellerPopup
+    },
+    data() {
+        return {
+            listTab: [{ name: '个人机构' }, { name: '资质机构' }],
+            listItemTab: [{ name: '我的机构' }, { name: '组员机构' }, { name: '新分配机构' }],
+            listQuery: Object.assign({}, defaultListQuery),
+            isShowClose: false,
+            isEmpty: false,
+            nomoreText: '上拉显示更多',
+            pageNum: 1,
+            pageSize: 10,
+            hasNextPage: false,
+            loadding: false,
+            pullUpOn: true,
+            pullFlag: true,
+            tabCurrentNum: 0,
+            tabCurrentIndex: 0,
+            tabSmallCurrentIndex: 0,
+            clubList: [],
+            isIphoneX: this.$store.state.isIphoneX,
+            CustomBar: this.CustomBar,
+            StatusBar: this.StatusBar,
+            capsule: this.capsule,
+            show_index: 0, //控制显示那个组件
+            rightDrawer: false,
+            isSellerpopup: false,
+            salesParams: {
+                choseServiceId: 0,
+                clubId: 0,
+                spId: 0
+            },
+            isShowIndex: false,
+            currentIndex: 0
+        }
+    },
+    filters: {
+        dateConversion(val) {
+            const date = new Date(val)
+            const setZero = val => (val < 10 ? '0' + val : val)
+            return `${date.getFullYear()}-${setZero(date.getMonth() + 1)}-${setZero(date.getDate())} ${setZero(
+                date.getHours()
+            )}:${setZero(date.getMinutes())}:${setZero(date.getSeconds())}`
+        }
+    },
+    onLoad(option) {
+        if (option.type === 'wechat') {
+            this.isShowIndex = true
+        }
+        if (!this.isManage) {
+            this.listItemTab = this.listItemTab.filter((e, i) => i !== 1)
+        }
+    },
+    computed: {
+        ...mapState(['isManage'])
+    },
+    methods: {
+        async initGetStotage() {
+            // 初始化
+            const userInfo = await this.$api.getStorage()
+            this.listQuery.spId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+            this.salesParams.choseServiceId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+            this.GetSellerClubList()
+        },
+        GetSellerClubList() {
+            this.SellerService.GetSellerClubList(this.listQuery)
+                .then(response => {
+                    let data = response.data
+                    if (data.list && data.list.length > 0) {
+                        this.isEmpty = false
+                        this.hasNextPage = response.data.hasNextPage
+                        this.clubList = data.list.map((el, index) => {
+                            el.bubble = false
+                            return el
+                        })
+                        this.pullFlag = false
+                        setTimeout(() => {
+                            this.pullFlag = true
+                        }, 500)
+                        if (this.hasNextPage) {
+                            this.pullUpOn = false
+                            this.nomoreText = '上拉显示更多'
+                        } else {
+                            this.pullUpOn = true
+                            this.loadding = false
+                            this.nomoreText = '已至底部'
+                        }
+                    } else {
+                        this.isEmpty = true
+                    }
+                })
+                .catch(error => {
+                    this.$util.msg(error.msg, 2000)
+                })
+        },
+        getOnReachBottomData() {
+            this.listQuery.pageNum += 1
+            this.SellerService.GetSellerClubList(this.listQuery)
+                .then(response => {
+                    let data = response.data
+                    if (data.list && data.list.length > 0) {
+                        this.hasNextPage = response.data.hasNextPage
+                        this.clubList = this.clubList.concat(data.list)
+                        this.pullFlag = false // 防上拉暴滑
+                        setTimeout(() => {
+                            this.pullFlag = true
+                        }, 500)
+                        if (this.hasNextPage) {
+                            this.pullUpOn = false
+                            this.nomoreText = '上拉显示更多'
+                        } else {
+                            this.pullUpOn = false
+                            this.loadding = false
+                            this.nomoreText = '已至底部'
+                        }
+                    }
+                })
+                .catch(error => {
+                    this.$util.msg(error.msg, 2000)
+                })
+        },
+        userClubChoseSales(param) {
+            //分配或更换协销
+            this.SellerService.userClubChoseSales(param)
+                .then(response => {
+                    this.$util.msg('操作成功~', 2000, true, 'success')
+                    setTimeout(() => {
+                        this.GetSellerClubList()
+                    }, 1000)
+                })
+                .catch(error => {
+                    console.log('分配协销异常')
+                })
+        },
+        tabClick(index) {
+            //tab切换
+            this.tabCurrentIndex = index
+            switch (index) {
+                case 0:
+                    this.listQuery.status = 90
+                    break
+                case 1:
+                    this.listQuery.status = 1
+                    break
+                case 2:
+                    this.listQuery.status = 92
+                    break
+            }
+            this.GetSellerClubList()
+        },
+        tabCurrentClick(index) {
+            //商品详情&&供应商信息tab切换
+            this.tabCurrentNum = index
+            switch (index) {
+                case 0:
+                    this.tabCurrentIndex = 0
+                    this.listQuery.status = 90
+                    this.listQuery.pageNum = 1
+                    this.listQuery.userIdentity = 4
+                    this.GetSellerClubList()
+                    break
+                case 1:
+                    this.listQuery.pageNum = 1
+                    this.listQuery.status = 90
+                    this.listQuery.userIdentity = 2
+                    this.GetSellerClubList()
+                    break
+            }
+        },
+        tabSmallCurrentClick(index) {
+            //商品详情&&供应商信息tab切换
+            this.tabSmallCurrentIndex = index
+            switch (index) {
+                case 0:
+                    this.tabCurrentIndex = 0
+                    this.listQuery.type = 1
+                    this.listQuery.status = 90
+                    this.listQuery.pageNum = 1
+                    this.listQuery.groupServiceId = 0
+                    this.GetSellerClubList()
+                    break
+                case 1:
+                    this.listQuery.type = this.isManage ? 2 : 6
+                    this.listQuery.status = 90
+                    this.listQuery.pageNum = 1
+                    this.listQuery.groupServiceId = 0
+                    this.GetSellerClubList()
+                    break
+                case 2:
+                    this.listQuery.type = 6
+                    this.listQuery.status = 90
+                    this.listQuery.pageNum = 1
+                    this.listQuery.groupServiceId = 0
+                    this.GetSellerClubList()
+                    break
+            }
+        },
+        handSearchConfirmData(data) {
+            console.log('确定筛选', data)
+            //确定筛选
+            this.listQuery.groupServiceId = data.serviceProviderId
+            this.GetSellerClubList()
+        },
+        handleChoiceaSellerData(data) {
+            // 确定搜索
+            this.salesParams.spId = data.serviceProviderId
+            this.userClubChoseSales(this.salesParams)
+        },
+        showRightDrawer() {
+            //显示筛选抽屉
+            this.rightDrawer = true
+        },
+        // 按钮操作
+        handleClickOper(type, club) {
+            /**
+             * 1:机构画像 2:填写咨询记录 3:商城访问记录 4:修改资料 5:更换协销
+             * */
 
-			console.log('type', type)
-			switch (type) {
-				case 1:
-					this.$api.navigateTo(`/pages/seller/club/club-portrait?userId=${club.userId}`)
-					break
-				case 2:
-					this.$api.navigateTo(`/pages/seller/remarks/add?userId=${club.userId}`)
-					break
-				case 3:
-					this.$api.navigateTo(`/pages/seller/club/club-info?clubId=${club.clubId}`)
-					break
-				case 4:
-					this.handleReturnPath(club)
-					break
-				case 5:
-					this.handleReplaceClub(club)
-					break
-			}
-		},
-		handleReplaceClub(club) {
-			//更换协销
-			this.salesParams.clubId = club.clubId
-			this.isSellerpopup = true
-		},
-		handleReturnPath(club) {
-			//修改机构资料
-			const tabMap = {
-				0: `/pages/seller/login/apply?userID=${club.userId}`,
-				1: `/pages/seller/login/information?userID=${club.userId}`
-			}
-			this.$api.navigateTo(tabMap[this.tabCurrentNum])
-		},
-		handleOrderHistory(club) {
-			//跳转机构历史订单
-			this.$api.setStorage('orderUserInfo', club)
-			if (this.tabSmallCurrentIndex === 1 || this.tabSmallCurrentIndex === 2) {
-				// 查看组员机构历史订单
-				this.$api.navigateTo(
-					`/pages/seller/order/order-historylist?clubId=${club.clubId}&listType=0&authType=${
-						this.tabSmallCurrentIndex
-					}`
-				)
-			} else {
-				this.$api.navigateTo(`/pages/seller/order/order-historylist?clubId=${club.clubId}&listType=0`)
-			}
-		},
-		onShowClose() {
-			//输入框失去焦点时触发
-			if (this.listQuery.name != '') {
-				this.isShowClose = true
-			} else {
-				this.isShowClose = false
-			}
-		},
-		delInputText() {
-			//清除输入框内容
-			this.listQuery.name = ''
-			this.isShowClose = false
-		},
-		showBadge(n) {
-			let num = ''
-			if (n > 100) {
-				num = 99
-			} else {
-				num = n
-			}
-			return num
-		},
-		handleNavigateBack() {
-			this.$api.navigateBack(1)
-		},
-		handleNavigateIndex() {
-			this.$api.navigateTo(`/pages/seller/index/index`)
-		},
-		handleShowBubble(club, index) {
-			this.currentIndex = index
-			club.bubble = !club.bubble
-		}
-	},
-	onReachBottom() {
-		if (this.hasNextPage) {
-			this.loadding = true
-			this.pullUpOn = true
-			this.getOnReachBottomData()
-		}
-	},
-	onShow() {
-		wxLogin.wxLoginAuthorize()
-		this.initGetStotage()
-	}
+            console.log('type', type)
+            switch (type) {
+                case 1:
+                    this.$api.navigateTo(`/pages/seller/club/club-portrait?userId=${club.userId}`)
+                    break
+                case 2:
+                    this.$api.navigateTo(`/pages/seller/remarks/add?userId=${club.userId}`)
+                    break
+                case 3:
+                    this.$api.navigateTo(`/pages/seller/club/club-info?clubId=${club.clubId}`)
+                    break
+                case 4:
+                    this.handleReturnPath(club)
+                    break
+                case 5:
+                    this.handleReplaceClub(club)
+                    break
+            }
+        },
+        handleReplaceClub(club) {
+            //更换协销
+            this.salesParams.clubId = club.clubId
+            this.isSellerpopup = true
+        },
+        handleReturnPath(club) {
+            //修改机构资料
+            const tabMap = {
+                0: `/pages/seller/login/apply?userID=${club.userId}`,
+                1: `/pages/seller/login/information?userID=${club.userId}`
+            }
+            this.$api.navigateTo(tabMap[this.tabCurrentNum])
+        },
+        handleOrderHistory(club) {
+            //跳转机构历史订单
+            this.$api.setStorage('orderUserInfo', club)
+            if (this.tabSmallCurrentIndex === 1 || this.tabSmallCurrentIndex === 2) {
+                // 查看组员机构历史订单
+                this.$api.navigateTo(
+                    `/pages/seller/order/order-historylist?clubId=${club.clubId}&listType=0&authType=${
+                        this.tabSmallCurrentIndex
+                    }`
+                )
+            } else {
+                this.$api.navigateTo(`/pages/seller/order/order-historylist?clubId=${club.clubId}&listType=0`)
+            }
+        },
+        onShowClose() {
+            //输入框失去焦点时触发
+            if (this.listQuery.name != '') {
+                this.isShowClose = true
+            } else {
+                this.isShowClose = false
+            }
+        },
+        delInputText() {
+            //清除输入框内容
+            this.listQuery.name = ''
+            this.isShowClose = false
+        },
+        showBadge(n) {
+            let num = ''
+            if (n > 100) {
+                num = 99
+            } else {
+                num = n
+            }
+            return num
+        },
+        handleNavigateBack() {
+            this.$api.navigateBack(1)
+        },
+        handleNavigateIndex() {
+            this.$api.navigateTo('/pages/seller/index/index')
+        },
+        handleShowBubble(club, index) {
+            this.currentIndex = index
+            club.bubble = !club.bubble
+        }
+    },
+    onReachBottom() {
+        if (this.hasNextPage) {
+            this.loadding = true
+            this.pullUpOn = true
+            this.getOnReachBottomData()
+        }
+    },
+    onShow() {
+        wxLogin.wxLoginAuthorize()
+        this.initGetStotage()
+    }
 }
 </script>
 
 <style lang="scss">
 page {
-	height: auto;
+    height: auto;
 }
 page,
 .container {
-	/* padding-bottom: 120upx; */
-	background: #f7f7f7;
+    /* padding-bottom: 120upx; */
+    background: #f7f7f7;
 }
 .container {
-	position: relative;
+    position: relative;
 }
 .club-search {
-	height: auto;
-	width: 100%;
-	background: #ffffff;
-	display: flex;
-	flex-direction: column;
-	position: fixed;
-	top: 0;
-	left: 0;
-	z-index: 99;
-	.search-top {
-		flex: 1;
-		display: flex;
-		align-items: center;
-		box-sizing: border-box;
-		.search-icon {
-			text-align: center;
-			float: left;
-			.icon-fanhui {
-				font-size: 44rpx;
-				color: #333333;
-			}
-			.icon-shouye {
-				font-size: 44rpx;
-				color: #333333;
-			}
-		}
-		.search-from {
-			width: 382rpx;
-			background: #f7f7f7;
-			float: left;
-			position: relative;
-			.input {
-				width: 300rpx;
-				height: 100%;
-				float: left;
-				color: $text-color;
-				font-size: $font-size-24;
-			}
-			.icon-iconfonticonfontsousuo1 {
-				text-align: center;
-				display: block;
-				font-size: $font-size-38;
-				float: left;
-				color: #999999;
-			}
-			.icon-shanchu1 {
-				font-size: $font-size-32;
-				color: #999999;
-				position: absolute;
-				width: 64rpx;
-				height: 64rpx;
-				line-height: 64rpx;
-				text-align: center;
-				top: 0;
-				right: 0;
-				z-index: 10;
-			}
-		}
-		.search-btn {
-			text-align: center;
-			font-size: $font-size-28;
-			color: $color-system;
-			float: left;
-			background: #ffffff;
-			.icon-shaixuan {
-				font-size: 44rpx;
-				color: #333333;
-			}
-		}
-	}
-	.search-tab {
-		height: 80rpx;
-		display: flex;
-		flex: 1;
-		background: #ffffff;
-		border-bottom: 1px solid #efefef;
-		.tab-item {
-			flex: 1;
-			line-height: 80rpx;
-			text-align: center;
-			color: $text-color;
-			font-size: $font-size-28;
-			position: relative;
-			.item-text {
-				padding: 10rpx 0;
-				border-bottom: 2px solid #ffffff;
-			}
-			&:nth-child(1)::before {
-				content: '';
-				width: 2px;
-				height: 50rpx;
-				position: absolute;
-				right: 0;
-				top: 15rpx;
-				background: #ebebeb;
-			}
-			&.current {
-				color: $color-system;
-				.item-text {
-					border-color: $color-system;
-				}
-			}
-		}
-	}
-	.search-smalltab {
-		width: 100%;
-		height: 104rpx;
-		background: #ffffff;
-		box-sizing: border-box;
-		padding: 20rpx 10rpx;
-		.tab-item {
-			width: 180rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			text-align: center;
-			color: $text-color;
-			font-size: $font-size-28;
-			float: left;
-			&.current {
-				background-color: $color-system;
-				color: #fff;
-				border-radius: 32rpx;
-			}
-		}
-	}
+    height: auto;
+    width: 100%;
+    background: #ffffff;
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    top: 0;
+    left: 0;
+    z-index: 99;
+    .search-top {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        box-sizing: border-box;
+        position: relative;
+        .title {
+            position: absolute;
+            left: 50%;
+            top: 50%;
+            transform: translate(-50%, -50%);
+        }
+        .search-icon {
+            text-align: center;
+            float: left;
+            .icon-fanhui {
+                font-size: 44rpx;
+                color: #333333;
+            }
+            .icon-shouye {
+                font-size: 44rpx;
+                color: #333333;
+            }
+        }
+    }
+    .search-from {
+        background: #f7f7f7;
+        position: relative;
+        width: 604rpx;
+        margin: 50rpx 20rpx 40rpx 24rpx;
+        .input {
+            width: 300rpx;
+            height: 100%;
+            float: left;
+            color: $text-color;
+            font-size: $font-size-24;
+        }
+        .icon-iconfonticonfontsousuo1 {
+            text-align: center;
+            display: block;
+            font-size: $font-size-38;
+            float: left;
+            color: #999999;
+        }
+        .icon-shanchu1 {
+            font-size: $font-size-32;
+            color: #999999;
+            position: absolute;
+            width: 64rpx;
+            height: 64rpx;
+            line-height: 64rpx;
+            text-align: center;
+            top: 0;
+            right: 0;
+            z-index: 10;
+        }
+    }
+    .search-btn {
+        text-align: center;
+        font-size: $font-size-28;
+        color: $color-system;
+        float: left;
+        background: #ffffff;
+        .icon-shaixuan {
+            font-size: 44rpx;
+            color: #333333;
+        }
+    }
+    .search-tab {
+        height: 80rpx;
+        display: flex;
+        flex: 1;
+        background: #ffffff;
+        border-bottom: 1px solid #efefef;
+        .tab-item {
+            flex: 1;
+            line-height: 80rpx;
+            text-align: center;
+            color: $text-color;
+            font-size: $font-size-28;
+            position: relative;
+            .item-text {
+                padding: 10rpx 0;
+                border-bottom: 2px solid #ffffff;
+            }
+            &:nth-child(1)::before {
+                content: '';
+                width: 2px;
+                height: 50rpx;
+                position: absolute;
+                right: 0;
+                top: 15rpx;
+                background: #ebebeb;
+            }
+            &.current {
+                color: $color-system;
+                .item-text {
+                    border-color: $color-system;
+                }
+            }
+        }
+    }
+    .search-smalltab {
+        width: 100%;
+        height: 104rpx;
+        background: #ffffff;
+        box-sizing: border-box;
+        padding: 20rpx 24rpx;
+        .tab-item {
+            width: 168rpx;
+            height: 64rpx;
+            line-height: 64rpx;
+            text-align: center;
+            color: $text-color;
+            font-size: $font-size-28;
+            float: left;
+            border-radius: 32rpx;
+            border: 1px solid #b2b2b2;
+            margin-right: 32rpx;
+            &.current {
+                color: #ff5b00;
+                border: 1px solid #ff5b00;
+            }
+        }
+    }
 }
 .club-main {
-	.list {
-		width: 100%;
-		height: 288rpx;
-		padding: 24rpx;
-		box-sizing: border-box;
-		background: #ffffff;
-		position: relative;
-		border-bottom: 1px solid #ebebeb;
-		.list-cell-top {
-			width: 100%;
-			height: 140rpx;
-			box-sizing: border-box;
-			.list-logo {
-				width: 140rpx;
-				height: 140rpx;
-				float: left;
-				position: relative;
-				image {
-					width: 140rpx;
-					height: 140rpx;
-					border-radius: 8rpx;
-				}
-				.list-id {
-					display: inline-block;
-					width: 100%;
-					height: 32rpx;
-					line-height: 32rpx;
-					background: rgba(0, 0, 0, 0.1);
-					color: #333;
-					position: absolute;
-					top: 0;
-					left: 0;
-					box-sizing: border-box;
-					text-align: left;
-					font-size: 20rpx;
-					padding-left: 4rpx;
-					border-radius: 8rpx 8rpx 0 0;
-				}
-			}
-			.list-content {
-				width: 530rpx;
-				height: 140rpx;
-				float: left;
-				padding-left: 30rpx;
-				.list-name {
-					width: 100%;
-					height: 50rpx;
-					float: left;
-					line-height: 50rpx;
-					text-align: left;
-					font-size: $font-size-26;
-					color: #333333;
-					.tags {
-						display: inline-block;
-						height: 36rpx;
-						box-sizing: border-box;
-						padding: 0 15rpx;
-						border-radius: 8rpx;
-						background: #f0cb72;
-						font-size: $font-size-22;
-						color: #4e4539;
-						text-align: center;
-						line-height: 36rpx;
-						margin-left: 20rpx;
-						margin-top: 7rpx;
-						&.sv {
-							background: #333333;
-							color: #f0cb72;
-						}
-						&.xf {
-							background-color: #f94b4b;
-							color: #ffffff;
-						}
-					}
-				}
-				.list-tags {
-					width: 100%;
-					height: 36rpx;
-					float: left;
-					line-height: 36rpx;
-					margin: 7rpx 0;
-					.tags {
-						display: inline-block;
-						height: 36rpx;
-						box-sizing: border-box;
-						padding: 0 8rpx 0 15rpx;
-						border-radius: 8rpx;
-						background: #faede5;
-						font-size: $font-size-22;
-						color: $color-system;
-						text-align: center;
-						line-height: 36rpx;
-						margin-right: 16rpx;
-						.icon-xiayibu {
-							font-size: 20rpx;
-							margin-left: 10rpx;
-						}
-					}
-					.tags-or {
-						display: inline-block;
-						height: 36rpx;
-						box-sizing: border-box;
-						font-size: $font-size-22;
-						color: #1890f9;
-						text-align: center;
-						line-height: 36rpx;
-						position: relative;
-						.opea-badge {
-							position: absolute;
-							right: -30rpx;
-							top: -15rpx;
-						}
-						.icon-xiayibu {
-							font-size: 22rpx;
-							color: #1890f9;
-						}
-					}
-				}
-				.list-ntel {
-					width: 100%;
-					height: 50rpx;
-					float: left;
-					line-height: 50rpx;
-					text-align: left;
-					font-size: $font-size-24;
-					color: #666666;
-					.list-link {
-						display: inline-block;
-						float: left;
-						margin-right: 40rpx;
-					}
-					.list-texl {
-						display: inline-block;
-						float: left;
-					}
-				}
-			}
-		}
-		.club-list-bot {
-			width: 100%;
-			height: 80rpx;
-			float: left;
-			background-color: #f7f7f7;
-			border-radius: 8rpx;
-			margin-top: 20rpx;
-			.btn {
-				height: 80rpx;
-				box-sizing: border-box;
-				line-height: 80rpx;
-				padding: 0 20rpx;
-				font-size: $font-size-24;
-				color: #333333;
-				text-align: center;
-				float: left;
-				position: relative;
-				
-				&:nth-child(1) {
-					&:before {
-						content: '';
-						width: 1px;
-						height: 20rpx;
-						background-color: #b2b2b2;
-						position: absolute;
-						right: 0;
-						top: 30rpx;
-					}
-				}
-				&:nth-child(2) {
-					&:before {
-						content: '';
-						width: 1px;
-						height: 20rpx;
-						background-color: #b2b2b2;
-						position: absolute;
-						right: 0;
-						top: 30rpx;
-					}
-				}
-				&:nth-child(3) {
-					&:before {
-						content: '';
-						width: 1px;
-						height: 20rpx;
-						background-color: #b2b2b2;
-						position: absolute;
-						right: 0;
-						top: 30rpx;
-					}
-				}
-				&:last-child {
-					padding: 0 28rpx;
-					.iconfont {
-						font-weight: bold;
-					}
-					.btn-bubble {
-						width: 200rpx;
-						height: 160rpx;
-						background: rgba(51, 51, 51, 0.8);
-						position: absolute;
-						top: -154rpx;
-						right: 0;
-						border-radius: 8rpx;
-						&:before {
-							content: '';
-							width: 0;
-							height: 0;
-							border: 15rpx solid transparent;
-							border-top: 15rpx solid rgba(51, 51, 51, 0.8);
-							position: absolute;
-							bottom: -26rpx;
-							right: 35rpx;
-						}
-						.btn-view {
-							width: 100%;
-							height: 80rpx;
-							box-sizing: border-box;
-							line-height: 80rpx;
-							font-size: $font-size-24;
-							color: #ffffff;
-							text-align: center;
-							float: left;
-							.iconfont {
-								font-size: 28rpx;
-								color: #ffffff;
-								margin-right: 5rpx;
-								font-weight: normal;
-							}
-							&.border {
-								border-bottom: 1px solid rgba(255, 255, 255, 0.3);
-							}
-						}
-					}
-				}
-				&.none{
-					&::before{
-						background-color: #f7f7f7 !important;
-					}
-				}
-				.iconfont {
-					font-size: 30rpx;
-					color: #333333;
-					margin-right: 5rpx;
-				}
-			}
-		}
-	}
+    .list {
+        width: 100%;
+        height: 320rpx;
+        padding: 24rpx;
+        box-sizing: border-box;
+        background: #ffffff;
+        position: relative;
+        border-bottom: 1px solid #ebebeb;
+        .list-cell-top {
+            width: 100%;
+            height: 140rpx;
+            box-sizing: border-box;
+            .list-logo {
+                width: 140rpx;
+                height: 140rpx;
+                float: left;
+                position: relative;
+                image {
+                    width: 140rpx;
+                    height: 140rpx;
+                    border-radius: 8rpx;
+                }
+                .list-id {
+                    display: inline-block;
+                    width: 100%;
+                    height: 32rpx;
+                    line-height: 32rpx;
+                    background: rgba(0, 0, 0, 0.1);
+                    color: #333;
+                    position: absolute;
+                    top: 0;
+                    left: 0;
+                    box-sizing: border-box;
+                    text-align: left;
+                    font-size: 20rpx;
+                    padding-left: 4rpx;
+                    border-radius: 8rpx 8rpx 0 0;
+                }
+            }
+            .list-content {
+                width: 530rpx;
+                height: 190rpx;
+                float: left;
+                padding-left: 30rpx;
+                .list-name {
+                    width: 100%;
+                    height: 50rpx;
+                    float: left;
+                    line-height: 50rpx;
+                    text-align: left;
+                    font-size: $font-size-26;
+                    color: #333333;
+                    .tags {
+                        display: inline-block;
+                        height: 36rpx;
+                        box-sizing: border-box;
+                        padding: 0 15rpx;
+                        border-radius: 8rpx;
+                        background: #f0cb72;
+                        font-size: $font-size-22;
+                        color: #4e4539;
+                        text-align: center;
+                        line-height: 36rpx;
+                        margin-left: 20rpx;
+                        margin-top: 7rpx;
+                        &.sv {
+                            background: #333333;
+                            color: #f0cb72;
+                        }
+                        &.xf {
+                            background-color: #f94b4b;
+                            color: #ffffff;
+                        }
+                    }
+                }
+                .list-tags {
+                    width: 100%;
+                    height: 36rpx;
+                    float: left;
+                    line-height: 36rpx;
+                    margin: 7rpx 0;
+                    .tags {
+                        display: inline-block;
+                        height: 36rpx;
+                        box-sizing: border-box;
+                        padding: 0 8rpx 0 15rpx;
+                        border-radius: 8rpx;
+                        background: #faede5;
+                        font-size: $font-size-22;
+                        color: $color-system;
+                        text-align: center;
+                        line-height: 36rpx;
+                        margin-right: 16rpx;
+                        .icon-xiayibu {
+                            font-size: 20rpx;
+                            margin-left: 10rpx;
+                        }
+                    }
+                    .tags-or {
+                        display: inline-block;
+                        height: 36rpx;
+                        box-sizing: border-box;
+                        font-size: $font-size-22;
+                        color: #1890f9;
+                        text-align: center;
+                        line-height: 36rpx;
+                        position: relative;
+                        .opea-badge {
+                            position: absolute;
+                            right: -30rpx;
+                            top: -15rpx;
+                        }
+                        .icon-xiayibu {
+                            font-size: 22rpx;
+                            color: #1890f9;
+                        }
+                    }
+                }
+                .list-ntel {
+                    width: 100%;
+                    height: 50rpx;
+                    float: left;
+                    line-height: 50rpx;
+                    text-align: left;
+                    font-size: $font-size-24;
+                    color: #666666;
+                    .list-link {
+                        display: inline-block;
+                        float: left;
+                        margin-right: 12rpx;
+                    }
+                    .list-texl {
+                        display: inline-block;
+                        float: left;
+                    }
+                }
+            }
+        }
+        .club-list-bot {
+            width: 100%;
+            height: 80rpx;
+            float: left;
+            background-color: #f7f7f7;
+            border-radius: 8rpx;
+            margin-top: 20rpx;
+            .btn {
+                height: 80rpx;
+                box-sizing: border-box;
+                line-height: 80rpx;
+                padding: 0 20rpx;
+                font-size: $font-size-24;
+                color: #333333;
+                text-align: center;
+                float: left;
+                position: relative;
+
+                &:nth-child(1) {
+                    &:before {
+                        content: '';
+                        width: 1px;
+                        height: 20rpx;
+                        background-color: #b2b2b2;
+                        position: absolute;
+                        right: 0;
+                        top: 30rpx;
+                    }
+                }
+                &:nth-child(2) {
+                    &:before {
+                        content: '';
+                        width: 1px;
+                        height: 20rpx;
+                        background-color: #b2b2b2;
+                        position: absolute;
+                        right: 0;
+                        top: 30rpx;
+                    }
+                }
+                &:nth-child(3) {
+                    &:before {
+                        content: '';
+                        width: 1px;
+                        height: 20rpx;
+                        background-color: #b2b2b2;
+                        position: absolute;
+                        right: 0;
+                        top: 30rpx;
+                    }
+                }
+                &:last-child {
+                    padding: 0 28rpx;
+                    .iconfont {
+                        font-weight: bold;
+                    }
+                    .btn-bubble {
+                        width: 200rpx;
+                        height: 160rpx;
+                        background: rgba(51, 51, 51, 0.8);
+                        position: absolute;
+                        top: -154rpx;
+                        right: 0;
+                        border-radius: 8rpx;
+                        &:before {
+                            content: '';
+                            width: 0;
+                            height: 0;
+                            border: 15rpx solid transparent;
+                            border-top: 15rpx solid rgba(51, 51, 51, 0.8);
+                            position: absolute;
+                            bottom: -26rpx;
+                            right: 35rpx;
+                        }
+                        .btn-view {
+                            width: 100%;
+                            height: 80rpx;
+                            box-sizing: border-box;
+                            line-height: 80rpx;
+                            font-size: $font-size-24;
+                            color: #ffffff;
+                            text-align: center;
+                            float: left;
+                            .iconfont {
+                                font-size: 28rpx;
+                                color: #ffffff;
+                                margin-right: 5rpx;
+                                font-weight: normal;
+                            }
+                            &.border {
+                                border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+                            }
+                        }
+                    }
+                }
+                &.none {
+                    &::before {
+                        background-color: #f7f7f7 !important;
+                    }
+                }
+                .iconfont {
+                    font-size: 30rpx;
+                    color: #333333;
+                    margin-right: 5rpx;
+                }
+            }
+        }
+    }
 }
 .tabBar {
-	width: 100%;
-	height: 98rpx;
-	background: #fff;
-	border-top: 1px solid #e5e5e5;
-	position: fixed;
-	bottom: 0px;
-	left: 0px;
-	right: 0px;
-	z-index: 99;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	.tabBar_list {
-		width: 86%;
-		display: flex;
-		justify-content: space-between;
-		.tabBar_item {
-			width: 120rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			flex-direction: column;
-			font-size: 20rpx;
-			color: #999999;
-			&.current {
-				color: #166ce1;
-				.iconfont {
-					color: #166ce1;
-				}
-			}
-			&.current1 {
-				color: #16e15c;
-				.iconfont {
-					color: #16e15c;
-				}
-			}
-			&.current2 {
-				color: #ff0000;
-				.iconfont {
-					color: #ff0000;
-				}
-			}
-			.iconfont {
-				width: 48rpx;
-				height: 48rpx;
-				display: block;
-				margin-bottom: 2rpx;
-				text-align: center;
-				font-size: 46rpx;
-				color: #999999;
-			}
-		}
-	}
+    width: 100%;
+    height: 98rpx;
+    background: #fff;
+    border-top: 1px solid #e5e5e5;
+    position: fixed;
+    bottom: 0px;
+    left: 0px;
+    right: 0px;
+    z-index: 99;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    .tabBar_list {
+        width: 86%;
+        display: flex;
+        justify-content: space-between;
+        .tabBar_item {
+            width: 120rpx;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            flex-direction: column;
+            font-size: 20rpx;
+            color: #999999;
+            &.current {
+                color: #166ce1;
+                .iconfont {
+                    color: #166ce1;
+                }
+            }
+            &.current1 {
+                color: #16e15c;
+                .iconfont {
+                    color: #16e15c;
+                }
+            }
+            &.current2 {
+                color: #ff0000;
+                .iconfont {
+                    color: #ff0000;
+                }
+            }
+            .iconfont {
+                width: 48rpx;
+                height: 48rpx;
+                display: block;
+                margin-bottom: 2rpx;
+                text-align: center;
+                font-size: 46rpx;
+                color: #999999;
+            }
+        }
+    }
 }
 .nav_active {
-	color: $color-system;
+    color: $color-system;
 }
 </style>

+ 219 - 0
pages/seller/components/message.vue

@@ -0,0 +1,219 @@
+<template>
+    <view class="notice clearfix" :style="{ paddingTop: CustomBar + 'px' }">
+    	<tui-skeleton
+    		v-if="skeletonShow"
+    		backgroundColor="#fafafa"
+    		borderRadius="10rpx"
+    		:isLoading="true"
+    		:loadingType="5"
+    	></tui-skeleton>
+    	<view v-else>
+    		<view class="navbar-wrap" :style="{ height: CustomBar + 'px', paddingTop: StatusBar + 'px' }">
+    			<view
+    				class="navbar-text"
+    				:style="{ lineHeight: CustomBar - StatusBar + 'px;', fontSize: fontSizeSetting + 'px;' }"
+    			>
+    				消息 <text @click="clearNews" class="iconfont icon-qingli"></text>
+    			</view>
+    		</view>
+    		<view class="container-notice">
+    			<view class="notice-cell" @click="$api.navigateTo('/pages/seller/notice/service/service')">
+    				<view class="notice-cell-icon">
+    					<image class="icon-image" :src="StaticUrl + 'icon/seller-server.png'" mode=""></image>
+    				</view>
+    				<view class="notice-cell-text"> 服务通知 <text class="cell-text">官方</text> </view>
+    				<view class="notice-cell-badge" v-if="notificationCount > 0">
+    					<text class="uni-badge uni-badge-error uni-small uni-badge--small icon-num">
+    						{{ notificationCount | BadgeType }}
+    					</text>
+    				</view>
+    			</view>
+    		</view>
+    	</view>
+    </view>
+</template>
+
+<script>
+    import { mapState } from 'vuex'
+    export default {
+        data() {
+            return {
+                CustomBar: this.CustomBar,
+                StatusBar: this.StatusBar,
+                StaticUrl: this.$Static,
+                notificationCount: 0,
+                skeletonShow: false,
+                tradeCount: 0,
+                accountCount: 0,
+                promotionCount: 0
+            }
+        },
+        filters: {
+        	BadgeType(value) {
+        		if (value) {
+        			return value > 99 ? '99+' : value
+        		}
+        	}
+        },
+        computed: {
+        	...mapState(['hasLogin', 'userInfo'])
+        },
+        onPullDownRefresh() {
+        	//下拉刷新
+        	this.initData()
+        	uni.stopPullDownRefresh()
+        },
+        mounted() {
+            this.initData()
+        },
+        methods: {
+            initData() {
+                this.getSellerNoticeSpCount()
+            },
+            // 请求信息列表
+            async getMessageList(){
+                console.log(1111)
+            },
+            // 清理未读消息
+            clearNews() {
+            	// 标记消息已读
+            	if(this.notificationCount == 0){
+            		this.$util.msg('暂无未读消息', 2000)
+            		return
+            	}
+            	this.SellerService.updateSpMessageAsRead({ commonId:this.userInfo.serviceProviderId, messageType: 3 })
+                .then(response => {
+                    uni.vibrateShort({
+                        success: function() {
+                            console.log('success')
+                        }
+                    })
+                    this.initData()
+                    this.$util.msg('已将所有消息标记为已读', 2000)
+                })
+                .catch(error => {
+                    console.log('标记通知消息已读', error.msg)
+                })
+            },
+            // 协销账户
+            getSellerNoticeSpCount() {
+            	//供应商详情
+            	this.SellerService.getSellerNoticeSpCount({ commonId: this.userInfo.serviceProviderId, messageType: 3 })
+            		.then(response => {
+                        console.log(response)
+                        this.notificationCount = response.data.notificationCount
+            			this.skeletonShow = false //预加载圆圈隐藏
+            		})
+            		.catch(error => {
+            			this.$util.msg(error.msg, 2000)
+            		})
+            },
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+.navbar-wrap {
+	position: fixed;
+	width: 100%;
+	top: 0;
+	z-index: 100000;
+	box-sizing: border-box;
+	background: #ffffff;
+	.navbar-text {
+		font-size: 30rpx;
+		color: #000000;
+		font-weight: 500;
+		text-align: center;
+		.iconfont {
+			display: inline-block;
+			width: 48rpx;
+			height: 48rpx;
+			border-radius: 50%;
+			background-color: #f5f5f5;
+			text-align: center;
+			line-height: 48rpx;
+			color: #666666;
+			font-size: 30rpx;
+			margin-left: 20rpx;
+		}
+	}
+}
+.container-notice {
+    width: 100%;
+    height: auto;
+    box-sizing: border-box;
+    padding: 0 24rpx;
+    padding-top: 20rpx;
+    .notice-cell {
+        width: 100%;
+        height: 130rpx;
+        box-sizing: border-box;
+        padding: 19rpx 0;
+        border-bottom: 1px solid #e1e1e1;
+        .notice-cell-icon {
+            width: 92rpx;
+            height: 92rpx;
+            float: left;
+            .icon-image {
+                width: 92rpx;
+                height: 92rpx;
+                display: block;
+            }
+        }
+        .notice-cell-text {
+            width: 400rpx;
+            height: 100%;
+            line-height: 92rpx;
+            font-size: 34rpx;
+            text-align: left;
+            margin-left: 24rpx;
+            float: left;
+            .cell-text {
+                display: inline-block;
+                height: 32rpx;
+                padding: 0 11rpx;
+                line-height: 32rpx;
+                border-radius: 20rpx;
+                text-align: center;
+                border: 1px solid #FF5B00;
+                font-size: 24rpx;
+                color: #FF5B00;
+                margin-left: 10rpx;
+            }
+        }
+        .notice-cell-badge {
+            width: 92rpx;
+            height: 92rpx;
+            float: right;
+            box-sizing: border-box;
+            padding: 25rpx 15rpx;
+            text-align: right;
+        }
+    }
+}
+.uni-badge--small {
+    -webkit-transform: scale(0.8);
+    -ms-transform: scale(0.8);
+    transform: scale(0.8);
+    -webkit-transform-origin: center center;
+    -ms-transform-origin: center center;
+    transform-origin: center center;
+}
+.uni-badge {
+    font-family: 'Helvetica Neue', Helvetica, sans-serif;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    font-size: 12px;
+    line-height: 1;
+    display: inline-block;
+    padding: 3px 6px;
+    color: #333;
+    border-radius: 100px;
+    background-color: #f1f1f1;
+}
+.uni-badge-error {
+    color: #fff;
+    background-color: #ff2a2a;
+}
+</style>

+ 12 - 1
pages/seller/components/user.vue

@@ -241,7 +241,17 @@ export default {
 					name: '客户咨询记录',
 					path: '/pages/seller/remarks/list',
 					icon: 'https://static.caimei365.com/app/img/icon/icon_seller_7@2x.png'
-				}
+				},
+                {
+                	name: '机构活跃分析',
+                	path: '/pages/seller/remarks/institutional-activity-analysis',
+                	icon: 'https://static.caimei365.com/app/img/icon/visits.png'
+                },
+                {
+                	name: '我的名片',
+                	path: '/pages/seller/remarks/business-card',
+                	icon: 'https://static.caimei365.com/app/img/icon/my-card.png'
+                }
 			]
 		}
 	},
@@ -268,6 +278,7 @@ export default {
 					this.login(response.data)
 					uni.setStorageSync('token', response.data.token)
 					uni.setStorageSync('unionId', response.data.unionId)
+                    uni.setStorageSync('spUserId', response.data.spUserId)
 					this.getUserSellerHome()
 					this.getOrderCount()
 				} else {

+ 40 - 9
pages/seller/index/index.vue

@@ -8,8 +8,12 @@
 		<view :style="{ display: show_index == 1 ? 'block' : 'none' }">
 			<seller-category ref="category" v-if="isCategory"></seller-category>
 		</view>
+        <!-- 消息 -->
+        <view :style="{ display: show_index == 2 ? 'block' : 'none' }">
+        	<seller-message ref="message" v-if="isMessage"></seller-message>
+        </view>
 		<!-- 账户中心 -->
-		<view :style="{ display: show_index == 2 ? 'flex' : 'none' }">
+		<view :style="{ display: show_index == 3 ? 'flex' : 'none' }">
 			<seller-user ref="user" v-if="isUserData"></seller-user>
 		</view>
 		<!-- isIphoneX判断是否为刘海屏在main.js里,好像uniapp有一个css变量获取刘海屏的安全区域 -->
@@ -30,18 +34,22 @@
 import sellerHome from '../components/home.vue'
 import sellerUser from '../components/user.vue'
 import sellerCategory from '../components/category.vue'
+import sellerMessage from '../components/message.vue'
+import { mapMutations, mapState } from 'vuex'
 export default {
 	components: {
 		sellerHome, //采美采购商城 0
-		sellerUser, //账户中心     1
-		sellerCategory //商品分类 2
+		sellerUser, //账户中心     3
+		sellerCategory, //商品分类 1
+        sellerMessage, //消息 2
 	},
 	data() {
 		return {
-			show_index: 2, //控制显示那个组件
+			show_index: 3, //控制显示那个组件
 			isUserData: false,
 			isCategory: false,
 			isHomeData: false,
+            isMessage: false,
 			isIphoneX: this.$store.state.isIphone,
 			tab_nav_list: [
 				//菜单列表
@@ -57,8 +65,14 @@ export default {
 					icon: 'https://static.caimei365.com/app/img/icon/icon-sort@3x.png',
 					iconAc: 'https://static.caimei365.com/app/img/icon/icon-sort-active@3x.png'
 				},
+                {
+                	id: 2,
+                	name: '消息',
+                	icon: 'https://static.caimei365.com/app/img/icon/icon-news@3x.png',
+                	iconAc: 'https://static.caimei365.com/app/img/icon/icon-news-active@3x.png'
+                },
 				{
-					id: 2,
+					id: 3,
 					name: '我的',
 					icon: 'https://static.caimei365.com/app/img/icon/icon-user@3x.png',
 					iconAc: 'https://static.caimei365.com/app/img/icon/icon-user-active@3x.png'
@@ -83,7 +97,14 @@ export default {
 			}, 100)
 		})
 	},
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    // onShow() {
+    //     this.updateSellerNoticeNum() // 消息通知
+    // },
 	methods: {
+        // ...mapMutations(['updateSellerNoticeNum']),
 		// 切换组件
 		cut_index(type) {
 			this.show_index = type
@@ -91,22 +112,32 @@ export default {
 				this.isHomeData = true
 				this.isUserData = false
 				this.isCategory = false
+                this.isMessage = false
 			} else if (this.show_index == 1) {
 				this.isHomeData = false
 				this.isUserData = false
 				this.isCategory = true
+                this.isMessage = false
 			} else if (this.show_index == 2) {
 				this.isHomeData = false
-				this.isUserData = true
+				this.isUserData = false
 				this.isCategory = false
+                this.isMessage = true
+			} else if (this.show_index == 3) {
+				this.isHomeData = false
+				this.isUserData = true
+                this.isCategory = false
+				this.isMessage = false
 			}
 		},
 		onPullDownRefresh() {
 			if (this.show_index == 0) {
 				this.$refs.home.getHomeInformation()
-			} else if (this.show_index == 2) {
+			} else if (this.show_index == 3) {
 				this.$refs.user.initData()
-			}
+			} else if (this.show_index == 2) {
+                this.$refs.message.getMessageList()
+            }
 			uni.stopPullDownRefresh()
 		}
 	},
@@ -117,7 +148,7 @@ export default {
 		}
 		return {
 			title: '生美医美正品采购服务平台',
-			path: 'pages/tabBar/home/index',
+			path: `pages/tabBar/home/index?type=sellerShare&sellerUserId=${this.userInfo.userId || 0}`,
 			imageUrl: 'https://static.caimei365.com/app/img/bg/min-banner.jpg'
 		}
 	}

+ 91 - 0
pages/seller/notice/components/notice-cell.vue

@@ -0,0 +1,91 @@
+<template name="notice-cell">
+	<!-- 通知消息 -->
+	<view>
+		<!-- 服务通知 -->
+		<template v-if="cellType === 1">
+			<view class="tui-notice-cell clearfix">
+				<view class="tui-cell-top">
+					<view class="cell-title"> {{ cell.shopTieredType | noticeUsersFilters }} </view>
+					<view class="cell-time"> {{ cell.time }} </view>
+				</view>
+                <view class="cell-info" v-if="cell.shopTieredType !== 7 && cell.shopTieredType !== 1">
+                    <view class="club-cell">
+                        机构名称:<text>{{cell.name}}</text>
+                    </view>
+                    <view class="club-cell">
+                        联系人:<text>{{cell.userName}}</text>
+                    </view>
+                    <view class="club-cell">
+                        手机号:<text>{{cell.mobile}}</text>
+                    </view>
+                    <view class="club-cell" v-if="cell.shopTieredType === 2">
+                        上一任销售:<text>{{cell.superUserName}}</text>
+                    </view>
+                    <view class="club-cell" v-if="cell.shopTieredType === 3">
+                        下一任销售:<text>{{cell.superUserName}}</text>
+                    </view>
+                </view>
+               <view class="cell-info" v-if="cell.shopTieredType === 7">
+                    {{ noticeSellerUserText(cell) }}
+                </view>
+				<view class="tui-cell-content" v-if="cell.shopTieredType === 7"> 
+					关注点:{{cell.content}}
+				</view> 
+                <view class="tui-cell-content" v-if="cell.shopTieredType !== 7">
+                	{{ noticeSellerUserText(cell) }}
+                </view>
+                <view class="tui-cell-button" v-if="cell.shopTieredType === 2 || cell.shopTieredType === 4 || cell.shopTieredType === 7">
+                    <button @click="$emit('trampInfo', cell)">立即查看</button>
+                </view>
+			</view>
+		</template>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import noticeMixins from '../mixins/notice.mixins.js'
+export default {
+	mixins: [noticeMixins],
+	name: 'notice-cell',
+	props: {
+		cellType:{
+			type:Number
+		},
+		cell: {
+			type: Object
+		}
+	},
+}
+</script>
+
+<style lang="scss" scoped>
+.cell-info {
+    padding: 0 0 33rpx 0;
+    line-height: 48rpx;
+    color: #666666;
+}
+.club-cell {
+    font-size: 28rpx;
+    color: #333333;
+    font-weight: bold;
+    text {
+        color: #666666;
+        font-weight: 400;
+    }
+}
+.tui-cell-button {
+    padding: 15rpx 0 0 0;
+    height: 70rpx;
+    box-sizing: border-box;
+    button {
+        width: 160rpx;
+        height: 64rpx;
+        border: 1rpx solid #999999;
+        line-height: 64rpx;
+        text-align: center;
+        border-radius: 32rpx;
+        float: right;
+    }
+}
+</style>

+ 75 - 0
pages/seller/notice/components/time-axis.vue

@@ -0,0 +1,75 @@
+<template>
+    <view class="time-axis">
+        <view class="time-axis-item" :style="{width: StyleModel.width, fontSize: StyleModel.fontSize, height: StyleModel.height}">
+            <view class="time-axis-title">
+                <slot name="title"></slot>
+            </view>
+            <view class="time-axis-content">
+                <slot name="content"></slot>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        StyleModel: {
+            type: Object,
+            default: () => ({
+                fontSize: '26rpx',
+                color: '#333333',
+                fontWeight: 400,
+                width: '616rpx',
+                height: '244rpx'
+            })
+        }
+    },
+    data() {
+        return {}
+    },
+}
+</script>
+
+<style lang="scss">
+.time-axis {
+    background-color: #fff;
+    .time-axis-item {
+        display: flex;
+        margin: 0 auto;
+        border-left: 1px solid #E1E1E1;
+        align-items: center;
+        position: relative;
+        box-sizing: border-box;
+        padding-left: 30rpx;
+        .time-axis-title {
+            position: absolute;
+            left: 30rpx;
+            top: 0;
+            color: #999999;
+        }
+        &::before {
+            content: '';
+            background-color: #E8E8E8;
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            top: 0;
+            left: 0;
+            transform: translate(-50%, 0);
+        }
+        &::after {
+            content: '';
+            background-color: #999999;
+            width: 12rpx;
+            height: 12rpx;
+            border-radius: 50%;
+            position: absolute;
+            top: 0;
+            left: 0;
+            transform: translate(-50%, 8rpx);
+        }
+    }
+}
+</style>

+ 91 - 0
pages/seller/notice/components/trajectory.vue

@@ -0,0 +1,91 @@
+<template>
+    <view class="trajectory">
+        <view class="title">访问轨迹</view>
+        <time-axis v-for="item in trajectoryList" :key="item.userID">
+            <template #title>
+                <text>{{item.accessTime}}</text>
+            </template>
+            <template #content>
+                <view class="time-axis-content">
+                    <image :src="item.titleImage || '../../../../static/temp/icon-new@2x.png'" class="axis-product" mode=""></image>
+                    <view class="axis-product-info">
+                        <view class="product-title">【{{item.pageType | pageTypeChange}}】</view>
+                        <view class="product-info">{{item.title}}</view>
+                    </view>
+                </view>
+            </template>
+        </time-axis>
+    </view>
+</template>
+
+<script>
+import TimeAxis from './time-axis.vue'
+export default {
+    props: {
+        trajectoryList: {
+            type: Array,
+            default: () => ([])
+        }
+    },
+    components: {
+        TimeAxis
+    },
+    filters: {
+        pageTypeChange(val) {
+            const obj = {
+                '6': '商品',
+                '11': '文章'
+            }
+            return obj[val]
+        }
+    },
+    data() {
+        return {}
+    }
+}
+</script>
+
+<style lang="scss">
+.trajectory {
+    margin: 24rpx auto;
+    width: 702rpx;
+    background-color: #fff;
+    border-radius: 16rpx;
+    padding: 40rpx 32rpx;
+    box-sizing: border-box;
+    .title {
+        color: #333333;
+        font-size: 28rpx;
+        font-weight: bold;
+        margin-bottom: 30rpx;
+    }
+}
+.axis-product {
+    width: 136rpx;
+    height: 136rpx;
+    object-fit: contain;
+}
+.axis-product-info {
+    display: flex;
+    flex-direction: column;
+    height: 136rpx;
+    width: 426rpx;
+    color: #333333;
+    font-size: 26rpx;
+    margin-left: 24rpx;
+    .product-info {
+        margin-top: 16rpx;
+        overflow: hidden;
+        -webkit-line-clamp: 2;
+        text-overflow: ellipsis;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        height: 73rpx;
+        width: 426rpx;
+    }
+}
+.time-axis-content {
+    display: flex;
+    align-items: center;
+}
+</style>

+ 98 - 0
pages/seller/notice/components/visits-cell.vue

@@ -0,0 +1,98 @@
+<template>
+    <view class="visits-cell" @click="$emit('handlerVisits', visitsInfo)">
+        <view class="visits-club">
+            <image :src="visitsInfo.image || '/static/icon-user-active@3x.png'" mode="" class="visits-author"></image>
+            <view>{{visitsInfo.name}}</view>
+        </view>
+        <view class="visits-content">
+            <view class="container">
+                <view class="visits-name">
+                    {{ visitsInfo.linkMan }}
+                </view>
+                <view class="visits-phone">
+                    {{ visitsInfo.contractMobile }}
+                </view>
+            </view>
+            <view class="container">
+                <view class="visits-name concern">
+                    关注点:
+                </view>
+                <view class="visits-concern">
+                    {{ visitsInfo.pageLabel }}
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        visitsInfo: {
+            type: Object,
+            default: () => ({
+                image: '',
+                pageLabel: '',
+                name: '',
+                linkMan: '',
+                contractMobile: '',
+                accessTime: '2023-08-29',
+                clubId: '1111'
+            })
+        }
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.visits-cell {
+    margin: 0 auto 24rpx auto;
+    width: 702rpx;
+    border-radius: 16rpx;
+    padding: 35rpx 32rpx;
+    background-color: #fff;
+    box-sizing: border-box;
+    .visits-club {
+        height: 70rpx;
+        font-size: 32rpx;
+        font-weight: bold;
+        color:#333333;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        display: flex;
+        align-items: center;
+        border-bottom: 1rpx solid #E1E1E1;
+        padding-bottom: 18rpx;
+        .visits-author {
+            width: 56rpx;
+            height: 56rpx;
+            border-radius: 50%;
+            object-fit: contain;
+            margin-right: 16rpx;
+            background-color: #FFF0E2;
+        }
+    }
+    .visits-content {
+        padding: 40rpx 0 0 0;
+        .container {
+            display: flex;
+            font-size: 28rpx;
+            .visits-name {
+                white-space: nowrap;
+                color: #333333;
+            }
+            .concern {
+                font-weight: bold;
+            }
+            .visits-phone {
+                margin-left: 28rpx;
+                margin-bottom: 24rpx;
+            }
+            .visits-concern {
+                line-height: 48rpx;
+            }
+        }
+    }
+}
+</style>

+ 31 - 0
pages/seller/notice/mixins/notice.mixins.js

@@ -0,0 +1,31 @@
+// 机构通知消息 
+const noticeMixins = {
+    filters: {
+       noticeUsersFilters(value) {
+           const map = {
+               1: '上架费',
+               2: '机构分配通知',
+               3: '机构转移通知',
+               4: '机构分配通知',
+               7: '机构访问通知',
+               8: '机构回收通知'
+           }
+           return map[value]
+       },
+    },
+    methods: {
+        noticeSellerUserText(cell) {
+            const map = {
+                1: `${cell.content}`,
+                2: '系统已为你分配机构客户,请及时跟进。',
+                3: '系统已将你的机构转移给其他销售人员,你已无权管理该客户。',
+                4: '系统已为你分配机构客户,请及时跟进。',
+                7: `昨日【${cell.name}...】等${cell.sum}家机构客户访问了采美商城`,
+                8: '系统已将你的机构客户进行回收,你已无权管理该客户。'
+            }
+            return map[cell.shopTieredType]
+        },
+    }
+}
+
+export default noticeMixins

+ 77 - 0
pages/seller/notice/service/Institutional_visits.vue

@@ -0,0 +1,77 @@
+<template>
+    <view class="visitor">
+        <view class="visits-time">{{ accDateTime }}</view>
+        <template>
+            <visits-cell
+                @handlerVisits="handlerVisits"
+                :visits-info="visitsInfo"
+                v-for="visitsInfo in visitsList"
+                :key="visitsInfo.userID"
+            />
+        </template>
+    </view>
+</template>
+
+<script>
+import VisitsCell from '../components/visits-cell.vue'
+export default {
+    components: {
+        VisitsCell
+    },
+    data() {
+        return {
+            visitsList: [],
+            accDateTime: '',
+            userInfo: {}
+        }
+    },
+    onLoad(options) {
+        this.accDateTime = options.accDateTime
+    },
+    mounted() {
+        this.userInfo = uni.getStorageSync('userInfo')
+        this.getVisitesClubList()
+    },
+    onReachBottom() {
+    },
+    onPullDownRefresh() {
+    	//下拉刷新
+    	this.getVisitesClubList()
+    	uni.stopPullDownRefresh()
+    },
+    methods: {
+        handlerVisits($event) {
+            uni.setStorageSync('visitsInfo', JSON.stringify($event))
+            this.$api.navigateTo(
+                '/pages/seller/notice/service/visits_details?spId=' +
+                    this.userInfo.serviceProviderId +
+                    '&clubId=' +
+                    $event.clubId +
+                    '&accessTime=' +
+                    $event.accessTime.substr(0, 10)
+            )
+        },
+        async getVisitesClubList() {
+            const { data } = await this.SellerService.getVisitesClubList({
+                spId: this.userInfo.serviceProviderId,
+                accDateTime: this.accDateTime
+            })
+            this.visitsList = data
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+page {
+    background-color: #f7f7f7;
+}
+.visitor {
+    .visits-time {
+        font-size: 32rpx;
+        font-weight: bold;
+        color: #333333;
+        padding: 40rpx 0 24rpx 16rpx;
+    }
+}
+</style>

+ 210 - 0
pages/seller/notice/service/service.vue

@@ -0,0 +1,210 @@
+<template>
+    <view class="service">
+        <tui-skeleton
+            v-if="skeletonShow"
+            backgroundColor="#fafafa"
+            borderRadius="10rpx"
+            :isLoading="true"
+            :loadingType="5"
+        ></tui-skeleton>
+        <view class="container">
+            <view v-for="(cell, index) in messageList" class="info-card" :key="index">
+                <view class="tui-notice clearfix">
+                    <tui-swipe-action :operateWidth="80" :backgroundColor="'#F7F7F7'">
+                        <template v-slot:content>
+                            <notice-cell :cellType="1" :cell="cell" @trampInfo="trampInfo"></notice-cell>
+                        </template>
+                        <template v-slot:button>
+                            <view class="tui-custom-btn_box">
+                                <view class="tui-custom-btn" @click.stop="deleteBtn(cell.id, index)">
+                                    <text class="iconfont icon-shanchu3"></text>
+                                </view>
+                            </view>
+                        </template>
+                    </tui-swipe-action>
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import noticeCell from '../components/notice-cell.vue'
+export default {
+    components: {
+        noticeCell
+    },
+    data() {
+        return {
+            skeletonShow: false, // 刷新
+            params: {
+                messageType: 3,
+                pageNum: 1,
+                pageSize: 10,
+                source: 2,
+                commonId: ''
+            },
+            messageList: [], // 信息列表
+            userInfo: {},
+            isLastPage: false, //  是否是最后一页
+        }
+    },
+    mounted() {
+        this.getMessageList({isRefresh: false})
+    },
+    methods: {
+        // 请求信息列表
+        async getMessageList(options) {
+            this.userInfo = uni.getStorageSync('userInfo')
+            this.params.commonId = this.userInfo.serviceProviderId
+            const { data } = await this.SellerService.getSellerNotice(this.params)
+            if (options.isRefresh) {
+                this.messageList = data.list
+            }
+            else {
+                this.messageList = [...this.messageList, ...data.list]
+            }
+            this.isLastPage = data.isLastPage
+        },
+        // 删除
+        deleteBtn(id, index) {
+            // 删除通知消息
+            this.UserService.authDeleteMessage({ id: id })
+                .then(response => {
+                    uni.vibrateShort({
+                        success: () => {
+                            this.params.pageSize = this.params.pageNum * this.params.pageSize
+                            this.params.pageNum = 1
+                            this.getMessageList({isRefresh: true})
+                        }
+                    })
+                })
+                .catch(error => {
+                    console.log('error=>', error.msg)
+                })
+        },
+        // 详情
+        async trampInfo($event) {
+            const time = $event.time.replace(/[年月日]/g, '-')
+            if ($event.shopTieredType === 7) {
+                this.$api.navigateTo(
+                    '/pages/seller/notice/service/Institutional_visits?spId=' +
+                        this.userInfo.serviceProviderId +
+                        '&accDateTime=' +
+                        time.substr(0, 10)
+                )
+            } else {
+                const {data} = await this.SellerService.getFindUserId({id: $event.clubId, userType: 1})
+                this.$api.navigateTo('/pages/seller/club/club-portrait?userId=' + data.data)
+            }
+        }
+    },
+    onPullDownRefresh() {
+        this.params.pageSize = 10
+        this.params.pageNum = 1
+        this.getMessageList({isRefresh: true})
+        uni.stopPullDownRefresh()
+    },
+    onReachBottom() {
+        if (!this.isLastPage) {
+            this.params.pageNum += 1
+            this.getMessageList({isRefresh: false})
+        }
+    }
+}
+</script>
+
+<style scopde lang="scss">
+.container {
+    padding: 24rpx;
+    box-sizing: border-box;
+}
+.info-card {
+    margin-bottom: 24rpx;
+    box-sizing: border-box;
+}
+page {
+    background-color: #f7f7f7;
+}
+.container-main {
+    width: 100%;
+    box-sizing: border-box;
+    padding: 24rpx 0;
+    .empty-container-image {
+        width: 260rpx;
+        height: 260rpx;
+        margin-top: -300rpx;
+    }
+}
+.tui-swipeout-content {
+    white-space: normal !important;
+}
+.tui-notice {
+    margin-bottom: 24rpx;
+}
+.tui-notice-cell {
+    width: 702rpx;
+    height: auto;
+    background-color: #ffffff;
+    border-radius: 16rpx;
+    box-sizing: border-box;
+    padding: 24rpx;
+    margin: 0 auto;
+    .tui-cell-top {
+        width: 100%;
+        height: 105rpx;
+        line-height: 105rpx;
+        border-bottom: 1px solid #ccc;
+        margin-bottom: 33rpx;
+        .cell-title {
+            font-size: 32rpx;
+            color: #333333;
+            float: left;
+            font-weight: bold;
+        }
+        .cell-time {
+            font-size: 24rpx;
+            color: #999999;
+            float: right;
+        }
+    }
+    .tui-cell-content {
+        width: 100%;
+        height: auto;
+        box-sizing: border-box;
+        border-radius: 8rpx;
+        line-height: 44rpx;
+        padding: 24rpx;
+        background-color: #f7f7f7;
+        font-size: 28rpx;
+        color: #333333;
+        text-align: justify;
+    }
+}
+.tui-custom-btn_box {
+    width: 80px;
+    height: 100%;
+    padding: 0 20rpx;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background-color: #f7f7f7;
+}
+
+.tui-custom-btn {
+    width: 56rpx;
+    height: 56rpx;
+    border-radius: 50%;
+    background-color: #f94b4b;
+    color: #ffffff;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-shrink: 0;
+    .icon-shanchu3 {
+        font-size: 32rpx;
+    }
+}
+</style>

+ 64 - 0
pages/seller/notice/service/visits_details.vue

@@ -0,0 +1,64 @@
+<template>
+    <view class="details">
+        <view class="visits-time">{{ accessTime }}</view>
+        <template>
+            <view class="details-title"><visits-cell @handlerVisits="handlerVisits" :visits-info="visitsInfo" /></view>
+        </template>
+        <view class="trajectory">
+            <Trajectory :trajectory-list="detailList"/>
+        </view>
+    </view>
+</template>
+
+<script>
+import VisitsCell from '../components/visits-cell.vue'
+import Trajectory from '../components/trajectory.vue'
+export default {
+    components: {
+        VisitsCell,
+        Trajectory
+    },
+    data() {
+        return {
+            visitsInfo: {},
+            accessTime: '', // 访问日期
+            spId: '', // 协销id
+            clubId: '' ,// 机构id
+            detailList: []
+        }
+    },
+    onLoad(options) {
+        this.accessTime = options.accessTime
+        this.spId = options.spId
+        this.clubId = options.clubId
+    },
+    mounted() {
+        this.getVisitesClubDetail()
+    },
+    methods: {
+        handlerVisits($event) {},
+        async getVisitesClubDetail() {
+            this.visitsInfo = JSON.parse(uni.getStorageSync('visitsInfo')) || {}
+            const {data} = await this.SellerService.getVisitesClubInfo({accessTime: this.accessTime, spId: this.spId, clubId: this.clubId})
+            this.detailList = data
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+page {
+    background-color: #f7f7f7;
+}
+.details {
+    .visits-time {
+        font-size: 32rpx;
+        font-weight: bold;
+        color: #333333;
+        padding: 40rpx 0 24rpx 16rpx;
+    }
+    .details-title {
+        margin-bottom: 24rpx;
+    }
+}
+</style>

+ 133 - 0
pages/seller/remarks/business-card.vue

@@ -0,0 +1,133 @@
+<template>
+    <view class="business-card">
+        <view class="select-item" @click.native="showActionSheet = true">
+            <view class="select-title">头像</view>
+            <view class="select-content">
+                <image
+                    class="aov"
+                    :src="info.image || 'https://static.caimei365.com/app/img/icon/default-head.png'"
+                    mode=""
+                ></image>
+                <text class="cell-more iconfont icon-xiayibu"></text>
+            </view>
+        </view>
+        <view class="select-item" @click.native="$api.navigateTo('/pages/seller/remarks/mine-qrcode')">
+            <view class="select-title">二维码</view>
+            <view class="select-content">
+                <image class="aov" :src="info.qrCode" mode="" v-if="info.qrCode"></image>
+                <text v-else>无</text>
+                <text class="cell-more iconfont icon-xiayibu"></text>
+            </view>
+        </view>
+        <tui-actionsheet
+            :show="showActionSheet"
+            :item-list="itemList"
+            @click="itemClick"
+            :isCancel="fasle"
+            @cancel="closeActionSheet"
+        ></tui-actionsheet>
+    </view>
+</template>
+
+<script>
+import { uploadFileImage } from '@/services/public.js'
+export default {
+    data() {
+        return {
+            userInfo: {},
+            showActionSheet: false,
+            itemList: [
+                {
+                    text: '手机相册'
+                },
+                {
+                    text: '取消'
+                }
+            ],
+            info: {}
+        }
+    },
+    mounted() {
+        this.userInfo = uni.getStorageSync('userInfo')
+        this.getUserInfo()
+    },
+    onload() {
+        uni.$on('updated', () => {
+            this.getUserInfo()
+        })
+    },
+    methods: {
+        itemClick(e) {
+            if (e.index === 1) {
+                return (this.showActionSheet = false)
+            } else {
+                uploadFileImage().then(res => {
+                    this.$util.msg('请稍后')
+                    const img = JSON.parse(res.data).data
+                    if (!img) return this.$util.msg('图片上传失败')
+                    this.SellerService.updateSellerInfo({
+                        userId: this.userInfo.userId,
+                        image: img,
+                        qrcode: this.userInfo.qrcode || ''
+                    }).then(res => {
+                        this.getUserInfo()
+                        this.showActionSheet = false
+                        this.$util.msg('上传成功')
+                    })
+                })
+            }
+        },
+        closeActionSheet() {
+            this.showActionSheet = false
+        },
+        async getUserInfo() {
+            const { data } = await this.SellerService.GetSellerHome({ userId: this.userInfo.userId })
+            this.info = data
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+@import '@/uni.scss';
+.business-card {
+    padding: 0 32rpx;
+    box-sizing: border-box;
+    .select-item {
+        display: flex;
+        justify-content: space-between;
+        height: 100rpx;
+        border-bottom: 1rpx solid #e1e1e1;
+        margin-top: 30rpx;
+        position: relative;
+        .select-title {
+            color: #666666;
+            font-size: 28rpx;
+        }
+        .select-content {
+            display: flex;
+            align-items: center;
+            .aov {
+                width: 90rpx;
+                height: 90rpx;
+                border-radius: 50%;
+                object-fit: contain;
+            }
+        }
+    }
+}
+.cell-more {
+    width: 20rpx;
+    height: 100rpx;
+    line-height: 100rpx;
+    text-align: right;
+    right: 0;
+    top: 0;
+    font-size: $font-size-28;
+    color: #666666;
+    .txt {
+        color: #fb4343;
+        padding-right: 10rpx;
+    }
+}
+</style>

+ 91 - 0
pages/seller/remarks/components/activity-analysis.vue

@@ -0,0 +1,91 @@
+<template>
+    <view class="activity-analysis">
+        <image src="https://static.caimei365.com/app/img/icon/icon-club@3x.png" class="analysis-img" mode=""></image>
+        <view class="analysis-content">
+            <view class="analysis-club">
+                {{clubInfo.name}}
+            </view>
+            <view class="analysis-tab">
+                <view class="tab-item" @click.stop="$api.navigateTo('/pages/service/service?id=1041&title=标签说明')">
+                    {{clubInfo.activeState}}
+                    <text class="iconfont icon-xiayibu"></text>
+                </view>
+                <view class="tab-item" @click.stop="$api.navigateTo('/pages/service/service?id=1041&title=标签说明')">
+                    {{clubInfo.customerValue}}
+                    <text class="iconfont icon-xiayibu"></text>
+                </view>
+            </view>
+            <view class="analysis-info">
+                <view>
+                    {{ clubInfo.linkMan }}
+                </view>
+                <view>
+                    {{ clubInfo.contractMobile }}
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        clubInfo: {
+            type: Object,
+            default: () => ({})
+        }
+    },
+}
+</script>
+
+<style lang="scss">
+.activity-analysis {
+    padding: 30rpx 0;
+    display: flex;
+    border-bottom: 1px solid #E5E5E5;
+    .analysis-img {
+        width: 140rpx;
+        height: 140rpx;
+        background: #FFF2E6;
+        border-radius: 16rpx 16rpx 16rpx 16rpx;
+        opacity: 1;
+    }
+    .analysis-content {
+        margin-left: 16rpx;
+        .analysis-club {
+            color: #333333;
+            font-size: 30rpx;
+            margin-bottom: 16rpx;
+        }
+        .analysis-tab {
+            display: flex;
+            margin-bottom: 16rpx;
+            .tab-item {
+                margin-right: 16rpx;
+                height: 40rpx;
+                background: #FAEDE5;
+                border-radius: 8rpx 8rpx 8rpx 8rpx;
+                opacity: 1;
+                text-align: center;
+                line-height: 40rpx;
+                font-size: 22rpx;
+                color: #FF5B00;
+                padding: 0 6rpx;
+                .icon-xiayibu {
+                	font-size: 20rpx;
+                	margin-left: 10rpx;
+                }
+            }
+        }
+        .analysis-info {
+            display: flex;
+            align-items: center;
+            font-size: 26rpx;
+            color: #333333;
+            view:nth-child(2) {
+                margin-left: 32rpx;
+            }
+        }
+    }
+}
+</style>

+ 71 - 0
pages/seller/remarks/components/analysis-card-item.vue

@@ -0,0 +1,71 @@
+<template>
+    <view class="analysis-card-item">
+        <view class="analysis-card-title">
+            <slot name="title"></slot>
+        </view>
+        <view class="analysis-card-title" v-if="isSubtitle">
+            <slot name="subtitle"></slot>
+        </view>
+        <view class="analysis-card-num">
+            <count-up 
+                :num="num"
+                :width="24"
+                :height="56"
+                :fontSize="40"
+                color="#333333"/>
+            <text v-if="isPercentage">%</text>
+        </view>
+    </view>
+</template>
+
+<script>
+import countUp from './countUp.vue'
+export default {
+    components: {
+        countUp
+    },
+    props: {
+        isPercentage: {
+            type: Boolean,
+            default: false
+        },
+        isSubtitle: {
+            type: Boolean,
+            default: false
+        },
+        num: {
+            type: Number,
+            default: 60
+        }
+    },
+}
+</script>
+
+<style lang="scss">
+.analysis-card-item {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    height: 210rpx;
+    align-items: center;
+    box-sizing: border-box;
+    .analysis-card-num {
+        color: #333333;
+        font-weight: bold;
+        font-size: 40rpx;
+        display: flex;
+        align-items: center;
+    }
+}
+.analysis-card-title {
+    margin-bottom: 16rpx;
+}
+.analysis-card-title:nth-child(1) {
+    font-size: 28rpx;
+    color: #333333;
+}
+.analysis-card-title:nth-child(2) {
+    font-size: 24rpx;
+    color: #999999;
+}
+</style>

+ 86 - 0
pages/seller/remarks/components/analysis-card.vue

@@ -0,0 +1,86 @@
+<template>
+    <view class="analysis-card">
+        <analysis-card-item :isSubtitle="true" :num="analysisInfo.livelyClub">
+            <template #title>
+                <view>活跃机构</view>
+            </template>
+            <template #subtitle>
+                <view>(6个月内有登录商城等行为)</view>
+            </template>
+        </analysis-card-item>
+        <analysis-card-item :isSubtitle="true" :num="analysisInfo.noLivelyClub"> 
+            <template #title>
+                <view>不活跃机构</view>
+            </template>
+            <template #subtitle>
+                <view>(6个月内未登录商城等行为)</view>
+            </template>
+        </analysis-card-item>
+        <analysis-card-item :isPercentage="true" :num="analysisInfo.livelyClubProportion">
+            <template #title>
+                <view>活跃机构占比</view>
+            </template>
+        </analysis-card-item>
+        <analysis-card-item :isPercentage="true" :num="analysisInfo.noLivelyClubProportion">
+            <template #title>
+                <view>不活跃机构占比</view>
+            </template>
+        </analysis-card-item>
+    </view>
+</template>
+
+<script>
+import analysisCardItem from './analysis-card-item.vue'
+export default {
+    components: {
+        analysisCardItem
+    },
+    props: {
+        analysisInfo: {
+            type: Object,
+            default: () => ({
+                livelyClub: 0,
+                livelyClubProportion: 0,
+                noLivelyClub: 0,
+                noLivelyClubProportion: 0
+            })
+        }
+    },
+    data() {
+        return {}
+    },
+}
+</script>
+
+<style lang="scss">
+.analysis-card {
+    width: 702rpx;
+    display: grid;
+    position: relative;
+    grid-template-columns: repeat(2, 1fr);
+    grid-template-rows: repeat(2, 1fr);
+    background-color: #fff;
+    border-radius: 16rpx;
+    margin: 0 auto;
+    &::before {
+        width: 1px;
+        height: 200rpx;
+        content: '';
+        position: absolute;
+        left: 50%;
+        top: 50%;
+        background-color: #E5E5E5;
+        transform: translate(-50%, -50%);
+    }
+    &::after {
+        width: 660rpx;
+        height: 1px;
+        content: '';
+        position: absolute;
+        left: 50%;
+        top: 50%;
+        background-color: #E5E5E5;
+        transform: translate(-50%, -50%);
+    }
+}
+</style>

+ 137 - 0
pages/seller/remarks/components/countUp.vue

@@ -0,0 +1,137 @@
+<template>
+    <view class="number-box">
+        <block v-for="(myIndex, index) in indexArr" :key="index">
+            <swiper
+                class="swiper"
+                vertical="true"
+                :current="myIndex"
+                circular="true"
+                v-bind:style="{
+                    color: color,
+                    width: myIndex == 10 ? '7px' : width + 'rpx',
+                    height: height + 'rpx',
+                    fontSize: fontSize + 'rpx',
+                    fontWeight
+                }"
+            >
+                <swiper-item><view class="swiper-item">0</view></swiper-item>
+                <swiper-item><view class="swiper-item">1</view></swiper-item>
+                <swiper-item><view class="swiper-item">2</view></swiper-item>
+                <swiper-item><view class="swiper-item">3</view></swiper-item>
+                <swiper-item><view class="swiper-item">4</view></swiper-item>
+                <swiper-item><view class="swiper-item">5</view></swiper-item>
+                <swiper-item><view class="swiper-item">6</view></swiper-item>
+                <swiper-item><view class="swiper-item">7</view></swiper-item>
+                <swiper-item><view class="swiper-item">8</view></swiper-item>
+                <swiper-item><view class="swiper-item">9</view></swiper-item>
+                <swiper-item><view class="swiper-item">.</view></swiper-item>
+            </swiper>
+        </block>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        num: [String, Number],
+        color: {
+            type: String,
+            default: '#000000'
+        },
+        width: {
+            type: String,
+            default: '15'
+        },
+        height: {
+            type: String,
+            default: '15'
+        },
+        fontSize: {
+            type: String,
+            default: '15'
+        },
+        fontWeight: {
+            type: String,
+            default: 'bold'
+        }
+    },
+    data() {
+        return {
+            indexArr: []
+        }
+    },
+    created() {
+        let { num } = this
+        console.log('初始数据', num)
+        let arr = new Array(num.toString().length)
+        arr.fill(0)
+        this.indexArr = arr
+    },
+    watch: {
+        num: function(val, oldVal) {
+            // 处理新老数据长度不一样的情况
+            let arr = Array.prototype.slice.apply(this.indexArr)
+            let newLen = val.toString().length
+            let oldLen = oldVal.toString().length
+            if (newLen > oldLen) {
+                for (let i = 0; i < newLen - oldLen; i++) {
+                    arr.push(0)
+                }
+                this.indexArr = arr
+            }
+            if (newLen < oldLen) {
+                for (let i = 0; i < oldLen - newLen; i++) {
+                    arr.pop()
+                }
+                this.indexArr = arr
+            }
+            this.numChange(val)
+        }
+    },
+    mounted() {
+        //定时器作用:app显示数字滚动
+        this._time = setTimeout(() => {
+            this.numChange(this.num)
+            clearTimeout(this.time)
+        }, 50)
+    },
+    methods: {
+        /**
+         * 数字改变
+         * @value 数字
+         */
+        numChange(num) {
+            let { indexArr } = this
+            let copyIndexArr = Array.prototype.slice.apply(indexArr)
+            let _num = num.toString()
+            for (let i = 0; i < _num.length; i++) {
+                if (_num[i] === '.') {
+                    copyIndexArr[i] = 10
+                } else {
+                    copyIndexArr[i] = Number(_num[i])
+                }
+            }
+            this.indexArr = copyIndexArr
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.number-box {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+}
+.swiper {
+    position: relative;
+}
+.swiper:after {
+    content: '';
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+}
+</style>

+ 123 - 0
pages/seller/remarks/components/mine-card.vue

@@ -0,0 +1,123 @@
+<template>
+    <view class="card" :style="{backgroundImage: `url(${imgUrl})`, backgroundSize: '100% 100%'}">
+        <view class="logo">
+            <image src="https://static.caimei365.com/app/img/icon/logo-fanbai.png" mode="" class="titleImgUrl"></image>
+        </view>
+        <view class="card-contain">
+            <view style="display: flex;">
+                <view class="card-head">
+                    <image :src="userInfo.image || 'https://static.caimei365.com/app/img/icon/default-head.png'" mode="" class="head"></image>
+                </view>
+                <view class="card-info">
+                    <view class="card-info-head">
+                        <view class="card-name">
+                            {{userInfo.linkMan}}
+                        </view>
+                        <view class="card-info-tab">
+                            客户经理
+                        </view>
+                    </view>
+                    <view class="card-info-iphone">
+                        {{ userInfo.contractMobile.replace(/(?=(\d{4})+$)/g,"-") }}
+                    </view>
+                </view>
+            </view>
+            <view class="card-qrcode">
+                <view class="qrcode-message">
+                    <image :show-menu-by-longpress="true" :src="userInfo.qrCode || ''" class="qrcode" mode=""></image>
+                </view>
+                <view class="tips">
+                    长按或扫二维码—-联系我-—
+                </view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        userInfo: {
+            type: Object,
+            default: () => ({})
+        }
+    },
+    data() {
+        return {
+            imgUrl: 'https://static.caimei365.com/app/img/icon/bg-card.png',
+        }
+    },
+    mounted() {},
+    methods: {},
+}
+</script>
+
+<style lang="scss">
+.card {
+    width: 702rpx;
+    height: 340rpx;
+    background: #FF5B00;
+    border-radius: 16rpx;
+    opacity: 1;
+    margin: 0 auto;
+    box-sizing: border-box;
+    padding: 16rpx 32rpx;
+    .titleImgUrl {
+        width: 241rpx;
+        height: 80rpx;
+    }
+    .card-contain {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .head {
+            width: 128rpx;
+            height: 128rpx;
+            border-radius: 50%;
+            object-fit: contain;
+        }
+        .card-info {
+            height: 128rpx;
+            margin-left: 30rpx;
+        }
+        .card-info-head {
+            display: flex;
+            align-items: center;
+            margin-bottom: 13rpx;
+            .card-name {
+                color: #FFFFFF;
+                font-size: 40rpx;
+                font-weight: bold;
+            }
+            .card-info-tab {
+                width: 88rpx;
+                height: 31rpx;
+                background-color: #FFBB00;
+                color: #fff;
+                font-size: 22rpx;
+                padding: 0 8rpx;
+                margin-left: 10rpx;
+            }
+        }
+        .card-info-iphone {
+            color: #FFFFFF;
+            font-size: 28rpx;
+        }
+        .card-qrcode {
+            .qrcode {
+                width: 126rpx;
+                height: 126rpx;
+                object-fit: contain;
+                margin-bottom: 6rpx;
+            }
+            .tips {
+                font-size: 18rpx;
+                color: #fff;
+                text-align: center;
+                width: 126rpx;
+                line-height: 24rpx;
+            }
+        }
+    }
+}
+</style>

+ 193 - 0
pages/seller/remarks/institutional-activity-analysis.vue

@@ -0,0 +1,193 @@
+<template>
+    <view class="container club clearfix">
+        <view
+            class="club-search clearfix"
+            :style="{ paddingTop: StatusBar + 'px', backgroundImage: `url(${imgUrl})`, backgroundSize: '100% 100%' }"
+        >
+            <view class="search-top" :style="{ height: CustomBar - StatusBar + 'px' }">
+                <view
+                    class="search-icon"
+                    :style="{
+                        width: CustomBar - StatusBar + 'px',
+                        height: CustomBar - StatusBar + 'px',
+                        lineHeight: CustomBar - StatusBar + 'px;'
+                    }"
+                >
+                    <text @click="handleNavigateBack" class="iconfont icon-fanhui"></text>
+                </view>
+                <view class="title">机构活跃分析</view>
+            </view>
+            <analysis-card :analysis-info="dataList" />
+        </view>
+        <view class="analysis-list">
+            <view class="analysis-tabs">
+                <view
+                    class="analysis-tab"
+                    :class="currentTab === item.id && 'active'"
+                    v-for="(item, index) in tabs"
+                    :key="item.id"
+                    @click="handleChangeActive(item.id)"
+                >
+                    {{ item.name }}
+                </view>
+            </view>
+            <view class="list">
+                <activity-analysis v-for="(item, index) in clubList" :key="index" :clubInfo="item" />
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+import analysisCard from './components/analysis-card.vue'
+import activityAnalysis from './components/activity-analysis.vue'
+export default {
+    components: {
+        analysisCard,
+        activityAnalysis
+    },
+    data() {
+        return {
+            isIphoneX: this.$store.state.isIphoneX,
+            CustomBar: this.CustomBar,
+            StatusBar: this.StatusBar,
+            capsule: this.capsule,
+            imgUrl: 'https://static.caimei365.com/app/img/icon/analysis-bg.png',
+            userInfo: {},
+            currentTab: 4,
+            tabs: [
+                {
+                    id: 4,
+                    name: '活跃机构'
+                },
+                {
+                    id: 5,
+                    name: '不活跃机构'
+                }
+            ],
+            dataList: {},
+            clubList: [], // 机构列表
+            pageNum: 1,
+            isLastPage: true // 是否是最后一页
+        }
+    },
+    mounted() {
+        this.userInfo = uni.getStorageSync('userInfo')
+        this.getLivelyClub()
+        this.getClubList()
+    },
+    watch: {
+        currentTab(val) {
+            if (val) {
+                this.pageNum = 1
+                this.clubList = []
+                this.getClubList()
+            }
+        }
+    },
+    onReachBottom() {
+        if (!this.isLastPage) {
+            this.pageNum++
+            this.getClubList()
+        }
+        console.log('触底刷新')
+    },
+    methods: {
+        handleChangeActive(e) {
+            this.currentTab = e
+        },
+        handleNavigateBack() {
+            this.$api.navigateBack(1)
+        },
+        // 获取机构活跃分析占比
+        async getLivelyClub() {
+            const { data: data } = await this.SellerService.getLivelyClub({ spId: this.userInfo.serviceProviderId })
+            this.dataList = data
+        },
+        // 获取机构列表
+        async getClubList() {
+            const { data } = await this.SellerService.getClubList({
+                spId: this.userInfo.serviceProviderId,
+                status: 90,
+                type: this.currentTab,
+                pageNum: this.pageNum,
+                pageSize: 10
+            })
+            this.clubList = [...this.clubList, ...data.clubList.list]
+            this.isLastPage = data.clubList.isLastPage
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+    background: #ffffff;
+    position: relative;
+}
+.club-search {
+    height: 700rpx;
+    width: 100%;
+    background: #ffffff;
+    display: flex;
+    flex-direction: column;
+    position: fixed;
+    top: 0;
+    left: 0;
+    z-index: 99;
+    box-sizing: border-box;
+    .search-top {
+        display: flex;
+        align-items: center;
+        box-sizing: border-box;
+        position: relative;
+        margin-bottom: 80rpx;
+        .title {
+            position: absolute;
+            left: 50%;
+            top: 50%;
+            transform: translate(-50%, -50%);
+        }
+        .search-icon {
+            text-align: center;
+            float: left;
+            .icon-fanhui {
+                font-size: 44rpx;
+                color: #333333;
+            }
+            .icon-shouye {
+                font-size: 44rpx;
+                color: #333333;
+            }
+        }
+    }
+}
+.analysis-list {
+    padding: 38rpx 24rpx;
+    box-sizing: border-box;
+    .list {
+        margin-top: 740rpx;
+    }
+    .analysis-tabs {
+        color: #666666;
+        display: flex;
+        align-items: center;
+        margin-bottom: 12rpx;
+        position: fixed;
+        background: #fff;
+        width: 100%;
+        height: 100rpx;
+        top: 700rpx;
+        .analysis-tab {
+            font-size: 32rpx;
+            height: 54rpx;
+            margin-right: 80rpx;
+            &.active {
+                color: #ff5b00;
+                border-bottom: 2px solid #ff5b00;
+                font-weight: bold;
+            }
+        }
+    }
+}
+</style>

+ 46 - 0
pages/seller/remarks/mine-card.vue

@@ -0,0 +1,46 @@
+<template>
+    <view class="mine-card">
+        <mine-card :userInfo="userInfo"></mine-card>
+        <view class="tips">
+            商城名片(方便买家在商城联系您)
+        </view>
+    </view>
+</template>
+
+<script>
+import MineCard from './components/mine-card.vue'
+export default {
+    components: {
+        MineCard,
+    },
+    data() {
+        return {
+            userInfo: {}
+        }
+    },
+    mounted() {
+        this.userInfo = uni.getStorageSync('userInfo')
+        this.getUserInfo()
+    },
+    methods: {
+        async getUserInfo() {
+            const { data } = await this.SellerService.GetSellerHome({ userId: this.userInfo.userId })
+            this.userInfo = data
+        },
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.mine-card {
+    width: 100vw;
+    height: 100vh;
+    padding: 48rpx 24rpx;
+    box-sizing: border-box;
+    .tips {
+        color: #999999;
+        font-size: 24rpx;
+        margin-top: 24rpx;
+    }
+}
+</style>

+ 121 - 0
pages/seller/remarks/mine-qrcode.vue

@@ -0,0 +1,121 @@
+<template>
+    <view class="mine-qrcode">
+        <view class="handlerUpload" @click="handlerUploadQrcode">
+            <image class="qrcode" :src="qrcode" mode="" v-if="qrcode"></image>
+            <text v-else>
+                请点击上传二维码
+            </text>
+        </view>
+        <button class="upload" @click="handlerUploadQrcode">上传二维码</button>
+        <button class="save-qrcode" :class="active && 'active'" @click="handlerSave">保存</button>
+    </view>
+</template>
+
+<script>
+import { uploadFileImage } from '@/services/public.js'
+export default {
+    data() {
+        return {
+            active: false,
+            userInfo: {},
+            info: {},
+            qrcode: ''
+        }
+    },
+    watch: {
+        qrcode(val) {
+            if (val) {
+                this.active = true
+            }
+        }
+    },
+    mounted() {
+        this.userInfo = uni.getStorageSync('userInfo')
+        this.getUserInfo()
+    },
+    methods: {
+        handlerSave() {
+            if (this.active) {
+                this.upload()
+                setTimeout(() => {
+                    this.$api.navigateTo('/pages/seller/remarks/mine-card')
+                }, 1000)
+            }
+        },
+        handlerUploadQrcode() {
+            uploadFileImage().then(res => {
+                this.$util.msg('请稍后')
+                this.qrcode = JSON.parse(res.data).data
+            })
+        },
+        async getUserInfo() {
+            const { data } = await this.SellerService.GetSellerHome({ userId: this.userInfo.userId })
+            this.userInfo = data
+            this.qrcode = data.qrCode
+        },
+        upload() {
+            if (this.qrcode) {
+                this.SellerService.updateSellerInfo({
+                    userId: this.userInfo.userId,
+                    image: this.userInfo.image,
+                    qrCode: this.qrcode
+                }).then(res => {
+                    this.getUserInfo()
+                    this.showActionSheet = false
+                    uni
+                })
+            } else {
+                this.$util.msg('请上传二维码图片')
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.mine-qrcode {
+    width: 100vw;
+    height: 100vh;
+    .handlerUpload {
+        width: 420rpx;
+        height: 420rpx;
+        border: 1px dotted #B2B2B2;
+        margin: 120rpx auto 0 auto;
+        text-align: center;
+        line-height: 420rpx;
+        color: #B2B2B2;
+        font-size: 24rpx;
+        border-radius: 16rpx;
+        .qrcode {
+            width: 420rpx;
+            height: 420rpx;
+            object-fit: contain;
+        }
+    }
+    .upload {
+        margin: 101rpx auto 0 auto;
+        width: 600rpx;
+        height: 90rpx;
+        border-radius: 45rpx;
+        opacity: 1;
+        border: 1rpx solid #FF5B00;
+        color: #FF5B00;
+        line-height: 90rpx;
+        text-align: center;
+    }
+    .save-qrcode {
+        margin: 24rpx auto 0 auto;
+        width: 600rpx;
+        height: 90rpx;
+        border-radius: 45rpx;
+        opacity: 1;
+        color: #FFFFFF;
+        line-height: 90rpx;
+        text-align: center;
+        background-color: #E1E1E1;
+    }
+    .active {
+        background: linear-gradient(90deg, #FF9300 0%, #FF5B00 100%);
+    }
+}
+</style>

+ 26 - 3
pages/tabBar/home/index.vue

@@ -49,6 +49,7 @@
 			:beanNumber="beanNumber"
 			@cancel="handleBeanlClick"
 		></activityBean>
+        <cm-seller-modal :sellerUserId="sellerUserId"></cm-seller-modal>
 	</view>
 </template>
 
@@ -67,6 +68,7 @@ import supplierList from '@/components/cm-module/homeIndex/supplierList.vue'
 import activityAlert from '@/components/cm-module/activity/activity.vue'
 import activityBean from '@/components/cm-module/activity/activityBean.vue'
 import quickOpera from '@/components/cm-module/homeIndex/quickOperation.vue'
+import cmSellerModal from '@/components/cm-share-popup/cm-seller-modal.vue'
 import homeMiXins from './index.js'
 export default {
 	mixins: [ homeMiXins ], 
@@ -83,7 +85,8 @@ export default {
 		supplierList,
 		activityAlert,
 		activityBean,
-        quickOpera
+        quickOpera,
+        cmSellerModal
 	},
 	data() {
 		return {
@@ -123,10 +126,30 @@ export default {
 			beanNumber: 50,
 			couponEntry: 2,
 			autoplay: true,
-            isScroll: false
+            isScroll: false,
+            sellerUserId: 0, // 协销id
 		}
 	},
-	onLoad() {},
+	onLoad(option) {
+        console.log('options', option)
+        if(!uni.getStorageSync('sellerUserId')) {
+            uni.setStorageSync('sellerUserId', option.sellerUserId || 0)
+        }
+    },
+    onShow() {
+        if (!uni.getStorageSync('spUserId')) {
+            this.sellerUserId = uni.getStorageSync('sellerUserId')
+        } else {
+            if (uni.getStorageSync('spUserId') === uni.getStorageSync('sellerUserId')) {
+                this.sellerUserId = uni.getStorageSync('sellerUserId')
+            } else {
+                this.sellerUserId = 0
+            }
+        }
+        if (this.userInfo.userIdentity === 1) {
+            this.sellerUserId = 0
+        }
+    },
     computed: {
         ...mapState(['hasLogin', 'userInfo'])
     },

+ 1 - 1
services/ajax.service.js

@@ -15,7 +15,7 @@ class AjaxService {
         const REV_TOKEN_ENV = uni.getStorageSync('token') ? uni.getStorageSync('token') : 'X-token'
         const REV_COOKIE_ENV = uni.getStorageSync('sessionid') ? uni.getStorageSync('sessionid') : 'sessionid'
         header['Accept'] = 'application/json'
-        header['Content-Type'] = 'application/x-www-form-urlencoded'
+        header['Content-Type'] = header['content-type'] || 'application/x-www-form-urlencoded'
         header['X-Token'] = REV_TOKEN_ENV
         header['cookie'] = REV_COOKIE_ENV
         return header

+ 104 - 1
services/sellse.service.js

@@ -379,5 +379,108 @@ export default class SellerService {
 	           
 	    })
     }
-	
+	/**
+     * 协销分享海报
+     */
+    wxUnlimited (data = {}) {
+	    return this.AjaxService.post({ 
+	        url:'/tools/wxacode', 
+	        data, 
+	        isLoading: true,
+            header: {
+                'content-type': 'application/json',
+                'Accept': '*/*'
+            }
+	    })
+    }
+    /**
+     * 机构活跃分析占比
+     */
+    getLivelyClub(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/seller/club/livelyClub', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 获取机构列表
+     */
+    getClubList(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/seller/club/livelyClubList', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 更新协销本人信息
+     */
+    updateSellerInfo(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/seller/setHome', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 协销消息通知
+     */
+    getSellerNotice(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/login/auth/SpMessageList', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 协销站内消息未读数
+     */
+    getSellerNoticeSpCount(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/login/auth/SpCount', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 协销站内消息清除标记
+     */
+    updateSpMessageAsRead(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/login/auth/updateSpMessageAsRead', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 机构访问列表
+     */
+    getVisitesClubList(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/seller/getBehaviorRecordClub', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 访问机构详情
+     */
+    getVisitesClubInfo(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/seller/getBehaviorRecordClubFrom', 
+            data, 
+            isLoading: true 
+        })
+    }
+    /**
+     * 获取机构userId
+     */
+    getFindUserId(data = {}) {
+        return this.AjaxService.get({
+            url:'/user/getFindUserId', 
+            data, 
+            isLoading: true 
+        })
+    }
 }

+ 32 - 0
store/index.js

@@ -5,7 +5,9 @@ import authorize from '../common/config/authorize.js'
 import * as caimeiApi from '@/common/config/caimeiApi.js'
 import ajaxService from '@/services/ajax.service.js'
 import UserService from '@/services/user.service.js'
+import SellerService from '@/services/sellse.service.js'
 const getUserService = new UserService(ajaxService)
+const getSellerService = new SellerService(ajaxService)
 Vue.use(Vuex)
 const store = new Vuex.Store({
     state: {
@@ -108,6 +110,36 @@ const store = new Vuex.Store({
                     })
                 })
         },
+        // async updateSellerNoticeNum(state) { // 更新协销通知消息数量
+        //     const userInfo = await caimeiApi.getStorage()
+        //     const commonId = userInfo.serviceProviderId ? userInfo.serviceProviderId : 0
+        //     console.log(userInfo, commonId)
+        //     getSellerService.getSellerNoticeSpCount({ commonId: commonId, messageType: 3 })
+        //         .then(response => {
+        //             state.noticeNum = response.data.notificationCount
+        //             console.log(response)
+        //             if (state.noticeNum >= 100) {
+        //                 uni.setTabBarBadge({
+        //                     index: 2,
+        //                     text: '99+'
+        //                 })
+        //             } else if (state.noticeNum > 0) {
+        //                 uni.setTabBarBadge({
+        //                     index: 2,
+        //                     text: String(state.noticeNum)
+        //                 })
+        //             } else {
+        //                 uni.removeTabBarBadge({
+        //                     index: 2,
+        //                 })
+        //             }
+        //         })
+        //         .catch(error => {
+        //             uni.removeTabBarBadge({
+        //                 index: 2,
+        //             })
+        //         })
+        // },
         async updateRossShow(state){
             const USER_EVEN = await caimeiApi.getStorage()
             if(USER_EVEN.userIdentity === 1) { return }

Some files were not shown because too many files changed in this diff