ソースを参照

Merge branch 'developerA' into developer

喻文俊 3 年 前
コミット
e2cd33014c
100 ファイル変更7282 行追加12600 行削除
  1. 1 0
      .gitignore
  2. 86 130
      App.vue
  3. 79 0
      common/addressdata.js
  4. 171 0
      common/authorize.js
  5. 208 0
      common/common.js
  6. 1 0
      common/config.js
  7. 0 79
      common/config/addressdata.js
  8. 0 174
      common/config/authorize.js
  9. 0 183
      common/config/common.js
  10. 0 139
      common/config/utilsTools.js
  11. 98 0
      common/couponUtil.js
  12. 26 0
      common/crypto.js
  13. 325 319
      common/css/common.scss
  14. 0 3
      common/css/iconfont.scss
  15. 218 196
      common/css/style/icon.css
  16. 318 321
      common/css/style/thorui.css
  17. 0 4673
      common/json/data.json.js
  18. 0 0
      common/libs/crypto-js.min.js
  19. 23 0
      common/uma.init.js
  20. 95 0
      common/util.js
  21. 151 0
      common/utilsTools.js
  22. 43 43
      components/clipboard/clipboard.thorui.js
  23. 262 258
      components/clipboard/formValidation.js
  24. 22 22
      components/clipboard/utils.js
  25. 0 107
      components/cm-custom/au-custom.vue
  26. 0 122
      components/cm-custom/cm-custom.vue
  27. 0 114
      components/cm-custom/cu-custom.vue
  28. 0 159
      components/cm-custom/custom-d.vue
  29. 0 229
      components/cm-custom/custom-p.vue
  30. 0 160
      components/cm-custom/index-custom.vue
  31. 59 0
      components/cm-module/cm-active-popup/cm-active-popup.vue
  32. 66 0
      components/cm-module/cm-activity-info/cm-activity-info.vue
  33. 399 0
      components/cm-module/cm-cart-product/cm-cart-product.vue
  34. 84 0
      components/cm-module/cm-cart-product/number-box.vue
  35. 281 0
      components/cm-module/cm-coupon-list/cm-coupon-list.vue
  36. 301 0
      components/cm-module/cm-coupon/cm-coupon.vue
  37. 0 0
      components/cm-module/cm-drag/cm-drag.vue
  38. 166 0
      components/cm-module/cm-drawer/cm-drawer.vue
  39. 56 0
      components/cm-module/cm-empty/cm-empty.vue
  40. 256 0
      components/cm-module/cm-goods-nav/cm-goods-nav.vue
  41. 29 0
      components/cm-module/cm-loading/cm-loading.vue
  42. 115 0
      components/cm-module/cm-product-info/cm-product-info.vue
  43. 89 0
      components/cm-module/cm-product-params/cm-product-params.vue
  44. 125 0
      components/cm-module/cm-product-price/cm-product-price.vue
  45. 146 0
      components/cm-module/cm-product/cm-product.vue
  46. 75 0
      components/cm-module/cm-selector-coupons/cm-selector-coupons.vue
  47. 1 2
      components/cm-module/createOrder/address.vue
  48. 0 0
      components/cm-module/createOrder/freight.vue
  49. 6 7
      components/cm-module/createOrder/goodsList.vue
  50. 29 30
      components/cm-module/createOrder/sellerFreight.vue
  51. 1 1
      components/cm-module/createOrder/sellerInvoice.vue
  52. 1 1
      components/cm-module/createOrder/sellerRegulations.vue
  53. 80 0
      components/cm-module/empty/empty.vue
  54. 0 209
      components/cm-module/headerNavbar/header-back.vue
  55. 167 0
      components/cm-module/headerNavbar/header-cart.vue
  56. 208 0
      components/cm-module/headerNavbar/header-order.vue
  57. 0 0
      components/cm-module/headerNavbar/header-pay.vue
  58. 0 0
      components/cm-module/headerNavbar/header-payment.vue
  59. 233 220
      components/cm-module/headerNavbar/header-poduct.vue
  60. 0 162
      components/cm-module/headerNavbar/headerNavbar.vue
  61. 93 92
      components/cm-module/homeIndex/banner.vue
  62. 0 4
      components/cm-module/homeIndex/customer.vue
  63. 0 0
      components/cm-module/homeIndex/pageFloor.vue
  64. 0 427
      components/cm-module/listTemplate/classifyProductList.vue
  65. 0 953
      components/cm-module/listTemplate/immediatelyList.vue
  66. 6 8
      components/cm-module/listTemplate/productList.vue
  67. 25 0
      components/cm-module/modal-layer/modal-layer.vue
  68. 197 228
      components/cm-module/orderDetails/activipopu.vue
  69. 8 2
      components/cm-module/orderDetails/goodsList.vue
  70. 190 173
      components/cm-module/orderDetails/logisticsRecord.vue
  71. 143 137
      components/cm-module/orderDetails/orderButton.vue
  72. 237 225
      components/cm-module/orderDetails/orderInformation.vue
  73. 1 1
      components/cm-module/orderDetails/paymentRecord.vue
  74. 1 1
      components/cm-module/orderDetails/refundRecord.vue
  75. 199 228
      components/cm-module/productDetails/cm-activipopu.vue
  76. 316 338
      components/cm-module/productDetails/cm-price-activity.vue
  77. 315 337
      components/cm-module/productDetails/cm-price.vue
  78. 1 9
      components/cm-module/productDetails/evaluate.vue
  79. 1 7
      components/cm-module/productDetails/instrument-recommend.vue
  80. 1 7
      components/cm-module/productDetails/recommend.vue
  81. 2 2
      components/cm-module/scrollTop/scrollTop.vue
  82. 207 0
      components/cm-module/share/share.vue
  83. 0 80
      components/empty.vue
  84. 84 0
      components/message-popup/message-popup.vue
  85. 0 33
      components/modal-layer.vue
  86. 1 1
      components/mpvue-citypicker/mpvueCityPicker.vue
  87. 0 202
      components/share.vue
  88. 152 0
      components/sui-search/sui-search.vue
  89. 1 1
      components/thorui/tui-tabs/tui-tabs.vue
  90. 1 1
      components/thorui/tui-tag/tui-tag.vue
  91. 0 166
      components/tui-components/loadmore/loadmore.vue
  92. 0 119
      components/tui-components/nomore/nomore.vue
  93. 0 233
      components/tui-components/tui-tabs/tui-tabs.vue
  94. 0 161
      components/tui-loadmore/tui-loadmore.vue
  95. 0 115
      components/tui-nomore/tui-nomore.vue
  96. 0 246
      components/tui-skeleton/tui-skeleton.vue
  97. 0 0
      components/uni-components/uni-badge/uni-badge.vue
  98. 0 0
      components/uni-components/uni-calendar/calendar.js
  99. 0 0
      components/uni-components/uni-calendar/uni-calendar-item.vue
  100. 0 0
      components/uni-components/uni-calendar/uni-calendar.vue

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+/unpackage/

+ 86 - 130
App.vue

@@ -3,125 +3,81 @@
  * vuex管理登陆状态,具体可以参考官方登陆模板示例
  */
 import Vue from 'vue'
-import { mapState, mapMutations } from 'vuex'
-import authorize from '@/common/config/authorize.js'
-import wxLogin from '@/services/wxLogin.js'
+import { mapActions, mapMutations } from 'vuex'
 export default {
-	onLaunch: function() {
-		let self = this
-		uni.getSystemInfo({
-			success: function(e) {
-				let modelmes = e.model
-				self.$store.commit('setWindowHeight', e.windowHeight)
-				let reg =  (	
-								/iphone\sx/i.test(modelmes) 
-								|| (/iphone/i.test(modelmes) && /unknown/.test(modelmes)) 
-								|| /iphone\s11/.test(modelmes)
-								|| /iPhone 11/i.test(modelmes)
-								|| /iPhone X/i.test(modelmes)
-							);
-				console.log(reg)			
-				if (
-					modelmes.search('iPhone 11') != -1 ||
-					modelmes.search('iPhone 11 Pro Max') != -1 ||
-					modelmes.search('iPhone 12') != -1 ||
-					modelmes.search('iPhone X') != -1
-				) {
-					//XS,XR,XS MAX均可以适配
-					self.$store.dispatch('setVariableFun', true)
-				} else {
-					self.$store.dispatch('setVariableFun', false)
-				}
-				// #ifndef MP
-				Vue.prototype.StatusBar = e.statusBarHeight
-				if (e.platform == 'android') {
-					Vue.prototype.CustomBar = e.statusBarHeight + 50
-					Vue.prototype.platformClass = true
-				} else {
-					Vue.prototype.CustomBar = e.statusBarHeight + 45
-					Vue.prototype.platformClass = false
-				}
-				// #endif
+    onLaunch: function() {
+        console.log('清空本地缓存')
+        uni.clearStorageSync()
+        this.initSystemInfo()
+        this.wechatlogin()
+        // 判断优惠券弹窗是否显示
+        // this.checkShowCouponPopup()
+    },
+    methods: {
+        ...mapActions('app', ['setWindowHeight', 'setVariableFun']),
+        ...mapActions('user', ['wechatlogin']),
+        ...mapMutations('coupon', ['setCouponPopupStatus']),
+        ...mapMutations('app', ['setWindowHeight']),
+        // 验证是否需要显示优惠券入口弹窗
+        checkShowCouponPopup() {
+            const couponPopupType = uni.getStorageSync('couponPopupType')
+            const nowDay = new Date().getDay()
+            // 新用户 当天不弹窗
+            if (couponPopupType === nowDay) {
+                this.setCouponPopupStatus(false)
+            }
+        },
+        initSystemInfo() {
+            let self = this
+            uni.getSystemInfo({
+                success: function(e) {
+                    let modelmes = e.model
+                    self.setWindowHeight(e.windowHeight)
+                    console.log(modelmes)
+                    // iphone x以上的版本都要控制下巴高度
+                    console.log(/iphone [1|x]\s?/i.test(modelmes))
+                    if (/iphone [1|x]\s?/i.test(modelmes)) {
+                        self.setVariableFun(true)
+                    } else {
+                        self.setVariableFun(false)
+                    }
+                    // #ifndef MP
+                    Vue.prototype.StatusBar = e.statusBarHeight
+                    if (e.platform == 'android') {
+                        Vue.prototype.CustomBar = e.statusBarHeight + 50
+                        Vue.prototype.platformClass = true
+                    } else {
+                        Vue.prototype.CustomBar = e.statusBarHeight + 45
+                        Vue.prototype.platformClass = false
+                    }
+                    // #endif
 
-				// #ifdef MP-WEIXIN || MP-QQ
-				console.log(e.platform)
-				if (e.platform == 'android') {
-					Vue.prototype.platformClass = 'left'
-					self.$store.dispatch('setVariableFun', false)
-				} else {
-					Vue.prototype.platformClass = 'center'
-					self.$store.dispatch('setIsIphoneFun', true)
-				}
-				Vue.prototype.StatusBar = e.statusBarHeight
-				Vue.prototype.fontSizeSetting = e.fontSizeSetting
-				Vue.prototype.screenWidth = e.screenWidth
-				let capsule = wx.getMenuButtonBoundingClientRect()
-				Vue.prototype.capsule = capsule
-				if (capsule) {
-					Vue.prototype.Custom = capsule
-					// Vue.prototype.capsuleSafe = uni.upx2px(750) - capsule.left + uni.upx2px(750) - capsule.right;
-					Vue.prototype.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight
-				} else {
-					Vue.prototype.CustomBar = e.statusBarHeight + 50
-				}
-				// #endif
-				// #ifdef MP-ALIPAY
-				Vue.prototype.StatusBar = e.statusBarHeight
-				Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight
-				// #endif
-			}
-		})
-		this.refresh()
-		if (uni.getStorageSync('isActivityStatus')) {
-			const lockTime = uni.getStorageSync('lockTime')
-			const eTime = this.diffTime(lockTime)
-			this.$store.dispatch('setActivityFn', eTime)
-		} else {
-			this.$store.dispatch('setActivityFn', true)
-		}
-	},
-	methods: {
-		...mapMutations(['login','logout']),
-		async getWxAuthorize() {
-			const wechatCode = await authorize.getCode('weixin')
-			this.UserService.userInfoLogin({ 
-				code: wechatCode ,
-			})
-			.then(response => {
-				this.login(response.data)
-				this.$store.commit('updateStatus', response.data)
-			})
-			.catch(error => {
-				uni.setStorage({
-					//缓存游客用户openid
-					key: 'openid',
-					data: error.data.openid
-				})
-				this.logout()
-			})
-		},
-		refresh() {
-			let TIME = 20 * 60 * 1000
-			setInterval(() => {
-				authorize.getSetting()
-				.then(res => {
-					// console.log('是否已授权',res);//0:为取消授权 1:为已授权 2:为未操作
-					if (res == 1) {
-						this.getWxAuthorize()
-					} else {
-						console.log('授权失败============>:' + '用户取消授权或者未操作')
-					}
-				})
-				.catch(error => {
-					console.log('授权失败============>:' + '用户授权失败,提醒用户重新授权')
-				})
-			}, TIME)
-		},
-		diffTime(t) {
-			let date = Date.now()
-			return date - t < 2 * 60 * 1000 ? false : true
-		}
-	}
+                    // #ifdef MP-WEIXIN || MP-QQ
+                    if (e.platform == 'android') {
+                        Vue.prototype.platformClass = 'left'
+                    } else {
+                        Vue.prototype.platformClass = 'center'
+                    }
+                    Vue.prototype.StatusBar = e.statusBarHeight
+                    Vue.prototype.fontSizeSetting = e.fontSizeSetting
+                    Vue.prototype.screenWidth = e.screenWidth
+                    let capsule = wx.getMenuButtonBoundingClientRect()
+                    Vue.prototype.capsule = capsule
+                    if (capsule) {
+                        Vue.prototype.Custom = capsule
+                        Vue.prototype.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight
+                    } else {
+                        Vue.prototype.CustomBar = e.statusBarHeight + 50
+                    }
+                    // #endif
+                    // #ifdef MP-ALIPAY
+                    Vue.prototype.StatusBar = e.statusBarHeight
+                    Vue.prototype.CustomBar = e.statusBarHeight + e.titleBarHeight
+                    // #endif
+                }
+            })
+        }
+    }
 }
 </script>
 
@@ -156,7 +112,7 @@ audio,
 camera,
 image,
 video {
-	// box-sizing: border-box;
+    // box-sizing: border-box;
 }
 // page {
 //   width: 100%;
@@ -168,32 +124,32 @@ video {
 //   --toast-default-width: 114px;
 // }
 page {
-	height: 100%;
-	background-color: #ffffff;
+    height: 100%;
+    background-color: #ffffff;
 }
 /* 骨架屏替代方案 */
 .Skeleton {
-	background: #f3f3f3;
-	padding: 20upx 0;
-	border-radius: 8upx;
+    background: #f3f3f3;
+    padding: 20upx 0;
+    border-radius: 8upx;
 }
 
 .clamp {
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-	display: block;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    display: block;
 }
 
 .common-hover {
-	background: #f5f5f5;
+    background: #f5f5f5;
 }
 /* input 样式 */
 .input-placeholder {
-	color: #999999;
+    color: #999999;
 }
 
 .placeholder {
-	color: #999999;
+    color: #999999;
 }
 </style>

+ 79 - 0
common/addressdata.js

@@ -0,0 +1,79 @@
+/*
+ *请求获取省市区
+ *已提供给地区选择picker组件使用
+ */
+import ajaxService from '@/services/ajax.service.js'
+import PublicService from '@/services/public.service'
+
+const _PublicService = new PublicService(ajaxService)
+
+const provinceData = []
+const cityData = []
+const areaData = []
+
+_PublicService.GetAllAddressData().then(res => {
+    let list = res.data
+    list.forEach(item => {
+        let xxx = handleCitys(item)
+        provinceData.push(item)
+        cityData.push(xxx.e)
+        areaData.push(xxx.f)
+        let list = res.data
+        list.forEach(item => {
+            let xxx = handleCitys(item)
+            provinceData.push(item)
+            cityData.push(xxx.e)
+            areaData.push(xxx.f)
+        })
+    })
+    //获取市后继续处理
+    function handleCitys(data) {
+        const x = []
+        const s = []
+        if (data.cityList.length) {
+            data.cityList.forEach(item => {
+                let xxx = handleTowns(item)
+                s.push(xxx)
+                x.push(item)
+            })
+        } else {
+            s.push([{
+                name: ''
+            }])
+            x.push([{
+                name: ''
+            }])
+        }
+        return {
+            e: x,
+            f: s,
+        }
+    }
+    //获取区后继续处理
+    function handleTowns(data) {
+        const x = []
+        data.townList.forEach(item => {
+            x.push(item)
+        })
+        return x
+    }
+
+    function handleData3(data) {
+        const xxx = []
+        data.forEach(item => {
+            const ooo = []
+            item.forEach(opt => {
+                opt.forEach(z => {
+                    ooo.push(z)
+                })
+            })
+            xxx.push(ooo)
+        })
+        return xxx
+    }
+})
+module.exports = {
+    provinceData,
+    cityData,
+    areaData
+}

+ 171 - 0
common/authorize.js

@@ -0,0 +1,171 @@
+//authorize.js
+import api from './utilsTools.js'
+import requestUrl from '@/services/config.env.js'
+//判断是否登陆 通过检测sessionkey是否过期 1未过期 0已过期
+const checkSessionKey = () => {
+    return new Promise((resolve, reject) => {
+        const user = uni.getStorageSync('user') // 用户缓存信息
+        if (user) {
+            uni.checkSession({
+                success() {
+                    resolve(1) //状态未过期
+                },
+                fail() {
+                    resolve(0) //状态已过期
+                }
+            })
+        } else {
+            resolve(2) //未存贮
+        }
+    })
+}
+
+// 登录授权
+const login = (params) => {
+    return new Promise((resolve, reject) => {
+        authDo(params).then(res => {
+            if (res.statusCode && res.statusCode != 200) {
+                reject('网络错误,请检查一下网络')
+                return
+            }
+            if (res.data.code != 0) {
+                reject('登录失败')
+                return
+            }
+            let user = res.data.data.user
+            uni.setStorageSync('user', user) //储存用户信息到本地
+            resolve(user)
+        })
+    })
+}
+
+// 查询用户信息 write by self
+const authDo = function(params) {
+    return new Promise(function(resolve, reject) {
+        uni.request({
+            url: requestUrl + '/login/doLogin',
+            data: params,
+            method: 'POST',
+            header: {
+                'content-type': 'application/x-www-form-urlencoded'
+            },
+            success: function(res) {
+                resolve(res)
+            },
+            fail: function() {
+                reject('保存用户信息失败')
+            }
+        })
+    })
+}
+
+// 获取服务商信息 uni-app是聚合开发 所以先获得是什么小程序 原生的不用这个
+const getProvider = () => {
+    return new Promise((resolve, reject) => {
+        uni.getProvider({
+            service: 'oauth', //服务类型  登录授权
+            success: function(res) {
+                resolve(res.provider[0])
+            },
+            fail: function() {
+                reject('获取服务商失败')
+            }
+        })
+    })
+}
+
+// 获取code
+const getCode = provider => {
+    return new Promise((resolve, reject) => {
+        if (!provider) {
+            reject('获取缺少provider参数')
+        }
+        uni.login({
+            provider: provider,
+            success: function(loginRes) {
+                if (loginRes && loginRes.code) {
+                    resolve(loginRes.code)
+                } else {
+                    reject('获取code失败')
+                    uni.navigateTo({
+                        url: '/pages/tabBar/index/index'
+                    })
+                }
+            },
+            fail: function() {
+                reject('获取code失败')
+            }
+        })
+    })
+}
+
+// 是否开启了获取用户名授权 当用户一开始拒绝了 需再次提醒授权
+const getSetting = function() {
+    return new Promise((resolve, reject) => {
+        // uni.getSetting({
+        // 	success: function(res) {
+        // 		let authSetting = res.authSetting
+        // 		if (authSetting['scope.userInfo']) {
+        // 			resolve(1)
+        // 			return
+        // 		} //授权成功
+        // 		if (authSetting['scope.userInfo'] === false) {
+        // 			resolve(0)
+        // 			return
+        // 		} //拒绝授权
+        // 		resolve(2) //2未操作
+        // 	},
+        // 	fail: function() {
+        // 		reject('获取用户授权失败')
+        // 	}
+        // })
+    })
+}
+
+// 获取用户信息
+const getUserInfo = (provider) => {
+    return new Promise((resolve, reject) => {
+        if (!provider) {
+            reject('获取缺少provider参数')
+            return
+        }
+        uni.getUserInfo({
+            provider: provider,
+            success: (detail) => {
+                if (detail.iv != '') {
+                    resolve(detail)
+                } else {
+                    reject(0) //用户点击拒绝授权
+                }
+            },
+            fail: (error) => {
+                reject(0) //如果用户拒绝过授权 直接走fail
+            }
+        })
+    })
+}
+
+// 获取用户登录状态
+const checkLogin = () => {
+    return new Promise((resolve, reject) => {
+        uni.checkSession({
+            success() {
+                resolve(1)
+                console.log('登录成功')
+            },
+            fail(err) {
+                reject(0)
+            }
+        })
+    })
+}
+
+export default {
+    getProvider,
+    getSetting,
+    checkSessionKey,
+    getCode,
+    login,
+    getUserInfo,
+    checkLogin
+}

+ 208 - 0
common/common.js

@@ -0,0 +1,208 @@
+//公共js,主要做表单验证,以及基本方法封装
+export function isNullOrEmpty(value) {
+    //是否为空
+    return (value === null || value === '' || value === undefined) ? true : false
+}
+
+export function trim(value) {
+    //去空格
+    return value.replace(/(^\s*)|(\s*$)/g, '')
+}
+
+export function isEmail(value) {
+    //是否为邮箱
+    return RegExp(
+        /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/)
+        .test(value)
+}
+
+export function isMobile(value) {
+    //是否为手机号
+    return RegExp(/^1[1-9][0-9]{9}$/).test(value)
+}
+
+export function isFloat(value) {
+    //金额,只允许保留两位小数
+    return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value)
+}
+
+export function isNum(value) {
+    //是否全为数字
+    return RegExp(/^[0-9]+$/).test(value)
+}
+
+export function isEmailCode(value) {
+    return RegExp(/^\d{4}$/).test(value)
+}
+
+export function isMobileCode(value) {
+    return RegExp(/^\d{6}$/).test(value)
+}
+
+export function isCredit(value) { //统一社会信用代码
+    return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value)
+}
+
+export function checkPwd(value) {
+    //密码为8~20位数字和字母组合
+    return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value)
+}
+
+export function hidePhone(value) {
+    return value.replace(/^(\d{3})\d{4}(\d+)/, '$1****$2')
+}
+
+export function interceptHtmlFn(value) {
+    return value.replace(/<[^>]+>/g, '')
+}
+
+export function desensitizationName(value) {
+    if (null != value && value != undefined) {
+        if (value.length <= 3) {
+            let ruten = value.substring(1)
+            return value.replace(ruten, '**')
+        } else if (value.length > 3 && value.length <= 6) {
+            let ruten = value.substring(2)
+            return value.replace(ruten, '**')
+        }
+    } else {
+        return ''
+    }
+}
+
+export function formatNum(num) {
+    //格式化手机号码
+    if (utils.isMobile(num)) {
+        num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
+    }
+    return num
+}
+
+export function rmoney(money) {
+    //金额格式化
+    return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,')
+        .replace(
+            /\,$/, '').split('').reverse().join('')
+}
+
+export function bankRegex(num) {
+    let bankNum = ''
+    bankNum = num.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ')
+    return bankNum
+}
+
+export function checkData(value) {
+    let data
+    if (value == null || value == '') {
+        data = ''
+    } else {
+        data = value
+    }
+    return data
+}
+
+export function formatDate(formatStr, fdate) {
+    //日期格式化
+    if (fdate) {
+        if (~fdate.indexOf('.')) {
+            fdate = fdate.substring(0, fdate.indexOf('.'))
+        }
+        fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/')
+        var fTime, fStr = 'ymdhis'
+        if (!formatStr)
+            formatStr = 'y-m-d h:i:s'
+        if (fdate)
+            fTime = new Date(fdate)
+        else
+            fTime = new Date()
+        var month = fTime.getMonth() + 1
+        var day = fTime.getDate()
+        var hours = fTime.getHours()
+        var minu = fTime.getMinutes()
+        var second = fTime.getSeconds()
+        month = month < 10 ? '0' + month : month
+        day = day < 10 ? '0' + day : day
+        hours = hours < 10 ? ('0' + hours) : hours
+        minu = minu < 10 ? '0' + minu : minu
+        second = second < 10 ? '0' + second : second
+        var formatArr = [
+            fTime.getFullYear().toString(),
+            month.toString(),
+            day.toString(),
+            hours.toString(),
+            minu.toString(),
+            second.toString()
+        ]
+        for (var i = 0; i < formatArr.length; i++) {
+            formatStr = formatStr.replace(fStr.charAt(i), formatArr[i])
+        }
+        return formatStr
+    } else {
+        return ''
+    }
+}
+
+export function throttle(fn, gapTime) {
+    if (gapTime == null || gapTime == undefined) {
+        gapTime = 1500
+    }
+
+    let _lastTime = null
+
+    // 返回新的函数
+    return function() {
+        let _nowTime = +new Date()
+        if (_nowTime - _lastTime > gapTime || !_lastTime) {
+            fn.apply(this, arguments) //将this和参数传给原函数
+            _lastTime = _nowTime
+        }
+    }
+}
+
+export function debounce(fn, delay, isImmediate) {
+    var timer = null //初始化timer,作为计时清除依据
+    return function() {
+        var context = this //获取函数所在作用域this
+        var args = arguments //取得传入参数
+        clearTimeout(timer)
+        if (isImmediate && timer === null) {
+            //时间间隔外立即执行
+            fn.apply(context, args)
+            timer = 0
+            return
+        }
+        timer = setTimeout(function() {
+            fn.apply(context, args)
+            timer = null
+        }, delay)
+    }
+}
+
+
+
+const install = Vue => {
+    console.log('初始化挂载($reg)工具库 common.js')
+    Vue.prototype.$reg = {
+        isNullOrEmpty,
+        trim,
+        isMobile,
+        isEmail,
+        isFloat,
+        isNum,
+        isEmailCode,
+        isMobileCode,
+        checkPwd,
+        formatNum,
+        rmoney,
+        formatDate,
+        bankRegex,
+        checkData,
+        hidePhone,
+        interceptHtmlFn,
+        desensitizationName,
+        throttle,
+        debounce
+    }
+}
+
+export default install

+ 1 - 0
common/config.js

@@ -0,0 +1 @@
+export const umtrackWxKey = '5fe43947adb42d58268cb3aa'

+ 0 - 79
common/config/addressdata.js

@@ -1,79 +0,0 @@
-/*
- *请求获取省市区
- *已提供给地区选择picker组件使用
- */
-import ajaxService from '@/services/ajax.service.js'
-import PublicService from '@/services/public.service'
-
-const _PublicService = new PublicService(ajaxService)
-
-const provinceData = []
-const cityData = []
-const areaData = []
-
-_PublicService.GetAllAddressData().then(res =>{
-	let list = res.data
-	list.forEach(item => {
-		let xxx = handleCitys(item)
-		provinceData.push(item)
-		cityData.push(xxx.e)
-		areaData.push(xxx.f)
-		let list = res.data
-		list.forEach(item => {
-			let xxx = handleCitys(item)
-			provinceData.push(item)
-			cityData.push(xxx.e)
-			areaData.push(xxx.f)
-		})
-	})
-	//获取市后继续处理
-	function handleCitys(data) {
-		const x = []
-		const s = []
-		if (data.cityList.length) {
-			data.cityList.forEach(item => {
-				let xxx = handleTowns(item)
-				s.push(xxx)
-				x.push(item)
-			})
-		} else {
-			s.push([{
-				name: ''
-			}])
-			x.push([{
-				name: ''
-			}])
-		}
-		return {
-			e: x,
-			f: s,
-		}
-	}
-	//获取区后继续处理
-	function handleTowns(data) {
-		const x = []
-		data.townList.forEach(item => {
-			x.push(item)
-		})
-		return x
-	}
-	
-	function handleData3(data) {
-		const xxx = []
-		data.forEach(item => {
-			const ooo = []
-			item.forEach(opt => {
-				opt.forEach(z => {
-					ooo.push(z)
-				})
-			})
-			xxx.push(ooo)
-		})
-		return xxx
-	}
-})
-module.exports = {
-	provinceData,
-	cityData,
-	areaData
-}

+ 0 - 174
common/config/authorize.js

@@ -1,174 +0,0 @@
-//authorize.js
-import api from './utilsTools.js'
-
-//判断是否登陆 通过检测sessionkey是否过期 1未过期 0已过期
-const checkSessionKey = () => {
-	return new Promise((resolve, reject) => {
-		const user = uni.getStorageSync('user') // 用户缓存信息
-		if (user) {
-			uni.checkSession({
-				success() {
-					resolve(1) //状态未过期
-				},
-				fail() {
-					resolve(0) //状态已过期
-				}
-			})
-		} else {
-			resolve(2) //未存贮
-		}
-	})
-}
-
-// 登录授权
-const login = (params) => {
-	return new Promise((resolve, reject) => {
-		authDo(params).then(res => {
-			if (res.statusCode && res.statusCode != 200) {
-				reject('网络错误,请检查一下网络')
-				return
-			}
-			if (res.data.code != 0) {
-				reject('登录失败')
-				return
-			}
-			let user = res.data.data.user
-			uni.setStorageSync('user', user) //储存用户信息到本地
-			resolve(user)
-		})
-	})
-}
-
-// 查询用户信息 write by self
-const authDo = function(params) {
-	return new Promise(function(resolve, reject) {
-		uni.request({
-			url: api.requestUrl + '/login/doLogin',
-			data: params,
-			method: 'POST',
-			header: {
-				'content-type': 'application/x-www-form-urlencoded'
-			},
-			success: function(res) {
-				resolve(res)
-			},
-			fail: function() {
-				reject('保存用户信息失败')
-			}
-		})
-	})
-}
-
-// 获取服务商信息 uni-app是聚合开发 所以先获得是什么小程序 原生的不用这个
-const getProvider = () => {
-	return new Promise((resolve, reject) => {
-		uni.getProvider({
-			service: 'oauth', //服务类型  登录授权
-			success: function(res) {
-				resolve(res.provider[0])
-			},
-			fail: function() {
-				reject('获取服务商失败')
-			}
-		})
-	})
-}
-
-
-// 获取code
-const getCode = provider => {
-	return new Promise((resolve, reject) => {
-		if (!provider) {
-			reject('获取缺少provider参数')
-		}
-		uni.login({
-			provider: provider,
-			success: function(loginRes) {
-				if (loginRes && loginRes.code) {
-					resolve(loginRes.code)
-				} else {
-					reject('获取code失败')
-					uni.navigateTo({
-						url: '/pages/tabBar/index/index'
-					})
-				}
-			},
-			fail: function() {
-				reject('获取code失败')
-			}
-		})
-	})
-}
-
-// 是否开启了获取用户名授权 当用户一开始拒绝了 需再次提醒授权
-const getSetting = function() {
-	return new Promise((resolve, reject) => {
-		// uni.getSetting({
-		// 	success: function(res) {
-		// 		let authSetting = res.authSetting
-		// 		if (authSetting['scope.userInfo']) {
-		// 			resolve(1)
-		// 			return
-		// 		} //授权成功
-		// 		if (authSetting['scope.userInfo'] === false) {
-		// 			resolve(0)
-		// 			return
-		// 		} //拒绝授权
-		// 		resolve(2) //2未操作
-		// 	},
-		// 	fail: function() {
-		// 		reject('获取用户授权失败')
-		// 	}
-		// })
-	})
-}
-
-// 获取用户信息
-const getUserInfo = (provider) => {
-	return new Promise((resolve, reject) => {
-		if (!provider) {
-			reject('获取缺少provider参数')
-			return
-		}
-		uni.getUserInfo({
-			provider: provider,
-			success: (detail) => {
-				if (detail.iv != '') {
-					resolve(detail)
-				} else {
-					reject(0) //用户点击拒绝授权
-				}
-			},
-			fail: (error) => {
-				reject(0) //如果用户拒绝过授权 直接走fail
-			}
-		})
-	})
-}
-
-// 获取用户登录状态
-const checkLogin = () => {
-	return new Promise((resolve, reject) => {
-		uni.checkSession({
-			success() {
-				resolve(1)
-				console.log('登录成功')
-			},
-			fail(err) {
-				reject(0)
-			}
-		})
-	})
-}
-
-
-
-export default {
-	getProvider,
-	getSetting,
-	checkSessionKey,
-	getCode,
-	login,
-	getUserInfo,
-	checkLogin
-}

+ 0 - 183
common/config/common.js

@@ -1,183 +0,0 @@
-//公共js,主要做表单验证,以及基本方法封装
-const utils = {
-	isNullOrEmpty: function(value) {
-		//是否为空
-		return (value === null || value === '' || value === undefined) ? true : false;
-	},
-	trim: function(value) {
-		//去空格
-		return value.replace(/(^\s*)|(\s*$)/g, "");
-	},
-	isEmail: function(value){
-		//是否为邮箱
-		 return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(value);
-	},
-	isMobile: function(value) {
-		//是否为手机号
-		return RegExp(/^1[1-9][0-9]{9}$/).test(value);
-	},
-	isFloat: function(value) {
-		//金额,只允许保留两位小数
-		return RegExp(/^([0-9]*[.]?[0-9])[0-9]{0,1}$/).test(value);
-	},
-	isNum: function(value) {
-		//是否全为数字
-		return RegExp(/^[0-9]+$/).test(value);
-	},
-	isEmailCode:function(value) {
-	    return RegExp(/^\d{4}$/).test(value);
-	},
-	isMobileCode:function(value) {
-	    return RegExp(/^\d{6}$/).test(value);
-	},
-	isCredit:function(value) {//统一社会信用代码
-	    return RegExp(/^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/).test(value);
-	},
-	checkPwd: function(value) {
-		//密码为8~20位数字和字母组合
-		return RegExp(/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/).test(value);
-	},
-	hidePhone:function(value) {
-		return value.replace(/^(\d{3})\d{4}(\d+)/,"$1****$2")
-	},
-	interceptHtmlFn: function(value){
-		return value.replace(/<[^>]+>/g,"")
-	},
-	desensitizationName:function(value){
-		if(null != value && value != undefined){
-			if(value.length <= 3){
-				let ruten = value.substring(1);
-				return value.replace(ruten,'**');
-			} else if(value.length > 3 && value.length <= 6){
-				let ruten = value.substring(2);
-				return value.replace(ruten,'**');
-			} 
-		} else {
-			return "";
-		}
-	},
-	formatNum: function(num) {
-		//格式化手机号码
-		if (utils.isMobile(num)) {
-			num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
-		}
-		return num;
-	},
-	rmoney: function(money) {
-		//金额格式化
-		return parseFloat(money).toFixed(2).toString().split('').reverse().join('').replace(/(\d{3})/g, '$1,').replace(
-			/\,$/, '').split('').reverse().join('');
-	},
-	bankRegex:function(num){
-		let bankNum = ''
-		bankNum = num.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ');
-		return bankNum
-	},
-	checkData:function(value){
-		let data;
-		if(value == null || value ==""){
-			data = ''
-		}else{
-			data = value
-		}
-		return data
-	},
-	formatDate: function(formatStr, fdate) {
-		//日期格式化
-		if (fdate) {
-			if (~fdate.indexOf('.')) {
-				fdate = fdate.substring(0, fdate.indexOf('.'));
-			}
-			fdate = fdate.toString().replace('T', ' ').replace(/\-/g, '/');
-			var fTime, fStr = 'ymdhis';
-			if (!formatStr)
-				formatStr = "y-m-d h:i:s";
-			if (fdate)
-				fTime = new Date(fdate);
-			else
-				fTime = new Date();
-			var month = fTime.getMonth() + 1;
-			var day = fTime.getDate();
-			var hours = fTime.getHours();
-			var minu = fTime.getMinutes();
-			var second = fTime.getSeconds();
-			month = month < 10 ? '0' + month : month;
-			day = day < 10 ? '0' + day : day;
-			hours = hours < 10 ? ('0' + hours) : hours;
-			minu = minu < 10 ? '0' + minu : minu;
-			second = second < 10 ? '0' + second : second;
-			var formatArr = [
-				fTime.getFullYear().toString(),
-				month.toString(),
-				day.toString(),
-				hours.toString(),
-				minu.toString(),
-				second.toString()
-			]
-			for (var i = 0; i < formatArr.length; i++) {
-				formatStr = formatStr.replace(fStr.charAt(i), formatArr[i]);
-			}
-			return formatStr;
-		} else {
-			return "";
-		}
-	},
-	throttle: function(fn, gapTime) {
-	  if (gapTime == null || gapTime == undefined) {
-	    gapTime = 1500
-	  }
-	
-	  let _lastTime = null
-	
-	  // 返回新的函数
-	  return function () {
-	    let _nowTime = +new Date()
-	    if (_nowTime - _lastTime > gapTime || !_lastTime) {
-	      fn.apply(this, arguments) //将this和参数传给原函数
-	      _lastTime = _nowTime
-	    }
-	  }
-	},
-	
-	debounce: function(fn, delay, isImmediate) {
-	  var timer = null;  //初始化timer,作为计时清除依据
-	  return function() {
-	    var context = this;  //获取函数所在作用域this
-	    var args = arguments;  //取得传入参数
-	    clearTimeout(timer);
-	    if(isImmediate && timer === null) {
-	        //时间间隔外立即执行
-	        fn.apply(context,args);
-	      timer = 0;
-	      return;
-	    }
-	    timer = setTimeout(function() {
-	      fn.apply(context,args);
-	      timer = null;
-	    }, delay);
-	  }
-	}
-
-}
-
-module.exports = {
-	isNullOrEmpty: utils.isNullOrEmpty,
-	trim: utils.trim,
-	isMobile: utils.isMobile,
-	isEmail: utils.isEmail,
-	isFloat: utils.isFloat,
-	isNum: utils.isNum,
-	isEmailCode:utils.isEmailCode,
-	isMobileCode:utils.isMobileCode,
-	checkPwd: utils.checkPwd,
-	formatNum:utils.formatNum,
-	rmoney: utils.rmoney,
-	formatDate: utils.formatDate,
-	bankRegex: utils.bankRegex,
-	checkData:utils.checkData,
-	hidePhone:utils.hidePhone,
-	interceptHtmlFn:utils.interceptHtmlFn,
-	desensitizationName:utils.desensitizationName,
-	throttle: utils.throttle,
-	debounce: utils.debounce
-}

+ 0 - 139
common/config/utilsTools.js

@@ -1,139 +0,0 @@
-/**
- * @Time 2019-12-12
- * @Author Zhengjingyi
- * @Action 全局公共方法
- */
-import requestUrl from '@/services/config.env.js'
-const _Tools = {
-	getComStorage:function(key){// 获取本地Storage
-		return new Promise(function(resolve,reject) {
-			uni.getStorage({
-				key: key,
-				success: function (res){
-					resolve(res.data)
-				},
-				fail: function(res){
-					reject(false)
-				}
-			})
-		})
-	},
-	setStorage:function(key,data){// 存储本地Storage
-		return new Promise(function(resolve,reject) {
-			uni.setStorage({
-				key: key,
-				data:data,
-				success: function (res){
-				}
-			})
-		})
-	},
-	getStorage:function(){// 获取本地userInfo
-		return new Promise(function(resolve,reject) {
-			uni.getStorage({
-				key: 'userInfo',
-				success: function (res){
-					resolve(res.data)
-				},
-				fail: function(res){
-					reject(false)
-				}
-			})
-		})
-	},
-	getStorageAddressKey:function(){// 获取本地地址信息
-		return new Promise(function(resolve,reject) {
-			uni.getStorage({
-				key: 'address_key',
-				success: function (res){
-					resolve(res.data)
-				}
-			})
-		})
-	},
-	navigateTo:function(url){
-		//路由跳转:页面之间路由跳转
-		uni.navigateTo({
-			url:url
-		})
-	},
-	redirectTo:function(url){
-	//路由跳转:关闭当前页跳转到新页面	
-		uni.redirectTo({
-			url:url
-		})
-	},
-	switchTabTo:function(url){
-	//路由跳转:底部 tab页
-		uni.switchTab({
-			url:url
-		})
-	},
-	getWindowHeight:function(){
-		// 获取窗口高度
-		const {windowHeight, pixelRatio} = wx.getSystemInfoSync()
-		return windowHeight
-	},
-	adaptRichTextImg:function(res){
-		/**
-		 *@富文本实现图片自适应
-		 *@style再添加自适应样式
-		 */ 
-		const html = res.replace(/<img[^>]*>/gi,function(match,capture){			
-			let match1 = match.replace(/<img*/gi, '<img style="width:100% !important;height:auto !important;float:left !important;"'),
-				results = match1.replace(/style=/gi, 'style="width:100%;height:auto;float:left;"')
-			return results
-		})
-		return html	
-	},
-	formatDate:function(){
-		//获取当前时间
-		let date = new Date();
-		let y = date.getFullYear();
-		let MM = date.getMonth() + 1;
-		MM = MM < 10 ? ('0' + MM) : MM;
-		let d = date.getDate();
-		d = d < 10 ? ('0' + d) : d;
-		let h = date.getHours();
-		h = h < 10 ? ('0' + h) : h;
-		let m = date.getMinutes();
-		m = m < 10 ? ('0' + m) : m;
-		let s = date.getSeconds();
-		s = s < 10 ? ('0' + s) : s;
-	    return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
-	},
-	isNumber:function(value){//验证是否为数字
-	    var patrn = /^(-)?\d+(\.\d+)?$/;
-	    if (patrn.exec(value) == null || value == "") {
-	         return false
-	    } else {
-	         return true  
-		}	 
-	},
-	FormatMoney:function(num){
-		// 金额千分位
-		return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
-			return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-				return $1 + ",";
-			});
-		});
-	},
-}
-
-/**
- *@导出
- */ 
-module.exports = {
-	FormatMoney: _Tools.FormatMoney,
-	formatDate: _Tools.formatDate,
-	navigateTo: _Tools.navigateTo,
-	redirectTo: _Tools.redirectTo,
-	switchTabTo: _Tools.switchTabTo,
-	isNumber:_Tools.isNumber,
-	setStorage: _Tools.setStorage,
-	getStorage: _Tools.getStorage,
-	getComStorage: _Tools.getComStorage,
-	getWindowHeight: _Tools.getWindowHeight,
-	adaptRichTextImg: _Tools.adaptRichTextImg,
-	getStorageAddressKey: _Tools.getStorageAddressKey,
-}

+ 98 - 0
common/couponUtil.js

@@ -0,0 +1,98 @@
+import { isIntersect } from '@/common/util.js'
+
+// 获取选中商品
+export function fetchSelectedProducts(goodsList) {
+    const productList = []
+    goodsList.forEach(shop => productList.push(...shop.productList.filter(prod => prod.productsChecked)))
+    return productList
+}
+
+// 根据选中商品筛选可用优惠券并排序
+export function findCouponBySelected(productIds, couponList) {
+    const list = couponList.filter(coupon => coupon.productType === 1 || isIntersect(productIds, coupon.productIds
+        .split(',')))
+    return couponSort(list)
+}
+
+/**
+ * 优惠券是否可用
+ * 1 无门槛
+ * 2 有门槛
+ *      1 全部商品可用
+ *          全部商品价格总计 >= 当前优惠券的触发金额
+ *      2 指定商品可用
+ *          当前优惠券可用的商品的价格总计 >= 当前优惠券的触发金额
+ * */
+
+// 判断可用优惠券是否满足使用条件 返回抵扣金额最高的优惠券索引 -1:无可用优惠券
+export function canUseCoupon(current, productIds, canUseCouponList, selectedPoducts) {
+    if (productIds.length <= 0 || canUseCouponList.length <= 0) return -1
+    const len = canUseCouponList.length
+    if (current >= len) return len
+    const currentCoupon = canUseCouponList[current]
+    if (
+        currentCoupon.noThresholdFlag === 1 ||
+        (currentCoupon.productType === 1 && allProdoceUseCheck(selectedPoducts, currentCoupon)) ||
+        (currentCoupon.productType === 2 && someProductUseCheck(selectedPoducts, currentCoupon))
+    ) {
+        return current
+    } else {
+        return canUseCoupon(++current, productIds, canUseCouponList, selectedPoducts)
+    }
+}
+
+// 判断全部商品可用 (全部商品价格总计 是否大于 当前优惠券的触发金额)
+export function allProdoceUseCheck(productList, coupon) {
+    const countPrice = productList.reduce((countPrice, prod) => countPrice + prod.price * prod.productCount, 0)
+    return countPrice >= coupon.touchPrice
+}
+
+// 判断指定商品可用 (当前优惠券可用的商品的价格总计 是否大于 当前优惠券的触发金额)
+export function someProductUseCheck(productList, coupon) {
+    const countPrice = productList.reduce((countPrice, prod) => {
+        // 当前优惠券可用的商品总价
+        const isIncludes = coupon.productIds.indexOf(prod.productId.toString()) > -1
+        return isIncludes ? countPrice + prod.price * prod.productCount : countPrice
+    }, 0)
+    return countPrice >= coupon.touchPrice
+}
+
+// 计算当前优惠券可使用的商品的总价
+export function getCountPrice(productList, coupon) {
+    let countPrice = 0
+    // 针对全部商品
+    if (coupon.productType === 1) {
+        countPrice = productList.reduce((countPrice, prod) => countPrice + prod.price * prod.productCount, 0)
+    }
+    // 只针对优惠券可用商品
+    if (coupon.productType === 2) {
+        countPrice = productList.reduce((countPrice, prod) => {
+            // 当前优惠券可用的商品总价
+            const isIncludes = coupon.productIds.indexOf(prod.productId.toString()) > -1
+            return isIncludes ? countPrice + prod.price * prod.productCount : countPrice
+        }, 0)
+    }
+    return countPrice
+}
+
+// 将优惠券按抵扣金额从大到小排序
+export function couponSort(couponList) {
+    return couponList.sort((a, b) => b.couponAmount - a.couponAmount)
+}
+
+// 对优惠券去重 过滤掉相同id的优惠券
+export function couponFilterRepeat(couponList) {
+    const list = []
+    couponList.forEach(coupon => {
+        if (list.findIndex(v => v.couponId === coupon.couponId) === -1) list.push(coupon)
+    })
+    return list
+}
+
+// 为优惠券设置唯一ID
+export function setCouponUniqueId(couponList = []) {
+    return couponList.map((coupon, index) => {
+        coupon.uniqueId = index
+        return coupon
+    }) 
+}

+ 26 - 0
common/crypto.js

@@ -0,0 +1,26 @@
+import CryptoJS from './libs/crypto-js.min.js'
+
+const aseKey = 'HEHEMINI' //秘钥必须为:8/16/32位
+//加密
+const encrypt = data => {
+    return CryptoJS.AES.encrypt(JSON.stringify(data), CryptoJS.enc.Utf8.parse(aseKey), {
+        mode: CryptoJS.mode.ECB,
+        padding: CryptoJS.pad.Pkcs7
+    }).toString()
+}
+//解密
+const decrypt = encrypt => {
+    return CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), {
+        mode: CryptoJS.mode.ECB,
+        padding: CryptoJS.pad.Pkcs7
+    }).toString(CryptoJS.enc.Utf8)
+}
+
+const install = Vue => {
+    Vue.prototype.$crypto = {
+        encrypt,
+        decrypt
+    }
+}
+
+export default install

+ 325 - 319
common/css/common.scss

@@ -1,208 +1,209 @@
 .clearfix:after {
-  content: "";
-  display: block;
-  height: 0;
-  clear: both;
-  visibility: hidden;
+    content: '';
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden;
 }
-.container{
-	width: 100%;
-	height: 100%;
+.container {
+    width: 100%;
+    height: 100%;
 }
 /*android一像素兼容*/
-::-webkit-scrollbar{
-	width: 0;
-	height: 0;
-	color: transparent;
-	display:none;
+::-webkit-scrollbar {
+    width: 0;
+    height: 0;
+    color: transparent;
+    display: none;
 }
 button {
-	display: block;
-	margin-left: auto;
-	margin-right: auto;
-	padding-left: 0;
-	padding-right: 0;
-	box-sizing: border-box;
-	font-size: $font-size-28;
-	text-align: center;
-	text-decoration: none;
-	line-height: 36rpx;
-	border-radius: 0;
-	-webkit-tap-highlight-color: transparent;
-	overflow: hidden;
-	color: $text-color;
-	background-color: #FFFFFF;
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+    padding-left: 0;
+    padding-right: 0;
+    box-sizing: border-box;
+    font-size: $font-size-28;
+    text-align: center;
+    text-decoration: none;
+    line-height: 36rpx;
+    border-radius: 0;
+    -webkit-tap-highlight-color: transparent;
+    overflow: hidden;
+    color: $text-color;
+    background-color: #ffffff;
 }
 
-button::after{
+button::after {
     border: none;
-    border-radius:  0;
+    border-radius: 0;
 }
-/*输入框样式*/ 
-.text-input{
-	display: flex;
-	align-items: center;
-	position: relative;
-	width: 654rpx;
-	height: 40rpx;
-	padding: 24rpx;
-	margin: 0 auto;
-	background: #F7F7F7;
-	.input{
-		width: 100%;
-		height: 100%;
-		background: #F7F7F7;
-		font-size: $font-size-28;
-		line-height: 40rpx;
-		color: #333333;
-	}
-	&.b-b{
-		margin: 32rpx 0;
-	}
+/*输入框样式*/
+.text-input {
+    display: flex;
+    align-items: center;
+    position: relative;
+    width: 654rpx;
+    height: 40rpx;
+    padding: 24rpx;
+    margin: 0 auto;
+    background: #f7f7f7;
+    .input {
+        width: 100%;
+        height: 100%;
+        background: #f7f7f7;
+        font-size: $font-size-28;
+        line-height: 40rpx;
+        color: #333333;
+    }
+    &.b-b {
+        margin: 32rpx 0;
+    }
 }
-/*空列表显示样式*/ 
+/*空列表显示样式*/
 .empty-container {
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	flex-direction: column;
-	position: fixed;
-	left: 0;
-	top: 0;
-	right: 0;
-	bottom: 0;
-	background: $bg-color;
-	// padding-bottom: 120rpx;
-	border-top: 1px solid #EBEBEB;
-	.club-empty-image{
-		width: 200rpx;
-		height: 200rpx;
-		margin-bottom: 20rpx;
-	}
-	&-image {
-		width: 290rpx;
-		height: 230rpx;
-		margin-bottom: 10rpx;
-		margin-top: -120rpx;
-	}
-	.error-text{
-		font-size: $font-size-28;
-		color: #999999;
-		line-height: 88rpx;
-	}
-	.txt{
-		font-size: $font-size-28;
-		color: #999999;
-		line-height: 44rpx;
-	}
-	.login-btn{
-		width: 600rpx;
-		height: 88rpx;
-		font-size: $font-size-28;
-		line-height: 88rpx;
-		color: #FFFFFF;
-		margin: 0 auto;
-		text-align: center;
-		background: $btn-confirm;
-		border-radius: 44rpx;
-		margin-top: 40rpx;
-		position: absolute;
-		bottom: 10%;
-	}
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-direction: column;
+    position: fixed;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    background: $bg-color;
+    // padding-bottom: 120rpx;
+    border-top: 1px solid #ebebeb;
+    .club-empty-image {
+        width: 200rpx;
+        height: 200rpx;
+        margin-bottom: 20rpx;
+    }
+    &-image {
+        width: 290rpx;
+        height: 230rpx;
+        margin-bottom: 10rpx;
+        margin-top: -120rpx;
+    }
+    .error-text {
+        font-size: $font-size-28;
+        color: #999999;
+        line-height: 88rpx;
+    }
+    .txt {
+        font-size: $font-size-28;
+        color: #999999;
+        line-height: 44rpx;
+    }
+    .login-btn {
+        width: 600rpx;
+        height: 88rpx;
+        font-size: $font-size-28;
+        line-height: 88rpx;
+        color: #ffffff;
+        margin: 0 auto;
+        text-align: center;
+        background: $btn-confirm;
+        border-radius: 44rpx;
+        margin-top: 40rpx;
+        position: absolute;
+        bottom: 10%;
+    }
 }
 /*弹窗*/
- .model-warp.none{
-	 display: none;
- }
- .model-warp.show{
-	 display: block;
- }
- .model-warp{
-	width: 100%;
-	height: 100%;
-	background: rgba(0,0,0,.5);
-	position: fixed;
-	top: 0;
-	left: 0;
-	z-index: 8888;
-	transition: all 0.4s;
-	&.none{
-		display: none;			
-	}
-	&.show{
-		display: block;
-	}
-	.model-alert{
-		width: 518rpx;
-		height: 280rpx;
-		position: absolute;
-		background: $bg-color;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		top: 0;
-		margin: auto;
-		border-radius: 20rpx;
-		.alert-content{
-			width: 466rpx;
-			height: 100rpx;
-			padding: 40rpx 26rpx;
-			.t-h1,.t-p{
-				font-size: $font-size-28;
-				line-height: 40rpx;
-				color: #333333;
-				text-align:justify;
-				padding: 10rpx;
-			}
-			.t-h1{
-				border-bottom: 1px solid $border-color;
-			}
-		}
-		.model-content{
-			width: 466rpx;
-			height: 152rpx;
-			padding: 40rpx 26rpx;	
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			.sm{
-				display: flex;
-				flex: 1;
-				line-height: 152rpx;
-				flex-direction: column;
-				align-items: center;
-				text-align: center;
-				font-size: $font-size-28;
-				color: #333333;
-			}
-		}
-		.alert-btn{
-			width: 80%;
-			height: 70rpx;
-			display: flex;
-			margin: 0 auto;
-			.btn{
-				flex: 1;
-				line-height: 70rpx;
-				font-size: $font-size-28;
-				text-align: center;
-				color: #FFFFFF;
-				border-radius: 10rpx;
-				padding: 0;
-				margin: 0 15rpx;
-				&.btn-cancel{
-					background: $btn-cancel;
-				}
-				&.btn-confirm{
-					background: $btn-confirm;
-				}
-			}
-		}
-	}
+.model-warp.none {
+    display: none;
+}
+.model-warp.show {
+    display: block;
+}
+.model-warp {
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    z-index: 8888;
+    transition: all 0.4s;
+    &.none {
+        display: none;
+    }
+    &.show {
+        display: block;
+    }
+    .model-alert {
+        width: 518rpx;
+        height: 280rpx;
+        position: absolute;
+        background: $bg-color;
+        left: 0;
+        right: 0;
+        bottom: 0;
+        top: 0;
+        margin: auto;
+        border-radius: 20rpx;
+        .alert-content {
+            width: 466rpx;
+            height: 100rpx;
+            padding: 40rpx 26rpx;
+            .t-h1,
+            .t-p {
+                font-size: $font-size-28;
+                line-height: 40rpx;
+                color: #333333;
+                text-align: justify;
+                padding: 10rpx;
+            }
+            .t-h1 {
+                border-bottom: 1px solid $border-color;
+            }
+        }
+        .model-content {
+            width: 466rpx;
+            height: 152rpx;
+            padding: 40rpx 26rpx;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            .sm {
+                display: flex;
+                flex: 1;
+                line-height: 152rpx;
+                flex-direction: column;
+                align-items: center;
+                text-align: center;
+                font-size: $font-size-28;
+                color: #333333;
+            }
+        }
+        .alert-btn {
+            width: 80%;
+            height: 70rpx;
+            display: flex;
+            margin: 0 auto;
+            .btn {
+                flex: 1;
+                line-height: 70rpx;
+                font-size: $font-size-28;
+                text-align: center;
+                color: #ffffff;
+                border-radius: 10rpx;
+                padding: 0;
+                margin: 0 15rpx;
+                &.btn-cancel {
+                    background: $btn-cancel;
+                }
+                &.btn-confirm {
+                    background: $btn-confirm;
+                }
+            }
+        }
+    }
 }
 /*
  *上滑加载更多
- */ 
+ */
 .load-more {
     font-size: $font-size-24;
     color: #666;
@@ -211,157 +212,162 @@ button::after{
 }
 /*底部loading*/
 .loading-wrapper {
-	width: 100%;
-	height: 60rpx;
-	padding: 25rpx 0;
-	color: #333;
-	font-size: 24rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
+    width: 100%;
+    height: 60rpx;
+    padding: 25rpx 0;
+    color: #333;
+    font-size: 24rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
 }
 .loading-wrapper-now text {
-	margin-left: 6rpx;
-	font-weight: bold;
+    margin-left: 6rpx;
+    font-weight: bold;
 }
 .loading-wrapper-btm {
-	color: #eee;
-	.btm-text {
-		color: #333;
-		padding: 0 10rpx;
-	}
+    color: #eee;
+    .btm-text {
+        color: #333;
+        padding: 0 10rpx;
+    }
 }
 /*富文本样式调整*/
-.product-rich-text{
-	rich-text.h4,rich-text.p,rich-text.h2{
-		padding: 0 24rpx;
-	}
+.product-rich-text {
+    rich-text.h4,
+    rich-text.p,
+    rich-text.h2 {
+        padding: 0 24rpx;
+    }
 }
 .rich-text-temp {
-	rich-text.div, rich-text.h4, rich-text.p {
-		line-height: 58rpx;
-	}
-	rich-text.h4, rich-text.p {
-		font-size: 30rpx;
-	}
-	rich-text.div {
-		margin-bottom: 30rpx;
-		font-size: 28rpx;
-	}
-	rich-text.img {
-		width: 100%;
-		height: auto;
-	}
+    rich-text.div,
+    rich-text.h4,
+    rich-text.p {
+        line-height: 58rpx;
+    }
+    rich-text.h4,
+    rich-text.p {
+        font-size: 30rpx;
+    }
+    rich-text.div {
+        margin-bottom: 30rpx;
+        font-size: 28rpx;
+    }
+    rich-text.img {
+        width: 100%;
+        height: auto;
+    }
 }
 .form-item {
-	display: flex;
-	color: $text-color;
-	margin-top: 74rpx;
-	font-size: 26rpx;
-	.asterisk {
-		color: #FF2A2A;
-		margin-right: 10rpx;
-	}
+    display: flex;
+    color: $text-color;
+    margin-top: 74rpx;
+    font-size: 26rpx;
+    .asterisk {
+        color: #ff457b;
+        margin-right: 10rpx;
+    }
 }
 
 // 表单提交button
 .submit-btn {
-	position: fixed;
-	left: 24rpx;
-	right: 24rpx;
-	bottom: 34rpx;
-	z-index: 95;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	width: 702rpx;
-	height: 88rpx;
-	font-size: $font-size-28;
-	line-height: 88rpx;
-	color: #FFFFFF;
-	text-align: center;
-	background: $btn-confirm;
-	border-radius: 44rpx;
+    position: fixed;
+    left: 24rpx;
+    right: 24rpx;
+    bottom: 34rpx;
+    z-index: 95;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 702rpx;
+    height: 88rpx;
+    font-size: $font-size-28;
+    line-height: 88rpx;
+    color: #ffffff;
+    text-align: center;
+    background: $btn-confirm;
+    border-radius: 44rpx;
 }
 // 小红点
 .uni-badge--small {
-	-webkit-transform: scale(.8);
-	-ms-transform: scale(.8);
-	transform: scale(.8);
-	-webkit-transform-origin: center center;
-	-ms-transform-origin: center center;
-	transform-origin: center center;
+    -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;
+    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: #fc464c;
+    color: #fff;
+    background-color: #fc464c;
 }
 /* 加入购物模态层*/
-	@keyframes showPopup {
-		0% {
-			opacity: 0;
-		}
-		100% {
-			opacity: 1;
-		}
-	}
-	@keyframes hidePopup {
-		0% {
-			opacity: 1;
-		}
-		100% {
-			opacity: 0;
-		}
-	}
-	@keyframes showLayer {
-		0% {
-			transform: translateY(0);
-		}
-		100% {
-			transform: translateY(-100%);
-		}
-	}
-	@keyframes hideLayer {
-		0% {
-			transform: translateY(-100%);
-		}
-		100% {
-			transform: translateY(0);
-		}
-	}
-	@keyframes showAmnation {
-		0% {
-			top: -12rpx;
-			opacity: 0;
-		}
-		50% {
-			top: -60rpx;
-			opacity: 1;
-		}
-		100% {
-			top: -100rpx;
-			opacity: 0;
-		}
-	}
-	@keyframes hideAmnation {
-		0% {
-			top: -100rpx;
-			opacity: 0;
-		}
-		100% {
-			top: -12rpx;
-			opacity: 0;
-		}
-	}
+@keyframes showPopup {
+    0% {
+        opacity: 0;
+    }
+    100% {
+        opacity: 1;
+    }
+}
+@keyframes hidePopup {
+    0% {
+        opacity: 1;
+    }
+    100% {
+        opacity: 0;
+    }
+}
+@keyframes showLayer {
+    0% {
+        transform: translateY(0);
+    }
+    100% {
+        transform: translateY(-100%);
+    }
+}
+@keyframes hideLayer {
+    0% {
+        transform: translateY(-100%);
+    }
+    100% {
+        transform: translateY(0);
+    }
+}
+@keyframes showAmnation {
+    0% {
+        top: -12rpx;
+        opacity: 0;
+    }
+    50% {
+        top: -60rpx;
+        opacity: 1;
+    }
+    100% {
+        top: -100rpx;
+        opacity: 0;
+    }
+}
+@keyframes hideAmnation {
+    0% {
+        top: -100rpx;
+        opacity: 0;
+    }
+    100% {
+        top: -12rpx;
+        opacity: 0;
+    }
+}

ファイルの差分が大きいため隠しています
+ 0 - 3
common/css/iconfont.scss


+ 218 - 196
common/css/style/icon.css

@@ -4,727 +4,749 @@
     font-weight: normal;
     font-style: normal;
 }
+
 .tui-icon {
-  font-family: "iconfont" !important;
-  font-size: 30px;
-  font-style: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  display: inline-block;
-  color: #999;
-  vertical-align: middle;
-  line-height: 1;
-  padding-top: -1px;
-  margin-bottom: 1px;
+    font-family: "iconfont" !important;
+    font-size: 30px;
+    font-style: normal;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    display: inline-block;
+    color: #999;
+    vertical-align: middle;
+    line-height: 1;
+    padding-top: -1px;
+    margin-bottom: 1px;
 }
 
 .tui-icon-friendadd:before {
-  content: "\e6ca";
+    content: "\e6ca";
 }
 
 .tui-icon-friendadd-fill:before {
-  content: "\e6c9";
+    content: "\e6c9";
 }
 
 .tui-icon-service:before {
-  content: "\e664";
+    content: "\e664";
 }
 
 .tui-icon-service-fill:before {
-  content: "\e665";
+    content: "\e665";
 }
 
 .tui-icon-explore:before {
-  content: "\e666";
+    content: "\e666";
 }
 
 .tui-icon-explore-fill:before {
-  content: "\e667";
+    content: "\e667";
 }
 
 .tui-icon-wealth:before {
-  content: "\e668";
+    content: "\e668";
 }
 
 .tui-icon-wealth-fill:before {
-  content: "\e669";
+    content: "\e669";
 }
 
 .tui-icon-exchange:before {
-  content: "\e638";
+    content: "\e638";
 }
 
 .tui-icon-refresh:before {
-  content: "\e640";
+    content: "\e640";
 }
 
 .tui-icon-search:before {
-  content: "\e622";
+    content: "\e622";
 }
+
 .tui-icon-search-2:before {
-  content: "\e634";
+    content: "\e634";
 }
 
 .tui-icon-todown:before {
-  content: "\e64f";
+    content: "\e64f";
 }
 
 .tui-icon-toleft:before {
-  content: "\e650";
+    content: "\e650";
 }
 
 .tui-icon-toright:before {
-  content: "\e651";
+    content: "\e651";
 }
 
 .tui-icon-video:before {
-  content: "\e657";
+    content: "\e657";
 }
 
 .tui-icon-people:before {
-  content: "\e736";
+    content: "\e736";
 }
 
 .tui-icon-people-fill:before {
-  content: "\e735";
+    content: "\e735";
 }
 
 .tui-icon-community:before {
-  content: "\e741";
+    content: "\e741";
 }
 
 .tui-icon-community-fill:before {
-  content: "\e740";
+    content: "\e740";
 }
 
 .tui-icon-ios:before {
-  content: "\e66a";
+    content: "\e66a";
 }
 
 .tui-icon-android:before {
-  content: "\e66c";
+    content: "\e66c";
 }
 
 .tui-icon-square:before {
-  content: "\e720";
+    content: "\e720";
 }
 
 .tui-icon-square-fill:before {
-  content: "\e721";
+    content: "\e721";
 }
 
 .tui-icon-square-selected:before {
-  content: "\e722";
+    content: "\e722";
 }
 
 .tui-icon-close:before {
-  content: "\e725";
+    content: "\e725";
 }
 
 .tui-icon-close-fill:before {
-  content: "\e724";
+    content: "\e724";
 }
 
 .tui-icon-shut:before {
-  content: "\e723";
+    content: "\e723";
 }
 
 .tui-icon-plus:before {
-  content: "\e727";
+    content: "\e727";
 }
 
 .tui-icon-add:before {
-  content: "\e726";
+    content: "\e726";
 }
 
 .tui-icon-add-fill:before {
-  content: "\e728";
+    content: "\e728";
 }
 
 .tui-icon-reduce:before {
-  content: "\e729";
+    content: "\e729";
 }
 
 .tui-icon-about:before {
-  content: "\e72b";
+    content: "\e72b";
 }
 
 .tui-icon-about-fill:before {
-  content: "\e72a";
+    content: "\e72a";
 }
 
 .tui-icon-explain:before {
-  content: "\e72d";
+    content: "\e72d";
 }
 
 .tui-icon-explain-fill:before {
-  content: "\e72c";
+    content: "\e72c";
 }
 
 .tui-icon-check:before {
-  content: "\e72e";
+    content: "\e72e";
 }
 
 .tui-icon-circle:before {
-  content: "\e72f";
+    content: "\e72f";
 }
 
 .tui-icon-circle-fill:before {
-  content: "\e732";
+    content: "\e732";
 }
 
 .tui-icon-circle-selected:before {
-  content: "\e733";
+    content: "\e733";
 }
 
 .tui-icon-star:before {
-  content: "\e737";
+    content: "\e737";
 }
 
 .tui-icon-star-fill:before {
-  content: "\e734";
+    content: "\e734";
 }
 
 .tui-icon-revoke:before {
-  content: "\e738";
+    content: "\e738";
 }
 
 .tui-icon-shop:before {
-  content: "\e73a";
+    content: "\e73a";
 }
 
 .tui-icon-shop-fill:before {
-  content: "\e739";
+    content: "\e739";
 }
 
 .tui-icon-order:before {
-  content: "\e73b";
+    content: "\e73b";
 }
 
 .tui-icon-feedback:before {
-  content: "\e73c";
+    content: "\e73c";
 }
 
 .tui-icon-share:before {
-  content: "\e75c";
+    content: "\e75c";
 }
 
 .tui-icon-share-fill:before {
-  content: "\e75b";
+    content: "\e75b";
 }
 
 .tui-icon-more:before {
-  content: "\e633";
+    content: "\e633";
 }
 
 .tui-icon-more-fill:before {
-  content: "\eb98";
+    content: "\eb98";
 }
 
 .tui-icon-strategy:before {
-  content: "\e73f";
+    content: "\e73f";
 }
 
 .tui-icon-cart:before {
-  content: "\e743";
+    content: "\e743";
 }
 
 .tui-icon-cart-fill:before {
-  content: "\e742";
+    content: "\e742";
 }
 
 .tui-icon-sweep:before {
-  content: "\e74b";
+    content: "\e74b";
 }
 
 .tui-icon-screen:before {
-  content: "\e74c";
+    content: "\e74c";
 }
 
 .tui-icon-clock:before {
-  content: "\e750";
+    content: "\e750";
 }
 
 .tui-icon-clock-fill:before {
-  content: "\e74f";
+    content: "\e74f";
 }
 
 .tui-icon-home:before {
-  content: "\e752";
+    content: "\e752";
 }
 
 .tui-icon-home-fill:before {
-  content: "\e751";
+    content: "\e751";
 }
 
 .tui-icon-category:before {
-  content: "\e754";
+    content: "\e754";
 }
 
 .tui-icon-category-fill:before {
-  content: "\e753";
+    content: "\e753";
 }
 
 .tui-icon-notice:before {
-  content: "\e759";
+    content: "\e759";
 }
 
 .tui-icon-notice-fill:before {
-  content: "\e758";
+    content: "\e758";
 }
 
 .tui-icon-like:before {
-  content: "\e761";
+    content: "\e761";
 }
 
 .tui-icon-like-fill:before {
-  content: "\e760";
+    content: "\e760";
 }
 
 .tui-icon-bottom:before {
-  content: "\e76a";
+    content: "\e76a";
 }
 
 .tui-icon-top:before {
-  content: "\e76c";
+    content: "\e76c";
 }
 
 .tui-icon-towardsright:before {
-  content: "\e778";
+    content: "\e778";
 }
 
 .tui-icon-towardsright-fill:before {
-  content: "\e777";
+    content: "\e777";
 }
 
 .tui-icon-towardsleft:before {
-  content: "\e77a";
+    content: "\e77a";
 }
 
 .tui-icon-camera:before {
-  content: "\e77f";
+    content: "\e77f";
 }
 
 .tui-icon-camera-fill:before {
-  content: "\e77e";
+    content: "\e77e";
 }
 
 .tui-icon-camera-add:before {
-  content: "\e780";
+    content: "\e780";
 }
 
 .tui-icon-loading:before {
-  content: "\e781";
+    content: "\e781";
 }
 
 .tui-icon-wifi:before {
-  content: "\e783";
+    content: "\e783";
 }
 
 .tui-icon-agree:before {
-  content: "\e794";
+    content: "\e794";
 }
 
 .tui-icon-agree-fill:before {
-  content: "\e793";
+    content: "\e793";
 }
 
 .tui-icon-mobile:before {
-  content: "\e655";
+    content: "\e655";
 }
 
 .tui-icon-qrcode:before {
- content: "\e605";
+    content: "\e605";
 }
 
 .tui-icon-coupon:before {
-  content: "\e600";
+    content: "\e600";
 }
 
 .tui-icon-back:before {
-  content: "\e7ed";
+    content: "\e7ed";
 }
 
 .tui-icon-transport:before {
-  content: "\e882";
+    content: "\e882";
 }
 
 .tui-icon-transport-fill:before {
-  content: "\e883";
+    content: "\e883";
 }
 
 .tui-icon-send:before {
-  content: "\e893";
+    content: "\e893";
 }
 
 .tui-icon-bankcard:before {
-  content: "\e937";
+    content: "\e937";
 }
 
 .tui-icon-bankcard-fill:before {
-  content: "\e936";
+    content: "\e936";
 }
 
 .tui-icon-eye:before {
-  content: "\e6cf";
+    content: "\e6cf";
 }
 
 .tui-icon-calendar:before {
-  content: "\eb93";
+    content: "\eb93";
 }
 
 .tui-icon-picture:before {
-  content: "\e6c7";
+    content: "\e6c7";
 }
 
 .tui-icon-oppose:before {
-  content: "\e815";
+    content: "\e815";
 }
 
 .tui-icon-oppose-fill:before {
-  content: "\e814";
+    content: "\e814";
 }
 
 .tui-icon-pie:before {
-  content: "\eb95";
+    content: "\eb95";
 }
 
 .tui-icon-polygonal:before {
-  content: "\eb96";
+    content: "\eb96";
 }
 
 .tui-icon-histogram:before {
-  content: "\eb99";
+    content: "\eb99";
 }
 
 .tui-icon-down:before {
-  content: "\ec0b";
+    content: "\ec0b";
 }
 
 .tui-icon-up:before {
-  content: "\ec0c";
+    content: "\ec0c";
 }
 
 .tui-icon-narrow:before {
-  content: "\ec13";
+    content: "\ec13";
 }
 
 .tui-icon-enlarge:before {
-  content: "\ec14";
+    content: "\ec14";
 }
 
 .tui-icon-pwd:before {
-  content: "\e626";
+    content: "\e626";
 }
 
 .tui-icon-ellipsis:before {
-  content: "\e76b";
+    content: "\e76b";
 }
 
 .tui-icon-location:before {
-  content: "\e7f2";
+    content: "\e7f2";
 }
 
 .tui-icon-delete:before {
-  content: "\e608";
+    content: "\e608";
 }
 
 .tui-icon-card:before {
-   content: "\e91c";
+    content: "\e91c";
 }
 
 .tui-icon-card-fill:before {
-   content: "\e91b";
+    content: "\e91b";
 }
 
 .tui-icon-alarm:before {
-  content: "\e6e9";
+    content: "\e6e9";
 }
 
 .tui-icon-alarm-fill:before {
-  content: "\e6e8";
+    content: "\e6e8";
 }
 
 .tui-icon-computer:before {
-  content: "\e6ec";
+    content: "\e6ec";
 }
 
 .tui-icon-computer-fill:before {
-  content: "\e6eb";
+    content: "\e6eb";
 }
 
 .tui-icon-position:before {
-   content: "\e8fe";
+    content: "\e8fe";
 }
 
 .tui-icon-position-fill:before {
-  content: "\e8ff";
+    content: "\e8ff";
 }
 
 .tui-icon-member:before {
-  content: "\e704";
+    content: "\e704";
 }
 
 .tui-icon-member-fill:before {
-  content: "\e703";
+    content: "\e703";
 }
 
 .tui-icon-label:before {
-  content: "\e707";
+    content: "\e707";
 }
 
 .tui-icon-label-fill:before {
-  content: "\e708";
+    content: "\e708";
 }
 
 .tui-icon-mail:before {
-  content: "\e70b";
+    content: "\e70b";
 }
 
 .tui-icon-mail-fill:before {
-  content: "\e70c";
+    content: "\e70c";
 }
 
 .tui-icon-manage:before {
-  content: "\e70e";
+    content: "\e70e";
 }
 
 .tui-icon-manage-fill:before {
-  content: "\e70d";
+    content: "\e70d";
 }
 
 .tui-icon-message:before {
-  content: "\e70f";
+    content: "\e70f";
 }
 
 .tui-icon-message-fill:before {
-  content: "\e710";
+    content: "\e710";
 }
 
 .tui-icon-offline:before {
-  content: "\e716";
+    content: "\e716";
 }
 
 .tui-icon-offline-fill:before {
-  content: "\e715";
+    content: "\e715";
 }
 
 .tui-icon-redpacket:before {
-  content: "\e71e";
+    content: "\e71e";
 }
 
 .tui-icon-redpacket-fill:before {
-  content: "\e71d";
+    content: "\e71d";
 }
 
 .tui-icon-bag:before {
-  content: "\e756";
+    content: "\e756";
 }
 
 .tui-icon-bag-fill:before {
-  content: "\e755";
+    content: "\e755";
 }
 
 .tui-icon-setup:before {
-  content: "\e75a";
+    content: "\e75a";
 }
 
 .tui-icon-setup-fill:before {
-  content: "\e757";
+    content: "\e757";
 }
 
 .tui-icon-news:before {
-  content: "\e75e";
+    content: "\e75e";
 }
 
 .tui-icon-news-fill:before {
-  content: "\e75d";
+    content: "\e75d";
 }
 
 .tui-icon-time:before {
-  content: "\e764";
+    content: "\e764";
 }
 
 .tui-icon-time-fill:before {
-  content: "\e75f";
+    content: "\e75f";
 }
 
 .tui-icon-voice:before {
-  content: "\e766";
+    content: "\e766";
 }
 
 .tui-icon-voice-fill:before {
-  content: "\e765";
+    content: "\e765";
 }
 
 .tui-icon-nodata:before {
-  content: "\e611";
+    content: "\e611";
 }
 
 .tui-icon-link:before {
-  content: "\eb97";
+    content: "\eb97";
 }
 
 .tui-icon-edit:before {
-  content: "\e69a";
+    content: "\e69a";
 }
 
 .tui-icon-unseen:before {
-  content: "\e6a2";
+    content: "\e6a2";
 }
 
 .tui-icon-arrowup:before {
-  content: "\e658";
+    content: "\e658";
 }
 
 .tui-icon-arrowleft:before {
-  content: "\e659";
+    content: "\e659";
 }
 
 .tui-icon-arrowdown:before {
-  content: "\e65a";
+    content: "\e65a";
 }
 
 .tui-icon-arrowright:before {
-  content: "\e65b";
+    content: "\e65b";
 }
 
 .tui-icon-turningleft:before {
-  content: "\e65c";
+    content: "\e65c";
 }
 
 .tui-icon-turningright:before {
-  content: "\e65d";
+    content: "\e65d";
 }
 
 .tui-icon-turningup:before {
-  content: "\e65e";
+    content: "\e65e";
 }
 
 .tui-icon-turningdown:before {
-  content: "\e65f";
+    content: "\e65f";
 }
 
 .tui-icon-sina:before {
-  content: "\e662";
+    content: "\e662";
 }
 
 .tui-icon-applets:before {
-  content: "\e673";
+    content: "\e673";
 }
 
 .tui-icon-wechat:before {
-  content: "\e674";
+    content: "\e674";
 }
 
 .tui-icon-dingtalk:before {
-  content: "\e675";
+    content: "\e675";
 }
 
 .tui-icon-alipay:before {
-  content: "\e677";
+    content: "\e677";
 }
+
 .tui-icon-skin:before {
-  content: "\eb9e";
+    content: "\eb9e";
 }
+
 .tui-icon-house:before {
-  content: "\eb9f";
+    content: "\eb9f";
 }
+
 .tui-icon-download:before {
-  content: "\e602";
+    content: "\e602";
 }
+
 .tui-icon-upload:before {
-  content: "\e63b";
+    content: "\e63b";
 }
+
 .tui-icon-kefu:before {
-  content: "\e601";
+    content: "\e601";
 }
 
 .tui-icon-sport:before {
-  content: "\eba0";
+    content: "\eba0";
 }
+
 .tui-icon-gps:before {
-  content: "\eb9a";
+    content: "\eb9a";
 }
+
 .tui-icon-shield:before {
-  content: "\eba3";
+    content: "\eba3";
 }
+
 .tui-icon-voipphone:before {
-  content: "\eba2";
+    content: "\eba2";
 }
+
 .tui-icon-wallet:before {
-  content: "\eb92";
+    content: "\eb92";
 }
+
 .tui-icon-attestation:before {
-  content: "\eb91";
+    content: "\eb91";
 }
+
 .tui-icon-addressbook:before {
-  content: "\eb90";
+    content: "\eb90";
 }
+
 .tui-icon-addmessage:before {
-  content: "\eb8f";
+    content: "\eb8f";
 }
+
 .tui-icon-signin:before {
-  content: "\e643";
+    content: "\e643";
 }
+
 .tui-icon-evaluate:before {
-  content: "\e642";
+    content: "\e642";
 }
+
 .tui-icon-unreceive:before {
-  content: "\e641";
+    content: "\e641";
 }
+
 .tui-icon-balloon:before {
-  content: "\e627";
+    content: "\e627";
 }
+
 .tui-icon-partake:before {
-  content: "\e603";
+    content: "\e603";
 }
+
 .tui-icon-listview:before {
-  content: "\e67b";
+    content: "\e67b";
 }
 
 .tui-icon-weather:before {
-  content: "\e694";
+    content: "\e694";
 }
+
 .tui-icon-tool:before {
-  content: "\e61b";
+    content: "\e61b";
 }
+
 .tui-icon-imface:before {
-  content: "\eb9b";
+    content: "\eb9b";
 }
 
 .tui-icon-deletekey:before {
-  content: "\e7b8";
+    content: "\e7b8";
 }
+
 .tui-icon-fingerprint:before {
-  content: "\e66e";
+    content: "\e66e";
 }
 
-
 .tui-icon-warning:before {
-  content: "\e8eb";
+    content: "\e8eb";
 }
 
 .tui-icon-soso:before {
-  content: "\e8da";
+    content: "\e8da";
 }
 
 .tui-icon-satisfied:before {
-  content: "\e8db";
+    content: "\e8db";
 }
 
 .tui-icon-dissatisfied:before {
-  content: "\e8dc";
+    content: "\e8dc";
 }
 
 .tui-icon-pic:before {
-  content: "\e8d2";
+    content: "\e8d2";
 }
 
 .tui-icon-pic-fill:before {
-  content: "\e8d3";
+    content: "\e8d3";
 }
 
 .tui-icon-play:before {
-  content: "\e606";
-}
+    content: "\e606";
+}

ファイルの差分が大きいため隠しています
+ 318 - 321
common/css/style/thorui.css


+ 0 - 4673
common/json/data.json.js

@@ -1,4673 +0,0 @@
-const addressList = [
-					{
-						address: "奥术大师大所打撒大是奥术大师大所打撒大是奥术大师大所打撒大是",
-						addressID: 2913,
-						city: "县",
-						cityID: 2,
-						defaultFlag: "1",
-						mobile: "13316418828",
-						phone: null,
-						postalCode: null,
-						province: "北京市",
-						provinceID: 1,
-						shouHuoRen: "郑大大",
-						town: "东城区282",
-						townID: 17,
-						userID: 11063
-					},
-					{
-						address: "奥术大师大所打撒大是奥术大师大所打撒大是奥术大师大所打撒大是",
-						addressID: 2913,
-						city: "县",
-						cityID: 2,
-						defaultFlag: "0",
-						mobile: "13316418828",
-						phone: null,
-						postalCode: null,
-						province: "北京市",
-						provinceID: 1,
-						shouHuoRen: "郑大大",
-						town: "东城区282",
-						townID: 17,
-						userID: 11063
-					},
-				]	
-const cartList = [
-                {
-                    "shopID":10134,
-                    "userID":11052,
-                    "name":"深圳市美轮美奂服务有限公司",
-                    "sname":"美轮美奂",
-                    "nameEn":null,
-                    "site":null,
-                    "ledgerNo":null,
-                    "logo":"",
-                    "rebateAmount":0,
-                    "level":null,
-                    "score":null,
-                    "productCount":null,
-                    "legalPerson":"sdfa",
-                    "businessLicense":null,
-                    "businessLicenseImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHHq6AYuqFAAGOILQcRyE628.jpg",
-                    "taxCertificate":null,
-                    "taxCertificateImage":null,
-                    "authorizationCertificateImage":null,
-                    "provinceID":19,
-                    "cityID":202,
-                    "townID":1958,
-                    "address":"广东省深圳市宝安区",
-                    "registeredCapital":12,
-                    "nature":"删掉",
-                    "turnover":123,
-                    "linkMan":"非林峰",
-                    "contractPhone":"",
-                    "contractMobile":"18666666669",
-                    "fax":"",
-                    "zipCode":null,
-                    "linkMan1":"非林峰",
-                    "duty1":null,
-                    "contractPhone1":null,
-                    "contractMobile1":"18666666669",
-                    "contractQQ1":null,
-                    "wechat1":null,
-                    "contractEmail1":"18666666669@qq.com",
-                    "linkMan2":"非林峰",
-                    "duty2":null,
-                    "contractPhone2":null,
-                    "contractMobile2":"18666666669",
-                    "contractQQ2":null,
-                    "wechat2":null,
-                    "contractEmail2":"18666666669@qq.com",
-                    "scope":null,
-                    "info":"啊大噶撒打发",
-                    "productDesc":"暗杀士大夫",
-                    "lng":null,
-                    "lat":null,
-                    "addTime":"2021-03-09 15:07:32",
-                    "auditStatus":"1",
-                    "auditTime":"2021-03-09 03:08:37",
-                    "auditNote":null,
-                    "favoriteTimes":0,
-                    "validFlag":"1",
-                    "payFlag1":null,
-                    "auditFlag1":null,
-                    "payFlag2":null,
-                    "auditFlag2":null,
-                    "payFlag3":null,
-                    "auditFlag3":null,
-                    "note":null,
-                    "status":90,
-                    "sortIndex":null,
-                    "rate1":null,
-                    "rate2":null,
-                    "masterFlag":null,
-                    "erpFlag":null,
-                    "shopSecret":null,
-                    "masterLogo":null,
-                    "cooperateFlag":null,
-                    "bail":null,
-                    "businessScope":"仪器护理类/撒打发",
-                    "socialCreditCode":"123456789987654321",
-                    "mainpro":"产品",
-                    "firstShopType":"1",
-                    "secondShopType":"3",
-                    "medicalPracticeLicenseImg1":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BQeHGANhPUAABorQhpGjU343.jpg",
-                    "medicalPracticeLicenseImg2":null,
-                    "medicalPracticeLicenseImg3":null,
-                    "bankAccount":null,
-                    "bankAccountName":null,
-                    "bankName":null,
-                    "ableRebateAmount":0,
-                    "totalPrice":72.1075,
-                    "productsList":[
-                        {
-                            "productID":6421,
-                            "brandID":25,
-                            "tinyTypeID":1120,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                            "aliasName":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":15.25,
-                            "price":15.25,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":15.25,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:32:19",
-                            "updateTime":"2021-03-09 15:32:19",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"sdfsSGZee3336421",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"瓶",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":10,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"注射",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"3",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":15.25,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3771,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":1037,
-                            "bigTypeID":1013,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        },
-                        {
-                            "productID":6420,
-                            "brandID":25,
-                            "tinyTypeID":null,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】润百颜注射修饰透明质酸钠凝胶1ml",
-                            "aliasName":"【测试用】润百颜注射修饰透明质酸钠凝胶1ml",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":25.75,
-                            "price":25.75,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":25.75,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHIIWATL05AAGHUpelz2U374.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:15:45",
-                            "updateTime":"2021-03-09 15:15:45",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"kscz6420",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"盒",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":20,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"注射",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"2",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":28.325,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3772,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":null,
-                            "bigTypeID":1014,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        },
-                        {
-                            "productID":6419,
-                            "brandID":1,
-                            "tinyTypeID":null,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】Dermaheal HSR 德玛莉肌活丝蕴凝颜精华液",
-                            "aliasName":"【测试用】Dermaheal HSR 德玛莉肌活丝蕴凝颜精华液",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":25.25,
-                            "price":25.25,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":25.25,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":200,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHH8aAFiGIAAGHr5DovGA124.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:12:28",
-                            "updateTime":"2021-03-09 15:12:28",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"FWLCP6419",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"片",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":20,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"面膜",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":13,
-                            "supplierTaxPoint":13,
-                            "invoiceType":"1",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":28.5325,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3773,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":null,
-                            "bigTypeID":1018,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        }
-                    ],
-                    "businessScopeArray":null,
-                    "mobileCode":null,
-                    "shopBannerList":null,
-                    "productionLicence":null,
-                    "hygienicLicense":null,
-                    "taxLicense":null,
-                    "certificateHonor":null,
-                    "productCertification":null,
-                    "provincialAddress":null,
-                    "promotions":null,
-                    "reducedPrice":null,
-                    "normalNum":null
-                },
-                {
-                    "shopID":10133,
-                    "userID":11051,
-                    "name":"深圳市采美奥泰贸易有限公司",
-                    "sname":"采美奥泰",
-                    "nameEn":null,
-                    "site":null,
-                    "ledgerNo":null,
-                    "logo":"/userfiles/1/images/photo/2021/01/Cmis21__5o-ADIQEAAD1N_9T1C4174.jpg",
-                    "rebateAmount":0,
-                    "level":null,
-                    "score":null,
-                    "productCount":null,
-                    "legalPerson":null,
-                    "businessLicense":null,
-                    "businessLicenseImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BG9AGARTWcAAAfYeeBGQU924.jpg",
-                    "taxCertificate":"1223132454646556",
-                    "taxCertificateImage":null,
-                    "authorizationCertificateImage":null,
-                    "provinceID":19,
-                    "cityID":202,
-                    "townID":1955,
-                    "address":"红树湾",
-                    "registeredCapital":null,
-                    "nature":null,
-                    "turnover":null,
-                    "linkMan":"郑超",
-                    "contractPhone":null,
-                    "contractMobile":"18666666668",
-                    "fax":null,
-                    "zipCode":null,
-                    "linkMan1":"郑超",
-                    "duty1":null,
-                    "contractPhone1":null,
-                    "contractMobile1":"18666666668",
-                    "contractQQ1":null,
-                    "wechat1":null,
-                    "contractEmail1":"18666666668@qq.com",
-                    "linkMan2":"郑超",
-                    "duty2":null,
-                    "contractPhone2":null,
-                    "contractMobile2":"18666666668",
-                    "contractQQ2":null,
-                    "wechat2":null,
-                    "contractEmail2":"18666666668@qq.com",
-                    "scope":null,
-                    "info":"二恶烷群",
-                    "productDesc":"额外若群",
-                    "lng":null,
-                    "lat":null,
-                    "addTime":"2021-03-09 12:05:24",
-                    "auditStatus":"1",
-                    "auditTime":"2021-03-09 02:01:28",
-                    "auditNote":null,
-                    "favoriteTimes":0,
-                    "validFlag":"1",
-                    "payFlag1":null,
-                    "auditFlag1":null,
-                    "payFlag2":null,
-                    "auditFlag2":null,
-                    "payFlag3":null,
-                    "auditFlag3":null,
-                    "note":null,
-                    "status":90,
-                    "sortIndex":null,
-                    "rate1":null,
-                    "rate2":null,
-                    "masterFlag":null,
-                    "erpFlag":null,
-                    "shopSecret":null,
-                    "masterLogo":null,
-                    "cooperateFlag":null,
-                    "bail":null,
-                    "businessScope":null,
-                    "socialCreditCode":"123456789987654321",
-                    "mainpro":"",
-                    "firstShopType":"2",
-                    "secondShopType":"",
-                    "medicalPracticeLicenseImg1":null,
-                    "medicalPracticeLicenseImg2":null,
-                    "medicalPracticeLicenseImg3":null,
-                    "bankAccount":null,
-                    "bankAccountName":null,
-                    "bankName":null,
-                    "ableRebateAmount":0,
-                    "totalPrice":49.775,
-                    "productsList":[
-                        {
-                            "productID":6418,
-                            "brandID":1,
-                            "tinyTypeID":null,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10133,
-                            "name":"【测试用】EndyMed-3Deep-医学美容多功能相控射频",
-                            "aliasName":"【测试用】EndyMed-3Deep-医学美容多功能相控射频",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":45.25,
-                            "price":45.25,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":45.25,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHEMOAFVmsAAGOILQcRyE020.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 14:08:52",
-                            "updateTime":"2021-03-09 14:08:52",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"SSSXSPRZH6418",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"台",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":40,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"美容仪",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"2",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"2",
-                            "retailPrice":49.775,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3774,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":1051,
-                            "bigTypeID":1022,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        }
-                    ],
-                    "businessScopeArray":null,
-                    "mobileCode":null,
-                    "shopBannerList":null,
-                    "productionLicence":null,
-                    "hygienicLicense":null,
-                    "taxLicense":null,
-                    "certificateHonor":null,
-                    "productCertification":null,
-                    "provincialAddress":null,
-                    "promotions":null,
-                    "reducedPrice":null,
-                    "normalNum":null
-                },
-                {
-                    "shopID":10131,
-                    "userID":11049,
-                    "name":"深圳市肤白貌美服务有限公司",
-                    "sname":"肤白貌美",
-                    "nameEn":null,
-                    "site":null,
-                    "ledgerNo":null,
-                    "logo":"/userfiles/1/images/photo/2021/01/Cmis21__5o-AaNq1AAEriLZ0RzY342.jpg",
-                    "rebateAmount":0,
-                    "level":null,
-                    "score":null,
-                    "productCount":null,
-                    "legalPerson":null,
-                    "businessLicense":null,
-                    "businessLicenseImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BG8bSALKXAAAAfYeeBGQU840.jpg",
-                    "taxCertificate":"45654654645654645645645645645654",
-                    "taxCertificateImage":null,
-                    "authorizationCertificateImage":null,
-                    "provinceID":19,
-                    "cityID":202,
-                    "townID":3202,
-                    "address":"高傲新村",
-                    "registeredCapital":null,
-                    "nature":null,
-                    "turnover":null,
-                    "linkMan":"吴小研",
-                    "contractPhone":null,
-                    "contractMobile":"18666666666",
-                    "fax":null,
-                    "zipCode":null,
-                    "linkMan1":"吴小研",
-                    "duty1":null,
-                    "contractPhone1":null,
-                    "contractMobile1":"18666666666",
-                    "contractQQ1":null,
-                    "wechat1":null,
-                    "contractEmail1":"18666666666@qq.com",
-                    "linkMan2":"吴小研",
-                    "duty2":null,
-                    "contractPhone2":null,
-                    "contractMobile2":"18666666666",
-                    "contractQQ2":null,
-                    "wechat2":null,
-                    "contractEmail2":"18666666666@qq.com",
-                    "scope":null,
-                    "info":"45",
-                    "productDesc":"4564",
-                    "lng":null,
-                    "lat":null,
-                    "addTime":"2021-03-09 11:55:39",
-                    "auditStatus":"1",
-                    "auditTime":"2021-03-09 01:43:18",
-                    "auditNote":null,
-                    "favoriteTimes":0,
-                    "validFlag":"1",
-                    "payFlag1":null,
-                    "auditFlag1":null,
-                    "payFlag2":null,
-                    "auditFlag2":null,
-                    "payFlag3":null,
-                    "auditFlag3":null,
-                    "note":null,
-                    "status":90,
-                    "sortIndex":null,
-                    "rate1":null,
-                    "rate2":null,
-                    "masterFlag":null,
-                    "erpFlag":null,
-                    "shopSecret":null,
-                    "masterLogo":null,
-                    "cooperateFlag":null,
-                    "bail":null,
-                    "businessScope":null,
-                    "socialCreditCode":"987654321123456666",
-                    "mainpro":"",
-                    "firstShopType":"1",
-                    "secondShopType":"1",
-                    "medicalPracticeLicenseImg1":null,
-                    "medicalPracticeLicenseImg2":null,
-                    "medicalPracticeLicenseImg3":null,
-                    "bankAccount":null,
-                    "bankAccountName":null,
-                    "bankName":null,
-                    "ableRebateAmount":0,
-                    "totalPrice":35.75,
-                    "productsList":[
-                        {
-                            "productID":6416,
-                            "brandID":1,
-                            "tinyTypeID":1120,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10131,
-                            "name":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-                            "aliasName":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":35.75,
-                            "price":35.75,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":35.75,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDRGAQGhIAAWEI4ChAUg291.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 13:52:49",
-                            "updateTime":"2021-03-09 13:52:49",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"sdfsSGZee3336416",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"台",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":30,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"清洁",
-                            "surplusTime":null,
-                            "productType":"2",
-                            "machineType":"1",
-                            "qualificationImg":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDL2ADbuIAAlLT8OmIlA825.gif",
-                            "includedTax":"1",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"2",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":35.75,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3775,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":1037,
-                            "bigTypeID":1013,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        }
-                    ],
-                    "businessScopeArray":null,
-                    "mobileCode":null,
-                    "shopBannerList":null,
-                    "productionLicence":null,
-                    "hygienicLicense":null,
-                    "taxLicense":null,
-                    "certificateHonor":null,
-                    "productCertification":null,
-                    "provincialAddress":null,
-                    "promotions":null,
-                    "reducedPrice":null,
-                    "normalNum":null
-                },
-				{
-				    "shopID":10131,
-				    "userID":11049,
-				    "name":"深圳市肤白貌美服务有限公司",
-				    "sname":"肤白貌美",
-				    "nameEn":null,
-				    "site":null,
-				    "ledgerNo":null,
-				    "logo":"/userfiles/1/images/photo/2021/01/Cmis21__5o-AaNq1AAEriLZ0RzY342.jpg",
-				    "rebateAmount":0,
-				    "level":null,
-				    "score":null,
-				    "productCount":null,
-				    "legalPerson":null,
-				    "businessLicense":null,
-				    "businessLicenseImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BG8bSALKXAAAAfYeeBGQU840.jpg",
-				    "taxCertificate":"45654654645654645645645645645654",
-				    "taxCertificateImage":null,
-				    "authorizationCertificateImage":null,
-				    "provinceID":19,
-				    "cityID":202,
-				    "townID":3202,
-				    "address":"高傲新村",
-				    "registeredCapital":null,
-				    "nature":null,
-				    "turnover":null,
-				    "linkMan":"吴小研",
-				    "contractPhone":null,
-				    "contractMobile":"18666666666",
-				    "fax":null,
-				    "zipCode":null,
-				    "linkMan1":"吴小研",
-				    "duty1":null,
-				    "contractPhone1":null,
-				    "contractMobile1":"18666666666",
-				    "contractQQ1":null,
-				    "wechat1":null,
-				    "contractEmail1":"18666666666@qq.com",
-				    "linkMan2":"吴小研",
-				    "duty2":null,
-				    "contractPhone2":null,
-				    "contractMobile2":"18666666666",
-				    "contractQQ2":null,
-				    "wechat2":null,
-				    "contractEmail2":"18666666666@qq.com",
-				    "scope":null,
-				    "info":"45",
-				    "productDesc":"4564",
-				    "lng":null,
-				    "lat":null,
-				    "addTime":"2021-03-09 11:55:39",
-				    "auditStatus":"1",
-				    "auditTime":"2021-03-09 01:43:18",
-				    "auditNote":null,
-				    "favoriteTimes":0,
-				    "validFlag":"1",
-				    "payFlag1":null,
-				    "auditFlag1":null,
-				    "payFlag2":null,
-				    "auditFlag2":null,
-				    "payFlag3":null,
-				    "auditFlag3":null,
-				    "note":null,
-				    "status":90,
-				    "sortIndex":null,
-				    "rate1":null,
-				    "rate2":null,
-				    "masterFlag":null,
-				    "erpFlag":null,
-				    "shopSecret":null,
-				    "masterLogo":null,
-				    "cooperateFlag":null,
-				    "bail":null,
-				    "businessScope":null,
-				    "socialCreditCode":"987654321123456666",
-				    "mainpro":"",
-				    "firstShopType":"1",
-				    "secondShopType":"1",
-				    "medicalPracticeLicenseImg1":null,
-				    "medicalPracticeLicenseImg2":null,
-				    "medicalPracticeLicenseImg3":null,
-				    "bankAccount":null,
-				    "bankAccountName":null,
-				    "bankName":null,
-				    "ableRebateAmount":0,
-				    "totalPrice":35.75,
-				    "productsList":[
-				        {
-				            "productID":6416,
-				            "brandID":1,
-				            "tinyTypeID":1120,
-				            "classifyId":null,
-				            "preferredFlag":null,
-				            "selfTypeID":null,
-				            "shopID":10131,
-				            "name":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-				            "aliasName":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-				            "searchKey":"##########",
-				            "productRemarks":null,
-				            "normalPrice":35.75,
-				            "price":35.75,
-				            "highestUserLevelPrice":null,
-				            "lowestUserLevelPrice":null,
-				            "lowestUserLevelID":null,
-				            "price0":null,
-				            "price0Grade":null,
-				            "price0Text":null,
-				            "price0TextFlag":null,
-				            "price1":35.75,
-				            "price1Grade":null,
-				            "price1Text":null,
-				            "price1TextFlag":"2",
-				            "price8":null,
-				            "price8Grade":null,
-				            "price8Text":null,
-				            "price8TextFlag":null,
-				            "ladderPriceFlag":"0",
-				            "price2":null,
-				            "price3":null,
-				            "price4":null,
-				            "price5":null,
-				            "price6":null,
-				            "price7":null,
-				            "fee":null,
-				            "stock":100,
-				            "hasSkuFlag":"1",
-				            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDRGAQGhIAAWEI4ChAUg291.jpg",
-				            "propertiesInfo":null,
-				            "addTime":"2021-03-09 13:52:49",
-				            "updateTime":"2021-03-09 13:52:49",
-				            "classifyAddTime":null,
-				            "sellNumber":0,
-				            "weekSellNumber":null,
-				            "beforeValidFlag":null,
-				            "validFlag":"2",
-				            "favoriteTimes":0,
-				            "commentScore":0,
-				            "commentTimes":0,
-				            "selfRecommendFlag":null,
-				            "sysRecommendFlag":null,
-				            "sortIndex":0,
-				            "featuredFlag":"0",
-				            "featuredSortIndex":null,
-				            "productCode":"sdfsSGZee3336416",
-				            "rate1":null,
-				            "rate2":null,
-				            "unit":"台",
-				            "synToERPFlag":null,
-				            "allAreaFlag":"1",
-				            "provinceIDs":"0",
-				            "serviceNumber":"1",
-				            "maxBuyNumber":null,
-				            "virtualFlag":null,
-				            "minBuyNumber":1,
-				            "packageCount":null,
-				            "byFlag":null,
-				            "normalProductFlag":1,
-				            "wholeSaleProductFlag":null,
-				            "promotionProductFlag":null,
-				            "groupBuyProductFlag":null,
-				            "step":1,
-				            "speCommisionFlag":null,
-				            "speCommision":null,
-				            "videourl":null,
-				            "props":null,
-				            "providers":null,
-				            "serviceCommissionRatio":null,
-				            "reCommissionRatio":null,
-				            "pushToERPName":null,
-				            "prodBeans":null,
-				            "useBeansFlag":null,
-				            "privateFlag":null,
-				            "invisibleServiceProviderIDs":null,
-				            "displayOnCRMFlag":null,
-				            "needServiceFlag":null,
-				            "actFlag":0,
-				            "actStatus":null,
-				            "actSort":null,
-				            "actPrice0":null,
-				            "actPrice1":null,
-				            "actPrice2":null,
-				            "actPrice3":null,
-				            "actPrice4":null,
-				            "actPrice5":null,
-				            "actPrice6":null,
-				            "actPrice7":null,
-				            "actType":null,
-				            "actCreateTime":null,
-				            "actFullReduceAmount":null,
-				            "actReduceAmount":null,
-				            "visibility":"3",
-				            "actFullGiftAmount":null,
-				            "actBuyGiftNum":null,
-				            "beginTime":null,
-				            "endTime":null,
-				            "shopIndexModuleID":null,
-				            "onlineTime":null,
-				            "downlineTime":null,
-				            "freePostFlag":"2",
-				            "crmBigTypeId":null,
-				            "crmSmallTypeId":null,
-				            "costPrice":30,
-				            "costProportional":null,
-				            "costCheckFlag":"1",
-				            "precisehKey":null,
-				            "docBoost":null,
-				            "cmbeanFlag":null,
-				            "cmbeanPrice":null,
-				            "cmbeanSort":null,
-				            "tags":"清洁",
-				            "surplusTime":null,
-				            "productType":"2",
-				            "machineType":"1",
-				            "qualificationImg":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDL2ADbuIAAlLT8OmIlA825.gif",
-				            "includedTax":"1",
-				            "taxPoint":10,
-				            "supplierTaxPoint":10,
-				            "invoiceType":"2",
-				            "recommendType":"0",
-				            "skuID":null,
-				            "priceType":null,
-				            "combinationID":null,
-				            "combinationSort":null,
-				            "productCategory":"1",
-				            "auditReason":null,
-				            "commodityType":"1",
-				            "retailPrice":35.75,
-				            "discountPrice":null,
-				            "tagsList":null,
-				            "imageList":null,
-				            "productDetail":null,
-				            "productCount":1,
-				            "ladderPriceList":null,
-				            "shop":null,
-				            "sellerCartId":3775,
-				            "productsChecked":false,
-				            "repurchasePriceState":false,
-				            "initProductNum":null,
-				            "totalPrice":null,
-				            "failureState":null,
-				            "smallTypeID":1037,
-				            "bigTypeID":1013,
-				            "typeName":null,
-				            "parametersList":null,
-				            "brandName":null,
-				            "bigTypeName":null,
-				            "smallTypeName":null,
-				            "tinyTypeName":null,
-				            "activityDiscount":null,
-				            "promotions":null,
-				            "giftType":null,
-				            "userIdentity":null,
-				            "isChecked":false,
-				            "detailTalkFlag":null,
-				            "shopName":null,
-				            "beautyActFlag":null
-				        }
-				    ],
-				    "businessScopeArray":null,
-				    "mobileCode":null,
-				    "shopBannerList":null,
-				    "productionLicence":null,
-				    "hygienicLicense":null,
-				    "taxLicense":null,
-				    "certificateHonor":null,
-				    "productCertification":null,
-				    "provincialAddress":null,
-				    "promotions":null,
-				    "reducedPrice":null,
-				    "normalNum":null
-				},
-				{
-				    "shopID":10131,
-				    "userID":11049,
-				    "name":"深圳市肤白貌美服务有限公司",
-				    "sname":"肤白貌美",
-				    "nameEn":null,
-				    "site":null,
-				    "ledgerNo":null,
-				    "logo":"/userfiles/1/images/photo/2021/01/Cmis21__5o-AaNq1AAEriLZ0RzY342.jpg",
-				    "rebateAmount":0,
-				    "level":null,
-				    "score":null,
-				    "productCount":null,
-				    "legalPerson":null,
-				    "businessLicense":null,
-				    "businessLicenseImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BG8bSALKXAAAAfYeeBGQU840.jpg",
-				    "taxCertificate":"45654654645654645645645645645654",
-				    "taxCertificateImage":null,
-				    "authorizationCertificateImage":null,
-				    "provinceID":19,
-				    "cityID":202,
-				    "townID":3202,
-				    "address":"高傲新村",
-				    "registeredCapital":null,
-				    "nature":null,
-				    "turnover":null,
-				    "linkMan":"吴小研",
-				    "contractPhone":null,
-				    "contractMobile":"18666666666",
-				    "fax":null,
-				    "zipCode":null,
-				    "linkMan1":"吴小研",
-				    "duty1":null,
-				    "contractPhone1":null,
-				    "contractMobile1":"18666666666",
-				    "contractQQ1":null,
-				    "wechat1":null,
-				    "contractEmail1":"18666666666@qq.com",
-				    "linkMan2":"吴小研",
-				    "duty2":null,
-				    "contractPhone2":null,
-				    "contractMobile2":"18666666666",
-				    "contractQQ2":null,
-				    "wechat2":null,
-				    "contractEmail2":"18666666666@qq.com",
-				    "scope":null,
-				    "info":"45",
-				    "productDesc":"4564",
-				    "lng":null,
-				    "lat":null,
-				    "addTime":"2021-03-09 11:55:39",
-				    "auditStatus":"1",
-				    "auditTime":"2021-03-09 01:43:18",
-				    "auditNote":null,
-				    "favoriteTimes":0,
-				    "validFlag":"1",
-				    "payFlag1":null,
-				    "auditFlag1":null,
-				    "payFlag2":null,
-				    "auditFlag2":null,
-				    "payFlag3":null,
-				    "auditFlag3":null,
-				    "note":null,
-				    "status":90,
-				    "sortIndex":null,
-				    "rate1":null,
-				    "rate2":null,
-				    "masterFlag":null,
-				    "erpFlag":null,
-				    "shopSecret":null,
-				    "masterLogo":null,
-				    "cooperateFlag":null,
-				    "bail":null,
-				    "businessScope":null,
-				    "socialCreditCode":"987654321123456666",
-				    "mainpro":"",
-				    "firstShopType":"1",
-				    "secondShopType":"1",
-				    "medicalPracticeLicenseImg1":null,
-				    "medicalPracticeLicenseImg2":null,
-				    "medicalPracticeLicenseImg3":null,
-				    "bankAccount":null,
-				    "bankAccountName":null,
-				    "bankName":null,
-				    "ableRebateAmount":0,
-				    "totalPrice":35.75,
-				    "productsList":[
-				        {
-				            "productID":6416,
-				            "brandID":1,
-				            "tinyTypeID":1120,
-				            "classifyId":null,
-				            "preferredFlag":null,
-				            "selfTypeID":null,
-				            "shopID":10131,
-				            "name":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-				            "aliasName":"【测试用】HydraFacial海菲秀 真空负压 深层洁净",
-				            "searchKey":"##########",
-				            "productRemarks":null,
-				            "normalPrice":35.75,
-				            "price":35.75,
-				            "highestUserLevelPrice":null,
-				            "lowestUserLevelPrice":null,
-				            "lowestUserLevelID":null,
-				            "price0":null,
-				            "price0Grade":null,
-				            "price0Text":null,
-				            "price0TextFlag":null,
-				            "price1":35.75,
-				            "price1Grade":null,
-				            "price1Text":null,
-				            "price1TextFlag":"2",
-				            "price8":null,
-				            "price8Grade":null,
-				            "price8Text":null,
-				            "price8TextFlag":null,
-				            "ladderPriceFlag":"0",
-				            "price2":null,
-				            "price3":null,
-				            "price4":null,
-				            "price5":null,
-				            "price6":null,
-				            "price7":null,
-				            "fee":null,
-				            "stock":100,
-				            "hasSkuFlag":"1",
-				            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDRGAQGhIAAWEI4ChAUg291.jpg",
-				            "propertiesInfo":null,
-				            "addTime":"2021-03-09 13:52:49",
-				            "updateTime":"2021-03-09 13:52:49",
-				            "classifyAddTime":null,
-				            "sellNumber":0,
-				            "weekSellNumber":null,
-				            "beforeValidFlag":null,
-				            "validFlag":"2",
-				            "favoriteTimes":0,
-				            "commentScore":0,
-				            "commentTimes":0,
-				            "selfRecommendFlag":null,
-				            "sysRecommendFlag":null,
-				            "sortIndex":0,
-				            "featuredFlag":"0",
-				            "featuredSortIndex":null,
-				            "productCode":"sdfsSGZee3336416",
-				            "rate1":null,
-				            "rate2":null,
-				            "unit":"台",
-				            "synToERPFlag":null,
-				            "allAreaFlag":"1",
-				            "provinceIDs":"0",
-				            "serviceNumber":"1",
-				            "maxBuyNumber":null,
-				            "virtualFlag":null,
-				            "minBuyNumber":1,
-				            "packageCount":null,
-				            "byFlag":null,
-				            "normalProductFlag":1,
-				            "wholeSaleProductFlag":null,
-				            "promotionProductFlag":null,
-				            "groupBuyProductFlag":null,
-				            "step":1,
-				            "speCommisionFlag":null,
-				            "speCommision":null,
-				            "videourl":null,
-				            "props":null,
-				            "providers":null,
-				            "serviceCommissionRatio":null,
-				            "reCommissionRatio":null,
-				            "pushToERPName":null,
-				            "prodBeans":null,
-				            "useBeansFlag":null,
-				            "privateFlag":null,
-				            "invisibleServiceProviderIDs":null,
-				            "displayOnCRMFlag":null,
-				            "needServiceFlag":null,
-				            "actFlag":0,
-				            "actStatus":null,
-				            "actSort":null,
-				            "actPrice0":null,
-				            "actPrice1":null,
-				            "actPrice2":null,
-				            "actPrice3":null,
-				            "actPrice4":null,
-				            "actPrice5":null,
-				            "actPrice6":null,
-				            "actPrice7":null,
-				            "actType":null,
-				            "actCreateTime":null,
-				            "actFullReduceAmount":null,
-				            "actReduceAmount":null,
-				            "visibility":"3",
-				            "actFullGiftAmount":null,
-				            "actBuyGiftNum":null,
-				            "beginTime":null,
-				            "endTime":null,
-				            "shopIndexModuleID":null,
-				            "onlineTime":null,
-				            "downlineTime":null,
-				            "freePostFlag":"2",
-				            "crmBigTypeId":null,
-				            "crmSmallTypeId":null,
-				            "costPrice":30,
-				            "costProportional":null,
-				            "costCheckFlag":"1",
-				            "precisehKey":null,
-				            "docBoost":null,
-				            "cmbeanFlag":null,
-				            "cmbeanPrice":null,
-				            "cmbeanSort":null,
-				            "tags":"清洁",
-				            "surplusTime":null,
-				            "productType":"2",
-				            "machineType":"1",
-				            "qualificationImg":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHDL2ADbuIAAlLT8OmIlA825.gif",
-				            "includedTax":"1",
-				            "taxPoint":10,
-				            "supplierTaxPoint":10,
-				            "invoiceType":"2",
-				            "recommendType":"0",
-				            "skuID":null,
-				            "priceType":null,
-				            "combinationID":null,
-				            "combinationSort":null,
-				            "productCategory":"1",
-				            "auditReason":null,
-				            "commodityType":"1",
-				            "retailPrice":35.75,
-				            "discountPrice":null,
-				            "tagsList":null,
-				            "imageList":null,
-				            "productDetail":null,
-				            "productCount":1,
-				            "ladderPriceList":null,
-				            "shop":null,
-				            "sellerCartId":3775,
-				            "productsChecked":false,
-				            "repurchasePriceState":false,
-				            "initProductNum":null,
-				            "totalPrice":null,
-				            "failureState":null,
-				            "smallTypeID":1037,
-				            "bigTypeID":1013,
-				            "typeName":null,
-				            "parametersList":null,
-				            "brandName":null,
-				            "bigTypeName":null,
-				            "smallTypeName":null,
-				            "tinyTypeName":null,
-				            "activityDiscount":null,
-				            "promotions":null,
-				            "giftType":null,
-				            "userIdentity":null,
-				            "isChecked":false,
-				            "detailTalkFlag":null,
-				            "shopName":null,
-				            "beautyActFlag":null
-				        }
-				    ],
-				    "businessScopeArray":null,
-				    "mobileCode":null,
-				    "shopBannerList":null,
-				    "productionLicence":null,
-				    "hygienicLicense":null,
-				    "taxLicense":null,
-				    "certificateHonor":null,
-				    "productCertification":null,
-				    "provincialAddress":null,
-				    "promotions":null,
-				    "reducedPrice":null,
-				    "normalNum":null
-				}
-            ]				
-const productList=[
-                        {
-                            "productID":6421,
-                            "brandID":25,
-                            "tinyTypeID":1120,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                            "aliasName":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":15.25,
-                            "price":15.25,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":15.25,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:32:19",
-                            "updateTime":"2021-03-09 15:32:19",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"sdfsSGZee3336421",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"瓶",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":10,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"注射",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"3",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":15.25,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3771,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":1037,
-                            "bigTypeID":1013,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        },
-						{
-						    "productID":6421,
-						    "brandID":25,
-						    "tinyTypeID":1120,
-						    "classifyId":null,
-						    "preferredFlag":null,
-						    "selfTypeID":null,
-						    "shopID":10134,
-						    "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-						    "aliasName":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-						    "searchKey":"##########",
-						    "productRemarks":null,
-						    "normalPrice":15.25,
-						    "price":15.25,
-						    "highestUserLevelPrice":null,
-						    "lowestUserLevelPrice":null,
-						    "lowestUserLevelID":null,
-						    "price0":null,
-						    "price0Grade":null,
-						    "price0Text":null,
-						    "price0TextFlag":null,
-						    "price1":15.25,
-						    "price1Grade":null,
-						    "price1Text":null,
-						    "price1TextFlag":"2",
-						    "price8":null,
-						    "price8Grade":null,
-						    "price8Text":null,
-						    "price8TextFlag":null,
-						    "ladderPriceFlag":"0",
-						    "price2":null,
-						    "price3":null,
-						    "price4":null,
-						    "price5":null,
-						    "price6":null,
-						    "price7":null,
-						    "fee":null,
-						    "stock":100,
-						    "hasSkuFlag":"1",
-						    "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-						    "propertiesInfo":null,
-						    "addTime":"2021-03-09 15:32:19",
-						    "updateTime":"2021-03-09 15:32:19",
-						    "classifyAddTime":null,
-						    "sellNumber":0,
-						    "weekSellNumber":null,
-						    "beforeValidFlag":null,
-						    "validFlag":"2",
-						    "favoriteTimes":0,
-						    "commentScore":0,
-						    "commentTimes":0,
-						    "selfRecommendFlag":null,
-						    "sysRecommendFlag":null,
-						    "sortIndex":0,
-						    "featuredFlag":"0",
-						    "featuredSortIndex":null,
-						    "productCode":"sdfsSGZee3336421",
-						    "rate1":null,
-						    "rate2":null,
-						    "unit":"瓶",
-						    "synToERPFlag":null,
-						    "allAreaFlag":"1",
-						    "provinceIDs":"0",
-						    "serviceNumber":"1",
-						    "maxBuyNumber":null,
-						    "virtualFlag":null,
-						    "minBuyNumber":1,
-						    "packageCount":null,
-						    "byFlag":null,
-						    "normalProductFlag":1,
-						    "wholeSaleProductFlag":null,
-						    "promotionProductFlag":null,
-						    "groupBuyProductFlag":null,
-						    "step":1,
-						    "speCommisionFlag":null,
-						    "speCommision":null,
-						    "videourl":null,
-						    "props":null,
-						    "providers":null,
-						    "serviceCommissionRatio":null,
-						    "reCommissionRatio":null,
-						    "pushToERPName":null,
-						    "prodBeans":null,
-						    "useBeansFlag":null,
-						    "privateFlag":null,
-						    "invisibleServiceProviderIDs":null,
-						    "displayOnCRMFlag":null,
-						    "needServiceFlag":null,
-						    "actFlag":0,
-						    "actStatus":null,
-						    "actSort":null,
-						    "actPrice0":null,
-						    "actPrice1":null,
-						    "actPrice2":null,
-						    "actPrice3":null,
-						    "actPrice4":null,
-						    "actPrice5":null,
-						    "actPrice6":null,
-						    "actPrice7":null,
-						    "actType":null,
-						    "actCreateTime":null,
-						    "actFullReduceAmount":null,
-						    "actReduceAmount":null,
-						    "visibility":"3",
-						    "actFullGiftAmount":null,
-						    "actBuyGiftNum":null,
-						    "beginTime":null,
-						    "endTime":null,
-						    "shopIndexModuleID":null,
-						    "onlineTime":null,
-						    "downlineTime":null,
-						    "freePostFlag":"2",
-						    "crmBigTypeId":null,
-						    "crmSmallTypeId":null,
-						    "costPrice":10,
-						    "costProportional":null,
-						    "costCheckFlag":"1",
-						    "precisehKey":null,
-						    "docBoost":null,
-						    "cmbeanFlag":null,
-						    "cmbeanPrice":null,
-						    "cmbeanSort":null,
-						    "tags":"注射",
-						    "surplusTime":null,
-						    "productType":"1",
-						    "machineType":"",
-						    "qualificationImg":"",
-						    "includedTax":"0",
-						    "taxPoint":10,
-						    "supplierTaxPoint":10,
-						    "invoiceType":"3",
-						    "recommendType":"0",
-						    "skuID":null,
-						    "priceType":null,
-						    "combinationID":null,
-						    "combinationSort":null,
-						    "productCategory":"1",
-						    "auditReason":null,
-						    "commodityType":"1",
-						    "retailPrice":15.25,
-						    "discountPrice":null,
-						    "tagsList":null,
-						    "imageList":null,
-						    "productDetail":null,
-						    "productCount":1,
-						    "ladderPriceList":null,
-						    "shop":null,
-						    "sellerCartId":3771,
-						    "productsChecked":false,
-						    "repurchasePriceState":false,
-						    "initProductNum":null,
-						    "totalPrice":null,
-						    "failureState":null,
-						    "smallTypeID":1037,
-						    "bigTypeID":1013,
-						    "typeName":null,
-						    "parametersList":null,
-						    "brandName":null,
-						    "bigTypeName":null,
-						    "smallTypeName":null,
-						    "tinyTypeName":null,
-						    "activityDiscount":null,
-						    "promotions":null,
-						    "giftType":null,
-						    "userIdentity":null,
-						    "isChecked":false,
-						    "detailTalkFlag":null,
-						    "shopName":null,
-						    "beautyActFlag":null
-						},
-						{
-						    "productID":6421,
-						    "brandID":25,
-						    "tinyTypeID":1120,
-						    "classifyId":null,
-						    "preferredFlag":null,
-						    "selfTypeID":null,
-						    "shopID":10134,
-						    "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-						    "aliasName":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-						    "searchKey":"##########",
-						    "productRemarks":null,
-						    "normalPrice":15.25,
-						    "price":15.25,
-						    "highestUserLevelPrice":null,
-						    "lowestUserLevelPrice":null,
-						    "lowestUserLevelID":null,
-						    "price0":null,
-						    "price0Grade":null,
-						    "price0Text":null,
-						    "price0TextFlag":null,
-						    "price1":15.25,
-						    "price1Grade":null,
-						    "price1Text":null,
-						    "price1TextFlag":"2",
-						    "price8":null,
-						    "price8Grade":null,
-						    "price8Text":null,
-						    "price8TextFlag":null,
-						    "ladderPriceFlag":"0",
-						    "price2":null,
-						    "price3":null,
-						    "price4":null,
-						    "price5":null,
-						    "price6":null,
-						    "price7":null,
-						    "fee":null,
-						    "stock":100,
-						    "hasSkuFlag":"1",
-						    "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-						    "propertiesInfo":null,
-						    "addTime":"2021-03-09 15:32:19",
-						    "updateTime":"2021-03-09 15:32:19",
-						    "classifyAddTime":null,
-						    "sellNumber":0,
-						    "weekSellNumber":null,
-						    "beforeValidFlag":null,
-						    "validFlag":"2",
-						    "favoriteTimes":0,
-						    "commentScore":0,
-						    "commentTimes":0,
-						    "selfRecommendFlag":null,
-						    "sysRecommendFlag":null,
-						    "sortIndex":0,
-						    "featuredFlag":"0",
-						    "featuredSortIndex":null,
-						    "productCode":"sdfsSGZee3336421",
-						    "rate1":null,
-						    "rate2":null,
-						    "unit":"瓶",
-						    "synToERPFlag":null,
-						    "allAreaFlag":"1",
-						    "provinceIDs":"0",
-						    "serviceNumber":"1",
-						    "maxBuyNumber":null,
-						    "virtualFlag":null,
-						    "minBuyNumber":1,
-						    "packageCount":null,
-						    "byFlag":null,
-						    "normalProductFlag":1,
-						    "wholeSaleProductFlag":null,
-						    "promotionProductFlag":null,
-						    "groupBuyProductFlag":null,
-						    "step":1,
-						    "speCommisionFlag":null,
-						    "speCommision":null,
-						    "videourl":null,
-						    "props":null,
-						    "providers":null,
-						    "serviceCommissionRatio":null,
-						    "reCommissionRatio":null,
-						    "pushToERPName":null,
-						    "prodBeans":null,
-						    "useBeansFlag":null,
-						    "privateFlag":null,
-						    "invisibleServiceProviderIDs":null,
-						    "displayOnCRMFlag":null,
-						    "needServiceFlag":null,
-						    "actFlag":0,
-						    "actStatus":null,
-						    "actSort":null,
-						    "actPrice0":null,
-						    "actPrice1":null,
-						    "actPrice2":null,
-						    "actPrice3":null,
-						    "actPrice4":null,
-						    "actPrice5":null,
-						    "actPrice6":null,
-						    "actPrice7":null,
-						    "actType":null,
-						    "actCreateTime":null,
-						    "actFullReduceAmount":null,
-						    "actReduceAmount":null,
-						    "visibility":"3",
-						    "actFullGiftAmount":null,
-						    "actBuyGiftNum":null,
-						    "beginTime":null,
-						    "endTime":null,
-						    "shopIndexModuleID":null,
-						    "onlineTime":null,
-						    "downlineTime":null,
-						    "freePostFlag":"2",
-						    "crmBigTypeId":null,
-						    "crmSmallTypeId":null,
-						    "costPrice":10,
-						    "costProportional":null,
-						    "costCheckFlag":"1",
-						    "precisehKey":null,
-						    "docBoost":null,
-						    "cmbeanFlag":null,
-						    "cmbeanPrice":null,
-						    "cmbeanSort":null,
-						    "tags":"注射",
-						    "surplusTime":null,
-						    "productType":"1",
-						    "machineType":"",
-						    "qualificationImg":"",
-						    "includedTax":"0",
-						    "taxPoint":10,
-						    "supplierTaxPoint":10,
-						    "invoiceType":"3",
-						    "recommendType":"0",
-						    "skuID":null,
-						    "priceType":null,
-						    "combinationID":null,
-						    "combinationSort":null,
-						    "productCategory":"1",
-						    "auditReason":null,
-						    "commodityType":"1",
-						    "retailPrice":15.25,
-						    "discountPrice":null,
-						    "tagsList":null,
-						    "imageList":null,
-						    "productDetail":null,
-						    "productCount":1,
-						    "ladderPriceList":null,
-						    "shop":null,
-						    "sellerCartId":3771,
-						    "productsChecked":false,
-						    "repurchasePriceState":false,
-						    "initProductNum":null,
-						    "totalPrice":null,
-						    "failureState":null,
-						    "smallTypeID":1037,
-						    "bigTypeID":1013,
-						    "typeName":null,
-						    "parametersList":null,
-						    "brandName":null,
-						    "bigTypeName":null,
-						    "smallTypeName":null,
-						    "tinyTypeName":null,
-						    "activityDiscount":null,
-						    "promotions":null,
-						    "giftType":null,
-						    "userIdentity":null,
-						    "isChecked":false,
-						    "detailTalkFlag":null,
-						    "shopName":null,
-						    "beautyActFlag":null
-						},
-                        {
-                            "productID":6420,
-                            "brandID":25,
-                            "tinyTypeID":null,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】润百颜注射修饰透明质酸钠凝胶1ml",
-                            "aliasName":"【测试用】润百颜注射修饰透明质酸钠凝胶1ml",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":25.75,
-                            "price":25.75,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":25.75,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":100,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHIIWATL05AAGHUpelz2U374.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:15:45",
-                            "updateTime":"2021-03-09 15:15:45",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"kscz6420",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"盒",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":20,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"注射",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":10,
-                            "supplierTaxPoint":10,
-                            "invoiceType":"2",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":28.325,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3772,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":null,
-                            "bigTypeID":1014,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        },
-                        {
-                            "productID":6419,
-                            "brandID":1,
-                            "tinyTypeID":null,
-                            "classifyId":null,
-                            "preferredFlag":null,
-                            "selfTypeID":null,
-                            "shopID":10134,
-                            "name":"【测试用】Dermaheal HSR 德玛莉肌活丝蕴凝颜精华液",
-                            "aliasName":"【测试用】Dermaheal HSR 德玛莉肌活丝蕴凝颜精华液",
-                            "searchKey":"##########",
-                            "productRemarks":null,
-                            "normalPrice":25.25,
-                            "price":25.25,
-                            "highestUserLevelPrice":null,
-                            "lowestUserLevelPrice":null,
-                            "lowestUserLevelID":null,
-                            "price0":null,
-                            "price0Grade":null,
-                            "price0Text":null,
-                            "price0TextFlag":null,
-                            "price1":25.25,
-                            "price1Grade":null,
-                            "price1Text":null,
-                            "price1TextFlag":"2",
-                            "price8":null,
-                            "price8Grade":null,
-                            "price8Text":null,
-                            "price8TextFlag":null,
-                            "ladderPriceFlag":"0",
-                            "price2":null,
-                            "price3":null,
-                            "price4":null,
-                            "price5":null,
-                            "price6":null,
-                            "price7":null,
-                            "fee":null,
-                            "stock":200,
-                            "hasSkuFlag":"1",
-                            "mainImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHH8aAFiGIAAGHr5DovGA124.jpg",
-                            "propertiesInfo":null,
-                            "addTime":"2021-03-09 15:12:28",
-                            "updateTime":"2021-03-09 15:12:28",
-                            "classifyAddTime":null,
-                            "sellNumber":0,
-                            "weekSellNumber":null,
-                            "beforeValidFlag":null,
-                            "validFlag":"2",
-                            "favoriteTimes":0,
-                            "commentScore":0,
-                            "commentTimes":0,
-                            "selfRecommendFlag":null,
-                            "sysRecommendFlag":null,
-                            "sortIndex":0,
-                            "featuredFlag":"0",
-                            "featuredSortIndex":null,
-                            "productCode":"FWLCP6419",
-                            "rate1":null,
-                            "rate2":null,
-                            "unit":"片",
-                            "synToERPFlag":null,
-                            "allAreaFlag":"1",
-                            "provinceIDs":"0",
-                            "serviceNumber":"1",
-                            "maxBuyNumber":null,
-                            "virtualFlag":null,
-                            "minBuyNumber":1,
-                            "packageCount":null,
-                            "byFlag":null,
-                            "normalProductFlag":1,
-                            "wholeSaleProductFlag":null,
-                            "promotionProductFlag":null,
-                            "groupBuyProductFlag":null,
-                            "step":1,
-                            "speCommisionFlag":null,
-                            "speCommision":null,
-                            "videourl":null,
-                            "props":null,
-                            "providers":null,
-                            "serviceCommissionRatio":null,
-                            "reCommissionRatio":null,
-                            "pushToERPName":null,
-                            "prodBeans":null,
-                            "useBeansFlag":null,
-                            "privateFlag":null,
-                            "invisibleServiceProviderIDs":null,
-                            "displayOnCRMFlag":null,
-                            "needServiceFlag":null,
-                            "actFlag":0,
-                            "actStatus":null,
-                            "actSort":null,
-                            "actPrice0":null,
-                            "actPrice1":null,
-                            "actPrice2":null,
-                            "actPrice3":null,
-                            "actPrice4":null,
-                            "actPrice5":null,
-                            "actPrice6":null,
-                            "actPrice7":null,
-                            "actType":null,
-                            "actCreateTime":null,
-                            "actFullReduceAmount":null,
-                            "actReduceAmount":null,
-                            "visibility":"3",
-                            "actFullGiftAmount":null,
-                            "actBuyGiftNum":null,
-                            "beginTime":null,
-                            "endTime":null,
-                            "shopIndexModuleID":null,
-                            "onlineTime":null,
-                            "downlineTime":null,
-                            "freePostFlag":"2",
-                            "crmBigTypeId":null,
-                            "crmSmallTypeId":null,
-                            "costPrice":20,
-                            "costProportional":null,
-                            "costCheckFlag":"1",
-                            "precisehKey":null,
-                            "docBoost":null,
-                            "cmbeanFlag":null,
-                            "cmbeanPrice":null,
-                            "cmbeanSort":null,
-                            "tags":"面膜",
-                            "surplusTime":null,
-                            "productType":"1",
-                            "machineType":"",
-                            "qualificationImg":"",
-                            "includedTax":"0",
-                            "taxPoint":13,
-                            "supplierTaxPoint":13,
-                            "invoiceType":"1",
-                            "recommendType":"0",
-                            "skuID":null,
-                            "priceType":null,
-                            "combinationID":null,
-                            "combinationSort":null,
-                            "productCategory":"1",
-                            "auditReason":null,
-                            "commodityType":"1",
-                            "retailPrice":28.5325,
-                            "discountPrice":null,
-                            "tagsList":null,
-                            "imageList":null,
-                            "productDetail":null,
-                            "productCount":1,
-                            "ladderPriceList":null,
-                            "shop":null,
-                            "sellerCartId":3773,
-                            "productsChecked":false,
-                            "repurchasePriceState":false,
-                            "initProductNum":null,
-                            "totalPrice":null,
-                            "failureState":null,
-                            "smallTypeID":null,
-                            "bigTypeID":1018,
-                            "typeName":null,
-                            "parametersList":null,
-                            "brandName":null,
-                            "bigTypeName":null,
-                            "smallTypeName":null,
-                            "tinyTypeName":null,
-                            "activityDiscount":null,
-                            "promotions":null,
-                            "giftType":null,
-                            "userIdentity":null,
-                            "isChecked":false,
-                            "detailTalkFlag":null,
-                            "shopName":null,
-                            "beautyActFlag":null
-                        }
-                    ]			
-const orderDataList = [
-            {
-                "orderID":15212,
-                "orderNo":"X161613565411068",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19376",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"1",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":500,
-                "orderTotalFee":500,
-                "payTotalFee":500,
-                "payableAmount":500,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 14:34:14",
-                "productCount":1,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-19 14:34:14",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":500,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19376,
-                        "shopOrderNo":"X16161356541106801",
-                        "orderNo":"X161613565411068",
-                        "orderID":15212,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":1186,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":1,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":8500,
-                        "totalAmount":500,
-                        "needPayAmount":500,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 14:34:14",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":500,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":1090,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"0",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":7410,
-                        "shopPostFee":0,
-                        "shopTaxFee":0,
-                        "shouldPayShopAmount":7410,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"北京嘉盛壹美科技有限公司",
-                        "shopLogo":"https://www-b.caimei365.com/img/default/suppliver.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29361,
-                                "orderNo":"X161613565411068",
-                                "orderID":15212,
-                                "shopOrderID":19376,
-                                "shopOrderNo":"X16161356541106801",
-                                "shopID":1186,
-                                "productID":3957,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":8500,
-                                "normalPrice":10000,
-                                "costPrice":7410,
-                                "price0":8500,
-                                "price1":8500,
-                                "totalAmount":8500,
-                                "totalFee":500,
-                                "shouldPayFee":500,
-                                "discount":100,
-                                "discountPrice":8500,
-                                "includedTax":"2",
-                                "invoiceType":"3",
-                                "taxRate":0,
-                                "supplierTaxRate":0,
-                                "addedValueTax":0,
-                                "totalAddedValueTax":0,
-                                "shouldPayTotalTax":0,
-                                "singleShouldPayTotalTax":0,
-                                "shopProductAmount":7410,
-                                "shopFee":7410,
-                                "otherFee":0,
-                                "cmFee":1090,
-                                "singleShopFee":7410,
-                                "singleOtherFee":0,
-                                "singleCmFee":1090,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"1",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"北京嘉盛壹美科技有限公司",
-                                "name":"A-ONE TAB with wifi检测仪 面部检测仪",
-                                "productUnit":"台",
-                                "productImage":"https://img.caimei365.com/group1/M00/00/8A/Cmis2FpfAGOAaCQfAACFGx9pRi496.JPEG",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":397,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":{
-                                    "id":397,
-                                    "name":"优惠价",
-                                    "description":null,
-                                    "type":1,
-                                    "mode":1,
-                                    "touchPrice":500,
-                                    "reducedPrice":null,
-                                    "beginTime":null,
-                                    "endTime":null,
-                                    "status":1,
-                                    "supplierId":null,
-                                    "productId":null,
-                                    "orderId":15212,
-                                    "productList":null,
-                                    "giftList":null,
-                                    "products":null
-                                },
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":true,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15211,
-                "orderNo":"X161613560870120",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19375",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"1",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":275008.8,
-                "orderTotalFee":275008.8,
-                "payTotalFee":275008.8,
-                "payableAmount":275008.8,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 14:33:28",
-                "productCount":1,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-19 14:33:28",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":275008.8,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19375,
-                        "shopOrderNo":"X16161356087012001",
-                        "orderNo":"X161613560870120",
-                        "orderID":15211,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":1001,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":1,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":250008,
-                        "totalAmount":275008.8,
-                        "needPayAmount":275008.8,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 14:33:28",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":275009,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":274782.8,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"0",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":200,
-                        "shopPostFee":0,
-                        "shopTaxFee":26,
-                        "shouldPayShopAmount":226,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"香港丽润国际",
-                        "shopLogo":"https://www-b.caimei365.com/uploadFile/shopLogo/ZXV6IIFSP520140415035836.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29360,
-                                "orderNo":"X161613560870120",
-                                "orderID":15211,
-                                "shopOrderID":19375,
-                                "shopOrderNo":"X16161356087012001",
-                                "shopID":1001,
-                                "productID":1010,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":275008.8,
-                                "normalPrice":660,
-                                "costPrice":200,
-                                "price0":250008,
-                                "price1":250008,
-                                "totalAmount":250008,
-                                "totalFee":275008.8,
-                                "shouldPayFee":275008.8,
-                                "discount":100,
-                                "discountPrice":300009.6,
-                                "includedTax":"0",
-                                "invoiceType":"1",
-                                "taxRate":10,
-                                "supplierTaxRate":13,
-                                "addedValueTax":25000.8,
-                                "totalAddedValueTax":25000.8,
-                                "shouldPayTotalTax":26,
-                                "singleShouldPayTotalTax":26,
-                                "shopProductAmount":200,
-                                "shopFee":226,
-                                "otherFee":0,
-                                "cmFee":274782.8,
-                                "singleShopFee":226,
-                                "singleOtherFee":0,
-                                "singleCmFee":274782.8,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"1",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"香港丽润国际",
-                                "name":"大幅度第三方团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳",
-                                "productUnit":"100ml/瓶",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/09/Cmgy61-Gr6qAG5rbAADFf8tivls567.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":false,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15210,
-                "orderNo":"X161613547788441",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19374",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"1",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":275008.8,
-                "orderTotalFee":275008.8,
-                "payTotalFee":275008.8,
-                "payableAmount":275008.8,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 14:31:17",
-                "productCount":1,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-19 14:31:17",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":275008.8,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19374,
-                        "shopOrderNo":"X16161354778844101",
-                        "orderNo":"X161613547788441",
-                        "orderID":15210,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":1001,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":1,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":250008,
-                        "totalAmount":275008.8,
-                        "needPayAmount":275008.8,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 14:31:17",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":275009,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":274782.8,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"0",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":200,
-                        "shopPostFee":0,
-                        "shopTaxFee":26,
-                        "shouldPayShopAmount":226,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"香港丽润国际",
-                        "shopLogo":"https://www-b.caimei365.com/uploadFile/shopLogo/ZXV6IIFSP520140415035836.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29359,
-                                "orderNo":"X161613547788441",
-                                "orderID":15210,
-                                "shopOrderID":19374,
-                                "shopOrderNo":"X16161354778844101",
-                                "shopID":1001,
-                                "productID":1010,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":275008.8,
-                                "normalPrice":660,
-                                "costPrice":200,
-                                "price0":250008,
-                                "price1":250008,
-                                "totalAmount":250008,
-                                "totalFee":275008.8,
-                                "shouldPayFee":275008.8,
-                                "discount":100,
-                                "discountPrice":300009.6,
-                                "includedTax":"0",
-                                "invoiceType":"1",
-                                "taxRate":10,
-                                "supplierTaxRate":13,
-                                "addedValueTax":25000.8,
-                                "totalAddedValueTax":25000.8,
-                                "shouldPayTotalTax":26,
-                                "singleShouldPayTotalTax":26,
-                                "shopProductAmount":200,
-                                "shopFee":226,
-                                "otherFee":0,
-                                "cmFee":274782.8,
-                                "singleShopFee":226,
-                                "singleOtherFee":0,
-                                "singleCmFee":274782.8,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"1",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"香港丽润国际",
-                                "name":"大幅度第三方团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳团雪山之恋丝绒洁面乳",
-                                "productUnit":"100ml/瓶",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/09/Cmgy61-Gr6qAG5rbAADFf8tivls567.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":false,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15209,
-                "orderNo":"X161613544703234",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19373",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"0",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":1800,
-                "orderTotalFee":1800,
-                "payTotalFee":1800,
-                "payableAmount":1800,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 14:30:47",
-                "productCount":3,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-19 14:30:47",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":1800,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19373,
-                        "shopOrderNo":"X16161354470323401",
-                        "orderNo":"X161613544703234",
-                        "orderID":15209,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":10109,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":3,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":1800,
-                        "totalAmount":1800,
-                        "needPayAmount":1800,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 14:30:47",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":1800,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":900,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"1",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":900,
-                        "shopPostFee":0,
-                        "shopTaxFee":0,
-                        "shouldPayShopAmount":900,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"演员测试供应商AAA",
-                        "shopLogo":"https://img-b.caimei365.com/group1/M00/02/EA/Cmgy618FyDCAcnqjAABqocyxYRw91.JPEG",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29358,
-                                "orderNo":"X161613544703234",
-                                "orderID":15209,
-                                "shopOrderID":19373,
-                                "shopOrderNo":"X16161354470323401",
-                                "shopID":10109,
-                                "productID":4357,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":3,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":600,
-                                "normalPrice":500,
-                                "costPrice":300,
-                                "price0":600,
-                                "price1":600,
-                                "totalAmount":1800,
-                                "totalFee":1800,
-                                "shouldPayFee":1800,
-                                "discount":100,
-                                "discountPrice":600,
-                                "includedTax":"2",
-                                "invoiceType":"3",
-                                "taxRate":0,
-                                "supplierTaxRate":0,
-                                "addedValueTax":0,
-                                "totalAddedValueTax":0,
-                                "shouldPayTotalTax":0,
-                                "singleShouldPayTotalTax":0,
-                                "shopProductAmount":900,
-                                "shopFee":900,
-                                "otherFee":0,
-                                "cmFee":900,
-                                "singleShopFee":300,
-                                "singleOtherFee":0,
-                                "singleCmFee":300,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":3,
-                                "cmbeanPrice":null,
-                                "isActProduct":"2",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"演员测试供应商AAA",
-                                "name":"演员测试供应商商品显示名AAA",
-                                "productUnit":"包",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/02/E0/Cmgy618EE1OAN0e7AAIcZ5Hb98Q16.jfif",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":1,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":false,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15208,
-                "orderNo":"X161613541392914",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19372",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"1",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":116.86,
-                "orderTotalFee":116.86,
-                "payTotalFee":116.86,
-                "payableAmount":116.86,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 14:30:13",
-                "productCount":7,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-19 14:30:13",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":116.86,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19372,
-                        "shopOrderNo":"X16161354139291401",
-                        "orderNo":"X161613541392914",
-                        "orderID":15208,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":10134,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":7,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":127.25,
-                        "totalAmount":116.86,
-                        "needPayAmount":116.86,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 14:30:13",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":116.857,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":38.51,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"1",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":90,
-                        "shopPostFee":0,
-                        "shopTaxFee":4.6,
-                        "shouldPayShopAmount":94.6,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"深圳市美轮美奂服务有限公司",
-                        "shopLogo":"https://www-b.caimei365.com/img/default/suppliver.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29355,
-                                "orderNo":"X161613541392914",
-                                "orderID":15208,
-                                "shopOrderID":19372,
-                                "shopOrderNo":"X16161354139291401",
-                                "shopID":10134,
-                                "productID":6420,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":28.325,
-                                "normalPrice":25.75,
-                                "costPrice":20,
-                                "price0":25.75,
-                                "price1":25.75,
-                                "totalAmount":25.75,
-                                "totalFee":28.33,
-                                "shouldPayFee":28.33,
-                                "discount":100,
-                                "discountPrice":30.905,
-                                "includedTax":"0",
-                                "invoiceType":"2",
-                                "taxRate":10,
-                                "supplierTaxRate":10,
-                                "addedValueTax":2.58,
-                                "totalAddedValueTax":2.58,
-                                "shouldPayTotalTax":2,
-                                "singleShouldPayTotalTax":2,
-                                "shopProductAmount":20,
-                                "shopFee":22,
-                                "otherFee":0,
-                                "cmFee":6.33,
-                                "singleShopFee":22,
-                                "singleOtherFee":0,
-                                "singleCmFee":6.33,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"0",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"深圳市美轮美奂服务有限公司",
-                                "name":"【测试用】润百颜注射修饰透明质酸钠凝胶1ml",
-                                "productUnit":"盒",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHIIWATL05AAGHUpelz2U374.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            },
-                            {
-                                "orderProductID":29356,
-                                "orderNo":"X161613541392914",
-                                "orderID":15208,
-                                "shopOrderID":19372,
-                                "shopOrderNo":"X16161354139291401",
-                                "shopID":10134,
-                                "productID":6419,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":28.5325,
-                                "normalPrice":25.25,
-                                "costPrice":20,
-                                "price0":25.25,
-                                "price1":25.25,
-                                "totalAmount":25.25,
-                                "totalFee":28.53,
-                                "shouldPayFee":28.53,
-                                "discount":100,
-                                "discountPrice":31.8125,
-                                "includedTax":"0",
-                                "invoiceType":"1",
-                                "taxRate":13,
-                                "supplierTaxRate":13,
-                                "addedValueTax":3.28,
-                                "totalAddedValueTax":3.28,
-                                "shouldPayTotalTax":2.6,
-                                "singleShouldPayTotalTax":2.6,
-                                "shopProductAmount":20,
-                                "shopFee":22.6,
-                                "otherFee":0,
-                                "cmFee":5.93,
-                                "singleShopFee":22.6,
-                                "singleOtherFee":0,
-                                "singleCmFee":5.93,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"0",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"深圳市美轮美奂服务有限公司",
-                                "name":"【测试用】Dermaheal HSR 德玛莉肌活丝蕴凝颜精华液",
-                                "productUnit":"片",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHH8aAFiGIAAGHr5DovGA124.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            },
-                            {
-                                "orderProductID":29357,
-                                "orderNo":"X161613541392914",
-                                "orderID":15208,
-                                "shopOrderID":19372,
-                                "shopOrderNo":"X16161354139291401",
-                                "shopID":10134,
-                                "productID":6421,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":5,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":15.25,
-                                "normalPrice":15.25,
-                                "costPrice":10,
-                                "price0":15.25,
-                                "price1":15.25,
-                                "totalAmount":76.25,
-                                "totalFee":60,
-                                "shouldPayFee":60,
-                                "discount":100,
-                                "discountPrice":15.25,
-                                "includedTax":"0",
-                                "invoiceType":"3",
-                                "taxRate":0,
-                                "supplierTaxRate":0,
-                                "addedValueTax":0,
-                                "totalAddedValueTax":0,
-                                "shouldPayTotalTax":0,
-                                "singleShouldPayTotalTax":0,
-                                "shopProductAmount":50,
-                                "shopFee":50,
-                                "otherFee":0,
-                                "cmFee":26.25,
-                                "singleShopFee":10,
-                                "singleOtherFee":0,
-                                "singleCmFee":5.25,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":5,
-                                "cmbeanPrice":null,
-                                "isActProduct":"1",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"深圳市美轮美奂服务有限公司",
-                                "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                                "productUnit":"瓶",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":396,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":{
-                                    "id":396,
-                                    "name":"优惠价",
-                                    "description":null,
-                                    "type":1,
-                                    "mode":1,
-                                    "touchPrice":12,
-                                    "reducedPrice":null,
-                                    "beginTime":null,
-                                    "endTime":null,
-                                    "status":1,
-                                    "supplierId":null,
-                                    "productId":null,
-                                    "orderId":15208,
-                                    "productList":null,
-                                    "giftList":null,
-                                    "products":null
-                                },
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":false,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15207,
-                "orderNo":"P161612466484974",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":null,
-                "shopOrderIDs":"19371",
-                "orderSubmitType":4,
-                "orderType":0,
-                "hasActProduct":null,
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":3000,
-                "orderTotalFee":3390,
-                "payTotalFee":3390,
-                "payableAmount":3390,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":null,
-                "note":"",
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"4",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-19 11:30:48",
-                "productCount":10,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":null,
-                "cooFreeRate":null,
-                "cooFreeAmount":null,
-                "invoiceFlag":null,
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":"",
-                "clauseName":"无条款",
-                "updateDate":null,
-                "freePostFlag":"0",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":3390,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19371,
-                        "shopOrderNo":"P16161246648497401",
-                        "orderNo":"P161612466484974",
-                        "orderID":15207,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":1001,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":4,
-                        "presentNum":0,
-                        "itemCount":10,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":null,
-                        "fee":null,
-                        "accountAmount":0,
-                        "productAmount":3000,
-                        "totalAmount":3390,
-                        "needPayAmount":3390,
-                        "discountAmount":0,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-19 11:30:48",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":0,
-                        "status":null,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":null,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":0,
-                        "totalAddedValueTax":390,
-                        "canRefundAmount":0,
-                        "refundAmount":0,
-                        "clubID":5638,
-                        "spID":null,
-                        "mainSpID":null,
-                        "orderBeanAmount":null,
-                        "useBeanAmount":null,
-                        "useBeanFlag":null,
-                        "canRefundFlag":null,
-                        "useBalanceFlag":null,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":-836.3,
-                        "delFlag":"0",
-                        "refundsAmount":null,
-                        "orderStatusFlag":null,
-                        "buyStatus":null,
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"1",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":3051,
-                        "shopPostFee":0,
-                        "shopTaxFee":396.63,
-                        "shouldPayShopAmount":3447.63,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"香港丽润国际",
-                        "shopLogo":"https://www-b.caimei365.com/uploadFile/shopLogo/ZXV6IIFSP520140415035836.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29354,
-                                "orderNo":"P161612466484974",
-                                "orderID":15207,
-                                "shopOrderID":19371,
-                                "shopOrderNo":"P16161246648497401",
-                                "shopID":1001,
-                                "productID":1011,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":10,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":"Q1MMB1011",
-                                "price":339,
-                                "normalPrice":446.18,
-                                "costPrice":305.1,
-                                "price0":300,
-                                "price1":null,
-                                "totalAmount":3000,
-                                "totalFee":3390,
-                                "shouldPayFee":3390,
-                                "discount":100,
-                                "discountPrice":378,
-                                "includedTax":"0",
-                                "invoiceType":"2",
-                                "taxRate":13,
-                                "supplierTaxRate":13,
-                                "addedValueTax":39,
-                                "totalAddedValueTax":390,
-                                "shouldPayTotalTax":396.63,
-                                "singleShouldPayTotalTax":39.66,
-                                "shopProductAmount":3051,
-                                "shopFee":3836.3,
-                                "otherFee":0,
-                                "cmFee":-836.3,
-                                "singleShopFee":383.63,
-                                "singleOtherFee":0,
-                                "singleCmFee":-83.63,
-                                "status":"0",
-                                "commentFlag":"0",
-                                "totalBeans":null,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":10,
-                                "cmbeanPrice":null,
-                                "isActProduct":"0",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"1",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"香港丽润国际",
-                                "name":"阶雪山之恋保湿滋润面霜",
-                                "productUnit":"50ml",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/09/Cmgy61-Gqq6AcI4pAACGvvokTl0257.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":1,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":true,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15189,
-                "orderNo":"X161605858703888",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19353",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"0",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":49.78,
-                "orderTotalFee":49.78,
-                "payTotalFee":49.78,
-                "payableAmount":49.78,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-18 17:09:47",
-                "productCount":1,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"0",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-18 17:09:47",
-                "freePostFlag":"-1",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":49.78,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19353,
-                        "shopOrderNo":"X16160585870388801",
-                        "orderNo":"X161605858703888",
-                        "orderID":15189,
-                        "organizeID":null,
-                        "userID":11063,
-                        "shopID":10133,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":1,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":-1,
-                        "accountAmount":0,
-                        "productAmount":45.25,
-                        "totalAmount":49.78,
-                        "needPayAmount":49.78,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-18 17:09:47",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":49.775,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":5.78,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"0",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":40,
-                        "shopPostFee":0,
-                        "shopTaxFee":4,
-                        "shouldPayShopAmount":44,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"深圳市采美奥泰贸易有限公司",
-                        "shopLogo":"https://www-b.caimei365.com/uploadFile/shopLogo//userfiles/1/images/photo/2021/01/Cmis21__5o-ADIQEAAD1N_9T1C4174.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29336,
-                                "orderNo":"X161605858703888",
-                                "orderID":15189,
-                                "shopOrderID":19353,
-                                "shopOrderNo":"X16160585870388801",
-                                "shopID":10133,
-                                "productID":6418,
-                                "organizeProductID":null,
-                                "organizeID":null,
-                                "num":1,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":49.775,
-                                "normalPrice":45.25,
-                                "costPrice":40,
-                                "price0":45.25,
-                                "price1":45.25,
-                                "totalAmount":45.25,
-                                "totalFee":49.78,
-                                "shouldPayFee":49.78,
-                                "discount":100,
-                                "discountPrice":54.305,
-                                "includedTax":"0",
-                                "invoiceType":"2",
-                                "taxRate":10,
-                                "supplierTaxRate":10,
-                                "addedValueTax":4.53,
-                                "totalAddedValueTax":4.53,
-                                "shouldPayTotalTax":4,
-                                "singleShouldPayTotalTax":4,
-                                "shopProductAmount":40,
-                                "shopFee":44,
-                                "otherFee":0,
-                                "cmFee":5.78,
-                                "singleShopFee":44,
-                                "singleOtherFee":0,
-                                "singleCmFee":5.78,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":1,
-                                "cmbeanPrice":null,
-                                "isActProduct":"0",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"深圳市采美奥泰贸易有限公司",
-                                "name":"【测试用】EndyMed-3Deep-医学美容多功能相控射频",
-                                "productUnit":"台",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHEMOAFVmsAAGOILQcRyE020.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":true,
-                "expensesOfTaxation":null
-            },
-            {
-                "orderID":15170,
-                "orderNo":"X161595081871691",
-                "organizeID":0,
-                "userID":11063,
-                "buyUserID":11062,
-                "shopOrderIDs":"19325",
-                "orderSubmitType":3,
-                "orderType":0,
-                "hasActProduct":"0",
-                "autoCloseTimeMills":0,
-                "status":"0",
-                "receiptStatus":"1",
-                "payStatus":"1",
-                "sendOutStatus":"1",
-                "refundType":"0",
-                "paySuccessCounter":0,
-                "payFlag":"0",
-                "onlinePayFlag":"0",
-                "productTotalFee":61,
-                "orderTotalFee":61,
-                "payTotalFee":61,
-                "payableAmount":61,
-                "balancePayFee":0,
-                "preferential":0,
-                "discountFee":0,
-                "promotionFullReduction":0,
-                "spID":1401,
-                "mainSpID":1304,
-                "note":null,
-                "clubID":5638,
-                "clubScanTime":null,
-                "payWay":null,
-                "orderSource":"6",
-                "closeTime":null,
-                "confirmTime":null,
-                "payTime":null,
-                "orderTime":"2021-03-17 11:13:38",
-                "productCount":4,
-                "presentCount":0,
-                "promotionalGiftsCount":0,
-                "cooFreeFlag":"0",
-                "cooFreeRate":0,
-                "cooFreeAmount":0,
-                "invoiceFlag":"2",
-                "confirmFlag":"0",
-                "clauseID":1,
-                "clauseContent":null,
-                "clauseName":"无条款",
-                "updateDate":"2021-03-17 11:13:38",
-                "freePostFlag":"0",
-                "freight":0,
-                "delFlag":"0",
-                "freePostageTicketID":null,
-                "splitFlag":"1",
-                "closeReason":null,
-                "postageOrderFlag":"0",
-                "thirdPartyOrderNo":null,
-                "secondHandOrderFlag":"0",
-                "affirmPaymentFlag":"0",
-                "rebateFlag":"0",
-                "zeroCostFlag":0,
-                "orderState":null,
-                "orderMark":null,
-                "receiptAmount":0,
-                "pendingPayments":61,
-                "returnedPurchaseFee":null,
-                "shopOrderList":[
-                    {
-                        "shopOrderID":19325,
-                        "shopOrderNo":"X16159508187169101",
-                        "orderNo":"X161595081871691",
-                        "orderID":15170,
-                        "organizeID":0,
-                        "userID":11063,
-                        "shopID":10134,
-                        "orderPromotionsId":null,
-                        "orderType":0,
-                        "orderSubmitType":3,
-                        "presentNum":0,
-                        "itemCount":4,
-                        "outStoreNum":0,
-                        "outStoreTimes":0,
-                        "townID":null,
-                        "note":"",
-                        "fee":0,
-                        "accountAmount":0,
-                        "productAmount":61,
-                        "totalAmount":61,
-                        "needPayAmount":61,
-                        "discountAmount":null,
-                        "discountFee":0,
-                        "preferential":0,
-                        "promotionFullReduction":0,
-                        "payFlag":"0",
-                        "orderTime":"2021-03-17 11:13:38",
-                        "payTime":null,
-                        "finishTime":null,
-                        "autoOverTimeMills":null,
-                        "status":1,
-                        "payStatus":"1",
-                        "sendOutStatus":"1",
-                        "refundStatus":0,
-                        "returnGoodsStatus":null,
-                        "receiveGoodsTime":null,
-                        "autoReceiveTimeMills":null,
-                        "totalAddedValueTax":null,
-                        "canRefundAmount":61,
-                        "refundAmount":null,
-                        "clubID":5638,
-                        "spID":1401,
-                        "mainSpID":1304,
-                        "orderBeanAmount":0,
-                        "useBeanAmount":0,
-                        "useBeanFlag":0,
-                        "canRefundFlag":1,
-                        "useBalanceFlag":0,
-                        "canRefundBeans":null,
-                        "freePostageFee":null,
-                        "freePostageTicketID":null,
-                        "brokerage":21,
-                        "delFlag":"0",
-                        "refundsAmount":0,
-                        "orderStatusFlag":"1",
-                        "buyStatus":"1",
-                        "deliveryTimeMills":null,
-                        "orderDeliveryID":null,
-                        "splitFlag":"1",
-                        "receiptedFlag":null,
-                        "receiptedType":null,
-                        "paying":"0",
-                        "shopProductAmount":40,
-                        "shopPostFee":0,
-                        "shopTaxFee":0,
-                        "shouldPayShopAmount":40,
-                        "payedShopAmount":0,
-                        "shopOtherFee":0,
-                        "refunding":null,
-                        "costType":null,
-                        "proportional":null,
-                        "modifyShouldPayNote":null,
-                        "modifyShouldPayUserID":null,
-                        "modifyShouldPayDate":null,
-                        "zeroCostFlag":0,
-                        "shopName":"深圳市美轮美奂服务有限公司",
-                        "shopLogo":"https://www-b.caimei365.com/img/default/suppliver.jpg",
-                        "logisticsRecordList":null,
-                        "orderProductList":[
-                            {
-                                "orderProductID":29294,
-                                "orderNo":"X161595081871691",
-                                "orderID":15170,
-                                "shopOrderID":19325,
-                                "shopOrderNo":"X16159508187169101",
-                                "shopID":10134,
-                                "productID":6421,
-                                "organizeProductID":null,
-                                "organizeID":0,
-                                "num":4,
-                                "presentNum":0,
-                                "outStoreType":null,
-                                "skuID":null,
-                                "props":null,
-                                "propName":null,
-                                "productNo":null,
-                                "price":15.25,
-                                "normalPrice":15.25,
-                                "costPrice":10,
-                                "price0":15.25,
-                                "price1":15.25,
-                                "totalAmount":61,
-                                "totalFee":61,
-                                "shouldPayFee":61,
-                                "discount":100,
-                                "discountPrice":15.25,
-                                "includedTax":"0",
-                                "invoiceType":"3",
-                                "taxRate":0,
-                                "supplierTaxRate":0,
-                                "addedValueTax":0,
-                                "totalAddedValueTax":0,
-                                "shouldPayTotalTax":0,
-                                "singleShouldPayTotalTax":0,
-                                "shopProductAmount":40,
-                                "shopFee":40,
-                                "otherFee":0,
-                                "cmFee":21,
-                                "singleShopFee":10,
-                                "singleOtherFee":0,
-                                "singleCmFee":5.25,
-                                "status":null,
-                                "commentFlag":"0",
-                                "totalBeans":0,
-                                "useBalanceAmount":0,
-                                "useBeanAmount":null,
-                                "notOutStore":4,
-                                "cmbeanPrice":null,
-                                "isActProduct":"0",
-                                "isGiftProduct":"0",
-                                "productActInfo":null,
-                                "buyAgainFlag":"0",
-                                "confirmProductFlag":"0",
-                                "payStatus":"0",
-                                "shopName":"深圳市美轮美奂服务有限公司",
-                                "name":"【测试用】肌本演绎【O4元素破茧疗法】25800 特惠方案",
-                                "productUnit":"瓶",
-                                "productImage":"https://img-b.caimei365.com/group1/M00/03/20/Cmgy62BHJGCARS7iAAVlWLR-uKU385.jpg",
-                                "actType":null,
-                                "actPreferential":0,
-                                "productType":"0",
-                                "orderPromotionsId":null,
-                                "preferential":0,
-                                "discountFee":0,
-                                "cancelNum":null,
-                                "ladderPriceFlag":0,
-                                "shipmentsNum":null,
-                                "returnedNum":null,
-                                "actualCancelNum":null,
-                                "aliasName":null,
-                                "productCategory":"1",
-                                "secondHandType":null,
-                                "productPromotion":null,
-                                "includedTaxFlag":null
-                            }
-                        ],
-                        "userInfo":null,
-                        "name":null,
-                        "receiptStatus":null,
-                        "shopPromotion":null,
-                        "shouHuoRen":null
-                    }
-                ],
-                "clubName":"正经一点机构",
-                "invoiceStatus":false,
-                "payButton":false,
-                "expensesOfTaxation":null
-            }
-        ]
-module.exports = {
-	addressList,
-	cartList,
-	productList,
-	orderDataList
-}

ファイルの差分が大きいため隠しています
+ 0 - 0
common/libs/crypto-js.min.js


+ 23 - 0
common/uma.init.js

@@ -0,0 +1,23 @@
+/**
+ * 友盟+小程序统计
+ */
+import Vue from 'vue'
+import { umtrackWxKey } from '@/common/config.js'
+import uma from 'umtrack-wx'
+
+if (process.env.NODE_ENV === 'production') {
+    uma.init({
+        appKey: umtrackWxKey, //由友盟分配的APP_KEY
+        // 使用Openid进行统计,此项为false时将使用友盟+uuid进行用户统计。
+        // 使用Openid来统计微信小程序的用户,会使统计的指标更为准确,对系统准确性要求高的应用推荐使用Openid。
+        useOpenid: true,
+        // 使用openid进行统计时,是否授权友盟自动获取Openid,
+        // 如若需要,请到友盟后台"设置管理-应用信息"(https://mp.umeng.com/setting/appset)中设置appId及secret
+        autoGetOpenid: true,
+        debug: true, //是否打开调试模式
+        uploadUserInfo: false // 自动上传用户信息,设为false取消上传,默认为false
+    })
+    uma.install = function(Vue) {
+        Vue.prototype.$uma = uma
+    }
+}

+ 95 - 0
common/util.js

@@ -0,0 +1,95 @@
+/* 常用工具函数 */
+export const msg = (title, duration = 1500, mask = true, icon = 'none') => {
+    //统一提示方便全局修改
+    if (Boolean(title) === false) {
+        return
+    }
+    uni.showToast({
+        title,
+        duration,
+        mask,
+        icon
+    })
+}
+export const modal = (title, content, confirmText, cancelText, showCancel = false, callBack) => {
+    uni.showModal({
+        title,
+        content,
+        confirmText,
+        cancelText,
+        confirmColor: '#E15616',
+        showCancel,
+        success: function(res) {
+            if (res.confirm) {
+                callBack()
+            }
+        }
+    })
+}
+export const json = type => {
+    //模拟异步请求数据
+    return new Promise(resolve => {
+        setTimeout(() => {
+            // console.log(resolve+'======='+type);
+            resolve(Json[type])
+        }, 500)
+    })
+}
+
+export const prePage = () => {
+    let pages = getCurrentPages()
+    let prePage = pages[pages.length - 2]
+    // #ifdef H5
+    return prePage
+    // #endif
+    return prePage.$vm
+}
+
+/** 时间格式化
+ * @param {dateTime} date 标准时间格式 -> new Date()
+ * @param {string} format 时间格式化的格式 'yyyy-MM-dd hh:mm:ss'
+ * @returns {string} 格式化后的时间  '2017-01-01 01:00:00'
+ */
+export const dateFormat = (date = new Date(), format = 'yyyy-MM-dd hh:mm:ss') => {
+    var o = {
+        'M+': date.getMonth() + 1, // month
+        'd+': date.getDate(), // day
+        'h+': date.getHours(), // hour
+        'm+': date.getMinutes(), // minute
+        's+': date.getSeconds(), // second
+        'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
+        S: date.getMilliseconds(), // millisecond
+    }
+    if (/(y+)/.test(format)) {
+        format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+    }
+    for (var k in o) {
+        if (new RegExp('(' + k + ')').test(format)) {
+            format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k])
+                .length))
+        }
+    }
+    return format
+}
+
+// 两个简单数组是否交集
+export const isIntersect = (arr1 = [], arr2 = []) => {
+    // console.log(arr1, arr2)
+    return arr1.some(v => arr2.indexOf(v.toString()) > -1)
+}
+
+// 将对象转为querystring参数
+export const makeQueryStr = (obj) => {
+    const strs = []
+    for (let key in obj) {
+        strs.push(key + '=' + obj[key])
+    }
+    return strs.join('&')
+}
+
+const install = (Vue, vm) => {
+    console.log('初始化挂载($util)工具方法 util.js ')
+    Vue.prototype.$util = { msg, prePage, modal, makeQueryStr }
+}
+
+export default install

+ 151 - 0
common/utilsTools.js

@@ -0,0 +1,151 @@
+/**
+ * @Time 2019-12-12
+ * @Author Zhengjingyi
+ * @Action 全局公共方法
+ */
+import requestUrl from '@/services/config.env.js'
+
+export function getComStorage(key) { // 获取本地Storage
+    return new Promise(function(resolve, reject) {
+        uni.getStorage({
+            key: key,
+            success: function(res) {
+                resolve(res.data)
+            },
+            fail: function(res) {
+                reject(false)
+            }
+        })
+    })
+}
+
+export function setStorage(key, data) { // 存储本地Storage
+    return new Promise(function(resolve, reject) {
+        uni.setStorage({
+            key: key,
+            data: data,
+            success: function(res) {}
+        })
+    })
+}
+
+export function getStorage() { // 获取本地userInfo
+    return new Promise(function(resolve, reject) {
+        uni.getStorage({
+            key: 'userInfo',
+            success: function(res) {
+                resolve(res.data)
+            },
+            fail: function(res) {
+                reject(false)
+            }
+        })
+    })
+}
+
+export function getStorageAddressKey() { // 获取本地地址信息
+    return new Promise(function(resolve, reject) {
+        uni.getStorage({
+            key: 'address_key',
+            success: function(res) {
+                resolve(res.data)
+            }
+        })
+    })
+}
+
+export function navigateTo(url) {
+    //路由跳转:页面之间路由跳转
+    uni.navigateTo({
+        url: url
+    })
+}
+
+export function redirectTo(url) {
+    //路由跳转:关闭当前页跳转到新页面	
+    uni.redirectTo({
+        url: url
+    })
+}
+
+export function switchTabTo(url) {
+    //路由跳转:底部 tab页
+    uni.switchTab({
+        url: url
+    })
+}
+
+export function getWindowHeight() {
+    // 获取窗口高度
+    const { windowHeight, pixelRatio } = wx.getSystemInfoSync()
+    return windowHeight
+}
+
+export function adaptRichTextImg(res) {
+    /**
+     *@富文本实现图片自适应
+     *@style再添加自适应样式
+     */
+    const html = res.replace(/<img[^>]*>/gi, function(match, capture) {
+        let match1 = match.replace(/<img*/gi,
+                '<img style="width:100% !important;height:auto !important;float:left !important;"'),
+            results = match1.replace(/style=/gi, 'style="width:100%;height:auto;float:left;"')
+        return results
+    })
+    return html
+}
+
+export function formatDate() {
+    //获取当前时间
+    let date = new Date()
+    let y = date.getFullYear()
+    let MM = date.getMonth() + 1
+    MM = MM < 10 ? ('0' + MM) : MM
+    let d = date.getDate()
+    d = d < 10 ? ('0' + d) : d
+    let h = date.getHours()
+    h = h < 10 ? ('0' + h) : h
+    let m = date.getMinutes()
+    m = m < 10 ? ('0' + m) : m
+    let s = date.getSeconds()
+    s = s < 10 ? ('0' + s) : s
+    return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s
+}
+
+export function isNumber(value) { //验证是否为数字
+    var patrn = /^(-)?\d+(\.\d+)?$/
+    if (patrn.exec(value) == null || value == '') {
+        return false
+    } else {
+        return true
+    }
+}
+
+export function FormatMoney(num) {
+    // 金额千分位
+    return num.toString().replace(/\d+/, function(n) { // 先提取整数部分
+        return n.replace(/(\d)(?=(\d{3})+$)/g, function($1) { // 对整数部分添加分隔符
+            return $1 + ','
+        })
+    })
+}
+
+const install = Vue => {
+    console.log('初始化挂载($api)工具方法 utilsTools.js')
+    Vue.prototype.$api = {
+        FormatMoney,
+        formatDate,
+        navigateTo,
+        redirectTo,
+        switchTabTo,
+        isNumber,
+        setStorage,
+        getStorage,
+        getComStorage,
+        getWindowHeight,
+        adaptRichTextImg,
+        getStorageAddressKey,
+    }
+}
+
+export default install

+ 43 - 43
components/clipboard/clipboard.thorui.js

@@ -5,51 +5,51 @@
  * @version 1.0.0
  **/
 // #ifdef H5
-import ClipboardJS from "@/components/clipboard/clipboard.min.js"
+import ClipboardJS from '@/components/clipboard/clipboard.min.js'
 // #endif
 const thorui = {
-	getClipboardData: function(data, callback) {
-		// #ifdef APP-PLUS || MP
-		uni.setClipboardData({
-			data: data,
-			success(res) {
-				uni.getClipboardData({
-					success(res) {
-						("function" == typeof callback) && callback(true)
-					},
-					fail(res) {
-						("function" == typeof callback) && callback(false)
-					}
-				})
-			},
-			fail(res) {
-				("function" == typeof callback) && callback(false)
-			}
-		})
-		// #endif
+    getClipboardData: function(data, callback) {
+        // #ifdef APP-PLUS || MP
+        uni.setClipboardData({
+            data: data,
+            success(res) {
+                uni.getClipboardData({
+                    success(res) {
+                        ('function' == typeof callback) && callback(true)
+                    },
+                    fail(res) {
+                        ('function' == typeof callback) && callback(false)
+                    }
+                })
+            },
+            fail(res) {
+                ('function' == typeof callback) && callback(false)
+            }
+        })
+        // #endif
 
-		// #ifdef H5
-		let event = window.event || {}
-		let clipboard = new ClipboardJS("", {
-			text: () => data
-		})
-		clipboard.on('success', (e) => {
-			("function" == typeof callback) && callback(true)
-			clipboard.off('success')
-			clipboard.off('error')
-			clipboard.destroy()
-		});
-		clipboard.on('error', (e) => {
-			("function" == typeof callback) && callback(false)
-			clipboard.off('success')
-			clipboard.off('error')
-			clipboard.destroy()
-		});
-		clipboard.onClick(event)
-		// #endif
-	}
-};
+        // #ifdef H5
+        let event = window.event || {}
+        let clipboard = new ClipboardJS('', {
+            text: () => data
+        })
+        clipboard.on('success', (e) => {
+            ('function' == typeof callback) && callback(true)
+            clipboard.off('success')
+            clipboard.off('error')
+            clipboard.destroy()
+        })
+        clipboard.on('error', (e) => {
+            ('function' == typeof callback) && callback(false)
+            clipboard.off('success')
+            clipboard.off('error')
+            clipboard.destroy()
+        })
+        clipboard.onClick(event)
+        // #endif
+    }
+}
 
 module.exports = {
-	getClipboardData: thorui.getClipboardData
-};
+    getClipboardData: thorui.getClipboardData
+}

+ 262 - 258
components/clipboard/formValidation.js

@@ -5,263 +5,267 @@
  **/
 
 const form = {
-	//当出现错误时返回错误消息,否则返回空即为验证通过
-	/*
-	 formData:Object 表单对象。{key:value,key:value},key==rules.name
-	 rules: Array [{name:name,rule:[],msg:[]},{name:name,rule:[],msg:[]}]
-			name:name 属性=> 元素的名称
-			rule:字符串数组 ["required","isMobile","isEmail","isCarNo","isIdCard","isAmount","isNum","isChinese","isEnglish",isEnAndNo","isSpecial","isEmoji",""isDate","isUrl","isSame:key","range:[1,9]","minLength:9","maxLength:Number"]
-			msg:数组 []。 与数组 rule 长度相同,对应的错误提示信息
-	*/
-	validation: function(formData, rules) {
-		for (let item of rules) {
-			let key = item.name;
-			let rule = item.rule;
-			let msgArr = item.msg;
-			if (!key || !rule || rule.length === 0 || !msgArr || msgArr.length === 0) {
-				continue;
-			}
-			for (let i = 0, length = rule.length; i < length; i++) {
-				let ruleItem = rule[i];
-				let msg = msgArr[i];
-				if (!ruleItem || !msg) {
-					continue;
-				}
-				//数据处理
-				let value = null;
-				if (~ruleItem.indexOf(":")) {
-					let temp = ruleItem.split(":");
-					ruleItem = temp[0];
-					value = temp[1];
-				}
-				let isError = false;
-				switch (ruleItem) {
-					case "required":
-						isError = form._isNullOrEmpty(formData[key]);
-						break;
-					case "isMobile":
-						isError = !form._isMobile(formData[key]);
-						break;
-					case "isEmail":
-						isError = !form._isEmail(formData[key]);
-						break;
-					case "isCarNo":
-						isError = !form._isCarNo(formData[key]);
-						break;
-					case "isIdCard":
-						isError = !form._isIdCard(formData[key]);
-						break;
-					case "isAmount":
-						isError = !form._isAmount(formData[key]);
-						break;
-					case "isNum":
-						isError = !form._isNum(formData[key]);
-						break;
-					case "isChinese":
-						isError = !form._isChinese(formData[key]);
-						break;
-					case "isEnglish":
-						isError = !form._isEnglish(formData[key]);
-						break;
-					case "isEnAndNo":
-						isError = !form._isEnAndNo(formData[key]);
-						break;
-					case "isEnOrNo":
-						isError = !form._isEnOrNo(formData[key]);
-						break;
-					case "isSpecial":
-						isError = form._isSpecial(formData[key]);
-						break;
-					case "isEmoji":
-						isError = form._isEmoji(formData[key]);
-						break;
-					case "isDate":
-						isError = !form._isDate(formData[key]);
-						break;
-					case "isUrl":
-						isError = !form._isUrl(formData[key]);
-						break;
-					case "isSame":
-						isError = !form._isSame(formData[key], formData[value]);
-						break;
-					case "range":
-						let range = null;
-						try {
-							range = JSON.parse(value);
-							if (range.length <= 1) {
-								throw new Error("range值传入有误!")
-							}
-						} catch (e) {
-							return "range值传入有误!"
-						}
-						isError = !form._isRange(formData[key], range[0], range[1])
-						break;
-					case "minLength":
-						isError = !form._minLength(formData[key], value)
-						break;
-					case "maxLength":
-						isError = !form._maxLength(formData[key], value)
-						break;
-					default:
-						break;
-				}
-				if (isError) {
-					return msg;
-				}
-			}
-		}
-		return "";
-	},
-	_isNullOrEmpty: function(value) {
-		return (value === null || value === '' || value === undefined) ? true : false;
-	},
-	_isMobile: function(value) {
-		return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value);
-	},
-	_isEmail: function(value) {
-		return /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(value);
-	},
-	_isCarNo: function(value) {
-		// 新能源车牌
-		const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
-		// 旧车牌
-		const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
-		if (value.length === 7) {
-			return creg.test(value);
-		} else if (value.length === 8) {
-			return xreg.test(value);
-		} else {
-			return false;
-		}
-	},
-	_isIdCard: function(value) {
-		let idCard = value;
-		if (idCard.length == 15) {
-			return this.__isValidityBrithBy15IdCard;
-		} else if (idCard.length == 18) {
-			let arrIdCard = idCard.split("");
-			if (this.__isValidityBrithBy18IdCard(idCard) && this.__isTrueValidateCodeBy18IdCard(arrIdCard)) {
-				return true;
-			} else {
-				return false;
-			}
-		} else {
-			return false;
-		}
-	},
-	__isTrueValidateCodeBy18IdCard: function(arrIdCard) {
-		let sum = 0;
-		let Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
-		let ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];
-		if (arrIdCard[17].toLowerCase() == 'x') {
-			arrIdCard[17] = 10;
-		}
-		for (let i = 0; i < 17; i++) {
-			sum += Wi[i] * arrIdCard[i];
-		}
-		let valCodePosition = sum % 11;
-		if (arrIdCard[17] == ValideCode[valCodePosition]) {
-			return true;
-		} else {
-			return false;
-		}
-	},
-	__isValidityBrithBy18IdCard: function(idCard18) {
-		let year = idCard18.substring(6, 10);
-		let month = idCard18.substring(10, 12);
-		let day = idCard18.substring(12, 14);
-		let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
-		if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
-			parseFloat(day)) {
-			return false;
-		} else {
-			return true;
-		}
-	},
-	__isValidityBrithBy15IdCard: function(idCard15) {
-		let year = idCard15.substring(6, 8);
-		let month = idCard15.substring(8, 10);
-		let day = idCard15.substring(10, 12);
-		let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
+    //当出现错误时返回错误消息,否则返回空即为验证通过
+    /*
+     formData:Object 表单对象。{key:value,key:value},key==rules.name
+     rules: Array [{name:name,rule:[],msg:[]},{name:name,rule:[],msg:[]}]
+    		name:name 属性=> 元素的名称
+    		rule:字符串数组 ["required","isMobile","isEmail","isCarNo","isIdCard","isAmount","isNum","isChinese","isEnglish",isEnAndNo","isSpecial","isEmoji",""isDate","isUrl","isSame:key","range:[1,9]","minLength:9","maxLength:Number"]
+    		msg:数组 []。 与数组 rule 长度相同,对应的错误提示信息
+    */
+    validation: function(formData, rules) {
+        for (let item of rules) {
+            let key = item.name
+            let rule = item.rule
+            let msgArr = item.msg
+            if (!key || !rule || rule.length === 0 || !msgArr || msgArr.length === 0) {
+                continue
+            }
+            for (let i = 0, length = rule.length; i < length; i++) {
+                let ruleItem = rule[i]
+                let msg = msgArr[i]
+                if (!ruleItem || !msg) {
+                    continue
+                }
+                //数据处理
+                let value = null
+                if (~ruleItem.indexOf(':')) {
+                    let temp = ruleItem.split(':')
+                    ruleItem = temp[0]
+                    value = temp[1]
+                }
+                let isError = false
+                switch (ruleItem) {
+                case 'required':
+                    isError = form._isNullOrEmpty(formData[key])
+                    break
+                case 'isMobile':
+                    isError = !form._isMobile(formData[key])
+                    break
+                case 'isEmail':
+                    isError = !form._isEmail(formData[key])
+                    break
+                case 'isCarNo':
+                    isError = !form._isCarNo(formData[key])
+                    break
+                case 'isIdCard':
+                    isError = !form._isIdCard(formData[key])
+                    break
+                case 'isAmount':
+                    isError = !form._isAmount(formData[key])
+                    break
+                case 'isNum':
+                    isError = !form._isNum(formData[key])
+                    break
+                case 'isChinese':
+                    isError = !form._isChinese(formData[key])
+                    break
+                case 'isEnglish':
+                    isError = !form._isEnglish(formData[key])
+                    break
+                case 'isEnAndNo':
+                    isError = !form._isEnAndNo(formData[key])
+                    break
+                case 'isEnOrNo':
+                    isError = !form._isEnOrNo(formData[key])
+                    break
+                case 'isSpecial':
+                    isError = form._isSpecial(formData[key])
+                    break
+                case 'isEmoji':
+                    isError = form._isEmoji(formData[key])
+                    break
+                case 'isDate':
+                    isError = !form._isDate(formData[key])
+                    break
+                case 'isUrl':
+                    isError = !form._isUrl(formData[key])
+                    break
+                case 'isSame':
+                    isError = !form._isSame(formData[key], formData[value])
+                    break
+                case 'range':
+                    let range = null
+                    try {
+                        range = JSON.parse(value)
+                        if (range.length <= 1) {
+                            throw new Error('range值传入有误!')
+                        }
+                    } catch (e) {
+                        return 'range值传入有误!'
+                    }
+                    isError = !form._isRange(formData[key], range[0], range[1])
+                    break
+                case 'minLength':
+                    isError = !form._minLength(formData[key], value)
+                    break
+                case 'maxLength':
+                    isError = !form._maxLength(formData[key], value)
+                    break
+                default:
+                    break
+                }
+                if (isError) {
+                    return msg
+                }
+            }
+        }
+        return ''
+    },
+    _isNullOrEmpty: function(value) {
+        return (value === null || value === '' || value === undefined) ? true : false
+    },
+    _isMobile: function(value) {
+        return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value)
+    },
+    _isEmail: function(value) {
+        return /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(value)
+    },
+    _isCarNo: function(value) {
+        // 新能源车牌
+        const xreg =
+            /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
+        // 旧车牌
+        const creg =
+            /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
+        if (value.length === 7) {
+            return creg.test(value)
+        } else if (value.length === 8) {
+            return xreg.test(value)
+        } else {
+            return false
+        }
+    },
+    _isIdCard: function(value) {
+        let idCard = value
+        if (idCard.length == 15) {
+            return this.__isValidityBrithBy15IdCard
+        } else if (idCard.length == 18) {
+            let arrIdCard = idCard.split('')
+            if (this.__isValidityBrithBy18IdCard(idCard) && this.__isTrueValidateCodeBy18IdCard(arrIdCard)) {
+                return true
+            } else {
+                return false
+            }
+        } else {
+            return false
+        }
+    },
+    __isTrueValidateCodeBy18IdCard: function(arrIdCard) {
+        let sum = 0
+        let Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
+        let ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
+        if (arrIdCard[17].toLowerCase() == 'x') {
+            arrIdCard[17] = 10
+        }
+        for (let i = 0; i < 17; i++) {
+            sum += Wi[i] * arrIdCard[i]
+        }
+        let valCodePosition = sum % 11
+        if (arrIdCard[17] == ValideCode[valCodePosition]) {
+            return true
+        } else {
+            return false
+        }
+    },
+    __isValidityBrithBy18IdCard: function(idCard18) {
+        let year = idCard18.substring(6, 10)
+        let month = idCard18.substring(10, 12)
+        let day = idCard18.substring(12, 14)
+        let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day))
+        if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 ||
+            temp_date.getDate() !=
+            parseFloat(day)) {
+            return false
+        } else {
+            return true
+        }
+    },
+    __isValidityBrithBy15IdCard: function(idCard15) {
+        let year = idCard15.substring(6, 8)
+        let month = idCard15.substring(8, 10)
+        let day = idCard15.substring(10, 12)
+        let temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day))
 
-		if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() !=
-			parseFloat(day)) {
-			return false;
-		} else {
-			return true;
-		}
-	},
-	_isAmount: function(value) {
-		//金额,只允许保留两位小数
-		return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value);
-	},
-	_isNum: function(value) {
-		//只能为数字
-		return /^[0-9]+$/.test(value);
-	},
-	_isChinese: function(value) {
-		let reg = /.*[\u4e00-\u9fa5]+.*$/;
-		return value !== "" && reg.test(value) && !form._isSpecial(value) && !form._isEmoji(value)
-	},
-	_isEnglish: function(value) {
-		return /^[a-zA-Z]*$/.test(value)
-	},
-	_isEnAndNo: function(value) {
-		//8~20位数字和字母组合
-		return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value);
-	},
-	_isEnOrNo: function(value) {
-		//英文或者数字
-		let reg = /.*[\u4e00-\u9fa5]+.*$/;
-		let result = true;
-		if (reg.test(value) || form._isSpecial(value) || form._isEmoji(value)) {
-			result = false
-		}
-		return result
-	},
-	_isSpecial: function(value) {
-		//是否包含特殊字符
-		let regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
-			regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
-		if (regEn.test(value) || regCn.test(value)) {
-			return true;
-		}
-		return false;
-	},
-	_isEmoji: function(value) {
-		//是否包含表情
-		return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(value);
-	},
-	_isDate: function(value) {
-		//2019-10-12
-		const reg =
-			/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
-		return reg.test(value);
-	},
-	_isUrl: function(value) {
-		return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(value);
-	},
-	_isSame: function(value1, value2) {
-		return value1 === value2
-	},
-	_isRange: function(value, range1, range2) {
-		if ((!range1 && range1 != 0) && (!range2 && range2 != 0)) {
-			return true;
-		} else if (!range1 && range1 != 0) {
-			return value <= range2
-		} else if (!range2 && range2 != 0) {
-			return value >= range1
-		} else {
-			return value >= range1 && value <= range2
-		}
-	},
-	_minLength: function(value, min) {
-		return value.length >= Number(min)
-	},
-	_maxLength: function(value, max) {
-		return value.length <= Number(max)
-	}
-};
+        if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 ||
+            temp_date.getDate() !=
+            parseFloat(day)) {
+            return false
+        } else {
+            return true
+        }
+    },
+    _isAmount: function(value) {
+        //金额,只允许保留两位小数
+        return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value)
+    },
+    _isNum: function(value) {
+        //只能为数字
+        return /^[0-9]+$/.test(value)
+    },
+    _isChinese: function(value) {
+        let reg = /.*[\u4e00-\u9fa5]+.*$/
+        return value !== '' && reg.test(value) && !form._isSpecial(value) && !form._isEmoji(value)
+    },
+    _isEnglish: function(value) {
+        return /^[a-zA-Z]*$/.test(value)
+    },
+    _isEnAndNo: function(value) {
+        //8~20位数字和字母组合
+        return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value)
+    },
+    _isEnOrNo: function(value) {
+        //英文或者数字
+        let reg = /.*[\u4e00-\u9fa5]+.*$/
+        let result = true
+        if (reg.test(value) || form._isSpecial(value) || form._isEmoji(value)) {
+            result = false
+        }
+        return result
+    },
+    _isSpecial: function(value) {
+        //是否包含特殊字符
+        let regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im,
+            regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im
+        if (regEn.test(value) || regCn.test(value)) {
+            return true
+        }
+        return false
+    },
+    _isEmoji: function(value) {
+        //是否包含表情
+        return /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g.test(value)
+    },
+    _isDate: function(value) {
+        //2019-10-12
+        const reg =
+            /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/
+        return reg.test(value)
+    },
+    _isUrl: function(value) {
+        return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(value)
+    },
+    _isSame: function(value1, value2) {
+        return value1 === value2
+    },
+    _isRange: function(value, range1, range2) {
+        if ((!range1 && range1 != 0) && (!range2 && range2 != 0)) {
+            return true
+        } else if (!range1 && range1 != 0) {
+            return value <= range2
+        } else if (!range2 && range2 != 0) {
+            return value >= range1
+        } else {
+            return value >= range1 && value <= range2
+        }
+    },
+    _minLength: function(value, min) {
+        return value.length >= Number(min)
+    },
+    _maxLength: function(value, max) {
+        return value.length <= Number(max)
+    }
+}
 module.exports = {
-	validation: form.validation
-};
+    validation: form.validation
+}

+ 22 - 22
components/clipboard/utils.js

@@ -1,25 +1,25 @@
 const utils = {
-  getComponent: function(selector) {
-    const pages = getCurrentPages();
-    const current = pages[pages.length - 1];
-    //const component = current.selectAllComponents(selector);
-    const component = current.selectComponent(selector);
-    if (!component) {
-      return null;
+    getComponent: function(selector) {
+        const pages = getCurrentPages()
+        const current = pages[pages.length - 1]
+        //const component = current.selectAllComponents(selector);
+        const component = current.selectComponent(selector)
+        if (!component) {
+            return null
+        }
+        return component
+    },
+    toast: function(options) {
+        const {
+            //selector = '.tui-tips-ctx'
+            selector = '#tui-tips-ctx'
+        } = options
+        const component = utils.getComponent(selector)
+        if (component) {
+            component.showTips(options)
+        }
     }
-    return component;
-  },
-  toast: function(options) {
-    const {
-      //selector = '.tui-tips-ctx'
-      selector = '#tui-tips-ctx'
-    } = options;
-    const component = utils.getComponent(selector);
-    if (component) {
-      component.showTips(options);
-    }
-  }
-};
+}
 module.exports = {
-  toast: utils.toast
-};
+    toast: utils.toast
+}

+ 0 - 107
components/cm-custom/au-custom.vue

@@ -1,107 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px'}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : (capsule.height+10)+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    }
-		},
-		data() {
-			return{
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 44rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.navbar-icon .icon-sousuo {
-		color: #000000;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>

+ 0 - 122
components/cm-custom/cm-custom.vue

@@ -1,122 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : ''}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
-			  <text v-if="navbarData.haveHome" @tap="_goHome" class="iconfont icon-fanhuishouye"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:capsule.top+'px;',right:(capsule.width)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-sousuo"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object,
-				default: () =>({
-					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
-					showSearch: 0,
-					title: '', // 导航栏 中间的标题
-					haveBack:false,
-					home:false,
-					textLeft:false,
-					bgColor:'',
-					textColor:'#000000'
-				})
-		    }
-		},
-		data() {
-			return{
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 44rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.navbar-icon .icon-sousuo {
-		color: #000000;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>

+ 0 - 114
components/cm-custom/cu-custom.vue

@@ -1,114 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : '#FFFFFF'}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : (capsule.height+10)+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+5)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-daohangfanhui"></text>
-			  <text v-if="navbarData.haveHome" @tap="_goHome" class="iconfont icon-fanhuishouye"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:capsule.top+'px;',right:(capsule.width)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-sousuo"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    }
-		},
-		data() {
-			return{
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 background: #FFFFFF;
-		 border-bottom: 1px solid #F7F7F7;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 44rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.navbar-icon .icon-sousuo {
-		color: #000000;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>

+ 0 - 159
components/cm-custom/custom-d.vue

@@ -1,159 +0,0 @@
-<template name="headerNavbar">
-	<!-- 发货记录自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" :style="{width:headerBtnPosi.width+'px',lineHeight:(navbarBtn.height)+'px',top:navbarBtn.top + statusBarHeight+'px',left:navbarBtn.right+'px',height:(navbarBtn.height)+'px'}">
-			  <text @click="_goBack" class="iconfont icon-shangyibu" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
-	      	  <text class="iconfont icon-vertical_line" :style="{borderColor:navbarData.borderColor ? navbarData.borderColor : 'rgba(0,0,0,0.4)'}"></text>
-			  <text @click="_goDetails" class="iconfont icon-fanhuishouye" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			page:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platform:'',
-				fontSizeSetting:0,
-				screenWidth:0
-			}
-		},
-		created() {
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
-			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
-			}
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goDetails: function () {
-		      this.$emit('pageDetails')
-		    }
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 9999;
-		 box-sizing: border-box;
-		 background: #FFFFFF;
-		 border-bottom: 1px solid #F8F8F8;
-	}
-	.navbar-text {
-		 text-align: center;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 border-radius: 64rpx;
-		 border: 0.5px solid rgba(0,0,0, 0.2);
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 text-align: center;
-		 display: inline-block;
-		 overflow: hidden;
-		 margin-bottom: 1px;
-	}
-	.navbar-icon .icon-vertical_line {
-		color: #999999;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 229
components/cm-custom/custom-p.vue

@@ -1,229 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'no-color']" :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:navbarBtn.right+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
-			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-daohangfanhui"></text>
-			  <text v-else  @click="_goHome" class="iconfont icon-fanhuishouye"></text>
-	  	</view>
-		<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	<view class="gosearch-btn" :style="{paddingLeft:navbarBtn.height+'px;',right:(navbarBtn.width+20)+'px;',borderRadius:(navbarBtn.height/2)+'px;',width:(375-navbarBtn.width*2)+'px;',lineHeight:navbarBtn.height+'px;'}">
-				<text class="iconfont icon-sousuo" :style="{width:navbarBtn.height+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}"></text>
-				<view class="input" @click="this.$api.navigateTo(clickPath)">搜索商品/供应商/项目仪器</view>
-			</view>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			page:{
-				type:Number
-			},
-			headerColor:{
-				type:Boolean
-			},
-			headerTitle:{
-				type:String
-			},
-			type:{
-				type:String
-			},
-		},
-		data() {
-			return{
-				headerType:'',
-				clickPath:'/search/pages/search/search', 
-				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度,
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platform:'',
-				fontSizeSetting:0
-			}
-		},
-		created() {
-			this.headerType = this.type
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
-			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
-			}
-			console.log(btnPosi)
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-			this.$parent.navbarHeight = this.navbarHeight
-			this.$parent.statusBarHeight = this.statusBarHeight
-			// console.log(this.navbarHeight);
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-		    }
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 &.bg-color{
-			animation: showColor 0.3s ease-in-out both;
-		 }
-		 &.no-color{
-		    animation: hideColor 0.3s ease-in-out both;
-		 }
-	}
-	.navbar-text {
-		 width: 100%;
-		 color: #000000;
-		 font-weight: 500;
-		 position: fixed;
-	}
-	.gosearch-btn{
-		height: 100%;
-		background: rgba(255, 255, 255, 0.6);
-		font-size: 28rpx;
-		color: #999999;
-		position: relative;
-		box-sizing: border-box;
-		position:absolute ;
-		top: 0;
-		border: 0.5px solid rgba(0, 0, 0, 0.1);
-		.icon-sousuo{
-			height: 100%;
-			text-align: center;
-			display: block;
-			position: absolute;
-			left: 0;
-			top: 0;
-			font-size: 34rpx;
-			color: #999999;
-			z-index: 10;
-		}
-		.input{
-			height: 100%;
-			float: left;
-			font-size: $font-size-24;
-			text-align: left;
-		}
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 border-radius: 50%;
-		 text-align: center;
-		 background: rgba(255,255,255,0.6);
-		 border: 0.5px solid rgba(0,0,0, 0.1);
-		 box-sizing: border-box;
-		 z-index: 9999;
-	}
-	.navbar-icon .iconfont {
-		 height: 100%;
-		 width: 100%;
-		 font-size: 38rpx;
-		 font-weight: bold;
-		 display: inline-block;
-		 overflow: hidden;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-	@keyframes showColor {
-		0% {background: rgba(255,255,255,0);}
-		50% {background: rgba(255,255,255,0.5);}
-		100% {background: rgba(255,255,255,1);}
-	}
-	@keyframes hideColor {
-		0% {background: rgba(255,255,255,1);}
-		50% {background: rgba(255,255,255,0.5);}
-		100% {background: rgba(255,255,255,0);}
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 160
components/cm-custom/index-custom.vue

@@ -1,160 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:(CustomBar+55)+'px',paddingTop:StatusBar+'px'}"> 
-	  	<view class="navbar-text" 
-			  :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : 12+'px'}" :class="platformClass">
-	    	  {{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-		<view class="search-input">
-			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
-				<view class="search-icon">
-					<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				</view>
-				<view class="search-text">{{hotSearchText}}</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	import btSearch from '@/components/uni-search/bt-search.vue'
-	export default{
-		name:'headerNavbar',
-		components:{
-			btSearch,
-		},
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    }
-		},
-		data() {
-			return{
-				clickPath:'/search/pages/search/search',
-				hotSearchText:'搜索商品/项目仪器',
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				StatusBar: this.StatusBar,
-				fontSizeSetting:this.fontSizeSetting,
-				screenWidth:this.screenWidth,
-				capsule:this.capsule,
-				platformClass:this.platformClass,
-			}
-		},
-		created() {
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			      this.navbarData.haveBack = false;
-			} else {
-			      this.navbarData.haveBack = true;
-			}
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			BackPage: function () {
-				this.$emit('navigateBack')
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			},
-			_goHome:function(){
-				uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 background: url(https://img.caimei365.com/group1/M00/03/B0/Cmis217Z9LCAF_anAADHlsIu3aE475.png);
-		 background-size: cover;
-		 border-bottom:none;
-	}
-	.navbar-text {
-		 font-size: 30rpx;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 45px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 44rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.navbar-icon .icon-iconfonticonfontsousuo1 {
-		color: #000000;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-	.search-input{
-		width: 100%;
-		height: 110rpx;
-		padding: 20rpx 24rpx;
-		box-sizing: border-box;
-		.gosearch-btn{
-			width: 100%;
-			height: 100%;
-			border-radius: 40rpx;
-			background: #F0F0F0;
-			margin: 0 auto;
-			font-size: 28rpx;
-			line-height: 70rpx;
-			color: #8A8A8A;
-			background: #FFFFFF;
-			position: relative;
-			box-sizing: border-box;
-			padding-left: 80rpx;
-			.search-icon{
-				width: 80rpx;
-				height: 70rpx;
-				position:absolute ;
-				left: 0;
-				top: 2rpx;
-				text-align: center;
-				line-height: 70rpx;
-				.icon-iconfonticonfontsousuo1{
-					margin:0 6rpx;
-					font-size: $font-size-34;
-					color: #8A8A8A;
-					z-index: 10;
-				}
-			}
-			.search-text{
-				font-size: $font-size-24;
-				line-height: 70rpx;
-				color: #8A8A8A;
-			}
-		}
-	}
-</style>

+ 59 - 0
components/cm-module/cm-active-popup/cm-active-popup.vue

@@ -0,0 +1,59 @@
+<template>
+    <view class="active-popup" v-if="visible">
+        <view class="content">
+            <image :src="image" @click="$emit('click')" mode="aspectFit"></image> <text class="close-btn" @click="handleClose"></text>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'cm-active-popup',
+    props: {
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        image: {
+            type: String,
+            default: ''
+        }
+    },
+    methods: {
+        handleClose() {
+            this.$emit('closed')
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.active-popup {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    z-index: 999999;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    width: 100vw;
+    height: 100vh;
+    background: rgba(0, 0, 0, 0.5);
+    .content {
+        position: relative;
+        image {
+            width: 640rpx;
+        }
+        .close-btn {
+            display: block;
+            position: absolute;
+            right: 0;
+            top: -48rpx;
+            width: 48rpx;
+            height: 48rpx;
+            background: url(../../../static/icon-close.png) no-repeat center;
+            background-size: 48rpx 48rpx;
+        }
+    }
+}
+</style>

+ 66 - 0
components/cm-module/cm-activity-info/cm-activity-info.vue

@@ -0,0 +1,66 @@
+<template>
+    <view class="cm-activity-info">
+        <template v-if="productInfo.activeStatus == 1">
+            <view class="ladder-main clearfix">
+                <view class="ladder-item">
+                    <view class="ladder-item-td">购买数</view> <view class="ladder-item-td">价格</view>
+                </view>
+                <view class="ladder-item" v-for="(ladd, index) in productInfo.ladderList" :key="index">
+                    <view class="ladder-item-td">{{ ladd.buyNum }}</view>
+                    <view class="ladder-item-td">{{ ladd.buyPrice | priceFormat }}</view>
+                </view>
+            </view>
+        </template>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        productInfo: {
+            type: Object,
+            default: () => {}
+        }
+    },
+    filters: {
+        priceFormat(price) {
+            return Number(price).toFixed(2)
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.ladder-main {
+    width: 100%;
+    border: 1px solid rgba(225, 86, 22, 0.3);
+    border-radius: 10rpx;
+    box-sizing: border-box;
+    .ladder-item {
+        width: 100%;
+        height: 80rpx;
+        float: left;
+        border-bottom: 1px solid rgba(225, 86, 22, 0.3);
+        &:nth-child(1) {
+            .ladder-item-td {
+                color: #333333;
+            }
+        }
+        &:last-child {
+            border-bottom: none;
+        }
+        .ladder-item-td {
+            width: 50%;
+            text-align: center;
+            line-height: 80rpx;
+            font-size: 24rpx;
+            color: #333;
+            box-sizing: border-box;
+            float: left;
+            &:nth-child(1) {
+                border-right: 1px solid rgba(225, 86, 22, 0.3);
+            }
+        }
+    }
+}
+</style>

+ 399 - 0
components/cm-module/cm-cart-product/cm-cart-product.vue

@@ -0,0 +1,399 @@
+<template>
+    <view class="cm-cart-product">
+        <template v-if="productList.length > 0">
+            <!-- 供应商名称 -->
+            <view class="shop-info">
+                <template v-if="isExpired">
+                    <view class="expired">失效商品{{ productList.length }}件</view>
+                    <view class="clear" @click="deletefailureList">清空失效商品</view>
+                </template>
+                <template v-else>
+                    <view
+                        class="radio iconfont"
+                        :class="data.checked ? 'icon-xuanze' : 'icon-weixuanze'"
+                        @click="chooseAll"
+                    ></view>
+                    <view class="name">{{ data.name }}</view>
+                </template>
+            </view>
+            <!-- 商品列表 -->
+            <view class="product-list">
+                <view
+                    class="row"
+                    v-for="(item, index) in productList"
+                    :key="index"
+                    :class="{ 'no-border': index === 0 }"
+                >
+                    <view
+                        class="radio iconfont"
+                        :class="item.productsChecked ? 'icon-xuanze' : 'icon-weixuanze'"
+                        @click="chooseOne(item)"
+                        v-if="isNormal || isDelete"
+                    ></view>
+                    <view class="expired" v-else>失效</view>
+                    <view class="product">
+                        <image class="cover" :src="item.mainImage"></image>
+                        <view class="content">
+                            <view class="title">{{ item.productName }}</view>
+                            <!-- 普通列表 -->
+                            <template v-if="isNormal">
+                                <view class="params">规格:{{ item.unit || '' }}</view>
+                                <view class="tags">
+                                    <view class="tag type1">{{ item.heUserId ? '促销' : '自营' }}</view>
+                                    <view
+                                        class="tag type2"
+                                        v-if="item.activeStatus == 1"
+                                        @click="clickPopupShow(item, 2)"
+                                        >活动价
+                                    </view>
+                                </view>
+                                <view class="footer">
+                                    <view class="price">¥{{ item.price | formatPrice }}</view>
+                                    <view>
+                                        <number-box
+                                            @change="numberChange(item, $event)"
+                                            v-if="!isDelete"
+                                            :value="item.productCount"
+                                        ></number-box>
+                                    </view>
+                                </view>
+                            </template>
+                            <template v-if="isExpired">
+                                <view class="tip">商品已下架</view>
+                            </template>
+                        </view>
+                    </view>
+                </view>
+            </view>
+            <!-- 合计价格 -->
+            <view class="total" v-if="isNormal && !isDelete">
+                <text class="title">合计:</text> <text class="price">¥{{ data.totalPrice | formatPrice }}</text>
+            </view>
+        </template>
+        <!-- 促销活动弹窗 -->
+        <activi-popup :product="handlerPros" :popupShow="popupShow"></activi-popup>
+        <!-- 操作弹窗 -->
+        <tui-modal
+            :show="modal"
+            @click="confirm"
+            @cancel="modal = false"
+            :content="contentModalText"
+            color="#333"
+            :size="32"
+            shape="circle"
+            :maskClosable="false"
+        ></tui-modal>
+        <cm-loading :visible="showLoading" text="加载中..."></cm-loading>
+    </view>
+</template>
+
+<script>
+import NumberBox from './number-box.vue'
+import activiPopup from '@/components/cm-module/productDetails/cm-activipopu'
+import CmLoading from '@/components/cm-module/cm-loading/cm-loading.vue'
+import { mapGetters, mapActions, mapMutations } from 'vuex'
+export default {
+    name: 'cm-cart-product',
+    components: {
+        NumberBox,
+        activiPopup,
+        CmLoading
+    },
+    data() {
+        return {
+            modal: false,
+            contentModalText: '',
+            popupShow: false,
+            handlerPros: {},
+            showLoading: false
+        }
+    },
+    props: {
+        // 列表类型 list普通列表  delete删除列表  expired失效列表
+        listType: {
+            type: String,
+            default: 'list'
+        },
+        // 数据
+        data: {
+            type: [Array, Object],
+            default: () => {}
+        },
+        vkey: {
+            type: String,
+            default: ''
+        }
+    },
+    filters: {
+        formatPrice(val) {
+            return Number(val).toFixed(2)
+        }
+    },
+    computed: {
+        // 是普通商品列表
+        isNormal() {
+            return this.listType.indexOf('normal') !== -1
+        },
+        // 是失效商品列表
+        isExpired() {
+            return this.listType.indexOf('expired') !== -1
+        },
+        // 当前状态为删除状态
+        isDelete() {
+            return this.listType.indexOf('delete') !== -1
+        },
+        productList() {
+            if (this.isExpired) {
+                return this.data
+            } else {
+                return this.data[this.vkey]
+            }
+        }
+    },
+    methods: {
+        ...mapActions('cart', ['updateShoppogCount', 'removeFailureFromCart']),
+        ...mapMutations('cart', ['selectProduct', 'selectAllShopProduct', 'selectFailure']),
+        // 商品数量变化
+        numberChange(product, count) {
+            this.$emit('countChange')
+            this.countChange(product, count)
+        },
+        // 勾选 / 取消勾选 供应商下所有商品
+        chooseAll() {
+            this.selectAllShopProduct({
+                shopId: this.data.shopId,
+                checked: !this.data.checked
+            })
+            this.$emit('chooseAll')
+        },
+        // 勾选到单个商品
+        chooseOne(product) {
+            if (this.isNormal) {
+                this.selectProduct({
+                    shopId: this.data.shopId,
+                    productId: product.productId,
+                    checked: !product.productsChecked
+                })
+            } else {
+                this.selectFailure({
+                    productId: product.productId,
+                    checked: !product.productsChecked
+                })
+            }
+            this.$emit('chooseOne')
+        },
+        //商品数量加加
+        countChange(product, count) {
+            this.showLoading = true
+            this.updateShoppogCount({
+                cartId: product.cartId,
+                productCount: count
+            }).finally(() => {
+                this.showLoading = false
+            })
+        },
+        // 促销活动弹窗
+        clickPopupShow(pros, type) {
+            if (pros.ladderList.length > 0) {
+                this.popupShow = true
+                this.handlerPros = pros
+            }
+        },
+        // 清空失效商品
+        deletefailureList() {
+            this.modal = true
+            this.contentModalText = '确定清除所有失效商品吗?'
+        },
+        // 确认清空
+        confirm(e) {
+            if (e.index !== 1) return (this.modal = false)
+            this.showLoading = true
+            this.removeFailureFromCart().finally(() => {
+                this.modal = false
+                this.showLoading = false
+            })
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+$grid: 24rpx;
+.cm-cart-product {
+    overflow: hidden;
+    background: #fff;
+    margin-bottom: $grid;
+}
+.shop-info {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: $grid $grid 0;
+    .name {
+        width: 622rpx;
+        font-size: 30rpx;
+        font-weight: bold;
+        color: #333333;
+    }
+    .expired {
+        font-size: 30rpx;
+        color: #333333;
+    }
+    .clear {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        width: 184rpx;
+        height: 42rpx;
+        background: #fff8fd;
+        border: 1rpx solid #ff457b;
+        border-radius: 28rpx;
+        font-size: 26rpx;
+        color: #ff457b;
+    }
+}
+.radio {
+    font-size: 36rpx;
+    color: #b2b2b2;
+    &.icon-xuanze {
+        color: #f83c6c;
+    }
+}
+.product-list {
+    .row {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin: 0 $grid;
+        padding: 30rpx 0;
+        border-top: 1px solid #e1e1e1;
+        &.no-border {
+            border-top: 0;
+        }
+        &:last-child {
+            margin-bottom: 0;
+        }
+        .expired {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            width: 72rpx;
+            height: 36rpx;
+            background: rgba(51, 51, 51, 0.3);
+            border-radius: 24rpx;
+            font-size: 24rpx;
+            color: #ffffff;
+        }
+    }
+    .product {
+        width: 622rpx;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .cover {
+            width: 180rpx;
+            height: 180rpx;
+            box-sizing: border-box;
+            border: 1rpx dashed #e1e1e1;
+        }
+        .content {
+            width: 442rpx;
+            .title,
+            .tags,
+            .params,
+            .footer,
+            .tip {
+                padding-left: $grid;
+            }
+            .tags,
+            .params {
+                margin-top: 10rpx;
+            }
+            .tip {
+                margin-top: 80rpx;
+                margin-bottom: 0;
+                font-size: 26rpx;
+                color: #f83c6c;
+            }
+            .title {
+                height: 66rpx;
+                font-size: 26rpx;
+                color: #333333;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                display: -webkit-box;
+                -webkit-line-clamp: 2; // 这里控制几行显示省略号
+                -webkit-box-orient: vertical;
+            }
+            .tags {
+                display: flex;
+                justify-content: flex-start;
+                align-items: center;
+                height: 24rpx;
+                .tag {
+                    display: flex;
+                    justify-content: center;
+                    align-items: center;
+                    height: 30rpx;
+                    margin-right: 8rpx;
+                    font-size: 22rpx;
+                    &.type1 {
+                        width: 56rpx;
+                        background: #ff457b;
+                        border-radius: 4rpx;
+                        color: #ffffff;
+                    }
+                    &.type2 {
+                        width: 80rpx;
+                        background: url(https://static.caimei365.com/app/mini-hehe/icon/icon-active.png) top center
+                            no-repeat;
+                        background-size: 80rpx 30rpx;
+                        color: #f83c6c;
+                    }
+                }
+            }
+            .params {
+                font-size: 20rpx;
+                color: #999999;
+            }
+            .footer {
+                display: flex;
+                justify-content: space-between;
+                align-items: flex-end;
+                margin-top: 4rpx;
+                height: 48rpx;
+                .add-cart {
+                    display: flex;
+                    justify-content: center;
+                    align-items: center;
+                    width: 44rpx;
+                    height: 44rpx;
+                    background: #ff457b;
+                    color: #fff;
+                    border-radius: 50%;
+                }
+                .price {
+                    flex: 1;
+                    font-size: 26rpx;
+                    font-weight: 600;
+                    color: #f83c6c;
+                }
+            }
+        }
+    }
+}
+.total {
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
+    padding: 30rpx $grid;
+    font-size: 26rpx;
+    font-weight: bold;
+    .title {
+        color: #333333;
+    }
+    .price {
+        color: #ff457b;
+    }
+}
+</style>

+ 84 - 0
components/cm-module/cm-cart-product/number-box.vue

@@ -0,0 +1,84 @@
+<template>
+    <view class="number-box">
+        <view class="sub iconfont icon-jianhao" @click="sub"></view>
+        <input class="number" type="number" v-model="number" @blur="blur" />
+        <view class="add iconfont icon-jiahao" @click="add"></view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'number-box',
+    data() {
+        return {
+            number: 0
+        }
+    },
+    props: {
+        value: {
+            type: Number,
+            default: 0
+        }
+    },
+    created() {
+        this.number = this.value
+    },
+    watch:{
+        value(val){
+            this.number = val
+        }
+    },
+    methods: {
+        add() {
+            this.number++
+            this.$emit('change', this.number)
+        },
+        sub() {
+            if (this.number > 1) {
+                this.number--
+                this.$emit('change', this.number)
+            } else {
+                this.$util.msg('购买数量不能少于1', 2000)
+            }
+        },
+        blur() {
+            if (this.number <= 0) {
+                this.number = 1
+                this.$util.msg('购买数量不能少于1', 2000)
+            }
+            this.number = parseInt(this.number)
+            this.$emit('change', this.number)
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.number-box {
+    width: 148rpx;
+    height: 48rpx;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border-radius: 24rpx;
+    border: 1rpx solid #e1e1e1;
+    .sub,
+    .add {
+        flex: 1;
+        text-align: center;
+        font-size: 28rpx;
+        color: #ccc;
+    }
+    .number {
+        text-align: center;
+        width: 56rpx;
+        font-size: 26rpx;
+        font-weight: 500;
+        color: #333333;
+        box-sizing: border-box;
+        border-right: 1rpx solid #e1e1e1;
+        border-left: 1rpx solid #e1e1e1;
+    }
+}
+</style>

+ 281 - 0
components/cm-module/cm-coupon-list/cm-coupon-list.vue

@@ -0,0 +1,281 @@
+<template>
+    <view class="cm-coupon-list">
+        <view class="mask" v-if="visible"></view>
+        <view class="main-content">
+            <uni-transition mode-class="slide-bottom" :show="visible">
+                <view class="content">
+                    <!-- 关闭弹框按钮 -->
+                    <view class="iconfont icon-iconfontguanbi close" @click="$emit('close')"></view>
+                    <!-- 弹框标题 -->
+                    <view class="title">{{ title }}</view>
+                    <view class="other" v-if="listType !== 'receive'">
+                        <!-- 勾选不使用优惠券 -->
+                        <view class="unset" v-if="listType === 'use'">
+                            <text>不使用优惠券</text>
+                            <text
+                                class="radio-flag iconfont"
+                                :class="currentId === -1 ? 'icon-xuanze' : 'icon-weixuanze'"
+                                @click="noChoose"
+                            ></text>
+                        </view>
+                        <!-- tab切换 -->
+                        <view class="tabs" v-if="listType === 'search'">
+                            <view
+                                class="tab"
+                                :class="{ active: currentTab === index }"
+                                v-for="(tab, index) in tabs"
+                                :key="index"
+                                @click="checkedTab(index)"
+                            >
+                                <text>{{ tab.name }}</text>
+                            </view>
+                        </view>
+                    </view>
+                    <view class="list" :class="['scroll-' + listType]">
+                        <!-- 优惠券列表 -->
+                        <template v-for="(coupon, index) in couponList">
+                            <cm-coupon
+                                :key="index"
+                                :couponData="coupon"
+                                @btnClick="couponClick"
+                                :showStatus="showStatus"
+                                :btnUseType="btnUseType"
+                                :chooseAble="chooseAble"
+                                @choose="choose"
+                                :currentId="currentId"
+                            ></cm-coupon>
+                        </template>
+                        <!-- 优惠券为空 -->
+                        <cm-empty
+                            message="暂无任何优惠券~"
+                            v-if="couponList.length <= 0"
+                            :image="baseUrl + 'icon-coupon-empty.png'"
+                            :offset="-12"
+                        ></cm-empty>
+                    </view>
+                    <!-- 使用优惠券按钮 -->
+                    <view class="btn" @click="confirm" v-if="listType === 'use'">确定</view>
+                    <!-- IPhoneX 以上版本适配 -->
+                    <view :style="{ height: isIphoneX ? '44rpx' : 0 }"></view>
+                </view>
+            </uni-transition>
+        </view>
+    </view>
+</template>
+
+<script>
+import CmCoupon from '@/components/cm-module/cm-coupon/cm-coupon.vue'
+import CmEmpty from '@/components/cm-module/cm-empty/cm-empty.vue'
+import { mapGetters } from 'vuex'
+
+export default {
+    name: 'cm-coupon-list',
+    components: {
+        CmCoupon,
+        CmEmpty
+    },
+    props: {
+        // 列表标题
+        title: {
+            type: String,
+            default: '优惠券'
+        },
+        // 优惠券列表
+        couponList: {
+            type: Array,
+            default: () => []
+        },
+        // 显示弹窗
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        // 列表类型 receive 领取 use 使用  search 查看
+        listType: {
+            type: String,
+            default: 'receive'
+        },
+        btnUseType: {
+            type: Number,
+            default: 1
+        },
+        showStatus: {
+            type: Boolean,
+            default: false
+        },
+        chooseAble: {
+            type: Boolean,
+            default: false
+        },
+        currentId: {
+            type: Number,
+            default: -1
+        },
+        tabs: {
+            type: Array,
+            default: () => [
+                {
+                    name: '已领取优惠券'
+                },
+                {
+                    name: '可领取优惠券'
+                }
+            ]
+        }
+    },
+    data() {
+        return {
+            baseUrl: this.$Static,
+            currentTab: 0
+        }
+    },
+    computed: {
+        ...mapGetters(['isIphoneX'])
+    },
+    methods: {
+        // 确认需要把优惠券对象返回
+        confirm() {
+            this.$emit('confirm')
+        },
+        checkedTab(index) {
+            this.currentTab = index
+            this.$emit('tabClick', index)
+        },
+        couponClick() {
+            this.$emit('couponClick')
+        },
+        choose(coupon) {
+            this.$emit('chooseCoupon', coupon)
+        },
+        noChoose() {
+            this.$emit('chooseCoupon', { couponId: -1,  })
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+$grid: 24rpx;
+$title-top: 50rpx;
+$title-bottom: 28rpx;
+$title-line-height: 50rpx;
+$tabs-height: 80rpx;
+$unset-height: 30rpx;
+$main-height: 1028rpx;
+$base-scroll-height: $main-height - $title-top - $title-bottom - $title-line-height;
+$btn-height: 90rpx;
+.mask {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+    z-index: 99998;
+}
+.cm-coupon-list {
+    .main-content {
+        width: 750rpx;
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        z-index: 99999;
+        .content {
+            position: relative;
+            width: 100%;
+            height: $main-height;
+            border-radius: 16rpx 16rpx 0px 0px;
+            background: #fff;
+            .close {
+                position: absolute;
+                top: 26rpx;
+                right: 26rpx;
+                font-size: 34rpx;
+                color: #b2b2b2;
+                width: 60rpx;
+                height: 60rpx;
+                text-align: center;
+                line-height: 60rpx;
+            }
+            .title {
+                padding: $title-top 0 $title-bottom;
+                text-align: center;
+                font-size: 34rpx;
+                font-weight: 500;
+                line-height: $title-line-height;
+                color: #333333;
+            }
+            .other {
+                padding: 0 $grid $grid;
+                .unset {
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: center;
+                    padding-right: 30rpx;
+                    font-size: 30rpx;
+                    line-height: $unset-height;
+                    color: #333333;
+                    .radio-flag {
+                        color: #ff457b;
+                    }
+                }
+                .tabs {
+                    height: $tabs-height;
+                    line-height: $tabs-height;
+                    border-bottom: 1px solid #e1e1e1;
+                    display: flex;
+                    justify-content: space-around;
+                    align-items: center;
+                    .tab {
+                        position: relative;
+                        font-size: 30rpx;
+                        color: #333333;
+                        &::after {
+                            content: '';
+                            position: absolute;
+                            width: 100%;
+                            height: 4rpx;
+                            bottom: 0;
+                            left: 0;
+                            background-color: #fff;
+                        }
+                        &.active {
+                            color: #ff457b;
+                            &::after {
+                                background-color: #ff457b;
+                            }
+                        }
+                    }
+                }
+            }
+            .list {
+                overflow-y: scroll;
+                // 查看优惠券
+                &.scroll-search {
+                    height: $base-scroll-height - $tabs-height - $grid;
+                }
+                // 领取优惠券
+                &.scroll-receive {
+                    height: $base-scroll-height;
+                }
+                // 使用优惠券
+                &.scroll-use {
+                    height: $base-scroll-height - $unset-height - $btn-height - 3 * $grid;
+                }
+            }
+            .btn {
+                width: 600rpx;
+                height: $btn-height;
+                margin: $grid auto;
+                background: linear-gradient(90deg, #fc32b4 0%, #f83c6c 100%);
+                opacity: 1;
+                border-radius: 45rpx;
+                line-height: $btn-height;
+                text-align: center;
+                font-size: 30rpx;
+                color: #ffffff;
+            }
+        }
+    }
+}
+</style>

+ 301 - 0
components/cm-module/cm-coupon/cm-coupon.vue

@@ -0,0 +1,301 @@
+<template>
+    <view class="coupon" :class="canUse ? 'on' : 'off'" v-if="couponData" @click="choose">
+        <view class="content" :class="[statusIcon, { 'cover-bg': showStatus }]">
+            <view class="header">
+                <!-- 优惠券类别 -->
+                <view class="tag">{{ couponData.couponType | formatTag }}</view>
+                <view class="price"><text>¥</text>{{ couponData.couponAmount }}</view>
+                <!-- 使用条件 -->
+                <view class="tip">
+                    <template v-if="couponData.noThresholdFlag === 1">
+                        无门槛
+                    </template>
+                    <template v-else>
+                        满{{ couponData.touchPrice }}可用
+                    </template>
+                </view>
+            </view>
+            <view class="center desc">
+                <!-- 优惠券名称 -->
+                <view class="row bold">{{ couponData.couponName }}</view>
+                <!-- 适用范围 -->
+                <view class="row">{{ couponData.productType | formatUseType }}</view>
+                <!-- 截止日期 receivePeriod(领取) usePeriod(使用)-->
+                <view class="end-time" v-if="couponData.useStatus === 0">
+                    截止日期:
+                    <template v-if="couponData.receivePeriod">{{ couponData.receivePeriod | formatDate }}</template>
+                    <template v-else
+                        >永久</template
+                    >
+                </view>
+                <view class="end-time" v-else>有效期至:{{ couponData.usePeriod | formatDate }}</view>
+            </view>
+            <view class="footer">
+                <template v-if="!chooseAble">
+                    <view class="btn" @click="handleBtnClick" v-if="couponData.useStatus === 0">领取</view>
+                    <template v-if="couponData.useStatus === 1">
+                        <view class="btn plain" @click="handleBtnClick" v-if="btnUseType === 1">去使用</view>
+                        <view class="btn" @click="handleBtnClick" v-else>可用商品</view>
+                    </template>
+                </template>
+                <template v-if="chooseAble">
+                    <view class="btn" @click="handleBtnClick" v-if="!couponData.canSelect">去凑单</view>
+                </template>
+            </view>
+            <template v-if="chooseAble">
+                <text
+                    class="radio-flag iconfont "
+                    :class="currentId === couponData.uniqueId ? 'icon-xuanze' : 'icon-weixuanze'"
+                    v-if="couponData.canSelect"
+                ></text>
+            </template>
+        </view>
+    </view>
+</template>
+
+<script>
+import { dateFormat } from '@/common/util.js'
+import { mapGetters, mapActions } from 'vuex'
+export default {
+    props: {
+        // 优惠券数据
+        couponData: {
+            type: Object,
+            default: () => {}
+        },
+        // 设置优惠券是否可选
+        chooseAble: {
+            type: Boolean,
+            default: false
+        },
+        // 是否显示优惠券状态
+        showStatus: {
+            type: Boolean,
+            default: false
+        },
+        btnUseType: {
+            type: Number,
+            default: 1
+        },
+        currentId: {
+            type: Number
+        }
+    },
+    filters: {
+        // 优惠券标签格式化
+        formatTag(val) {
+            const tags = {
+                1: '活动券',
+                2: '用户专享券',
+                3: '新用户券',
+                4: '好友分享券',
+                5: '好友消费券'
+            }
+            return tags[val] || '未知券'
+        },
+        // 格式化日期
+        formatDate(val) {
+            return dateFormat(new Date(val), 'yyyy-MM-dd')
+        },
+        // 优惠券使用范围
+        formatUseType(val) {
+            const type = {
+                1: '全商城商品使用',
+                2: '部分商品使用'
+            }
+            return type[val] || '优惠券无法使用'
+        }
+    },
+    computed: {
+        ...mapGetters(['hasLogin']),
+        // 优惠券状态图标
+        statusIcon() {
+            if (!this.couponData) return
+            let name = ''
+            const type = {
+                0: '', // 未领取
+                1: 'received', //已领取
+                2: 'used', // 已使用
+                3: 'expired' //已失效
+            }
+            return type[this.couponData.useStatus]
+        },
+        // 优惠券是能否领取和使用
+        canUse() {
+            return ![2, 3].includes(this.couponData.useStatus)
+        }
+    },
+
+    methods: {
+        ...mapActions('coupon', ['receiveCoupon']),
+        // 点击勾选按钮
+        choose() {
+            if (!this.chooseAble || !this.couponData.canSelect) return
+            this.$emit('choose', this.couponData)
+        },
+        // 按钮点击
+        handleBtnClick() {
+            if (!this.hasLogin) return this.$api.navigateTo('/pages/login/login')
+            const clickFns = {
+                0: this.receiveCoupon, // 领取优惠券
+                1: this.useCoupon // 使用优惠券
+            }
+            // 将优惠券id作为参数传递进去
+            clickFns[this.couponData.useStatus](this.couponData).then(res => {
+                // 向父组件发送领取优惠券事件
+                this.$emit('btnClick', this.couponData)
+            })
+        },
+        // 使用优惠券
+        useCoupon(couponData) {
+            const type = this.couponData.productType
+            if (type === 1) {
+                console.log('全部商品可用')
+                uni.reLaunch({ url: '/pages/tabBar/index/index' })
+                // this.$api.switchTabTo('/pages/tabBar/index/index')
+            } else {
+                console.log('部分商品可用')
+                uni.navigateTo({ url: `/pages/goods/goods-coupon-list?couponId=${couponData.couponId}` })
+            }
+            return Promise.resolve()
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+$grid: 24rpx;
+$color: #ff457b;
+$coupon-width: 702rpx;
+$coupon-height: 200rpx;
+$coupon-bg-on: url(https://static.caimei365.com/app/mini-hehe/icon/icon-coupon-bg-on.png);
+$coupon-bg-off: url(https://static.caimei365.com/app/mini-hehe/icon/icon-coupon-bg-off.png);
+$coupon-bg-received: url(https://static.caimei365.com/app/mini-hehe/icon/icon-coupon-received.png); // 已领取
+$coupon-bg-expired: url(https://static.caimei365.com/app/mini-hehe/icon/icon-coupon-expired.png); // 已失效
+$coupon-bg-used: url(https://static.caimei365.com/app/mini-hehe/icon/icon-coupon-used.png); // 已使用
+.coupon {
+    width: $coupon-width;
+    height: $coupon-height;
+    padding: 6rpx;
+    margin: $grid;
+    box-sizing: border-box;
+    background: #ffffff no-repeat center;
+    background-size: $coupon-width $coupon-height;
+    .content {
+        position: relative;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+    }
+    .cover-bg {
+        background-position: 580rpx 16rpx;
+        background-size: 100rpx 100rpx;
+        background-repeat: no-repeat;
+        &.received {
+            background-image: $coupon-bg-received;
+        }
+        &.expired {
+            background-image: $coupon-bg-expired;
+        }
+        &.used {
+            background-image: $coupon-bg-used;
+        }
+    }
+    &.on {
+        background-image: $coupon-bg-on;
+    }
+    &.off {
+        filter: grayscale(1);
+        opacity: 0.7;
+        background-image: $coupon-bg-off;
+    }
+    .header,
+    .center,
+    .footer {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+    }
+    .header {
+        align-items: center;
+        position: relative;
+        width: 204rpx;
+        height: 188rpx;
+        .tag {
+            position: absolute;
+            top: 0;
+            left: 0;
+            height: 32rpx;
+            padding: 0 6rpx;
+            background: linear-gradient(90deg, #fc32b4 0%, #f83c6c 100%);
+            border-radius: 10rpx 0px 10rpx 0px;
+            font-size: 22rpx;
+            color: #ffffff;
+            text-align: center;
+            line-height: 32rpx;
+        }
+        .price {
+            font-size: 56rpx;
+            font-weight: 600;
+            color: $color;
+            text {
+                font-size: 24rpx;
+            }
+        }
+        .tip {
+            margin-top: 6rpx;
+            font-size: 24rpx;
+            color: #404040;
+        }
+    }
+    .center {
+        flex: 1;
+        margin-left: 36rpx;
+        .row {
+            width: 250rpx;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            font-size: 26rpx;
+            color: #333333;
+            margin-bottom: 16rpx;
+            &.bold {
+                font-weight: 600;
+            }
+        }
+        .end-time {
+            font-size: 20rpx;
+            color: #999999;
+        }
+    }
+    .footer {
+        align-items: center;
+        width: 128rpx;
+        margin-right: $grid;
+        .btn {
+            width: 128rpx;
+            height: 48rpx;
+            background: linear-gradient(270deg, #f83c6c 0%, #fc32b4 100%);
+            border-radius: 28rpx;
+            box-sizing: border-box;
+            border: 1rpx solid transparent;
+            text-align: center;
+            line-height: 46rpx;
+            font-size: 26rpx;
+            color: #ffffff;
+            &.plain {
+                border: 1rpx solid $color;
+                background: transparent;
+                color: $color;
+            }
+        }
+    }
+    .radio-flag {
+        position: absolute;
+        top: $grid;
+        right: $grid;
+        color: $color;
+        font-size: 32rpx;
+    }
+}
+</style>

+ 0 - 0
components/cm-custom/cm-drag.vue → components/cm-module/cm-drag/cm-drag.vue


+ 166 - 0
components/cm-module/cm-drawer/cm-drawer.vue

@@ -0,0 +1,166 @@
+<template>
+    <view class="cm-drawer">
+        <view class="mask" v-if="visible" :style="[offsetSize, { zIndex: zIndex - 1 }]" @click="$emit('close')"></view>
+        <view class="drawer-content" :class="[position]" :style="[offsetSize, { zIndex: zIndex }]">
+            <uni-transition :mode-class="modeClass" :show="visible">
+                <view class="content">
+                    <!-- 关闭弹框按钮 -->
+                    <view class="iconfont icon-iconfontguanbi close" @click="$emit('close')"></view>
+                    <view class="title" v-if="title">{{ title }}</view>
+                    <!-- 自定义插槽 -->
+                    <view><slot></slot></view>
+                </view>
+            </uni-transition>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'cm-drawer',
+    props: {
+        title: {
+            type: String,
+            default: ''
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        },
+        position: {
+            type: String,
+            default: 'center'
+        },
+        offset: {
+            type: Number,
+            default: 0
+        },
+        zIndex: {
+            type: Number,
+            default: 99999
+        }
+    },
+    computed: {
+        offsetSize() {
+            if (this.position === 'center' || this.offset === 0) {
+                return {}
+            }
+            return {
+                [this.position]: this.offset + 'rpx'
+            }
+        },
+        modeClass() {
+            let name = 'fade'
+            switch (this.position) {
+                case 'center':
+                    name = 'fade'
+                    break
+                case 'top':
+                    name = 'slide-top'
+                    break
+                case 'right':
+                    name = 'slide-right'
+                    break
+                case 'bottom':
+                    name = 'slide-bottom'
+                    break
+                case 'left':
+                    name = 'slide-left'
+                    break
+                default:
+                    name = 'fade'
+                    break
+            }
+            return name
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+$drawer-size: 100rpx;
+
+.mask {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.5);
+}
+.cm-drawer {
+    .drawer-content {
+        position: fixed;
+        &.bottom {
+            left: 0;
+            bottom: 0;
+            .content {
+                border-radius: 16rpx 16rpx 0 0;
+            }
+        }
+        &.top {
+            top: 0;
+            left: 0;
+            .content {
+                border-radius: 0 0 16rpx 16rpx;
+            }
+        }
+        &.right {
+            top: 0;
+            right: 0;
+            .content {
+                border-radius: 16rpx 0 16rpx 0;
+            }
+        }
+        &.left {
+            top: 0;
+            left: 0;
+            .content {
+                border-radius: 0 16rpx 16rpx 0;
+            }
+        }
+        &.center {
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            .content {
+                width: 702rpx;
+                min-height: 600rpx;
+                max-height: 800rpx;
+                overflow-y: scroll;
+                border-radius: 16rpx;
+            }
+        }
+        .content {
+            position: relative;
+            width: 750rpx;
+            min-height: 180rpx;
+            background: #fff;
+            box-sizing: border-box;
+            padding: 24rpx;
+            .close {
+                position: absolute;
+                top: 26rpx;
+                right: 26rpx;
+                font-size: 34rpx;
+                color: #b2b2b2;
+                width: 60rpx;
+                height: 60rpx;
+                text-align: center;
+                line-height: 60rpx;
+            }
+            .title {
+                width: 100%;
+                word-break: break-all;
+                overflow: hidden;
+                line-height: 50rpx;
+                height: 50rpx;
+                text-overflow: ellipsis;
+                text-align: center;
+                font-size: 34rpx;
+                color: #333333;
+            }
+        }
+    }
+}
+</style>

+ 56 - 0
components/cm-module/cm-empty/cm-empty.vue

@@ -0,0 +1,56 @@
+<template>
+    <view class="cm-empty" :style="[offsetValue]">
+        <image :src="image" mode="widthFix"></image> <text>{{ message }}</text>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'cm-empty',
+    props: {
+        message: {
+            type: String,
+            default: ''
+        },
+        image: {
+            type: String,
+            default: ''
+        },
+        offset: {
+            type: [String, Number],
+            default: 0
+        }
+    },
+    computed: {
+        offsetValue() {
+            if (typeof this.offset === 'string') {
+                return {
+                    transform: `translateY(${this.offset})`
+                }
+            }else{
+                return {
+                    transform: `translateY(${this.offset}%)`
+                }
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-empty {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    image {
+        width: 50%;
+    }
+    text {
+        font-size: 26rpx;
+        color: #999999;
+    }
+}
+</style>

+ 256 - 0
components/cm-module/cm-goods-nav/cm-goods-nav.vue

@@ -0,0 +1,256 @@
+<template>
+    <view>
+        <view class="cm-goods-nav" :class="{ hasBottom: isIphoneX }">
+            <!-- 导航按钮 -->
+            <uni-goods-nav
+                :fill="true"
+                :options="options"
+                :buttonGroup="buttonGroup"
+                @click="onClick"
+                @buttonClick="buttonClick"
+            />
+        </view>
+        <cm-drawer :visible="countVisible" @close="drawerClose" position="bottom">
+            <view class="count">
+                <view class="top">
+                    <image :src="productInfo.mainImage" class="cover"></image>
+                    <view class="right">
+                        <view class="number">
+                            <text>数量:</text>
+                            <number-box :value="count" @change="countChange"></number-box>
+                        </view>
+                        <view class="single-price">
+                            <text>单价:¥</text> <text class="price">{{ buyRetailPrice | priceFormat }}</text>
+                        </view>
+                    </view>
+                </view>
+                <view class="btn" @click="confirm">确认</view>
+            </view>
+        </cm-drawer>
+    </view>
+</template>
+
+<script>
+import CmDrawer from '@/components/cm-module/cm-drawer/cm-drawer.vue'
+import NumberBox from '@/components/cm-module/cm-cart-product/number-box.vue'
+import { mapGetters, mapActions, mapMutations } from 'vuex'
+export default {
+    components: {
+        NumberBox,
+        CmDrawer
+    },
+    props: {
+        productInfo: {
+            type: Object,
+            default: () => {}
+        }
+    },
+    filters: {
+        priceFormat(price) {
+            return Number(price).toFixed(2)
+        }
+    },
+    data() {
+        return {
+            count: 1,
+            countVisible: false,
+            buyRetailPrice: 0,
+            btnClickType: -1,
+            options: [
+                {
+                    icon: 'home',
+                    text: '首页'
+                },
+                {
+                    icon: 'headphones',
+                    text: '客服',
+                    type: 'contact'
+                },
+                {
+                    icon: 'cart',
+                    text: '购物车',
+                    info: 0,
+                    infoBackgroundColor: '#FC464C',
+                    infoColor: '#ffffff'
+                }
+            ],
+            buttonGroup: [
+                {
+                    text: '加入购物车',
+                    backgroundColor: '#FFEFF4',
+                    color: '#FF457B'
+                },
+                {
+                    text: '立即购买',
+                    backgroundColor: 'linear-gradient(90deg, #FC32B4 0%, #F83C6C 100%)',
+                    color: '#fff'
+                }
+            ]
+        }
+    },
+    computed: {
+        ...mapGetters(['isIphoneX', 'kindCount', 'hasLogin'])
+    },
+    watch: {
+        kindCount(newCount) {
+            this.options[2].info = newCount
+        },
+        count() {
+            if (!this.productInfo) return
+            this.processActivityPrice()
+        },
+        countVisible(newVal) {
+            if (newVal) this.processActivityPrice()
+        }
+    },
+    created() {
+        this.options[2].info = this.kindCount
+        // this.initBuyPrice()
+    },
+    methods: {
+        ...mapActions('cart', ['addToCart', 'getCartNumber']),
+        countChange(value) {
+            this.count = value
+        },
+        drawerClose() {
+            this.countVisible = false
+            this.count = 1
+        },
+        // 初始化购买价格
+        initBuyPrice() {
+            if (this.productInfo.activeStatus === 1 && this.productInfo.ladderList && this.productInfo.length > 0) {
+                this.count = this.productInfo.ladderList[0].buyNum
+            }
+        },
+        // 左边按钮
+        onClick(e) {
+            const clickFns = {
+                0: this.toHome,
+                1: this.customer,
+                2: this.toCart
+            }
+            clickFns[e.index]()
+            console.log(e.index)
+        },
+        // 右边按钮
+        buttonClick(e) {
+            this.countVisible = true
+            this.btnClickType = e.index
+            this.processActivityPrice()
+        },
+        // 确认
+        confirm() {
+            this.countVisible = false
+            const clickFns = {
+                0: this.joinCart,
+                1: this.buyNow
+            }
+            clickFns[this.btnClickType]()
+        },
+        // 跳转首页
+        toHome() {
+            uni.switchTab({ url: '/pages/tabBar/index/index' })
+        },
+        // 客服
+        customer() {
+            console.log(this)
+        },
+        // 去登陆
+        toLogin() {
+            uni.navigateTo({ url: '/pages/login/login' })
+        },
+        // 去购物车
+        toCart() {
+            if (!this.hasLogin) return this.toLogin()
+            uni.navigateTo({ url: '/pages/goods/cart' })
+        },
+        // 加入购物车
+        joinCart() {
+            if (!this.hasLogin) return this.toLogin()
+            this.addToCart({
+                productId: this.productInfo.productId,
+                productCount: this.count
+            }).finally(() => {
+                this.countVisible = false
+            })
+        },
+        // 立即购买
+        buyNow() {
+            if (!this.hasLogin) return this.toLogin()
+            let productStp = {
+                allPrice: this.count * this.buyRetailPrice,
+                allCount: this.count,
+                productId: this.productInfo.productId,
+                productCount: this.count,
+                heUserId: this.productInfo.heUserId
+            }
+            this.$api.navigateTo(
+                `/pages/user/order/create-order?type=prodcut&data=${JSON.stringify({ data: productStp })}`
+            )
+            this.countVisible = false
+        },
+        //单独处理活动价格和阶梯价格
+        processActivityPrice() {
+            this.buyRetailPrice = this.productInfo.price
+            if (this.productInfo.activeStatus === 1 && this.productInfo.ladderList) {
+                this.productInfo.ladderList.forEach((item, index) => {
+                    if (this.count >= item.buyNum) {
+                        this.buyRetailPrice = item.buyPrice
+                    }
+                })
+            }
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-goods-nav {
+    position: fixed;
+    width: 100%;
+    bottom: 0;
+    left: 0;
+    background: #fff;
+    &.hasBottom {
+        padding-bottom: 44rpx;
+    }
+}
+.count {
+    padding: 60rpx 0;
+    .top {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        padding: 0 60rpx;
+        .cover {
+            width: 104rpx;
+            height: 104rpx;
+        }
+        .right {
+            margin-left: 24rpx;
+            font-size: 24rpx;
+            color: #333;
+            .single-price {
+                color: #ff457b;
+                margin-top: 24rpx;
+            }
+            .number {
+                display: flex;
+                justify-content: flex-start;
+                align-items: center;
+            }
+        }
+    }
+    .btn {
+        width: 100%;
+        height: 88rpx;
+        margin-top: 32px;
+        background: #ff457b;
+        line-height: 88rpx;
+        text-align: center;
+        color: #ffffff;
+        font-size: 28rpx;
+        border-radius: 44rpx;
+    }
+}
+</style>

+ 29 - 0
components/cm-module/cm-loading/cm-loading.vue

@@ -0,0 +1,29 @@
+<template>
+    <view class="cm-loading" v-if="visible"> <tui-loading :text="text"></tui-loading> </view>
+</template>
+
+<script>
+export default {
+    props: {
+        text: {
+            type: String,
+            default: '正在加载...'
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-loading {
+    position: fixed;
+    left: 0;
+    top: 0;
+    z-index: 999;
+    width: 100%;
+    height: 100%;
+}
+</style>

+ 115 - 0
components/cm-module/cm-product-info/cm-product-info.vue

@@ -0,0 +1,115 @@
+<template>
+    <view class="cm-product-info">
+        <view class="title tui-ellipsis-2">{{ productInfo.name }}</view>
+        <view class="row tags">
+            <template v-if="productInfo.tagsList.length > 0">
+                <view class="tag" v-for="(tag, index) in productInfo.tagsList" :key="index">{{ tag }}</view>
+            </template>
+        </view>
+        <button open-type="share" class="share-btn">
+            <text class="iconfont icon-fenxiang"></text> <view class="name">分享</view>
+        </button>
+        <view class="remark" v-if="false">
+            <text class="name">备注:</text>
+            <text class="content">这里是备注名称这里是备注名称这里是备注名称名称称名...</text>
+        </view>
+        <view class="line"></view>
+        <view class="service">
+            <view class="iconfont icon-wuyoushouhou"><text>无忧退货</text></view>
+            <view class="iconfont icon-wuyoushouhou"><text>快速退款</text></view>
+            <view class="iconfont icon-wuyoushouhou"><text>正品保证</text></view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        productInfo: {
+            type: Object,
+            default: () => {}
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-product-info {
+    position: relative;
+    padding: 24rpx 0;
+    .share-btn {
+        position: absolute;
+        right: 24rpx;
+        top: 24rpx;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        flex-direction: column;
+        color: #999;
+        .name {
+            font-size: 22rpx;
+        }
+    }
+    .title {
+        width: 544rpx;
+        font-size: 32rpx;
+        line-height: 48rpx;
+        text-align: justify;
+        color: #333333;
+    }
+    .tags {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        flex-wrap: wrap;
+        margin-top: 16rpx;
+        min-height: 36rpx;
+        .tag {
+            margin-right: 20rpx;
+            margin-top: 4rpx;
+            padding: 0 4rpx;
+            line-height: 34rpx;
+            font-size: 20rpx;
+            color: #ff457b;
+            background: #fff3f7;
+            border-radius: 8rpx;
+        }
+    }
+    .remark {
+        width: 100%;
+        font-size: 24rpx;
+        line-height: 24rpx;
+        margin-top: 42rpx;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        .name {
+            color: #999999;
+        }
+        .content {
+            color: #3f3f3f;
+        }
+    }
+    .line {
+        width: 100%;
+        height: 1rpx;
+        margin: 24rpx 0;
+        background: #e1e1e1;
+    }
+    .service {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        color: #ff457b;
+        .iconfont {
+            margin-right: 60rpx;
+            font-size: 22rpx;
+            line-height: 24rpx;
+            text {
+                color: #999999;
+                margin-left: 4rpx;
+            }
+        }
+    }
+}
+</style>

+ 89 - 0
components/cm-module/cm-product-params/cm-product-params.vue

@@ -0,0 +1,89 @@
+<template>
+    <cm-drawer title="商品参数" :visible="visible" @close="$emit('close')" position="bottom">
+        <template>
+            <scroll-view scroll-y="true" class="cm-product-params">
+                <view class="content-tr">
+                    <view class="content-td">品牌:</view>
+                    <view class="content-th">{{ productInfo.brandName == null ? '其他' : productInfo.brandName }}</view>
+                </view>
+                <view class="content-tr">
+                    <view class="content-td">包装规格:</view> <view class="content-th">{{ productInfo.unit }}</view>
+                </view>
+                <view class="content-tr">
+                    <view class="content-td">库存:</view> <view class="content-th">{{ productInfo.stock }}</view>
+                </view>
+                <view
+                    class="content-tr"
+                    v-if="productInfo.parametersList.length > 0"
+                    v-for="(item, index) in productInfo.parametersList"
+                    :key="index"
+                >
+                    <view class="content-td">{{ item.paramsName }}:</view>
+                    <view class="content-th">{{ item.paramsContent }}</view>
+                </view>
+            </scroll-view>
+            <view class="btn" @click="$emit('close')">了解</view>
+        </template>
+    </cm-drawer>
+</template>
+
+<script>
+import CmDrawer from '../cm-drawer/cm-drawer.vue'
+export default {
+    components: {
+        CmDrawer
+    },
+    props: {
+        productInfo: {
+            type: Object,
+            default: () => {}
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.cm-product-params {
+    width: 100%;
+    padding-top: 24rpx;
+    .content-tr {
+        width: 100%;
+        min-height: 58rpx;
+        line-height: 58rpx;
+        display: flex;
+        .content-td {
+            display: flex;
+            flex: 3;
+            font-size: 26rpx;
+            color: #999999;
+            line-height: 58rpx;
+            text-align: right;
+        }
+        .content-th {
+            display: flex;
+            flex: 7;
+            font-size: 26rpx;
+            color: #333333;
+            line-height: 58rpx;
+            text-align: left;
+            padding-left: 10rpx;
+        }
+    }
+}
+.btn {
+    width: 100%;
+    height: 88rpx;
+    margin-top: 32rpx;
+    margin-bottom: 24rpx;
+    background: #ff457b;
+    line-height: 88rpx;
+    text-align: center;
+    color: #ffffff;
+    font-size: 28rpx;
+    border-radius: 44rpx;
+}
+</style>

+ 125 - 0
components/cm-module/cm-product-price/cm-product-price.vue

@@ -0,0 +1,125 @@
+<template>
+    <!-- 价格区域 -->
+    <view class="cm-product-price">
+        <view class="price">
+            <text class="small">¥</text><text class="big">{{ bigPrice }}</text
+            ><text class="small">{{ smallPrice }}</text>
+        </view>
+        <view class="tags">
+            <view class="tag type1" v-if="productInfo.heUserId !== 0">促销</view>
+            <template v-if="productInfo.activeStatus === 1">
+                <view class="tag type2" v-if="productInfo.ladderList" @click="drawerVisible = true">活动价</view>
+            </template>
+        </view>
+
+        <cm-drawer :visible="drawerVisible" position="bottom" @close="drawerClose">
+            <template>
+                <scroll-view scroll-y="true" class="scroll-box">
+                    <cm-activity-info :productInfo="productInfo"></cm-activity-info>
+                </scroll-view>
+                <view class="btn" @click="drawerVisible = false">了解</view>
+            </template>
+        </cm-drawer>
+    </view>
+</template>
+
+<script>
+import CmDrawer from '@/components/cm-module/cm-drawer/cm-drawer.vue'
+import CmActivityInfo from '@/components/cm-module/cm-activity-info/cm-activity-info.vue'
+export default {
+    components: {
+        CmDrawer,
+        CmActivityInfo
+    },
+    data() {
+        return {
+            drawerVisible: false
+        }
+    },
+    props: {
+        productInfo: {
+            type: Object,
+            default: () => {}
+        }
+    },
+    computed: {
+        price() {
+            return Number(this.productInfo.price).toFixed(2)
+        },
+        bigPrice() {
+            return this.price.split('.')[0]
+        },
+        smallPrice() {
+            return '.' + this.price.split('.')[1]
+        }
+    },
+    methods: {
+        drawerClose() {
+            this.drawerVisible = false
+        }
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.cm-product-price {
+    position: relative;
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    padding: 12rpx 0;
+
+    .price {
+        color: #ff457b;
+        .small {
+            font-size: 36rpx;
+        }
+        .big {
+            font-size: 48rpx;
+        }
+    }
+    .tags {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        margin-left: 24rpx;
+        .tag {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 30rpx;
+            margin-right: 8rpx;
+            font-size: 22rpx;
+            &.type1 {
+                width: 56rpx;
+                background: #ff457b;
+                border-radius: 4rpx;
+                color: #ffffff;
+            }
+            &.type2 {
+                width: 80rpx;
+                background: url(https://static.caimei365.com/app/mini-hehe/icon/icon-active.png) top center no-repeat;
+                background-size: 80rpx 30rpx;
+                color: #f83c6c;
+            }
+        }
+    }
+}
+.scroll-box {
+    height: 430rpx;
+    box-sizing: border-box;
+    padding-top: 70rpx;
+}
+.btn {
+    width: 100%;
+    height: 88rpx;
+    margin-top: 24rpx;
+    margin-bottom: 24rpx;
+    background: #ff457b;
+    line-height: 88rpx;
+    text-align: center;
+    color: #ffffff;
+    font-size: 28rpx;
+    border-radius: 44rpx;
+}
+</style>

+ 146 - 0
components/cm-module/cm-product/cm-product.vue

@@ -0,0 +1,146 @@
+<template>
+    <view class="cm-product" @click.stop="detail">
+        <view class="recommend" v-if="data.recommend === '1'"></view>
+        <!-- 封面 -->
+        <image class="cover" :src="data.mainImage"></image>
+        <view class="content">
+            <!-- 标题名称 -->
+            <view class="title">{{ data.name }}</view>
+            <!-- 标签 -->
+            <view class="tags">
+                <!-- <view class="tag type1">自营</view> -->
+                <view class="tag type2" v-if="data.activeStatus == 1">活动价</view>
+                <view class="tag type2" v-if="data.couponsLogo">优惠券</view>
+            </view>
+            <!-- 底部 -->
+            <view class="footer">
+                <!-- 价格 -->
+                <view class="price">¥{{ data.price | priceFormat }}</view>
+                <!-- 加入购物车 -->
+                <view class="add-cart iconfont icon-gouwuche" @click.stop="addCart"></view>
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'cm-product',
+    props: {
+        data: {
+            type: Object,
+            default: () => {}
+        }
+    },
+    filters: {
+        priceFormat(val) {
+            return Number(val).toFixed(2)
+        }
+    },
+    methods: {
+        // 跳转商品详情
+        detail() {
+            uni.navigateTo({
+                url: `/pages/goods/product-detail?productId=${this.data.productId}&jumpState=1`
+            })
+        },
+        // 加入购物车
+        addCart(){
+            this.$store.dispatch('cart/addToCart', { productId: this.data.productId })
+        }
+    } 
+}
+</script>
+
+<style lang="scss" scoped>
+$width: 339rpx;
+$height: 532rpx;
+$radius: 16rpx;
+$grid: 24rpx;
+
+.cm-product {
+    position: relative;
+    width: $width;
+    height: $height;
+    background: #fff;
+    border-radius: $radius;
+    overflow: hidden;
+    .recommend {
+        position: absolute;
+        top: 0;
+        left: 34rpx;
+        width: 68rpx;
+        height: 55rpx;
+        background: url(https://static.caimei365.com/app/mini-hehe/icon/recommend.png) no-repeat center;
+        background-size: 68rpx 55rpx;
+    }
+    .cover {
+        width: $width;
+        height: $width;
+    }
+    .title,
+    .tags,
+    .footer {
+        padding: 0 $grid;
+        margin: 12rpx 0;
+    }
+    .title {
+        height: 70rpx;
+        font-size: 26rpx;
+        line-height: 35rpx;
+        color: #333333;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        display: -webkit-box;
+        -webkit-line-clamp: 2; // 这里控制几行显示省略号
+        -webkit-box-orient: vertical;
+    }
+    .tags {
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+        height: 24rpx;
+        .tag {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 30rpx;
+            margin-right: 8rpx;
+            font-size: 22rpx;
+            &.type1 {
+                width: 56rpx;
+                background: #ff457b;
+                border-radius: 4rpx;
+                color: #ffffff;
+            }
+            &.type2 {
+                width: 80rpx;
+                background: url(https://static.caimei365.com/app/mini-hehe/icon/icon-active.png) top center no-repeat;
+                background-size: 80rpx 30rpx;
+                color: #f83c6c;
+            }
+        }
+    }
+    .footer {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .add-cart {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            width: 44rpx;
+            height: 44rpx;
+            background: #ff457b;
+            color: #fff;
+            border-radius: 50%;
+        }
+        .price {
+            flex: 1;
+            font-size: 26rpx;
+            font-weight: 600;
+            color: #f83c6c;
+        }
+    }
+}
+</style>

+ 75 - 0
components/cm-module/cm-selector-coupons/cm-selector-coupons.vue

@@ -0,0 +1,75 @@
+<template>
+    <view class="selector-coupons" :style="{ top: top + 'px' }" v-if="visible" @click="$emit('click')">
+        <image :src="image"></image>
+        <view class="content">
+            <text class="title">{{ title }}</text> <text class="subTitle">{{ subTitle }}</text>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'cm-selector-coupons',
+    props: {
+        top: {
+            type: Number,
+            default: 0
+        },
+        image: {
+            type: String
+        },
+        title: {
+            type: String
+        },
+        subTitle: {
+            type: String
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        }
+    },
+    created() {
+        console.log(this.title, this.subTitle)
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.selector-coupons {
+    position: fixed;
+    z-index: 999999;
+    top: 0;
+    left: 0;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    width: 750rpx;
+    height: 128rpx;
+    background: rgba(0, 0, 0, 0.7);
+    box-sizing: border-box;
+    padding: 0 40rpx;
+    image {
+        width: 78rpx;
+        height: 78rpx;
+        border-radius: 50%;
+    }
+    .content {
+        display: flex;
+        flex: 1;
+        flex-direction: column;
+        align-items: flex-start;
+        justify-content: center;
+        margin-left: 24rpx;
+        .title {
+            font-size: 26rpx;
+            color: #fff;
+        }
+        .subTitle {
+            font-size: 26rpx;
+            color: #fff;
+            margin-top: 10rpx;
+        }
+    }
+}
+</style>

+ 1 - 2
components/cm-module/creatOrder/address.vue → components/cm-module/createOrder/address.vue

@@ -33,7 +33,7 @@
 
 <script>
 	export default{
-		name:"address",
+		name:'address',
 		props:{
 			addressData:{
 				type:Object
@@ -89,7 +89,6 @@
 	.address-section {
 		width: 100%;
 		height: auto;
-		float: left;
 		position: relative;
 		
 		.address-empty{

+ 0 - 0
components/cm-module/creatOrder/freight.vue → components/cm-module/createOrder/freight.vue


+ 6 - 7
components/cm-module/creatOrder/goodsList.vue → components/cm-module/createOrder/goodsList.vue

@@ -55,7 +55,7 @@
 
 <script>
 	export default{
-		name:"goods",
+		name:'goods',
 		props:{
 			goodsData:{
 				type:Array
@@ -71,7 +71,7 @@
 		},
 		filters:{
 			NumFormat(value) {//处理金额
-				return Number(value).toFixed(2);
+				return Number(value).toFixed(2)
 			},
 		},	
 		watch: {
@@ -107,13 +107,12 @@
 <style lang="scss">
 	.goods-template{
 		width: 100%;
-		height: auto;
+		// height: auto;
 		background: #FFFFFF;
-		float: left;
 		margin-top: 24rpx;
 		.goods-list{
 			width: 100%;
-			height: auto;	
+			// height: auto;	
 			background:#F7F7F7;
 			.goods-item{
 				width: 702rpx;
@@ -234,7 +233,7 @@
 						line-height: 54rpx;
 						font-size: $font-size-28;
 						width: 48%;
-						color: #FF2A2A;
+						color: #ff457b;
 						float: left;
 						&.disabled{
 							color: #999999;
@@ -352,7 +351,7 @@
 					display: flex;
 					justify-content: flex-end;
 					.money{
-						color: #FF2A2A;
+						color: #ff457b;
 						font-size: $font-size-28;
 					}
 				}

+ 29 - 30
components/cm-module/creatOrder/sellerFreight.vue → components/cm-module/createOrder/sellerFreight.vue

@@ -46,7 +46,7 @@
 
 <script>
 	export default{
-		name:"freight",
+		name:'freight',
 		props:{
 			freightDatas:{
 				type:Object
@@ -78,40 +78,40 @@
 				// console.log(data)
 				switch(data.freePostFlag){
 					case 1:
-						this.current = 0;
-						this.freightData.freePostFlag = data.freePostFlag;
+						this.current = 0
+						this.freightData.freePostFlag = data.freePostFlag
 						if(data.freight == 0){
 							this.hanldFreight = ''
 						}else{
 							this.hanldFreight = data.freight
 						}
-						this.freightData.freight = data.freight;
-						this.freightMoney = this.hanldFreight;
+						this.freightData.freight = data.freight
+						this.freightMoney = this.hanldFreight
 						this.freightText = ''
-						break;
+						break
 					case 0:
-						this.current = 1;
-						this.freightData.freePostFlag = data.freePostFlag;
+						this.current = 1
+						this.freightData.freePostFlag = data.freePostFlag
 						this.freightText = '包邮'
-						break;
+						break
 					case -1:
-						this.current = 2;
-						this.freightData.freePostFlag = data.freePostFlag;
+						this.current = 2
+						this.freightData.freePostFlag = data.freePostFlag
 						this.freightText = '到付'
-						break;
+						break
 				}
 			},
 			freightConfim(){//提交完成运费选择
 				switch(this.freightData.freePostFlag){
 					case 1:
 						this.choiceaFreightFirst(this.freightData.freePostFlag)
-						break;
+						break
 					case 0:
 						this.choiceaFreightFirst(this.freightData.freePostFlag)
-						break;
+						break
 					case -1:
 						this.choiceaFreightFirst(this.freightData.freePostFlag)
-						break;	
+						break	
 				}		
 			},
 			choiceaFreightFirst(index){//校验运费形式及运费价
@@ -129,35 +129,35 @@
 				this.hideSpec()
 			},
 			showTip(){//显示运费弹窗
-				this.$emit('showFreightAlert');
+				this.$emit('showFreightAlert')
 			},
 			hideSpec() {//关闭选择数量确认弹窗
-				this.specClass = 'hide';
+				this.specClass = 'hide'
 				setTimeout(() => {
-					this.specClass = 'none';
-				}, 200);
+					this.specClass = 'none'
+				}, 200)
 			},
 			hanldOperationConfim(data){//显示选择数量确认弹窗
 				// this.specClass = 'show';
 				// this.freightMoney = this.hanldFreight
 			},
 			radioChange(e) {//运费选择切换
-				this.freightData.freePostFlag = parseInt(e.target.value);
+				this.freightData.freePostFlag = parseInt(e.target.value)
 				switch(this.freightData.freePostFlag){
 					case 1:
 						this.freightText = '不包邮'
-						break;
+						break
 					case 0:
 						this.freightText = '包邮'
-						break;
+						break
 					case -1:
 						this.freightText = '到付'
-						break;	
+						break	
 				}		
 				for (let i = 0; i < this.freightList.length; i++) {
 					if (this.freightList[i].value === this.freePostFlag) {
-						this.current = i;
-						break;
+						this.current = i
+						break
 					}
 				}
 			},
@@ -171,8 +171,8 @@
 				}
 			},
 			orderPriceToFixed (num){
-				let price ='';
-				price = parseInt(num).toFixed(2);
+				let price =''
+				price = parseInt(num).toFixed(2)
 				return price
 			},
 			discard(){
@@ -187,8 +187,7 @@
 		width: 100%;
 		height: auto;
 		background: #FFFFFF;
-		float: left;
-		margin: 24rpx 0 34rpx 0;
+		margin: 24rpx 0 24rpx 0;
 		.invoice-freight{
 			width: 702rpx;
 			padding: 0 24rpx;
@@ -497,7 +496,7 @@
 				line-height: 44rpx;
 				font-size: $font-size-28;
 				.p{
-					color: #FF2A2A;
+					color: #ff457b;
 				}
 				.p:first-child{
 					margin-left: 30rpx;

+ 1 - 1
components/cm-module/creatOrder/sellerInvoice.vue → components/cm-module/createOrder/sellerInvoice.vue

@@ -679,7 +679,7 @@
 				line-height: 44rpx;
 				font-size: $font-size-28;
 				.p{
-					color: #FF2A2A;
+					color: #ff457b;
 				}
 				.p:first-child{
 					margin-left: 30rpx;

+ 1 - 1
components/cm-module/creatOrder/sellerRegulations.vue → components/cm-module/createOrder/sellerRegulations.vue

@@ -426,7 +426,7 @@
 				line-height: 44rpx;
 				font-size: $font-size-28;
 				.p{
-					color: #FF2A2A;
+					color: #ff457b;
 				}
 				.p:first-child{
 					margin-left: 30rpx;

+ 80 - 0
components/cm-module/empty/empty.vue

@@ -0,0 +1,80 @@
+<template>
+    <view class="empty-content">
+        <image class="empty-content-image" :src="setSrc" mode="aspectFit"></image>
+        <text class="error-text">{{ EmptyText }}</text>
+    </view>
+</template>
+
+<script>
+export default {
+    props: {
+        src: {
+            type: String,
+            default: 'empty'
+        },
+        typeIndex: {
+            type: String,
+            default: 'empty'
+        },
+        navbarHeight: {
+            type: Number
+        }
+    },
+
+    data() {
+        return {
+            typeSrcall: {
+                empty: `${this.$Static}icon-empty-address.png`
+            },
+            typeSrc: {
+                empty: `${this.$Static}icon-empty-address.png`
+            },
+            EmptyText: ''
+        }
+    },
+    created() {
+        if (this.typeIndex == 0) {
+            this.EmptyText = '您还没有任何的订单哟~'
+        } else {
+            this.EmptyText = '您还没有相关的订单哟~'
+        }
+    },
+    computed: {
+        setSrc() {
+            let url
+            if (this.typeIndex == 0) {
+                url = this.typeSrcall[this.src]
+            } else {
+                url = this.typeSrc[this.src]
+            }
+            return url
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+.empty-content {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    flex-direction: column;
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    margin: auto;
+    background: $bg-color;
+    z-index: 999;
+    &-image {
+        width: 290rpx;
+        height: 230rpx;
+    }
+    .error-text {
+        font-size: $font-size-28;
+        color: $text-color;
+        line-height: 88rpx;
+    }
+}
+</style>

+ 0 - 209
components/cm-module/headerNavbar/header-back.vue

@@ -1,209 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}" :class="platformClass">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',left:(navbarBtn.right)+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}">
-			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-daohangfanhui"></text>
-	  	</view>
-		<view class="navbar-icon" v-if="navbarData.showSearch == 1 ? true : false"
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',right:(navbarBtn.width)+'px;',height:navbarBtn.height+'px;',lineHeight:navbarBtn.height+'px;'}">
-			  <text @click.stop="_goSearchPath" class="iconfont icon-sousuo"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{ 
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			isShare:{
-				type:Boolean
-			},
-			isDelete:{
-				type:Boolean
-			},
-			isConfim:{
-				type:Boolean
-			},
-			isUsertype:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				haveBack: true,     // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0,    // 顶部导航栏高度
-			    navbarBtn: {        // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platformClass:'',
-				fontSizeSetting:0,
-				
-			}
-		},
-		created() {
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			if(this.systeminfo.platform == 'android'){
-				this.platformClass = 'left'
-			}else{
-				this.platformClass = 'center'
-			}
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
-			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
-			}
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-				if(this.isShare){
-					this._goHome()
-				}else if(this.isDelete){
-					this._goUser()
-				}else if(this.isConfim){
-					this._goOrderList()
-				}else{
-					uni.navigateBack({
-			        	delta: 1
-			      	});
-				}
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-		    },
-		    _goUser: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/user/index'
-		      	})
-		    }, 
-			_goOrderList: function () {
-		      	uni.navigateTo({
-		        	url: '/pages/user/order/order-list?state=0'
-		      	})
-		    },
-			_goSearchPath:function () {
-				this.$emit('goSearchPath')
-			}
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.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;
-	}
-	.navbar-text.center{
-		text-align: center;
-	}
-	.navbar-text.left{
-		text-align: left;
-		padding-left: 38px;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 display: inline-block;
-		 overflow: hidden;
-		 font-size: 42rpx;
-		 padding-right:40rpx;
-		 margin-top: 1px;
-	}
-	.navbar-icon .icon-sousuo {
-		color: #000000;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 167 - 0
components/cm-module/headerNavbar/header-cart.vue

@@ -0,0 +1,167 @@
+<template name="headerNavbar">
+    <!-- 自定义导航栏 -->
+    <view class="navbar-wrap" :style="{ height: navbarHeight + 'px', paddingTop: statusBarHeight + 'px' }">
+        <view
+            class="navbar-text"
+            :style="{ lineHeight: navbarHeight - statusBarHeight + 'px;', fontSize: fontSizeSetting + 'px;' }"
+        >
+            {{ navbarData.title ? navbarData.title : ' ' }}
+        </view>
+        <view
+            class="navbar-icon"
+            v-if="navbarData.showCapsule ? navbarData.showCapsule : true"
+            :style="{
+                width: headerBtnPosi.width + 'px;',
+                lineHeight: navbarBtn.height + 'px',
+                top: navbarBtn.top + statusBarHeight + 'px;',
+                left: navbarBtn.right + 'px;',
+                height: navbarBtn.height + 'px;'
+            }"
+        >
+            <text v-if="haveBack" @click="_goBack" class="iconfont icon-daohangfanhui"></text>
+            <text
+                v-if="haveBack"
+                class="iconfont icon-vertical_line"
+                :style="{ borderColor: navbarData.borderColor ? navbarData.borderColor : 'rgba(0,0,0,0.4)' }"
+            ></text>
+            <text @click="_goHome" class="iconfont icon-fanhuishouye"></text>
+        </view>
+    </view>
+</template>
+
+<script>
+var self
+export default {
+    name: 'headerNavbar',
+    props: {
+        navbarData: {
+            // 由父页面传递的数据
+            type: Object
+        },
+        systeminfo: {
+            type: Object
+        },
+        headerBtnPosi: {
+            type: Object
+        },
+        page: {
+            type: Number
+        }
+    },
+    data() {
+        return {
+            haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
+            statusBarHeight: 0, // 状态栏高度
+            navbarHeight: 0, // 顶部导航栏高度
+            navbarBtn: {
+                // 胶囊位置信息
+                height: 0,
+                width: 0,
+                top: 0,
+                bottom: 0,
+                right: 0
+            },
+            platform: '',
+            fontSizeSetting: 0,
+            screenWidth: 0
+        }
+    },
+    created() {
+        this.fontSizeSetting = this.systeminfo.fontSizeSetting
+        let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
+        let headerPosi = this.headerBtnPosi // 胶囊位置信息
+        /**
+         * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+         * 菜单按键宽度: 87
+         * 菜单按键高度: 32
+         * 菜单按键左边界坐标: 278
+         * 菜单按键上边界坐标: 26
+         * 菜单按键右边界坐标: 365
+         * 菜单按键下边界坐标: 58
+         */
+        let btnPosi = {
+            // 胶囊实际位置,坐标信息不是左上角原点
+            height: headerPosi.height,
+            width: headerPosi.width,
+            // 胶囊top - 状态栏高度
+            top: headerPosi.top - statusBarHeight,
+            // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+            bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+            // 屏幕宽度 - 胶囊right
+            right: this.systeminfo.screenWidth - headerPosi.right
+        }
+        let haveBack
+        if (getCurrentPages().length === 1) {
+            // 当只有一个页面时
+            haveBack = false
+        } else {
+            haveBack = true
+        }
+        ;(this.haveBack = haveBack), // 获取是否是通过分享进入的小程序
+            (this.statusBarHeight = statusBarHeight),
+            (this.navbarHeight = headerPosi.bottom + btnPosi.bottom), // 原胶囊bottom + 现胶囊bottom
+            (this.navbarBtn = btnPosi)
+    },
+    onLoad() {},
+    methods: {
+        _goBack: function() {
+            uni.navigateBack({
+                delta: this.page
+            })
+        },
+        _goHome: function() {
+            uni.switchTab({
+                url: '/pages/tabBar/index/index'
+            })
+        }
+    },
+    onShow() {}
+}
+</script>
+
+<style lang="scss">
+.navbar-wrap {
+    position: fixed;
+    width: 100%;
+    top: 0;
+    z-index: 9999;
+    box-sizing: border-box;
+    background: #ffffff;
+    border-bottom: 1px solid #f8f8f8;
+}
+.navbar-text {
+    text-align: center;
+    color: #000000;
+    font-weight: 500;
+}
+.navbar-icon {
+    position: fixed;
+    display: flex;
+    padding: 0 10rpx;
+    justify-content: space-around;
+    align-items: center;
+    border-radius: 64rpx;
+    border: 0.5px solid rgba(0, 0, 0, 0.2);
+    box-sizing: border-box;
+}
+.navbar-icon .iconfont {
+    font-size: 36rpx;
+    text-align: center;
+    display: inline-block;
+    overflow: hidden;
+    padding: 0;
+    margin: 0;
+}
+.navbar-icon .iconfont.icon-daohangfanhui,
+.navbar-icon .iconfont.icon-fanhuishouye {
+    flex: 1;
+}
+
+.navbar-icon .icon-vertical_line {
+    color: #999999;
+}
+.navbar-loading {
+    background: #fff;
+    text-align: center;
+}
+</style>

+ 208 - 0
components/cm-module/headerNavbar/header-order.vue

@@ -0,0 +1,208 @@
+<template name="headerNavbar">
+    <!-- 自定义导航栏 -->
+    <view class="navbar-wrap" :style="{ height: navbarHeight + 'px', paddingTop: statusBarHeight + 'px' }">
+        <view
+            class="navbar-text"
+            :style="{ lineHeight: navbarHeight - statusBarHeight + 'px;', fontSize: fontSizeSetting + 'px;' }"
+            :class="platformClass"
+        >
+            {{ navbarData.title ? navbarData.title : ' ' }}
+        </view>
+        <view
+            class="navbar-icon"
+            v-if="navbarData.showCapsule == 1 ? true : false"
+            :style="{
+                top: navbarBtn.top + statusBarHeight + 'px;',
+                left: navbarBtn.right + 'px;',
+                height: navbarBtn.height + 'px;',
+                lineHeight: navbarBtn.height + 'px;'
+            }"
+        >
+            <text v-if="haveBack" @click="_goBack" class="iconfont icon-daohangfanhui"></text>
+        </view>
+        <view
+            class="navbar-icon"
+            v-if="navbarData.showSearch == 1 ? true : false"
+            :style="{
+                top: navbarBtn.top + statusBarHeight + 'px;',
+                right: navbarBtn.width + 'px;',
+                height: navbarBtn.height + 'px;',
+                lineHeight: navbarBtn.height + 'px;'
+            }"
+        >
+            <text @click.stop="_goSearchPath" class="iconfont icon-sousuo"></text>
+        </view>
+    </view>
+</template>
+
+<script>
+var self
+export default {
+    name: 'headerNavbar',
+    props: {
+        navbarData: {
+            // 由父页面传递的数据
+            type: Object
+        },
+        systeminfo: {
+            type: Object
+        },
+        headerBtnPosi: {
+            type: Object
+        },
+        isShare: {
+            type: Boolean
+        },
+        isDelete: {
+            type: Boolean
+        },
+        isConfim: {
+            type: Boolean
+        },
+        isUsertype: {
+            type: Number
+        }
+    },
+    data() {
+        return {
+            haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
+            statusBarHeight: 0, // 状态栏高度
+            navbarHeight: 0, // 顶部导航栏高度
+            navbarBtn: {
+                // 胶囊位置信息
+                height: 0,
+                width: 0,
+                top: 0,
+                bottom: 0,
+                right: 0
+            },
+            platformClass: '',
+            fontSizeSetting: 0
+        }
+    },
+    created() {
+        let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
+        let headerPosi = this.headerBtnPosi // 胶囊位置信息
+        this.fontSizeSetting = this.systeminfo.fontSizeSetting
+        if (this.systeminfo.platform == 'android') {
+            this.platformClass = 'left'
+        } else {
+            this.platformClass = 'center'
+        }
+        /**
+         * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+         * 菜单按键宽度: 87
+         * 菜单按键高度: 32
+         * 菜单按键左边界坐标: 278
+         * 菜单按键上边界坐标: 26
+         * 菜单按键右边界坐标: 365
+         * 菜单按键下边界坐标: 58
+         */
+        let btnPosi = {
+            // 胶囊实际位置,坐标信息不是左上角原点
+            height: headerPosi.height,
+            width: headerPosi.width,
+            // 胶囊top - 状态栏高度
+            top: headerPosi.top - statusBarHeight,
+            // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+            bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+            // 屏幕宽度 - 胶囊right
+            right: this.systeminfo.screenWidth - headerPosi.right
+        }
+        let haveBack
+        if (getCurrentPages().length === 1) {
+            // 当只有一个页面时
+            haveBack = false
+        } else {
+            haveBack = true
+        }
+        ;(this.haveBack = haveBack), // 获取是否是通过分享进入的小程序
+            (this.statusBarHeight = statusBarHeight),
+            (this.navbarHeight = headerPosi.bottom + btnPosi.bottom), // 原胶囊bottom + 现胶囊bottom
+            (this.navbarBtn = btnPosi)
+    },
+    onLoad() {},
+    methods: {
+        _goBack: function() {
+            if (this.isShare) {
+                this._goHome()
+            } else if (this.isDelete) {
+                this._goUser()
+            } else if (this.isConfim) {
+                this._goOrderList()
+            } else {
+                uni.navigateBack({
+                    delta: 1
+                })
+            }
+        },
+        _goHome: function() {
+            uni.switchTab({
+                url: '/pages/tabBar/index/index'
+            })
+        },
+        _goUser: function() {
+            uni.switchTab({
+                url: '/pages/tabBar/user/index'
+            })
+        },
+        _goOrderList: function() {
+            uni.navigateTo({
+                url: '/pages/user/order/order-list?state=0'
+            })
+        },
+        _goSearchPath: function() {
+            this.$emit('goSearchPath')
+        }
+    },
+    onShow() {}
+}
+</script>
+
+<style lang="scss">
+.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;
+}
+.navbar-text.center {
+    text-align: center;
+}
+.navbar-text.left {
+    text-align: left;
+    padding-left: 38px;
+}
+.navbar-icon {
+    position: fixed;
+    display: flex;
+    box-sizing: border-box;
+    border: 0;
+}
+.navbar-icon .iconfont {
+    display: inline-block;
+    overflow: hidden;
+    font-size: 42rpx;
+    padding-right: 40rpx;
+    margin-top: 1px;
+}
+.navbar-icon .icon-sousuo {
+    color: #000000;
+}
+.navbar-icon view {
+    height: 18px;
+    border-left: 0.5px solid rgba(0, 0, 0, 0.3);
+    margin-top: 6px;
+}
+.navbar-loading {
+    background: #fff;
+    text-align: center;
+}
+</style>

+ 0 - 0
components/cm-custom/pay-custom.vue → components/cm-module/headerNavbar/header-pay.vue


+ 0 - 0
components/cm-custom/ws-custom.vue → components/cm-module/headerNavbar/header-payment.vue


+ 233 - 220
components/cm-module/headerNavbar/header-poduct.vue

@@ -1,228 +1,241 @@
 <template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :class="[headerColor? 'bg-color' : 'bg-color']" :style="{height:navbarHeight+'px',paddingTop:CustomBar/2+'px'}"> 
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
-			  :style="{top:navbarBtn.top + statusBarHeight+'px;',lineHeight:navbarBtn.height+'px;',left:12+'px;',width:navbarBtn.height+'px;',height:navbarBtn.height+'px;'}">
-			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-daohangfanhui"></text>
-			  <text v-else  @click="_goHome" class="iconfont icon-fanhuishouye"></text>
-	  	</view>
-		<view class="navbar-text" :style="{top:navbarBtn.top + statusBarHeight+'px;',height:navbarBtn.height+'px;',fontSize:fontSizeSetting+'px;'}">
-			商品详情
-		</view>
-	</view>
+    <!-- 自定义导航栏 -->
+    <view
+        class="navbar-wrap"
+        :class="[headerColor ? 'bg-color' : 'bg-color']"
+        :style="{ height: navbarHeight + 'px', paddingTop: CustomBar / 2 + 'px' }"
+    >
+        <view
+            class="navbar-icon"
+            v-if="navbarData.showCapsule ? navbarData.showCapsule : true"
+            :style="{
+                top: navbarBtn.top + statusBarHeight + 'px;',
+                lineHeight: navbarBtn.height + 'px;',
+                left: 12 + 'px;',
+                width: navbarBtn.height + 'px;',
+                height: navbarBtn.height + 'px;'
+            }"
+        >
+            <text v-if="haveBack" @click="_goBack" class="iconfont icon-daohangfanhui"></text>
+            <text v-else @click="_goHome" class="iconfont icon-fanhuishouye"></text>
+        </view>
+        <view
+            class="navbar-text"
+            :style="{
+                top: navbarBtn.top + statusBarHeight + 'px;',
+                height: navbarBtn.height + 'px;',
+                fontSize: fontSizeSetting + 'px;'
+            }"
+        >
+            商品详情
+        </view>
+    </view>
 </template>
 
 <script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			page:{
-				type:Number
-			},
-			headerColor:{
-				type:Boolean
-			},
-			headerTitle:{
-				type:String
-			},
-			type:{
-				type:String
-			},
-		},
-		data() {
-			return{
-				headerType:'',
-				CustomBar:this.CustomBar,// 顶部导航栏高度
-				clickPath:'/search/pages/search/search',
-				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度,
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platform:'',
-				fontSizeSetting:0
-			}
-		},
-		created() {
-			this.headerType = this.type
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
-			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
-			}
-			console.log(btnPosi)
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-			this.$parent.navbarHeight = this.navbarHeight
-			this.$parent.statusBarHeight = this.statusBarHeight
-			// console.log(this.navbarHeight);
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-		    }
-		},
-		onShow(){
-	
-		}
-	}
+var self
+export default {
+    name: 'headerNavbar',
+    props: {
+        navbarData: {
+            // 由父页面传递的数据
+            type: Object
+        },
+        systeminfo: {
+            type: Object
+        },
+        headerBtnPosi: {
+            type: Object
+        },
+        page: {
+            type: Number
+        },
+        headerColor: {
+            type: Boolean
+        },
+        headerTitle: {
+            type: String
+        },
+        type: {
+            type: String
+        }
+    },
+    data() {
+        return {
+            headerType: '',
+            CustomBar: this.CustomBar, // 顶部导航栏高度
+            clickPath: '/search/pages/search/search',
+            haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
+            statusBarHeight: 0, // 状态栏高度
+            navbarHeight: 0, // 顶部导航栏高度,
+            navbarBtn: {
+                // 胶囊位置信息
+                height: 0,
+                width: 0,
+                top: 0,
+                bottom: 0,
+                right: 0
+            },
+            platform: '',
+            fontSizeSetting: 0
+        }
+    },
+    created() {
+        this.headerType = this.type
+        this.fontSizeSetting = this.systeminfo.fontSizeSetting
+        let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
+        let headerPosi = this.headerBtnPosi // 胶囊位置信息
+        /**
+         * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
+         * 菜单按键宽度: 87
+         * 菜单按键高度: 32
+         * 菜单按键左边界坐标: 278
+         * 菜单按键上边界坐标: 26
+         * 菜单按键右边界坐标: 365
+         * 菜单按键下边界坐标: 58
+         */
+        let btnPosi = {
+            // 胶囊实际位置,坐标信息不是左上角原点
+            height: headerPosi.height,
+            width: headerPosi.width,
+            // 胶囊top - 状态栏高度
+            top: headerPosi.top - statusBarHeight,
+            // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
+            bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
+            // 屏幕宽度 - 胶囊right
+            right: this.systeminfo.screenWidth - headerPosi.right
+        }
+        console.log(btnPosi)
+        let haveBack
+        if (getCurrentPages().length === 1) {
+            // 当只有一个页面时
+            haveBack = false
+        } else {
+            haveBack = true
+        }
+        ;(this.haveBack = haveBack), // 获取是否是通过分享进入的小程序
+            (this.statusBarHeight = statusBarHeight),
+            (this.navbarHeight = headerPosi.bottom + btnPosi.bottom), // 原胶囊bottom + 现胶囊bottom
+            (this.$parent.navbarHeight = this.navbarHeight)
+        this.$parent.statusBarHeight = this.statusBarHeight
+        // console.log(this.navbarHeight);
+        this.navbarBtn = btnPosi
+    },
+    onLoad() {},
+    methods: {
+        _goBack: function() {
+            uni.navigateBack({
+                delta: this.page
+            })
+        },
+        _goHome: function() {
+            uni.switchTab({
+                url: '/pages/tabBar/index/index'
+            })
+        }
+    },
+    onShow() {}
+}
 </script>
 
 <style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 100000;
-		 box-sizing: border-box;
-		 &.bg-color{
-			animation: showColor 0.3s ease-in-out both;
-		 }
-		 &.no-color{
-		    animation: hideColor 0.3s ease-in-out both;
-		 }
-	}
-	.navbar-text {
-		 width: 100%;
-		 color: #000000;
-		 font-weight: 500;
-		 position: fixed;
-		 text-align: center;
-	}
-	.gosearch-btn{
-		height: 100%;
-		background: rgba(255, 255, 255, 0.6);
-		font-size: 28rpx;
-		color: #999999;
-		position: relative;
-		box-sizing: border-box;
-		position:absolute ;
-		top: 0;
-		border: 0.5px solid rgba(0, 0, 0, 0.1);
-		.icon-sousuo{
-			height: 100%;
-			text-align: center;
-			display: block;
-			position: absolute;
-			left: 0;
-			top: 0;
-			font-size: 34rpx;
-			color: #999999;
-			z-index: 10;
-		}
-		.input{
-			height: 100%;
-			float: left;
-			font-size: $font-size-24;
-			text-align: left;
-		}
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 border-radius: 50%;
-		 text-align: center;
-		 background: rgba(255,255,255,0.6);
-		 border: 0.5px solid rgba(0,0,0, 0.1);
-		 box-sizing: border-box;
-		 z-index: 9999;
-	}
-	.navbar-icon .iconfont {
-		 height: 100%;
-		 width: 100%;
-		 font-size: 30rpx;
-		 font-weight: bold;
-		 display: inline-block;
-		 overflow: hidden;
-	}
-	.navbar-icon view {
-		 height: 18px;
-		 border-left: 0.5px solid rgba(0,0,0, 0.3);
-		 margin-top: 6px;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-	@keyframes showColor {
-		0% {background: rgba(255,255,255,0);}
-		50% {background: rgba(255,255,255,0.5);}
-		100% {background: rgba(255,255,255,1);}
-	}
-	@keyframes hideColor {
-		0% {background: rgba(255,255,255,1);}
-		50% {background: rgba(255,255,255,0.5);}
-		100% {background: rgba(255,255,255,0);}
-	}
+.navbar-wrap {
+    position: fixed;
+    width: 100%;
+    top: 0;
+    z-index: 100000;
+    box-sizing: border-box;
+    &.bg-color {
+        animation: showColor 0.3s ease-in-out both;
+    }
+    &.no-color {
+        animation: hideColor 0.3s ease-in-out both;
+    }
+}
+.navbar-text {
+    width: 100%;
+    color: #000000;
+    font-weight: 500;
+    position: fixed;
+    text-align: center;
+}
+.gosearch-btn {
+    height: 100%;
+    background: rgba(255, 255, 255, 0.6);
+    font-size: 28rpx;
+    color: #999999;
+    position: relative;
+    box-sizing: border-box;
+    position: absolute;
+    top: 0;
+    border: 0.5px solid rgba(0, 0, 0, 0.1);
+    .icon-sousuo {
+        height: 100%;
+        text-align: center;
+        display: block;
+        position: absolute;
+        left: 0;
+        top: 0;
+        font-size: 34rpx;
+        color: #999999;
+        z-index: 10;
+    }
+    .input {
+        height: 100%;
+        float: left;
+        font-size: $font-size-24;
+        text-align: left;
+    }
+}
+.navbar-icon {
+    position: fixed;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    border-radius: 50%;
+    text-align: center;
+    background: rgba(255, 255, 255, 0.6);
+    border: 0.5px solid rgba(0, 0, 0, 0.1);
+    box-sizing: border-box;
+    z-index: 9999;
+}
+.navbar-icon .iconfont {
+    flex: 1;
+    font-size: 30rpx;
+    font-weight: bold;
+    overflow: hidden;
+    padding: 0;
+    margin: 0;
+}
+.navbar-icon view {
+    height: 18px;
+    border-left: 0.5px solid rgba(0, 0, 0, 0.3);
+    margin-top: 6px;
+}
+.navbar-loading {
+    background: #fff;
+    text-align: center;
+}
+@keyframes showColor {
+    0% {
+        background: rgba(255, 255, 255, 0);
+    }
+    50% {
+        background: rgba(255, 255, 255, 0.5);
+    }
+    100% {
+        background: rgba(255, 255, 255, 1);
+    }
+}
+@keyframes hideColor {
+    0% {
+        background: rgba(255, 255, 255, 1);
+    }
+    50% {
+        background: rgba(255, 255, 255, 0.5);
+    }
+    100% {
+        background: rgba(255, 255, 255, 0);
+    }
+}
 </style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 162
components/cm-module/headerNavbar/headerNavbar.vue

@@ -1,162 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view class='navbar-wrap' :style="{height:navbarHeight+'px',paddingTop:statusBarHeight+'px'}"> 
-	  	<view class="navbar-text" :style="{lineHeight:(navbarHeight - statusBarHeight)+'px;',fontSize:fontSizeSetting+'px;'}">
-	    	{{navbarData.title ? navbarData.title : " "}}
-	  	</view>
-	  	<view class="navbar-icon" v-if="navbarData.showCapsule ? navbarData.showCapsule : true" 
-			  :style="{width:headerBtnPosi.width+'px;',lineHeight:(navbarBtn.height)+'px',top:navbarBtn.top + statusBarHeight+'px;',left:navbarBtn.right+'px;',height:(navbarBtn.height)+'px;'}">
-			  <text v-if='haveBack' @click="_goBack" class="iconfont icon-daohangfanhui" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
-	      	  <text  v-if='haveBack' class="iconfont icon-vertical_line" :style="{borderColor:navbarData.borderColor ? navbarData.borderColor : 'rgba(0,0,0,0.4)'}"></text>
-			  <text @click="_goHome" class="iconfont icon-fanhuishouye" :style="{width:headerBtnPosi.width/2+'px',height:navbarBtn.height+'px'}"></text>
-	  	</view>
-	</view>
-</template>
-
-<script>
-	var self;
-	export default{
-		name:'headerNavbar',
-		props:{
-		    navbarData: { // 由父页面传递的数据
-				type: Object
-		    },
-			systeminfo:{
-				type:Object
-			},
-			headerBtnPosi:{
-				type:Object
-			},
-			page:{
-				type:Number
-			}
-		},
-		data() {
-			return{
-				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
-			    statusBarHeight: 0, // 状态栏高度
-			    navbarHeight: 0, // 顶部导航栏高度
-			    navbarBtn: { // 胶囊位置信息
-			      height: 0,
-			      width: 0,
-			      top: 0,
-			      bottom: 0,
-			      right: 0
-				},
-				platform:'',
-				fontSizeSetting:0,
-				screenWidth:0
-			}
-		},
-		created() {
-			this.fontSizeSetting = this.systeminfo.fontSizeSetting
-			let statusBarHeight = this.systeminfo.statusBarHeight // 状态栏高度
-			let headerPosi = this.headerBtnPosi // 胶囊位置信息
-		    /**
-		     * wx.getMenuButtonBoundingClientRect() 坐标信息以屏幕左上角为原点
-		     * 菜单按键宽度: 87
-		     * 菜单按键高度: 32
-		     * 菜单按键左边界坐标: 278
-		     * 菜单按键上边界坐标: 26
-		     * 菜单按键右边界坐标: 365
-		     * 菜单按键下边界坐标: 58
-		     */
-			let btnPosi = { // 胶囊实际位置,坐标信息不是左上角原点
-			      height: headerPosi.height,
-			      width: headerPosi.width,
-			      // 胶囊top - 状态栏高度
-			      top: headerPosi.top - statusBarHeight,
-			      // 胶囊bottom - 胶囊height - 状态栏height (现胶囊bottom 为距离导航栏底部的长度)
-			      bottom: headerPosi.bottom - headerPosi.height - statusBarHeight,
-			      // 屏幕宽度 - 胶囊right
-			      right: this.systeminfo.screenWidth - headerPosi.right
-			}
-			let haveBack;
-			if (getCurrentPages().length === 1) { // 当只有一个页面时
-			     haveBack = false;
-			} else {
-			     haveBack = true;
-			}
-		    this.haveBack=haveBack, // 获取是否是通过分享进入的小程序
-		    this.statusBarHeight=statusBarHeight,
-		    this.navbarHeight= headerPosi.bottom + btnPosi.bottom, // 原胶囊bottom + 现胶囊bottom
-		    this.navbarBtn=btnPosi
-		},
-		onLoad(){
-			
-		},
-		methods:{
-			_goBack: function () {
-		      	uni.navigateBack({
-		        	delta: this.page
-		      	});
-		    },
-		    _goHome: function () {
-		      	uni.switchTab({
-		        	url: '/pages/tabBar/index/index'
-		      	})
-		    }
-		},
-		onShow(){
-	
-		}
-	}
-</script>
-
-<style lang="scss">
-	.navbar-wrap {
-		 position: fixed;
-		 width: 100%;
-		 top: 0;
-		 z-index: 9999;
-		 box-sizing: border-box;
-		 background: #FFFFFF;
-		 border-bottom: 1px solid #F8F8F8;
-	}
-	.navbar-text {
-		 text-align: center;
-		 color: #000000;
-		 font-weight: 500;
-	}
-	.navbar-icon {
-		 position: fixed;
-		 display: flex;
-		 border-radius: 64rpx;
-		 border: 0.5px solid rgba(0,0,0, 0.2);
-		 box-sizing: border-box;
-	}
-	.navbar-icon .iconfont {
-		 text-align: center;
-		 display: inline-block;
-		 overflow: hidden;
-		 margin-bottom: 1px;
-	}
-	.navbar-icon .icon-vertical_line {
-		color: #999999;
-	}
-	.navbar-loading {
-		 background: #fff;
-		 text-align: center;
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 93 - 92
components/cm-module/homeIndex/banner.vue

@@ -1,100 +1,101 @@
 <template>
-	<view>
-		<view class="swiper-banner-box" >
-			<swiper class="tui-banner-swiper tui-banner tui-skeleton-fillet" :autoplay="true" :interval="5000" :duration="500"  @change="swiperChange" :circular="true">
-				<swiper-item v-for="(item,index) in list" :key="index">
-					<image :src="item" class="tui-slide-image" mode="scaleToFill"/>
-				</swiper-item>
-			</swiper>
-			<view class="swiper__dots-box" v-if="list.length > 1">
-				<view v-for="(item,idx) in list" 
-					  :key="idx" 
-					  :class="[idx===current?'swiper__dots-long':'none']" 
-					  :data-index="current" class="swiper__dots-item">
-				</view>	  
-			</view>
-		</view>
-	</view>
+    <view class="swiper-banner-box">
+        <swiper
+            class="tui-banner-swiper tui-banner tui-skeleton-fillet"
+            :autoplay="true"
+            :interval="5000"
+            :duration="500"
+            @change="swiperChange"
+            :circular="true"
+        >
+            <swiper-item v-for="(item, index) in list" :key="index">
+                <image :src="item" class="tui-slide-image" mode="scaleToFill" />
+            </swiper-item>
+        </swiper>
+        <view class="swiper__dots-box" v-if="list.length > 1">
+            <view
+                v-for="(item, idx) in list"
+                :key="idx"
+                :class="[idx === current ? 'swiper__dots-long' : 'none']"
+                :data-index="current"
+                class="swiper__dots-item"
+            >
+            </view>
+        </view>
+    </view>
 </template>
 
 <script>
-	export default{
-		name:"address",
-		props:{
-			list:{
-				type:Array
-			}
-		},
-		data() {
-			return{
-				current:0
-			}
-		},
-		created(){
-			
-		},
-		computed: {
-	
-		},
-		methods:{
-			swiperChange(e) {//轮播图切换
-				const index = e.detail.current;
-				this.current = index;
-			}
-		}
-	}
+export default {
+    name: 'address',
+    props: {
+        list: {
+            type: Array
+        }
+    },
+    data() {
+        return {
+            current: 0
+        }
+    },
+    methods: {
+        swiperChange(e) {
+            //轮播图切换
+            const index = e.detail.current
+            this.current = index
+        }
+    }
+}
 </script>
 
 <style lang="scss">
-	.swiper-banner-box{
-		width: 100%;
-		height: 360rpx;
-		padding-top:100rpx;
-		position: relative;
-		background-size: cover;
-	}	
-	.tui-banner-swiper {
-		width: 700rpx;
-		margin: 0 auto;
-		height: 340rpx;
-		border-radius: 16rpx;
-		overflow: hidden;
-		transform: translateY(0);
-		margin-top: 16rpx;
-		.banner-item{
-			border-radius: 16rpx;
-		}
-		.tui-slide-image {
-			width: 100%;
-			height: 340rpx;
-			display: block;
-		}
-	}
-	.swiper__dots-box{
-		position: absolute;
-		bottom: 30rpx;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		.swiper__dots-item{
-			width: 10rpx;
-			height: 10rpx;
-			border-radius: 100%;
-			margin-left: 6px;
-			background-color:rgba(255,255,255,.7);
-		}
-		.swiper__dots-long{
-			width: 10rpx;
-			height: 10rpx;
-			border-radius: 4rpx;
-			background-color: #fa55bf;
-			transition: all 0.4s;
-		}
-	}
+.swiper-banner-box {
+    width: 100%;
+    height: 340rpx;
+    position: relative;
+    background-size: cover;
+}
+.tui-banner-swiper {
+    width: 700rpx;
+    margin: 0 auto;
+    height: 340rpx;
+    border-radius: 16rpx;
+    overflow: hidden;
+    transform: translateY(0);
+    .banner-item {
+        border-radius: 16rpx;
+    }
+    .tui-slide-image {
+        width: 100%;
+        height: 340rpx;
+        display: block;
+    }
+}
+.swiper__dots-box {
+    position: absolute;
+    bottom: 24rpx;
+    left: 0;
+    right: 0;
+    /* #ifndef APP-NVUE */
+    display: flex;
+    /* #endif */
+    flex: 1;
+    flex-direction: row;
+    justify-content: center;
+    align-items: center;
+    .swiper__dots-item {
+        width: 10rpx;
+        height: 10rpx;
+        border-radius: 100%;
+        margin-left: 6px;
+        background-color: rgba(255, 255, 255, 0.7);
+    }
+    .swiper__dots-long {
+        width: 10rpx;
+        height: 10rpx;
+        border-radius: 4rpx;
+        background-color: #fa55bf;
+        transition: all 0.4s;
+    }
+}
 </style>

+ 0 - 4
components/cm-module/homeIndex/customer.vue

@@ -18,12 +18,8 @@
 
 <script>
 	var self;
-	import btSearch from '@/components/uni-search/bt-search.vue'
 	export default{
 		name:'headerNavbar',
-		components:{
-			btSearch,
-		},
 		props:{
 		    navbarData: { // 由父页面传递的数据
 				type: Object

+ 0 - 0
components/cm-module/homeIndex/pageFloor.vue


+ 0 - 427
components/cm-module/listTemplate/classifyProductList.vue

@@ -1,427 +0,0 @@
-<!-- 金刚区商品模块 -->
-<template>
-	<view class="container commodity-list-wrapper" :style="{'overflow':(showSkeleton? 'hidden' : 'auto'),'height': (showSkeleton? windowHeight + 'px' : 'auto')}">
-		<list-skeleton v-if="showSkeleton" :listType='0'></list-skeleton>
-		<scroll-view :style="{'height':scrollHeight+'px'}" @scrolltolower="toLower" scroll-y v-if="listData.length > 0">
-			<view v-for="(item,index) in listData" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.productID)">
-				<image mode='widthFix' :src="item.mainImage"  class="list-img" alt="list-img"></image>
-				<view class="list-details-info">
-					<text class="list-details-title">{{item.name}}</text>
-					<text class="list-details-specs">规格:{{item.unit}}</text>
-					<view class="list-details-specs" v-if="item.productCode!=''&&item.productCode!=null">商品编码:{{item.productCode}}</view>
-					<view class="list-details-price">
-						<template v-if="userIdentity == 3">
-							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="item.price1TextFlag != '1' && item.supplierId === shopId">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
-							</view>
-						</template>
-						<template v-else>
-							<view class="floor-item-act" v-if="item.actStatus==1">
-								<view class="floor-tags" v-if="PromotionsFormat(item.promotions)">
-									{{item.promotions.name}}<text v-if="hasLogin && item.price1TextFlag != '1'">:¥{{ item.price | NumFormat }}</text>
-								</view>
-								<view class="floor-tags" v-else>{{item.promotions.name}}</view>	
-							</view>
-							<view class="floor-item-act" v-if="item.actStatus ==0  &&  item.ladderPriceFlag==1">
-								<view class="floor-tags">阶梯价格</view>	
-							</view>
-						</template>
-						<view v-if="hasLogin" class="list-price">
-							<view v-if="userIdentity == 1">
-								<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-								  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
-								</text>
-							</view>	
-							<view v-if="userIdentity == 4">
-								<view class="price-larger" v-if="item.price1TextFlag == '1'">
-									<text class="txt">¥未公开价格</text>
-								</view>
-								<view v-else>
-									<view class="price-larger" v-if="item.price1TextFlag == '2'">
-										<text class="txt">¥价格仅会员可见</text>
-									</view>
-									<template v-else>
-										<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-										  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
-										</text>
-									</template>
-								</view>
-							</view>
-							<view v-if="userIdentity == 2">
-								<view class="price-larger" v-if="item.price1TextFlag == '1'">
-									<text class="txt">¥未公开价格</text>
-								</view>
-								<template v-else>
-									<text class="price-larger" :class="PromotionsFormat(item.promotions) ? 'none' : ''">
-									  ¥{{ (PromotionsFormat(item.promotions) ? item.price1 : item.retailPrice) | NumFormat }}
-									</text>
-								</template>
-							</view>
-						</view>	
-						<view  v-else class="list-login-now">
-							<text class="p-no">¥</text>
-							<uni-stars :stars="parseInt(item.price1Grade)" :font-size='36' :width-info="180"></uni-stars>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view v-if="showLoading && listData.length > 4">
-				<view class="loading-wrapper loading-wrapper-now" v-if="loadingNow">{{loadingText}}<text v-if="loadingText === '已至底部'">‧ ‧ ‧</text></view>
-				<view class="loading-wrapper loading-wrapper-btm" v-else>———<text class="btm-text">已至底部</text>———</view>
-			</view>
-		</scroll-view>
-		<view class="empty-container" v-if="showEmpty">
-			<image class="empty-container-image" src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"></image>
-			<text class="error-text">{{emptyText}}</text>
-		</view>
-		<!-- 透明模态层 -->
-		<modal-layer v-if='isModallayer'></modal-layer>
-	</view>
-</template>
-
-<script>
-	import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
-	import modalLayer from "@/components/modal-layer"
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import { mapState,mapMutations } from 'vuex';
-	export default{
-		name:'CommodityList',
-		components:{
-			listSkeleton,
-			modalLayer,
-			uniStars
-		},
-		props: {
-			emptyText: {
-				type: String
-			},
-			serverUrl: {
-				type: String
-			},
-			classifyID: {
-				type:Number
-			}
-		},
-		data(){
-			return{
-				clubStatus:'',
-				isModallayer:false,
-				windowHeight: '',
-				showSkeleton: true,
-				showEmpty: false,
-				userID: 0,
-				userIdentity:'',
-				scrollHeight: '',
-				listData: [],
-				showLoading: false,
-				loadingNow: true,
-				loadingText: '上拉加载更多',
-				pageSize: 20,
-				pageNum: 1,
-				totalPage: 1,
-				hasNextPage:false,
-				pullFlag: true,
-				cartNum: 0,
-			}
-		},
-		created() {		
-			// console.log(this.typeId)
-			this.setScrollHeight();		
-			this.$api.getComStorage('userInfo').then((resolve) =>{
-				this.clubStatus = resolve.clubStatus
-				this.userID = resolve.userID ? resolve.userID :0;
-				this.userIdentity = resolve.userIdentity
-				this.getListFromServer();
-			}).catch(error =>{
-				this.getListFromServer();
-			})
-		},
-		filters: {
-			NumFormat:function(text) {//处理金额
-				return Number(text).toFixed(2);
-			},
-		},		
-		computed: {
-			...mapState(['hasLogin','userInfo'])
-		},
-		methods:{
-			toLower() {
-				if(this.hasNextPage && this.pullFlag) {
-					this.getListFromServer(true);
-				}
-			},
-			setScrollHeight() {
-				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-				this.windowHeight = windowHeight - 1;
-				this.scrollHeight = windowHeight - 1;
-			},
-			getListFromServer(loadMore) {
-				this.getQueryGoodslist(loadMore)
-			},
-			getQueryGoodslist(loadMore){
-				this.showLoading = true;
-				this.loadingNow = true;
-				this.loadingText = '加载中';
-				if(loadMore) { this.pageNum += 1; }
-				let params ={
-						classifyId:this.classifyID,
-						userId:this.userID,
-						pageNum:this.pageNum,
-						pageSize:this.pageSize,
-					}
-				this.CommonService.GetHomeClassify(params).then(response =>{	
-					const resList = response.data.results;
-					if(resList && resList.length > 0){
-						this.showEmpty = false
-						this.hasNextPage = response.data.hasNextPage;
-						if(loadMore) {
-							this.listData = [...this.listData,...resList];
-							this.getProductPrice()
-							this.showSkeleton = false
-						} else {
-							this.listData = [...resList];
-							this.getProductPrice()
-							this.showSkeleton = false
-						}
-						// 防上拉暴滑
-						this.pullFlag = false;
-						setTimeout(()=>{ this.pullFlag = true; },500)
-						// 底部提示文案
-						if(this.hasNextPage) {
-							this.loadingText = '上拉加载更多';
-						} else {
-							this.showLoading = true;
-							this.loadingNow = false;
-							this.loadingText = '已至底部';
-						}
-					} else {
-						if(!loadMore) { this.showEmpty = true; }
-					}
-					
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			getProductPrice(){//获取价格
-				let productIdArr = [];
-				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.productID)
-				})
-				this.productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:this.productIds}).then(response =>{
-					if (response.data) {
-						this.listData = this.ReturnNewProducts(this.listData,response.data);
-					}
-					this.priceLoading = false;
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			ReturnNewProducts(Array,list){//处理对应商品ID的商品价格
-				let NewArray = []
-				Array.map(item=>{
-					for (let i = 0; i < list.length; i++) {
-						if( item.productID == list[i].productId ){
-							NewArray.push(Object.assign(item,list[i])) 
-						}
-					}
-				});
-				return NewArray
-			},
-			navToDetailPage(id) {
-				this.isModallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
-				this.isModallayer = false;
-			},
-			PromotionsFormat(promo){//促销活动类型数据处理
-				if(promo!=null){
-					if(promo.type == 1 && promo.mode == 1){
-						return true
-					}else{
-						return false
-					}
-				}
-				return false
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.commodity-list-wrapper {
-		scroll-view {
-			height: 100%;
-			border-top: 2rpx solid rgba(0,0,0,0.07);
-		}
-		.empty-container-image {
-			margin-top: -300rpx;
-		}
-		.toIndexPage {
-			bottom: 390rpx;
-		}
-		.show-more-btn {
-			width: 276rpx;
-			height: 52rpx;
-			line-height: 52rpx;
-			border: 2rpx solid #D8D8D8;
-			background: #F7F7F7;
-			font-size: 26rpx;
-			margin: 26rpx 0;
-			position: absolute;
-			left: 50%;
-			margin-left: -138rpx;
-		}
-	}
-	.all-type-list-content {
-		height: 216rpx;
-		padding: 24rpx;
-		background: #fff;
-		margin-bottom: 2rpx;
-		display: flex;
-		flex-direction: row;
-		box-sizing: content-box;
-		.list-img {
-			width: 210rpx;
-			height: 218rpx !important;
-			margin-right: 26rpx;
-			border-radius: 10rpx;
-			border: 2rpx solid #f3f3f3;
-		}
-	}
-	.list-details-info {
-		width: 466rpx;
-		display: flex;
-		flex-direction: column;
-		font-size: 26rpx;
-		position: relative;
-		.list-details-title {
-			line-height: 38rpx;
-			text-overflow: ellipsis;
-			overflow: hidden;
-			display: -webkit-box;
-			-webkit-line-clamp: 2;
-			line-clamp: 2;
-			-webkit-box-orient: vertical;
-		}
-		.list-details-specs {
-			margin-top: 8rpx;
-			color: #666666;
-		}
-		.list-details-miniQuantity {
-			margin-top: 7rpx;
-		}
-	}
-	.list-details-price {
-		width: 100%;
-		height: 54rpx;
-		line-height: 54rpx;
-		position: absolute;
-		bottom: -10rpx;
-		right: 0;
-		.floor-item-act{
-			height: 54rpx;
-			text-align: center;
-			box-sizing: border-box;
-			float: right;
-			.floor-tags{			
-				height: 28rpx;
-				border-radius: 6rpx;
-				background-color: #FFFFFF;
-				line-height: 28rpx;
-				color: $color-system;
-				text-align: center;
-				display: inline-block;
-				padding:0 5rpx;
-				font-size: $font-size-20;
-				margin-left: 15rpx;
-				border: 1px solid #E15616;
-			}
-		}
-		.price-icon {
-			width: 22rpx;
-			height: 28rpx;
-			vertical-align: middle;
-			margin-right: 10rpx;
-		}
-		.price-icon + text {
-			font-size: 25rpx;
-			vertical-align: middle;
-		}
-		.list-login-now {
-			color: #F8C499;
-			float: left;
-			line-height: 54rpx;
-			.p-no{
-				float: left;
-				font-size: $font-size-24;
-				color: $text-color;
-			}
-		}
-		.login-now {
-			padding: 10rpx 10rpx 10rpx 0;
-		}
-		.list-price {
-			color: #FF2A2A;
-			height: 44rpx;
-			float: left;
-			.price-larger {
-				width: 100%;
-				height: 44rpx;
-				font-size: 32rpx;
-				&.none{
-					text-decoration: line-through;
-					color: #999999;
-				}
-				&.small{
-					font-size: $font-size-24;
-				}
-				.txt{
-					font-size: $font-size-24;
-					display: inline-block;
-					line-height: 44rpx;
-					text-align: left;
-					float: left;
-				}
-			}
-		}
-		.add-cart-btn {
-			width: 156rpx;
-			height: 64rpx;
-			line-height: 64rpx;
-			border-radius: 32rpx;
-			color: #fff;
-			font-size: 26rpx;
-			margin-right: 0;
-			background:linear-gradient(45deg,rgba(255,41,41,1) 0%,rgba(255,109,27,1) 100%);
-		}
-	}
-	.cart-icon {
-		width: 92rpx;
-		height: 92rpx;
-		border-radius: 50%;
-		background: rgba(255, 147, 0, 0.5);
-		position: fixed;
-		right: 24rpx;
-		bottom: 30%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		cursor: pointer;
-		image {
-			width: 58rpx;
-			height: 58rpx;
-		}
-		text {
-			font-size: 28rpx;
-			position: absolute;
-			top: -10rpx;
-			right: 0;
-		}
-	}
-</style>

+ 0 - 953
components/cm-module/listTemplate/immediatelyList.vue

@@ -1,953 +0,0 @@
-<template>
-	<view
-		class="container commodity-list-wrapper"
-		:style="{ overflow: showSkeleton ? 'hidden' : 'auto', height: showSkeleton ? windowHeight + 'px' : 'auto' }"
-	>
-		<view class="good-search clearfix" v-if="searchStatus">
-			<view class="search-from name">
-				<text class="iconfont icon-sousuo"></text>
-				<input
-					class="input"
-					type="text"
-					:focus="isFocus"
-					confirm-type="search"
-					v-model="searchInputVal"
-					placeholder="请输入商品关键词"
-					@input="onShowClose"
-					@confirm="searchOpertor(tabIndex)"
-					maxlength="20"
-				/>
-				<!-- <text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText(tabIndex)"></text> -->
-			</view>
-		</view>
-		<!-- 骨架 -->
-		<list-skeleton v-if="showSkeleton"></list-skeleton>
-		<!-- 商品为空时 -->
-		<view class="empty-container" v-if="isShowEmpty">
-			<image
-				class="empty-container-image"
-				src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
-			></image>
-			<text class="error-text">{{ isShowEmptyText }}</text>
-		</view>
-		<!-- 单一商品 -->
-		<view class="product-container" v-else>
-			<scroll-view
-				:style="{ height: scrollHeight + 'px' }"
-				@scrolltolower="scrolltolower(tabIndex)"
-				scroll-y
-				v-if="listData.length > 0"
-			>
-				<view
-					v-for="(item, index) in 10"
-					:key="index"
-					:id="item.id"
-					class="all-type-list-content commodity-list"
-					@click.stop="navToDetailPage(item.p_id)"
-				>
-					<image
-						mode="widthFix"
-						src="https://img.caimei365.com/group1/M00/03/71/Cmis2F3wna6AY2ZjAABpmnBICH4247.png"
-						class="list-img"
-						alt="list-img"
-					></image>
-					<view class="list-details-info">
-						<!-- 商品名称 -->
-						<text class="list-details-title">韩国恩盛进口氢洁气小气泡清韩国恩盛进口氢洁气小气泡清</text>
-						<!-- 商品标签 -->
-						<view class="list-details-tags">
-							<tui-tag type="danger" class="tag" padding="6rpx" size="20rpx" plain>商品标签</tui-tag>
-						</view>
-						<text class="list-details-specs">规格:30g×5片/盒</text>
-						
-						<!-- 商品价格 -->
-						<view class="goods-price">
-							<view class="price"> ¥23333.00 </view> <view class="shop-btn" @click.stop="showAddCartModal"> 购买 </view>
-						</view>
-					</view>
-				</view>
-				<view v-if="showLoading && listData.length > 4 && !showRegularBtn">
-					<view class="loading-wrapper loading-wrapper-now" v-if="loadingNow"
-						>{{ loadingText }}<text v-if="loadingText === '已至底部'">‧ ‧ ‧</text></view
-					>
-					<view class="loading-wrapper loading-wrapper-btm" v-else>———<text class="btm-text">已至底部</text>———</view>
-				</view>
-			</scroll-view>
-			<!-- 组合商品 -->
-		</view>
-		<!-- 可拖动悬浮按钮 -->
-		<cm-drag
-			:cartNum="cartQuantity"
-			:isDock="true"
-			:existTabBar="true"
-			@btnClick="btnClick"
-			@btnTouchstart="btnTouchstart"
-			@btnTouchend="btnTouchend"
-		>
-		</cm-drag>
-		<!-- 透明模态层 -->
-		<modal-layer v-if="false"></modal-layer>
-	</view>
-</template>
-
-<script>
-import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
-import modalLayer from '@/components/modal-layer'
-import uniStars from '@/components/uni-stars/uni-stars.vue'
-import cmDrag from '@/components/cm-custom/cm-drag.vue'
-import tuiTag from '@/components/thorui/tui-tag/tui-tag'
-import { mapState, mapMutations } from 'vuex'
-export default {
-	name: 'productList',
-	components: {
-		listSkeleton,
-		modalLayer,
-		uniStars,
-		cmDrag,
-		tuiTag
-	},
-	props: {
-		searchStatus: {
-			type: Boolean,
-			default: false
-		}
-	},
-	data() {
-		return {
-			isShowClose: false,
-			searchInputVal: '',
-			isModallayer: false,
-			windowHeight: '',
-			showSkeleton: false,
-			priceLoading: true,
-			isShowEmpty: false,
-			isShowEmptyText: '搜索相关商品',
-			clubUserId: '',
-			identity: '',
-			isFocus: false,
-			scrollHeight: '',
-			listData: [],
-			combinationProduct: [],
-			zuheProductList: [], //组合商品列表
-			showLoading: false,
-			loadingNow: true,
-			loadingText: '上拉加载更多',
-			pageSize: 20,
-			zuhepageSize: 5,
-			pageNum: 1,
-			totalPage: 1,
-			hasNextPage: false,
-			pullFlag: true,
-			fromRegularPurchasePage: false,
-			cartQuantity: 0,
-			showRegularBtn: false,
-			isPrecedence: false,
-			ladderPriceList: [], //是否 阶梯,
-			tabIndex: 0,
-			goodsList: [],
-			tabBars: [{ name: '单一', id: 'danyi' }, { name: '组合', id: 'zuhe' }],
-			isShow: false,
-		}
-	},
-	created() {
-		this.setScrollHeight()
-		this.$api
-			.getComStorage('userInfo')
-			.then(resolve => {
-				if (resolve.userIdentity == 1) {
-					this.identity = 1
-				}
-			})
-			.catch(error => {
-				console.log(error)
-			})
-		this.$api.getComStorage('orderUserInfo').then(resolve => {
-			this.clubUserId = resolve.userID
-		})
-		this.getProductAgainInfo()
-		this.isFocus = true
-	},
-	filters: {
-		NumFormat: function(text) {
-			//处理金额
-			return Number(text).toFixed(2)
-		}
-	},
-	computed: {
-		...mapState(['hasLogin', 'userInfo'])
-	},
-	methods: {
-		closeDrawer(){
-			this.visible = false
-		},
-		// 数量选择框
-		showAddCartModal() {
-			this.visible = true
-		},
-		scrolltolower(tabIndex) {
-			if (tabIndex == 0) {
-				if (this.totalPage > this.listData.length && this.pullFlag) {
-					this.getProductAgainInfo(true)
-				}
-			} else if (tabIndex == 1) {
-				if (this.hasNextPage && this.pullFlag) {
-					this.getcombinationProduct(true)
-				}
-			}
-		},
-		setScrollHeight() {
-			const { windowHeight, pixelRatio } = wx.getSystemInfoSync()
-			this.windowHeight = windowHeight - 1
-			this.scrollHeight = windowHeight - 66
-		},
-		getProductAgainInfo(loadMore) {
-			this.showLoading = true
-			this.priceLoading = true
-			this.loadingNow = true
-			this.loadingText = '加载中'
-			this.isShowEmpty = false
-			if (loadMore) {
-				this.pageNum += 1
-			}
-			let params = {
-				identity: this.identity,
-				keyword: this.searchInputVal,
-				pageNum: this.pageNum,
-				pageSize: this.pageSize,
-				sortField: '',
-				sortType: ''
-			}
-			this.ProductService.GetProductSearchList(params)
-				.then(response => {
-					this.isShowWrapper = true
-					const resData = JSON.parse(response.data)
-					const resList = resData.items
-					if (resList && resList.length > 0) {
-						this.totalPage = resData.total
-						this.showEmpty = false
-						if (loadMore) {
-							this.listData = [...this.listData, ...resList]
-							this.getProductPrice()
-						} else {
-							this.listData = [...resList]
-							this.getProductPrice()
-							this.showSkeleton = false
-						}
-						// 防上拉暴滑
-						this.pullFlag = false
-						setTimeout(() => {
-							this.pullFlag = true
-						}, 500)
-						// 底部提示文案
-						if (this.totalPage > this.listData.length) {
-							this.loadingText = '上拉加载更多'
-						} else {
-							this.showLoading = true
-							this.loadingNow = false
-						}
-					} else {
-						if (!loadMore) {
-							this.isShowEmpty = true
-							this.isShowEmptyText = '暂无相关商品'
-						}
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		getProductPrice() {
-			//获取商品或者活动价格
-			let productIdArr = []
-			let productIds = ''
-			this.listData.map(item => {
-				// 0公开价格 1不公开价格 2仅对会员机构公开
-				productIdArr.push(item.p_id)
-			})
-			productIds = productIdArr.join(',')
-			this.ProductService.querySearchProductPrice({ userId: this.clubUserId, productIds: productIds })
-				.then(response => {
-					this.listData = this.ReturnNewProducts(this.listData, response.data)
-					this.priceLoading = false
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		ReturnNewProducts(Array, list) {
-			//合并字段
-			let NewArray = []
-			Array.map(item => {
-				for (let i = 0; i < list.length; i++) {
-					if (item.p_id == list[i].productId) {
-						NewArray.push(Object.assign(item, list[i]))
-					}
-				}
-			})
-			return NewArray
-		},
-		searchOpertor(tabIndex) {
-			//搜索商品
-			if (tabIndex == 0) {
-				if (this.searchInputVal == '') {
-					this.$util.msg('请输入商品关键词', 2000)
-				} else {
-					this.pageNum = 1
-					this.showSkeleton = true
-					this.getProductAgainInfo()
-					this.isFocus = false
-				}
-			} else {
-				this.pageNum = 1
-				this.showSkeleton = true
-				this.getcombinationProduct()
-				this.isFocus = false
-			}
-		},
-		getcombinationProduct(loadMore) {
-			//组合搜索商品
-			this.showLoading = true
-			this.loadingNow = true
-			this.loadingText = '加载中'
-			this.isShowEmpty = false
-			if (loadMore) {
-				this.pageNum += 1
-			}
-			let params = {
-				clubUserId: this.clubUserId,
-				pageNum: this.pageNum,
-				pageSize: this.zuhepageSize,
-				searchWord: this.searchInputVal
-			}
-			this.SellerService.GetCombinationProduct(params)
-				.then(response => {
-					this.isShowWrapper = true
-					const responseData = response.data
-					if (responseData.results && responseData.results.length > 0) {
-						this.hasNextPage = responseData.hasNextPage
-						this.isShowEmpty = false
-						if (loadMore) {
-							this.combinationProduct = [...this.combinationProduct, ...responseData.results]
-						} else {
-							this.combinationProduct = [...responseData.results]
-
-							this.showSkeleton = false
-						}
-						// 防上拉暴滑
-						this.pullFlag = false
-						setTimeout(() => {
-							this.pullFlag = true
-						}, 500)
-						// 底部提示文案
-						if (this.hasNextPage) {
-							this.loadingText = '上拉加载更多'
-						} else {
-							this.showLoading = true
-							this.loadingNow = false
-						}
-					} else {
-						this.isShowEmpty = true
-						this.isShowEmptyText = '暂无相关商品'
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		changeCountAdd(item, pros) {
-			//商品数量加加
-			if (pros.initProductNum == 0) {
-				pros.initProductNum = pros.minBuyNumber
-				this.processActivityPrice(pros)
-			} else if (pros.initProductNum >= pros.minBuyNumber) {
-				pros.initProductNum++
-				this.processActivityPrice(pros)
-			}
-			this.totalPeice(item)
-			this.totalCount(item)
-			this.totalKind(item)
-		},
-		changeCountSub(item, pros) {
-			//商品数量减减
-			if (pros.initProductNum == 0) {
-				this.$util.msg(`采购数量不能小于0`, 2000)
-				return
-			} else if (pros.initProductNum == pros.minBuyNumber) {
-				pros.initProductNum = 0
-				this.processActivityPrice(pros)
-			} else {
-				pros.initProductNum--
-				this.processActivityPrice(pros)
-			}
-			this.totalPeice(item)
-			this.totalCount(item)
-			this.totalKind(item)
-		},
-		changeNnmber(e, item, pros) {
-			//输入商品数量更新
-			let _value = e.detail.value
-			if (!this.$api.isNumber(_value)) {
-				pros.initProductNum = pros.minBuyNumber
-			} else if (_value < pros.minBuyNumber) {
-				this.$util.msg(`该商品最小起订量为${pros.minBuyNumber}`, 2000)
-				pros.initProductNum = pros.minBuyNumber
-			} else {
-				pros.initProductNum = parseInt(e.detail.value)
-				this.processActivityPrice(pros)
-			}
-			this.totalPeice(item)
-			this.totalCount(item)
-			this.totalKind(item)
-		},
-		totalPeice(item) {
-			//计算总价格,每次调用此方法,将初始值为0,遍历价格并累加
-			let prosPrice = 0
-			let productsList = []
-			productsList = item.combinationProductList
-			productsList.forEach(pros => {
-				prosPrice += pros.retailPrice * pros.initProductNum
-				item.productTotalAmount = prosPrice
-			})
-			// console.log(prosPrice)
-		},
-		totalCount(item) {
-			//计算总数量
-			let prosAllCount = 0
-			let productsList = []
-			productsList = item.combinationProductList
-			productsList.forEach(pros => {
-				prosAllCount += parseInt(pros.initProductNum)
-				item.productTotalNum = prosAllCount
-			})
-			// console.log(prosAllCount)
-		},
-		totalKind(item) {
-			//计算商品种类
-			let productsList = []
-			let checkList = []
-			productsList = item.combinationProductList
-			productsList.forEach(pros => {
-				if (pros.initProductNum > 0) {
-					checkList.push(pros)
-					item.productKind = checkList.length
-				} else {
-					item.productKind = checkList.length
-				}
-			})
-		},
-		processActivityPrice(pros) {
-			//单独处理活动价格和阶梯价格
-			let ladderPriceList = pros.ladderPriceList
-			if (pros.ladderPriceFlag == '0' || pros.actStatus == 1) {
-				pros.totalPrice = pros.initProductNum * pros.retailPrice
-			} else {
-				ladderPriceList.forEach((item, index) => {
-					if (pros.initProductNum >= item.buyNum) {
-						pros.retailPrice = item.buyPrice
-						pros.totalPrice = pros.initProductNum * item.buyPrice
-					}
-				})
-			}
-		},
-		operationHanld(prop) {
-			this.$emit('operationConfim', prop)
-		},
-		alertjieti(pros) {
-			this.$emit('alertjietiConfim', pros)
-		},
-		changeTab(index) {
-			this.tabIndex = index
-			if (index == 0) {
-				this.pageNum = 1
-				this.getProductAgainInfo()
-			} else {
-				this.getcombinationProduct()
-			}
-			// this.$emit('changetab',index);
-		},
-		navToDetailPage(id) {
-			this.isModallayer = true
-			this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-			this.isModallayer = false
-		},
-		repurchModel() {
-			this.$util.modal('', '此商品的价格有变化,原来的购买价已不适用', '知道了', '', false, () => {})
-		},
-		onShowClose() {
-			//输入框失去焦点时触发
-			if (this.searchInputVal != '') {
-				this.isShowClose = true
-			} else {
-				this.isShowClose = false
-			}
-		},
-		delInputText(tabIndex) {
-			//清除输入框内容
-			if (tabIndex == 0) {
-				this.searchInputVal = ''
-				this.listData = []
-				this.isFocus = true
-				this.isShowClose = false
-				this.loadingNow = false
-				this.isShowEmpty = true
-				this.isShowEmptyText = '暂无相关商品'
-			} else {
-				this.searchInputVal = ''
-				this.isShowClose = false
-				this.isFocus = true
-				this.getcombinationProduct()
-			}
-		},
-		isInterceptHtmlFn(text) {
-			let name = this.$reg.interceptHtmlFn(text)
-			return name
-		},
-		PromotionsFormat(promo) {
-			//促销活动类型数据处理
-			if (promo != null) {
-				if (promo.type == 1 && promo.mode == 1) {
-					return true
-				} else {
-					return false
-				}
-			}
-			return false
-		},
-		btnClick() {
-			this.$emit('goCartPage')
-		},
-		btnTouchstart() {
-			// console.log('btnTouchstart');
-		},
-		btnTouchend() {
-			// console.log('btnTouchend');
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-.all-zuhe-list {
-	background: #ffffff;
-}
-
-.foot_conten {
-	width: 655rpx;
-	background: #fff;
-	font-size: 28rpx;
-	height: 80rpx;
-	// line-height: 80rpx;
-	display: inherit;
-	padding: 10px;
-	overflow: hidden;
-	margin: 20rpx auto;
-}
-.zuhe_foot-box {
-	float: left;
-	overflow: hidden;
-	white-space: nowrap;
-	// text-overflow: ellipsis;
-	width: 490rpx;
-}
-.zuhe_foot-box text {
-	margin-right: 36rpx;
-}
-.foot_text {
-	color: #ff2a2a;
-}
-.foot_conten .buycart {
-	width: 162rpx;
-	height: 64rpx;
-	background: #efaf00 !important;
-	color: #fff;
-	font-size: 26rpx;
-	border-radius: 36rpx;
-	text-align: center;
-	line-height: 64rpx;
-	float: right;
-}
-.price-none {
-	font-size: 24rpx;
-	color: #666666;
-}
-.zuhe_title {
-	background: #ffffff;
-	height: 76rpx;
-	font-size: 28rpx;
-	color: #1675e1;
-	border-bottom: 4rpx solid #1675e1;
-	line-height: 76rpx;
-	padding-left: 30rpx;
-	&.active {
-		color: #e15616;
-		border-bottom: 4rpx solid #e15616;
-	}
-}
-.tabstyle {
-	width: 128rpx;
-	height: 76rpx;
-	font-size: 26rpx;
-	display: inline-block;
-	border-radius: 10rpx;
-	text-align: center;
-	line-height: 76rpx;
-	border: 2rpx solid #eeeeee;
-	position: relative;
-	margin-right: 12rpx;
-	&.addstyle {
-		background: $btn-confirm;
-		color: #ffffff;
-		&::before {
-			content: '';
-			width: 0;
-			height: 0;
-			border-top: 20rpx solid transparent;
-			border-right: 20rpx solid #ffffff;
-			border-left: 20rpx solid transparent;
-			border-bottom: 20rpx solid #ffffff;
-			position: absolute;
-			right: 0;
-			bottom: 0;
-		}
-	}
-	.icon-gou {
-		width: 36rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		text-align: center;
-		color: #e15616;
-		position: absolute;
-		bottom: -5rpx;
-		right: -5rpx;
-		font-weight: bold;
-		font-size: $font-size-28;
-	}
-}
-.commodity-list-wrapper {
-	.product-container {
-		padding-top: 130rpx;
-	}
-	scroll-view {
-		height: 100%;
-	}
-	.show-more-btn {
-		width: 276rpx;
-		height: 52rpx;
-		line-height: 52rpx;
-		border: 2rpx solid #d8d8d8;
-		background: #f7f7f7;
-		font-size: 26rpx;
-		margin: 26rpx 0;
-		position: absolute;
-		left: 50%;
-		margin-left: -138rpx;
-	}
-}
-.good-search {
-	position: fixed;
-	top: 0;
-	z-index: 999;
-	background-color: #fff;
-	width: 702rpx;
-	height: 66rpx;
-	padding: 32rpx 24rpx;
-	.search-from {
-		display: flex;
-		align-items: center;
-		box-sizing: border-box;
-		padding-left: 30rpx;
-		width: 702rpx;
-		height: 66rpx;
-		background-color: #f7f7f7;
-		border-radius: 33rpx;
-		line-height: 64rpx;
-		.icon-sousuo {
-			width: 64rpx;
-			height: 64rpx;
-			text-align: center;
-			font-size: $font-size-32;
-		}
-		.input {
-			font-size: $font-size-26;
-		}
-	}
-}
-.all-type-list-content {
-	// height: 240rpx;
-	padding: 24rpx;
-	background: #fff;
-	margin-bottom: 2rpx;
-	display: flex;
-	flex-direction: row;
-	box-sizing: content-box;
-	.list-img {
-		width: 312rpx;
-		height: 207rpx !important;
-		margin-right: 26rpx;
-		border-radius: 10rpx;
-		border: 2rpx solid #f3f3f3;
-	}
-}
-.zuhe-list-content {
-	width: 655rpx;
-	// height: 214rpx;
-	background: #fff;
-	border: 2rpx solid #def4ff;
-	display: flex;
-	flex-direction: row;
-	box-sizing: content-box;
-	margin-top: 10rpx;
-	border-radius: 14rpx;
-	margin: 10rpx auto;
-	padding: 20rpx;
-	&.stylecontent {
-		border: 2rpx solid #fff0de;
-	}
-}
-
-.list-details-info {
-	width: 100%;
-	flex-direction: column;
-	font-size: 26rpx;
-	position: relative;
-	.list-details-title {
-		line-height: 38rpx;
-		text-overflow: ellipsis;
-		overflow: hidden;
-		display: -webkit-box;
-		-webkit-line-clamp: 2;
-		line-clamp: 2;
-		-webkit-box-orient: vertical;
-	}
-	.list-details-tags {
-		display: flex;
-		justify-content: flex-start;
-		margin: 10rpx 0;
-		height: 34rpx;
-	}
-	.goods-price {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		.price {
-			font-size: 26rpx;
-			font-weight: bold;
-			color: $uni-text-color-price;
-		}
-		.shop-btn {
-			width: 160rpx;
-			height: 56rpx;
-			border: 1px solid #333333;
-			border-radius: 28rpx;
-			text-align: center;
-			line-height: 56rpx;
-			box-sizing: border-box;
-		}
-	}
-	.list-details-specs {
-		width: 100%;
-		display: inline-block;
-		margin: 5rpx 0;
-		color: #999;
-		font-size: 20rpx;
-		line-height: 28rpx;
-	}
-	.list-details-miniQuantity {
-		width: 100%;
-		display: inline-block;
-		margin-top: 7rpx;
-	}
-}
-.list-details-price {
-	width: 100%;
-	.floor-item-act {
-		height: 54rpx;
-		text-align: center;
-		box-sizing: border-box;
-		float: left;
-		.floor-tags {
-			height: 28rpx;
-			border-radius: 6rpx;
-			background-color: #ffffff;
-			line-height: 28rpx;
-			color: $color-system;
-			text-align: center;
-			display: inline-block;
-			padding:0 5rpx;
-			font-size: $font-size-20;
-			margin-left: 15rpx;
-			border: 1px solid #e15616;
-		}
-	}
-	.price-icon {
-		width: 22rpx;
-		height: 28rpx;
-		vertical-align: middle;
-		margin-right: 10rpx;
-	}
-	.price-icon + text {
-		font-size: 25rpx;
-		vertical-align: middle;
-	}
-	.list-login-now {
-		width: 375rpx;
-		color: #f8c499;
-		.p-no {
-			float: left;
-			font-size: $font-size-24;
-			color: $color-system;
-			margin-right: 10rpx;
-		}
-	}
-	.login-now {
-		padding: 10rpx 10rpx 10rpx 0;
-	}
-	.list-none {
-		margin-top: 15rpx;
-		.price-small {
-			font-size: $font-size-24;
-			line-height: 40rpx;
-			color: #ff2a2a;
-		}
-	}
-	.list-price-loding {
-		font-size: $font-size-24;
-		line-height: 54rpx;
-		color: #ff2a2a;
-	}
-	.list-shop {
-		float: left;
-		overflow: hidden;
-		&.com {
-			width: 100%;
-		}
-		.list-price {
-			color: #ff2a2a;
-			float: left;
-			line-height: 54rpx;
-			align-items: center;
-			justify-content: center;
-			.price-larger {
-				font-size: $font-size-26;
-				display: inline-block;
-				&.none {
-					text-decoration: line-through;
-					color: #999999;
-				}
-			}
-			.list-price-all {
-				width: 100%;
-				float: left;
-			}
-			.zuhe_price-larger {
-				width: 100%;
-				float: left;
-				height: 54rpx;
-				color: #666666;
-				.price-larger {
-					float: left;
-					margin-right: 20rpx;
-				}
-			}
-			.price-two {
-				color: #666666;
-				float: left;
-			}
-			.zuhe_list_zj {
-				color: #ff2a2a;
-			}
-			.price-view {
-				display: inline-block;
-				width: 40rpx;
-				border-radius: 10rpx;
-				font-size: $font-size-22;
-				text-align: center;
-				color: #ffffff;
-				height: 36rpx;
-				line-height: 36rpx;
-				margin-right: 8rpx;
-				&.ladder {
-					background: linear-gradient(135deg, rgba(255, 0, 0, 1) 0%, rgba(242, 143, 49, 1) 100%);
-				}
-				&.activity {
-					background: linear-gradient(135deg, rgba(128, 0, 255, 1) 0%, rgba(242, 49, 153, 1) 100%);
-				}
-			}
-		}
-		.zuhe_list_price .price-view {
-			margin-left: 20rpx;
-			float: left;
-			margin-top: 5rpx;
-		}
-		.zuhe_list_price {
-			width: 100%;
-			overflow: hidden;
-			margin-top: 10rpx;
-		}
-		.count {
-			float: right;
-			border: 1px solid #eeeeee;
-			border-radius: 10rpx;
-			.number-box {
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				.iconfont {
-					font-size: $font-size-24;
-					padding: 0 16rpx;
-					color: $text-color;
-					text-align: center;
-					line-height: 48rpx;
-					font-weight: bold;
-				}
-				.btn-input {
-					width: 100rpx;
-					height: 48rpx;
-					line-height: 48rpx;
-					background: #f8f8f8;
-					border-radius: 4rpx;
-					text-align: center;
-					font-size: $font-size-24;
-					border-right: 1px solid #eeeeee;
-					border-left: 1px solid #eeeeee;
-				}
-			}
-		}
-		.list-price-none {
-			width: 100%;
-			.price-none {
-				text-decoration: line-through;
-				color: #999999;
-				display: inline-block;
-			}
-			.icon-wenhao {
-				font-size: $font-size-32;
-				color: #0091ff;
-				margin-left: 6rpx;
-			}
-		}
-	}
-	.add-cart-btn {
-		flex: 4;
-		width: 140rpx;
-		height: 54rpx;
-		line-height: 54rpx;
-		border-radius: 27rpx;
-		color: #fff;
-		font-size: 24rpx;
-		margin-right: 0;
-		background: #ffffff;
-		border: 1px solid #c9c9c9;
-		color: $text-color;
-	}
-	.zuhe_btn {
-		float: right;
-	}
-}
-.zuhe_list_price {
-	display: block !important;
-}
-.zuhe_list_text {
-	margin-top: 0;
-}
-</style>

+ 6 - 8
components/cm-module/listTemplate/productList.vue

@@ -99,16 +99,14 @@
 
 <script>
 import listSkeleton from '@/components/cm-module/listTemplate/listSkeleton'
-import modalLayer from '@/components/modal-layer'
-import uniStars from '@/components/uni-stars/uni-stars.vue'
-import cmDrag from '@/components/cm-custom/cm-drag.vue'
+import modalLayer from '@/components/cm-module/modal-layer/modal-layer'
+import cmDrag from '@/components/cm-module/cm-drag/cm-drag'
 import { mapState, mapMutations } from 'vuex'
 export default {
 	name: 'productList',
 	components: {
 		listSkeleton,
 		modalLayer,
-		uniStars,
 		cmDrag,
 	},
 	props: {
@@ -357,12 +355,12 @@ export default {
 			border-radius: 6rpx;
 			background-color: #FFFFFF;
 			line-height: 28rpx;
-			color: #ff2a2a;
+			color: #ff457b;
 			text-align: center;
 			display: inline-block;
 			padding:0 5rpx;
 			font-size: $font-size-20;
-			border: 1px solid #ff2a2a;
+			border: 1px solid #ff457b;
 			float: left;
 		}
 	}
@@ -396,7 +394,7 @@ export default {
 		.price-small {
 			font-size: $font-size-24;
 			line-height: 40rpx;
-			color: #ff2a2a;
+			color: #ff457b;
 		}
 	}
 	.list-shop {
@@ -404,7 +402,7 @@ export default {
 		float: left;
 		.list-price {
 			width: 100%;
-			color: #ff2a2a;
+			color: #ff457b;
 			float: left;
 			line-height: 54rpx;
 			align-items: center;

+ 25 - 0
components/cm-module/modal-layer/modal-layer.vue

@@ -0,0 +1,25 @@
+<template name="modal">
+    <view class="modal"> <view class="modal-content"></view> </view>
+</template>
+<script>
+export default {
+    name: 'modal',
+    data() {
+        return {}
+    },
+    created() {},
+    computed: {}
+}
+</script>
+
+<style lang="scss">
+.modal-content {
+    width: 100%;
+    height: 100%;
+    position: fixed;
+    left: 0;
+    top: 0;
+    background: rgba(255, 255, 255, 0);
+    z-index: 7777;
+}
+</style>

+ 197 - 228
components/cm-module/orderDetails/activipopu.vue

@@ -1,235 +1,204 @@
 <template name="cm-price">
-	<!--促销活动弹窗提示-->
-	<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-		<view class="tui-popup-box clearfix">
-			<view class="tui-scrollview-box">
-				<view class="box-text">
-					<text>促销时间:</text>
-					<text class="txt" v-if="Promotion.status == 1">不限时</text>
-					<text class="txt" v-else>{{ Promotion.beginTime }} ~ {{ Promotion.endTime }}</text>
-				</view>
-				<view class="box-title" v-show="Promotion.mode ==2">
-					<text>此商品参与{{Promotion.name}},满</text>
-					<text class="txt">¥{{Promotion == null ? '0.00' : Promotion.touchPrice | NumFormat}}</text>减
-					<text class="txt">¥{{Promotion == null ? '0.00' : Promotion.reducedPrice | NumFormat}}</text>
-				</view>
-				<view class="box-title" v-show="Promotion.mode==3">
-					<text>此商品参与{{Promotion.name}},满</text>
-					<text class="txt">¥{{Promotion.touchPrice}}</text>赠送商品(赠品见订单详情)
-				</view>
-			</view>
-			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom :isIphoneX ? '68rpx' : '0rpx' }">
-				<view class="tui-flex-1">
-					<view class="tui-button" @click="hidePopup()">了解</view>
-				</view>
-			</view>
-		</view>	
-	</tui-bottom-popup>
+    <!--促销活动弹窗提示-->
+    <tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+        <view class="tui-popup-box clearfix">
+            <view class="tui-scrollview-box">
+                <view class="box-text">
+                    <text>促销时间:</text> <text class="txt" v-if="Promotion.status == 1">不限时</text>
+                    <text class="txt" v-else>{{ Promotion.beginTime }} ~ {{ Promotion.endTime }}</text>
+                </view>
+                <view class="box-title" v-show="Promotion.mode == 2">
+                    <text>此商品参与{{ Promotion.name }},满</text>
+                    <text class="txt">¥{{ Promotion == null ? '0.00' : Promotion.touchPrice | NumFormat }}</text
+                    >减 <text class="txt">¥{{ Promotion == null ? '0.00' : Promotion.reducedPrice | NumFormat }}</text>
+                </view>
+                <view class="box-title" v-show="Promotion.mode == 3">
+                    <text>此商品参与{{ Promotion.name }},满</text> <text class="txt">¥{{ Promotion.touchPrice }}</text
+                    >赠送商品(赠品见订单详情)
+                </view>
+            </view>
+            <view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+                <view class="tui-flex-1"> <view class="tui-button" @click="hidePopup()">了解</view> </view>
+            </view>
+        </view>
+    </tui-bottom-popup>
 </template>
 
 <script>
-	import { mapState,mapMutations } from 'vuex'
-	export default{
-		name:'cm-price',
-		props:{
-			Promotion:{
-				type:Object,
-			},
-			popupShow:{
-				type:Boolean,
-				default:false
-			}
-		},
-		data() {
-			return{
-				isIphoneX:this.$store.state.isIphoneX,
-			}
-		},
-		filters: {
-			NumFormat:function(text) {//处理金额
-				return Number(text).toFixed(2);
-			},
-		},
-		created() {
-			
-		},
-		computed: {
-			...mapState(['hasLogin','isWxAuthorize'])
-		},
-		methods:{
-			hidePopup(){
-				this.$parent.popupShow = false
-			},
-			goGoodActiveFn(id){
-				this.$parent.popupShow = false
-				this.$api.navigateTo('/pages/goods/goods-active?id='+id)
-			}
-		},
-		
-	}
+import { mapGetters } from 'vuex'
+export default {
+    name: 'cm-price',
+    props: {
+        Promotion: {
+            type: Object
+        },
+        popupShow: {
+            type: Boolean,
+            default: false
+        }
+    },
+    filters: {
+        NumFormat: function(text) {
+            //处理金额
+            return Number(text).toFixed(2)
+        }
+    },
+    created() {},
+    computed: {
+        ...mapGetters(['hasLogin', 'isWxAuthorize', 'isIphoneX'])
+    },
+    methods: {
+        hidePopup() {
+            this.$parent.popupShow = false
+        },
+        goGoodActiveFn(id) {
+            this.$parent.popupShow = false
+            this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
+        }
+    }
+}
 </script>
 
-<style lang="scss">	
-	.tui-flex-1 {
-		flex: 1;
-	}
-	.tui-popup-box {
-		position: relative;
-		box-sizing: border-box;
-		min-height: 220rpx;
-		padding:24rpx 24rpx 0 24rpx;
-	}
-	.tui-scrollview-box{
-		width: 100%;
-		height: auto;
-		float: left;
-		box-sizing: border-box;
-		.ladder-main{
-			width: 100%;
-			height: 320rpx;
-			border: 1px solid rgba(225,86,22,0.3);
-			border-radius: 10rpx;
-			.ladder-item{
-				width: 100%;
-				height: 80rpx;
-				float: left;
-				border-bottom: 1px solid rgba(225,86,22,0.3);
-				&:nth-child(1){
-					.ladder-item-td{
-						color: #333333;
-					}
-				}
-				&:last-child{
-					border-bottom: none;
-				}
-				.ladder-item-td{
-					width:50%;
-					text-align: center;
-					line-height: 80rpx;
-					font-size: $font-size-24;
-					color: $color-system;
-					box-sizing: border-box;
-					float: left;
-					&:nth-child(1){
-						border-right: 1px solid rgba(225,86,22,0.3);
-					}
-				}
-			}
-		}
-		.box-title{
-			font-size: $font-size-26;
-			color: $text-color;
-			text-align: left;
-			line-height: 56rpx;
-			.txt{
-				color: $color-system;
-				margin: 0 8rpx;
-			}
-		}
-		.box-text{
-			font-size: $font-size-26;
-			color: $text-color;
-			text-align: left;
-			line-height: 56rpx;
-			.txt{
-				color: $color-system;
-			}
-		}
-		.box-product{
-			width: 100%;
-			height: auto;
-			margin-top: 20rpx;
-			.title{
-				font-size: $font-size-24;
-				color: $text-color;
-				text-align: left;
-				line-height: 54rpx;
-			}
-			.box-product-main{
-				width: 100%;
-				height: 136rpx;
-				.image{
-					width: 134rpx;
-					height: 134rpx;
-					border: 1px solid #EBEBEB;
-					float: left;
-					image{
-						width: 100%;
-						height: 100%;
-						display: block;
-					}
-				}
-				.info{
-					width: 540rpx;
-					height: 134rpx;
-					float: left;
-					margin-left: 16rpx;
-					position: relative;
-					.name{
-						width: 100%;
-						float: left;
-						line-height: 40rpx;
-						font-size: $font-size-28;
-						color: $text-color;
-						-o-text-overflow: ellipsis;
-						text-overflow: ellipsis;
-						display: -webkit-box;
-						word-break: break-all;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						overflow: hidden;
-					}
-					.num{
-						width: 100%;
-						height: 44rpx;
-						font-size: $font-size-24;
-						color: $text-color;
-						text-align: left;
-						line-height: 44rpx;
-						position: absolute;
-						bottom: 0;
-						left: 0;
-					}
-				}
-			}
-		}
-	}
-	
-	.tui-popup-btn {
-		width: 100%;
-		height: auto;
-		float: left;
-		margin-top: 24rpx;
-		.tui-button{
-			width: 100%;
-			height: 88rpx;
-			background: $btn-confirm;
-			line-height: 88rpx;
-			text-align: center;
-			color: #FFFFFF;
-			font-size: $font-size-28;
-			border-radius: 14rpx;
-		}
-	}
+<style lang="scss">
+.tui-flex-1 {
+    flex: 1;
+}
+.tui-popup-box {
+    position: relative;
+    box-sizing: border-box;
+    min-height: 220rpx;
+    padding: 24rpx 24rpx 0 24rpx;
+}
+.tui-scrollview-box {
+    width: 100%;
+    height: auto;
+    float: left;
+    box-sizing: border-box;
+    .ladder-main {
+        width: 100%;
+        height: 320rpx;
+        border: 1px solid rgba(225, 86, 22, 0.3);
+        border-radius: 10rpx;
+        .ladder-item {
+            width: 100%;
+            height: 80rpx;
+            float: left;
+            border-bottom: 1px solid rgba(225, 86, 22, 0.3);
+            &:nth-child(1) {
+                .ladder-item-td {
+                    color: #333333;
+                }
+            }
+            &:last-child {
+                border-bottom: none;
+            }
+            .ladder-item-td {
+                width: 50%;
+                text-align: center;
+                line-height: 80rpx;
+                font-size: $font-size-24;
+                color: $color-system;
+                box-sizing: border-box;
+                float: left;
+                &:nth-child(1) {
+                    border-right: 1px solid rgba(225, 86, 22, 0.3);
+                }
+            }
+        }
+    }
+    .box-title {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: $color-system;
+            margin: 0 8rpx;
+        }
+    }
+    .box-text {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: $color-system;
+        }
+    }
+    .box-product {
+        width: 100%;
+        height: auto;
+        margin-top: 20rpx;
+        .title {
+            font-size: $font-size-24;
+            color: $text-color;
+            text-align: left;
+            line-height: 54rpx;
+        }
+        .box-product-main {
+            width: 100%;
+            height: 136rpx;
+            .image {
+                width: 134rpx;
+                height: 134rpx;
+                border: 1px solid #ebebeb;
+                float: left;
+                image {
+                    width: 100%;
+                    height: 100%;
+                    display: block;
+                }
+            }
+            .info {
+                width: 540rpx;
+                height: 134rpx;
+                float: left;
+                margin-left: 16rpx;
+                position: relative;
+                .name {
+                    width: 100%;
+                    float: left;
+                    line-height: 40rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    -o-text-overflow: ellipsis;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+                }
+                .num {
+                    width: 100%;
+                    height: 44rpx;
+                    font-size: $font-size-24;
+                    color: $text-color;
+                    text-align: left;
+                    line-height: 44rpx;
+                    position: absolute;
+                    bottom: 0;
+                    left: 0;
+                }
+            }
+        }
+    }
+}
+
+.tui-popup-btn {
+    width: 100%;
+    height: auto;
+    float: left;
+    margin-top: 24rpx;
+    .tui-button {
+        width: 100%;
+        height: 88rpx;
+        background: $btn-confirm;
+        line-height: 88rpx;
+        text-align: center;
+        color: #ffffff;
+        font-size: $font-size-28;
+        border-radius: 14rpx;
+    }
+}
 </style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 8 - 2
components/cm-module/orderDetails/goodsList.vue

@@ -95,7 +95,13 @@
 					console.log(pros)
 					this.$api.navigateTo(`/pages/goods/product?id=${pros.organizeProductId}`)
 				}
-			},	
+			},
+            clickPopupShow(pros, type){
+                if(type === 2){
+                    this.$emit('popupClick', pros)
+                }
+                
+            },
 			PromotionsFormat(promo){//促销活动类型数据处理
 				if(promo!=null){
 					if(promo.type == 1 && promo.mode == 1){
@@ -260,7 +266,7 @@
 						line-height: 48rpx;
 						font-size: $font-size-28;
 						width: 48%;
-						color: #FF2A2A;
+						color: #ff457b;
 						float: left;
 					}
 					.count{

+ 190 - 173
components/cm-module/orderDetails/logisticsRecord.vue

@@ -1,181 +1,198 @@
 <template name="logistics">
-	<view class="logistics-template">
-		<!-- 物流信息 -->
-		<view class="logistics-content" v-if="logisticsData.length > 0" v-for="(item,index) in logisticsData" :key="index">
-			<view class="logistics-top">
-				<text class="name">物流信息</text>
-			</view>
-			<view class="logistics-warp">
-				<view  class="logistics-warp__wrapper">
-					<view class="logistics-main">
-					 	<view class="logistics-main-top">
-					 		<view class="main-top" @click="showlogistics(index)">
-								{{item.expressname}}:{{item.expressNumber}}
-								<text class="clipboard" @click="clipboard(item.expressNumber)">复制</text>
-								<text class="arrow-showMore iconfont icon-web_xiangxiazhankai" :style="{'transform':item.isOpen?'rotate(180deg)':'rotate(0)'}"></text>
-							</view>
-					 		<view class="main-bot">
-								发货时间:{{item.expressNewtime}}
-							</view>
-					 	</view>
-						<view v-if="item.expressRecord.length > 0" v-for="(infoItem,infoIndex) in item.expressRecord" :key="infoIndex" :class="{'logistics-warp--hide':!item.isOpen}" class="logistics-main-bot logistics-animation" :style="{'transform':item.isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':item.isOpen?'translateY(0)':'translateY(-50%)'}" >
-							{{infoItem.time}}  {{infoItem.desc}}
-						</view>
-						<view v-if="item.expressRecord" :class="{'logistics-warp--hide':!item.isOpen}" class="logistics-main-bot logistics-animation" :style="{'transform':item.isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':item.isOpen?'translateY(0)':'translateY(-50%)'}">
-							暂无物流信息
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="logistics-content" v-else>
-			暂无物流信息
-		 </view>
-	</view>
+    <view class="logistics-template">
+        <!-- 物流信息 -->
+        <view
+            class="logistics-content"
+            v-if="logisticsData.length > 0"
+            v-for="(item, index) in logisticsData"
+            :key="index"
+        >
+            <view class="logistics-top"> <text class="name">物流信息</text> </view>
+            <view class="logistics-warp">
+                <view class="logistics-warp__wrapper">
+                    <view class="logistics-main">
+                        <view class="logistics-main-top">
+                            <view class="main-top" @click="showlogistics(index)">
+                                {{ item.expressname }}:{{ item.expressNumber }}
+                                <text class="clipboard" @click="clipboard(item.expressNumber)">复制</text>
+                                <text
+                                    class="arrow-showMore iconfont icon-web_xiangxiazhankai"
+                                    :style="{ transform: item.isOpen ? 'rotate(180deg)' : 'rotate(0)' }"
+                                ></text>
+                            </view>
+                            <view class="main-bot"> 发货时间:{{ item.expressNewtime }} </view>
+                        </view>
+                        <view
+                            v-if="item.expressRecord.length > 0"
+                            v-for="(infoItem, infoIndex) in item.expressRecord"
+                            :key="infoIndex"
+                            :class="{ 'logistics-warp--hide': !item.isOpen }"
+                            class="logistics-main-bot logistics-animation"
+                            :style="{
+                                transform: item.isOpen ? 'translateY(0)' : 'translateY(-50%)',
+                                '-webkit-transform': item.isOpen ? 'translateY(0)' : 'translateY(-50%)'
+                            }"
+                        >
+                            {{ infoItem.time }} {{ infoItem.desc }}
+                        </view>
+                        <view
+                            v-if="item.expressRecord"
+                            :class="{ 'logistics-warp--hide': !item.isOpen }"
+                            class="logistics-main-bot logistics-animation"
+                            :style="{
+                                transform: item.isOpen ? 'translateY(0)' : 'translateY(-50%)',
+                                '-webkit-transform': item.isOpen ? 'translateY(0)' : 'translateY(-50%)'
+                            }"
+                        >
+                            暂无物流信息
+                        </view>
+                    </view>
+                </view>
+            </view>
+        </view>
+        <view class="logistics-content" v-else> 暂无物流信息 </view>
+    </view>
 </template>
 
 <script>
-	const thorui = require("@/components/clipboard/clipboard.thorui.js")
-	export default{
-		name:"logistics",
-		data() {
-			return{
-				title:'发票信息',
-				logisticsData:''
-			}
-		},
-		created(){
-			
-		},
-		computed: {
-
-		},
-		methods:{
-			initData(res) {
-				this.logisticsData = res;
-			},
-			showlogistics(index){
-				let isOpen = this.logisticsData[index]['isOpen'];
-				this.logisticsData[index]['isOpen'] = !isOpen;
-			},
-			clipboard(data) {
-				thorui.getClipboardData(data, (res) => {
-					if (res) {
-						this.$util.msg("复制成功",2000,true,'success');
-					} else {
-						this.$util.msg("复制失败",2000,true,'none');
-					}
-				})
-			}
-		}
-	}
+import thorui from '@/components/clipboard/clipboard.thorui.js'
+export default {
+    name: 'logistics',
+    data() {
+        return {
+            title: '发票信息',
+            logisticsData: ''
+        }
+    },
+    created() {},
+    computed: {},
+    methods: {
+        initData(res) {
+            this.logisticsData = res
+        },
+        showlogistics(index) {
+            let isOpen = this.logisticsData[index]['isOpen']
+            this.logisticsData[index]['isOpen'] = !isOpen
+        },
+        clipboard(data) {
+            thorui.getClipboardData(data, res => {
+                if (res) {
+                    this.$util.msg('复制成功', 2000, true, 'success')
+                } else {
+                    this.$util.msg('复制失败', 2000, true, 'none')
+                }
+            })
+        }
+    }
+}
 </script>
 
 <style lang="scss">
-	.logistics-template{
-		width: 100%;
-		height: 100%;
-		background: #FFFFFF;
-		float: left;
-		.logistics-content{
-			width: 702rpx;
-			padding: 20rpx 24rpx;
-			height: auto;
-			.arrow-showMore {
-				position: absolute;
-				right: 24rpx;
-				z-index: 99;
-			}
-			.logistics-top{
-				width: 100%;
-				height: 40rpx;
-				line-height: 40rpx;
-				font-size: $font-size-28;
-				color: $text-color;
-				text-align: left;
-				padding-bottom: 24rpx;
-				border-bottom: 1px solid #F8F8F8;
-				.name{
-					float: left;
-					font-weight: bold;
-				}
-				.icon-web_xiangxiazhankai{
-					transform: rotate(0deg);
-					transform-origin: center center;
-					float: right;
-					font-size: $font-size-32;
-					color: #000000;
-					/* transition: transform 0.3s ease;*/
-					transition-property: transform;
-					transition-duration: 0.3s;
-					transition-timing-function: ease;
-				}
-				.icon-web_xiangxiazhankai-active{
-					transform: rotate(180deg);
-				}
-			}
-			.logistics-warp{
-				width: 100%;
-				overflow: hidden;
-				.table{
-					height: 76rpx;
-					line-height: 76rpx;
-					font-size: $font-size-26;
-					color: $text-color;
-					text-align: left;
-				}
-			}	
-			.logistics-main-top{
-				width: 100%;
-				height: auto;
-				float: left;
-				padding-top: 24rpx;
-				margin-bottom: 14rpx;
-				.main-top,.main-bot{
-					font-size: $font-size-28;
-					color: $text-color;
-					line-height: 40rpx;
-					margin: 4rpx 0;
-				}
-			}
-			.logistics-main-bot{
-				width: 100%;
-				height: auto;
-				font-size: $font-size-24;
-				color: $text-color;
-				line-height: 56rpx;
-				text-align: justify;
-			}
-			.logistics-animation {
-				/* transition: transform 0.3s ease;*/
-				transition-property: transform;
-				transition-duration: 0.3s;
-				transition-timing-function: ease;
-			}
-			.logistics-warp__wrapper{
-				/* #ifndef APP-NVUE */
-				display: flex;
-				/* #endif */
-				flex-direction: column;
-			}
-			.logistics-warp--hide {
-				// padding: 0 0;
-				// height: 0px;
-				// line-height: 0px;
-				display: none;
-			}	
-			.clipboard{
-				width: 84rpx;
-				height: 36rpx;
-				background: linear-gradient(34deg,rgba(255,41,41,1) 0%,rgba(255,109,27,1) 100%);
-				text-align: center;
-				font-size: $font-size-24;
-				color: #FFFFFF;
-				border-radius: 6rpx;
-				line-height: 36rpx;
-				display: inline-block;
-				margin-left: 42rpx;
-			}
-		}
-	}
+.logistics-template {
+    width: 100%;
+    height: 100%;
+    background: #ffffff;
+    float: left;
+    .logistics-content {
+        width: 702rpx;
+        padding: 20rpx 24rpx;
+        height: auto;
+        .arrow-showMore {
+            position: absolute;
+            right: 24rpx;
+            z-index: 99;
+        }
+        .logistics-top {
+            width: 100%;
+            height: 40rpx;
+            line-height: 40rpx;
+            font-size: $font-size-28;
+            color: $text-color;
+            text-align: left;
+            padding-bottom: 24rpx;
+            border-bottom: 1px solid #f8f8f8;
+            .name {
+                float: left;
+                font-weight: bold;
+            }
+            .icon-web_xiangxiazhankai {
+                transform: rotate(0deg);
+                transform-origin: center center;
+                float: right;
+                font-size: $font-size-32;
+                color: #000000;
+                /* transition: transform 0.3s ease;*/
+                transition-property: transform;
+                transition-duration: 0.3s;
+                transition-timing-function: ease;
+            }
+            .icon-web_xiangxiazhankai-active {
+                transform: rotate(180deg);
+            }
+        }
+        .logistics-warp {
+            width: 100%;
+            overflow: hidden;
+            .table {
+                height: 76rpx;
+                line-height: 76rpx;
+                font-size: $font-size-26;
+                color: $text-color;
+                text-align: left;
+            }
+        }
+        .logistics-main-top {
+            width: 100%;
+            height: auto;
+            float: left;
+            padding-top: 24rpx;
+            margin-bottom: 14rpx;
+            .main-top,
+            .main-bot {
+                font-size: $font-size-28;
+                color: $text-color;
+                line-height: 40rpx;
+                margin: 4rpx 0;
+            }
+        }
+        .logistics-main-bot {
+            width: 100%;
+            height: auto;
+            font-size: $font-size-24;
+            color: $text-color;
+            line-height: 56rpx;
+            text-align: justify;
+        }
+        .logistics-animation {
+            /* transition: transform 0.3s ease;*/
+            transition-property: transform;
+            transition-duration: 0.3s;
+            transition-timing-function: ease;
+        }
+        .logistics-warp__wrapper {
+            /* #ifndef APP-NVUE */
+            display: flex;
+            /* #endif */
+            flex-direction: column;
+        }
+        .logistics-warp--hide {
+            // padding: 0 0;
+            // height: 0px;
+            // line-height: 0px;
+            display: none;
+        }
+        .clipboard {
+            width: 84rpx;
+            height: 36rpx;
+            background: linear-gradient(34deg, rgba(255, 41, 41, 1) 0%, rgba(255, 109, 27, 1) 100%);
+            text-align: center;
+            font-size: $font-size-24;
+            color: #ffffff;
+            border-radius: 6rpx;
+            line-height: 36rpx;
+            display: inline-block;
+            margin-left: 42rpx;
+        }
+    }
+}
 </style>

+ 143 - 137
components/cm-module/orderDetails/orderButton.vue

@@ -1,145 +1,151 @@
 <template name="button">
-	<view class="button-template" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
-		<!-- 底部按钮  -->
-		<view class="button-content">
-			<view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay',order)">付款</view>
-			<view class="btn btn-pay" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm',order)">确认收货</view>
-			<view class="btn btn-pay" v-if="btnState.isAgain" @click.stop="btnConfirm('again',order)">再次购买</view>
-			<view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel',order)">取消订单</view>
-			<view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete',order)">删除订单</view>
-			<view class="btn btn-cancel" v-if="btnState.isQuery" @click.stop="btnConfirm('query',order)">查看物流</view>
-		</view>
-	</view>
+    <view class="button-template" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+        <!-- 底部按钮  -->
+        <view class="button-content">
+            <view class="btn btn-pay" v-if="btnState.isPay" @click.stop="btnConfirm('pay', order)">付款</view>
+            <view class="btn btn-pay" v-if="btnState.isConfirm" @click.stop="btnConfirm('confirm', order)"
+                >确认收货</view
+            >
+            <view class="btn btn-pay" v-if="btnState.isAgain" @click.stop="btnConfirm('again', order)">再次购买</view>
+            <view class="btn btn-cancel" v-if="btnState.isCancel" @click.stop="btnConfirm('cancel', order)"
+                >取消订单</view
+            >
+            <view class="btn btn-cancel" v-if="btnState.isDelete" @click.stop="btnConfirm('delete', order)"
+                >删除订单</view
+            >
+            <view class="btn btn-cancel" v-if="btnState.isQuery" @click.stop="btnConfirm('query', order)"
+                >查看物流</view
+            >
+        </view>
+    </view>
 </template>
 
 <script>
-	export default{
-		name:"button",
-		props:{
-			status:{
-				type:Number
-			},
-			order: {
-				type:Object
-			},
-			shareCode:{
-				type:String
-			},
-		},
-		watch:{
-			status:{
-				handler:function(val){
-					this.initData(val)
-				},
-				deep:true//对象内部的属性监听,也叫深度监听
-			}
-		},
-		data() {
-			return{
-				btnState:this.initStatus(),
-				isIphoneX:this.$store.state.isIphoneX,
-				mapStateArr:[
-					{label:'isQuery',val:[4,5,12,13,33,22,23,32,77],status: true},
-					{label:'isDelete',val:[6],status: true},
-					{label:'isCancel',val:[0,111],status: true},
-					{label:'isConfirm',val:[33],status: true},
-					{label:'isAgain',val:[33],status: true},
-					{label:'isPay',val:[11,12,13,21,22,23,111],status: true},
-				]
-			}
-		},
-		created(){
-			this.initData(this.status)
-		},
-		computed: {
-
-		},
-		methods:{
-			initData(resVal) {
-				/**
-				 * @分享按钮统一显示
-				 * @按钮根据状态显示
-				 * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
-				 * @(6)显示[删除订单],其他隐藏
-				 * @(0、111)显示[取消订单],其他隐藏
-				 * @(21,31)只显示分享
-				 * @(13,33)显示[确认收货]和[查看物流]
-				 */
-				this.btnState = this.initStatus()
-				this.mapStateArr.forEach(el => {
-					el.val.forEach(value => {
-						if(resVal === value){
-							this.btnState[el.label] = el.status
-						}
-					})
-				})
-			},
-			initStatus(){
-				let btnState= {
-						isQuery: false,
-						isDelete: false,
-						isCancel: false,
-						isConfirm: false,
-						isAgain: false,
-					}
-				return 	btnState
-			},
-			btnConfirm(type,order){
-				let data = {
-						type:type,
-						orderId:order.orderId,
-						order:order
-					}
-				this.$emit('buttonConfirm',data)
-			}
-		}
-	}
+export default {
+    name: 'button',
+    props: {
+        status: {
+            type: Number
+        },
+        order: {
+            type: Object
+        },
+        shareCode: {
+            type: String
+        }
+    },
+    watch: {
+        status: {
+            handler: function(val) {
+                this.initData(val)
+            },
+            deep: true //对象内部的属性监听,也叫深度监听
+        }
+    },
+    data() {
+        return {
+            btnState: this.initStatus(),
+            isIphoneX: this.$store.getters.isIphoneX,
+            mapStateArr: [
+                { label: 'isQuery', val: [4, 5, 12, 13, 33, 22, 23, 32, 77], status: true },
+                { label: 'isDelete', val: [6], status: true },
+                { label: 'isCancel', val: [0, 111], status: true },
+                { label: 'isConfirm', val: [33], status: true },
+                { label: 'isAgain', val: [33], status: true },
+                { label: 'isPay', val: [11, 12, 13, 21, 22, 23, 111], status: true }
+            ]
+        }
+    },
+    created() {
+        this.initData(this.status)
+    },
+    computed: {},
+    methods: {
+        initData(resVal) {
+            /**
+             * @分享按钮统一显示
+             * @按钮根据状态显示
+             * @(4、5、7、12、22、23、32)显示[查看物流]按钮,其他隐藏
+             * @(6)显示[删除订单],其他隐藏
+             * @(0、111)显示[取消订单],其他隐藏
+             * @(21,31)只显示分享
+             * @(13,33)显示[确认收货]和[查看物流]
+             */
+            this.btnState = this.initStatus()
+            this.mapStateArr.forEach(el => {
+                el.val.forEach(value => {
+                    if (resVal === value) {
+                        this.btnState[el.label] = el.status
+                    }
+                })
+            })
+        },
+        initStatus() {
+            let btnState = {
+                isQuery: false,
+                isDelete: false,
+                isCancel: false,
+                isConfirm: false,
+                isAgain: false
+            }
+            return btnState
+        },
+        btnConfirm(type, order) {
+            let data = {
+                type: type,
+                orderId: order.orderId,
+                order: order
+            }
+            this.$emit('buttonConfirm', data)
+        }
+    }
+}
 </script>
 
 <style lang="scss">
-	.button-template{
-		width: 100%;
-		height: auto;
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		background: #FFFFFF;
-		.button-content{
-			padding:0 24rpx;
-			height: auto;
-			float: right;
-			position: relative;
-			.share-code{
-				width: 200rpx;
-				height:  64rpx;
-				line-height: 64rpx;
-				color: #2A45FF;
-				text-align: left;
-				position: absolute;
-				font-size: $font-size-28;
-				font-weight: bold;
-				left: 24rpx;
-				top: 24rpx;
-			}
-			.btn{
-				width: 160rpx;
-				height:  64rpx;
-				margin:22rpx 22rpx 22rpx 0;
-				line-height: 64rpx;
-				font-size:$font-size-26;
-				color: #333333;
-				text-align: center;
-				float: right;
-				border: 2rpx solid #333333;
-				border-radius: 34rpx;
-				&.btn-pay{
-					border-color: $color-system;
-					color: $color-system;
-				}
-				&.btn-cancel{
-					text-align: center;
-				}
-			}
-		}
-	}
+.button-template {
+    width: 100%;
+    height: auto;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    background: #ffffff;
+    .button-content {
+        padding: 0 24rpx;
+        height: auto;
+        float: right;
+        position: relative;
+        .share-code {
+            width: 200rpx;
+            height: 64rpx;
+            line-height: 64rpx;
+            color: #2a45ff;
+            text-align: left;
+            position: absolute;
+            font-size: $font-size-28;
+            font-weight: bold;
+            left: 24rpx;
+            top: 24rpx;
+        }
+        .btn {
+            width: 160rpx;
+            height: 64rpx;
+            margin: 22rpx 22rpx 22rpx 0;
+            line-height: 64rpx;
+            font-size: $font-size-26;
+            color: #333333;
+            text-align: center;
+            float: right;
+            border: 2rpx solid #333333;
+            border-radius: 34rpx;
+            &.btn-pay {
+                border-color: $color-system;
+                color: $color-system;
+            }
+            &.btn-cancel {
+                text-align: center;
+            }
+        }
+    }
+}
 </style>

+ 237 - 225
components/cm-module/orderDetails/orderInformation.vue

@@ -1,234 +1,246 @@
 <template name="information">
-	<view class="information-template">
-		 <!-- 订单信息 -->
-		 <view class="information-content">
-			<view class="information-view title">
-				<view class="view-num">
-					<view class="bage-text">
-						订单编号:<label class="label">{{orderData.orderNo ? orderData.orderNo : '' }}</label>
-						<text class="clipboard" @click="clipboard(orderData.orderNo)">复制</text>
-					</view>
-				</view>
-			</view>
-			<view class="information-view title">
-				<view class="view-num">
-					订单总额:<label class="label">¥{{ orderData.payTotalFee ? (orderData.payTotalFee | NumFormat) : ''  }}</label>
-				</view>
-			</view>
-			<view class="information-view">
-				<view class="view-num time">
-					下单时间:<label class="label">{{ orderData.orderTime ? orderData.orderTime: ''  }}</label>
-				</view>
-			</view>
-			<view class="information-view bame">
-				<view class="view-num">
-					运费:<label class="label">包邮</label>
-				</view>
-			</view>
-			<view class="information-view">
-				<view class="view-num time" v-if="orderData.receiptAmount>0">
-					支付时间:<label class="label">{{ orderData.receiptDate ? orderData.receiptDate :  '' }}</label>
-				</view>
-			</view>
-			<view class="information-view bame">
-				<view class="view-man">
-					已退货/已取消:<label class="label">{{ orderData.returnedNum }}/{{ orderData.actualCancelNum }}</label>
-				</view>
-			</view>
-		 </view>
-	</view>
+    <view class="information-template">
+        <!-- 订单信息 -->
+        <view class="information-content">
+            <view class="information-view title">
+                <view class="view-num">
+                    <view class="bage-text">
+                        订单编号:<label class="label">{{ orderData.orderNo ? orderData.orderNo : '' }}</label>
+                        <text class="clipboard" @click="clipboard(orderData.orderNo)">复制</text>
+                    </view>
+                </view>
+            </view>
+            <view class="information-view title">
+                <view class="view-num">
+                    <text>订单总额:</text>
+                    <label class="label">
+                        ¥{{ orderData.payTotalFee ? orderData.payTotalFee : '' | NumFormat }}
+                    </label>
+                </view>
+            </view>
+            <view class="information-view title">
+                <view class="view-num">
+                    <text>优惠券:</text>
+                    <label class="label">
+                        ¥{{ orderData.couponAmount ? orderData.couponAmount : '' | NumFormat }}
+                    </label>
+                </view>
+            </view>
+            <view class="information-view">
+                <view class="view-num time">
+                    <text>下单时间:</text>
+                    <label class="label">{{ orderData.orderTime ? orderData.orderTime : '' }}</label>
+                </view>
+            </view>
+            <view class="information-view bame">
+                <view class="view-num"> <text> 运费:</text> <label class="label">包邮</label> </view>
+            </view>
+            <view class="information-view">
+                <view class="view-num time" v-if="orderData.receiptAmount > 0">
+                    <text>支付时间:</text>
+                    <label class="label">{{ orderData.receiptDate ? orderData.receiptDate : '' }}</label>
+                </view>
+            </view>
+            <view class="information-view bame">
+                <view class="view-man">
+                    <text>已退货/已取消:</text>
+                    <label class="label">{{ orderData.returnedNum }}/{{ orderData.actualCancelNum }}</label>
+                </view>
+            </view>
+        </view>
+    </view>
 </template>
 
 <script>
-	const thorui = require("@/components/clipboard/clipboard.thorui.js")
-	export default{
-		name:"information",
-		props:{
-			information:{
-				type:Object
-			}
-		},
-		data() {
-			return{
-				orderData:'',
-				freePostFlag:'',
-			}
-		},
-		created(){
-			this.initData(this.information)
-		},
-		filters:{
-			NumFormat(value) {//处理金额
-				return Number(value).toFixed(2);
-			},
-			TextFormat(status) {//处理金额
-				let HtmlText,
-					typeTextObject={
-						0:'待确认',
-						4:'交易完成',
-						5:'订单完成',
-						6:'已关闭',
-						7:'交易全退',
-						77:'交易全退',
-						11:'待付款待发货',
-						12:'待付款部分发货',
-						13:'待付款已发货',
-						21:'部分付款待发货',
-						22:'部分付款部分发货',
-						23:'部分付款已发货',
-						31:'已付款待发货',
-						32:'已付款部分发货',
-						33:'已付款已发货',
-						111:'待付款待发货',
-					};
-				
-				Object.keys(typeTextObject).forEach(key => {
-					if(key == status){
-						HtmlText = typeTextObject[key]
-					}
-				})
-				return HtmlText
-			},
-		},	
-		computed: {
+import thorui from '@/components/clipboard/clipboard.thorui.js'
+export default {
+    name: 'information',
+    props: {
+        information: {
+            type: Object
+        }
+    },
+    data() {
+        return {
+            orderData: '',
+            freePostFlag: ''
+        }
+    },
+    created() {
+        this.initData(this.information)
+    },
+    filters: {
+        NumFormat(value) {
+            //处理金额
+            return Number(value).toFixed(2)
+        },
+        TextFormat(status) {
+            //处理金额
+            let HtmlText,
+                typeTextObject = {
+                    0: '待确认',
+                    4: '交易完成',
+                    5: '订单完成',
+                    6: '已关闭',
+                    7: '交易全退',
+                    77: '交易全退',
+                    11: '待付款待发货',
+                    12: '待付款部分发货',
+                    13: '待付款已发货',
+                    21: '部分付款待发货',
+                    22: '部分付款部分发货',
+                    23: '部分付款已发货',
+                    31: '已付款待发货',
+                    32: '已付款部分发货',
+                    33: '已付款已发货',
+                    111: '待付款待发货'
+                }
 
-		},
-		watch:{
-			information:{
-				handler:function(val){
-					this.initData(val)
-				},
-				deep:true//对象内部的属性监听,也叫深度监听
-			}
-		},
-		methods:{
-			initData(res) {
-				this.orderData = res;
-			},
-			clipboard(data) {
-				thorui.getClipboardData(data, (res) => {
-					if (res) {
-						this.$util.msg("复制成功",2000,true,'success');
-					} else {
-						this.$util.msg("复制失败",2000,true,'none');
-					}
-				})
-			}
-		}
-	}
+            Object.keys(typeTextObject).forEach(key => {
+                if (key == status) {
+                    HtmlText = typeTextObject[key]
+                }
+            })
+            return HtmlText
+        }
+    },
+    computed: {},
+    watch: {
+        information: {
+            handler: function(val) {
+                this.initData(val)
+            },
+            deep: true //对象内部的属性监听,也叫深度监听
+        }
+    },
+    methods: {
+        initData(res) {
+            this.orderData = res
+        },
+        clipboard(data) {
+            thorui.getClipboardData(data, res => {
+                if (res) {
+                    this.$util.msg('复制成功', 2000, true, 'success')
+                } else {
+                    this.$util.msg('复制失败', 2000, true, 'none')
+                }
+            })
+        }
+    }
+}
 </script>
 
 <style lang="scss">
-	.information-template{
-		width: 100%;
-		height: auto;
-		background: #FFFFFF;
-		float: left;
-		margin-top: 24rpx;
-		.information-content{
-			width: 702rpx;
-			padding: 15rpx  24rpx 20rpx 24rpx;
-			.information-view{
-				height: 50rpx;
-				line-height: 50rpx;
-				font-size: $font-size-24;
-				margin: 4rpx 0;
-				// display: flex;
-				width: 58%;
-				display: inline-block;
-				&.same{
-					width: 100%;
-					text-align: right;
-				}
-				&.bame{
-					width: 42%;
-					text-align: right;
-				}
-				&.title{
-					width: 100%;
-				}
-				view{
-					// flex: 1;
-					color: $text-color;
-					color: #999999;
-					.label{
-						color: #666666;
-					}
-				}
-				.view-num.title{
-					height: 68rpx;
-					line-height: 68rpx;
-					position: relative;
-					.bage-icon{
-						width: 50rpx;
-						height: 50rpx;
-						display: block;
-						position: absolute;
-						right: 0;
-						top: 9rpx;
-					}
-					.bage-text{
-						display: inline-block;
-						font-size: $font-size-28;
-						line-height: 68rpx;
-						text-align: left;
-						color: $color-system;
-						// margin-left: 10rpx;
-					}
-				}
-				.view-num.ord{
-					color: $color-system;
-					text-align: left;
-					flex:3;
-					font-weight: bold;
-				}
-				.view-num.time{
-					color: #999999;
-					flex: 6;
-				}
-				// .bold{
-				// 	font-weight: bold;
-				// }
-				.red{
-					color: #FF2A2A;
-				}
-				.view-type{
-					float: right;
-					text-align: right;
-					color: #FF2A2A;
-					flex:4;
-				}
-				.clipboard{
-					width: 64rpx;
-					height: 32rpx;
-					background: #fff8fd;
-					text-align: center;
-					font-size: $font-size-22;
-					color: $color-system;
-					border-radius: 8rpx;
-					line-height: 32rpx;
-					display: inline-block;
-					margin-left: 15rpx;
-				}
-			}
-		}
-	}
-	.openinfo{
-		.btnInfo{
-			width: 140rpx;
-			height: 40rpx;
-			border: 2rpx solid #e1e1e1;
-			border-radius: 6rpx;
-			padding: 5rpx;
-			text-align: center;
-			color: #b2b2b2;
-			margin: 20rpx auto;
-			font-size:  $font-size-24;
-			.iconfont{
-				position: relative;
-				top: 5rpx;
-				right: -3rpx;
-			}
-		}
-	}
+.information-template {
+    width: 100%;
+    height: auto;
+    background: #ffffff;
+    float: left;
+    margin-top: 24rpx;
+    .information-content {
+        width: 702rpx;
+        padding: 15rpx 24rpx 20rpx 24rpx;
+        .information-view {
+            height: 50rpx;
+            line-height: 50rpx;
+            font-size: $font-size-24;
+            margin: 4rpx 0;
+            // display: flex;
+            width: 58%;
+            display: inline-block;
+            &.same {
+                width: 100%;
+                text-align: right;
+            }
+            &.bame {
+                width: 42%;
+                text-align: right;
+            }
+            &.title {
+                width: 100%;
+            }
+            view {
+                // flex: 1;
+                color: $text-color;
+                color: #999999;
+                .label {
+                    color: #666666;
+                }
+            }
+            .view-num.title {
+                height: 68rpx;
+                line-height: 68rpx;
+                position: relative;
+                .bage-icon {
+                    width: 50rpx;
+                    height: 50rpx;
+                    display: block;
+                    position: absolute;
+                    right: 0;
+                    top: 9rpx;
+                }
+                .bage-text {
+                    display: inline-block;
+                    font-size: $font-size-28;
+                    line-height: 68rpx;
+                    text-align: left;
+                    color: $color-system;
+                    // margin-left: 10rpx;
+                }
+            }
+            .view-num.ord {
+                color: $color-system;
+                text-align: left;
+                flex: 3;
+                font-weight: bold;
+            }
+            .view-num.time {
+                color: #999999;
+                flex: 6;
+            }
+            // .bold{
+            // 	font-weight: bold;
+            // }
+            .red {
+                color: #ff457b;
+            }
+            .view-type {
+                float: right;
+                text-align: right;
+                color: #ff457b;
+                flex: 4;
+            }
+            .clipboard {
+                width: 64rpx;
+                height: 32rpx;
+                background: #fff8fd;
+                text-align: center;
+                font-size: $font-size-22;
+                color: $color-system;
+                border-radius: 8rpx;
+                line-height: 32rpx;
+                display: inline-block;
+                margin-left: 15rpx;
+            }
+        }
+    }
+}
+.openinfo {
+    .btnInfo {
+        width: 140rpx;
+        height: 40rpx;
+        border: 2rpx solid #e1e1e1;
+        border-radius: 6rpx;
+        padding: 5rpx;
+        text-align: center;
+        color: #b2b2b2;
+        margin: 20rpx auto;
+        font-size: $font-size-24;
+        .iconfont {
+            position: relative;
+            top: 5rpx;
+            right: -3rpx;
+        }
+    }
+}
 </style>

+ 1 - 1
components/cm-module/orderDetails/paymentRecord.vue

@@ -102,7 +102,7 @@
 				.record-title-r{
 					float: right;
 					.red{
-						color: #FF2A2A;
+						color: #ff457b;
 						font-weight: bold;
 					}
 				}

+ 1 - 1
components/cm-module/orderDetails/refundRecord.vue

@@ -81,7 +81,7 @@
 				.record-title-r{
 					float: right;
 					.red{
-						color: #FF2A2A;
+						color: #ff457b;
 						font-weight: bold;
 					}
 				}

+ 199 - 228
components/cm-module/productDetails/cm-activipopu.vue

@@ -1,235 +1,206 @@
 <template name="cm-price">
-	<!--促销活动弹窗提示-->
-	<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-		<view class="tui-popup-box clearfix">
-			<template v-if="product.activeStatus == 1">
-				<view class="tui-scrollview-box">
-					<view class="ladder-main clearfix">
-						<view class="ladder-item">
-							<view class="ladder-item-td">购买数</view>
-							<view class="ladder-item-td">价格</view>
-						</view>
-						<view class="ladder-item" v-for="(ladd, index) in product.ladderList" :key="index">
-							<view class="ladder-item-td">{{ ladd.buyNum }}</view>
-							<view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
-						</view>
-					</view>
-				</view>	
-			</template>	
-			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom :isIphoneX ? '68rpx' : '0rpx' }">
-				<view class="tui-flex-1">
-					<view class="tui-button" @click="hidePopup()">了解</view>
-				</view>
-			</view>
-		</view>	
-	</tui-bottom-popup>
+    <!--促销活动弹窗提示-->
+    <tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+        <view class="tui-popup-box clearfix">
+            <template v-if="product.activeStatus == 1">
+                <view class="tui-scrollview-box">
+                    <view class="ladder-main clearfix">
+                        <view class="ladder-item">
+                            <view class="ladder-item-td">购买数</view> <view class="ladder-item-td">价格</view>
+                        </view>
+                        <view class="ladder-item" v-for="(ladd, index) in product.ladderList" :key="index">
+                            <view class="ladder-item-td">{{ ladd.buyNum }}</view>
+                            <view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
+                        </view>
+                    </view>
+                </view>
+            </template>
+            <view class="tui-right-flex tui-popup-btn">
+                <view class="tui-flex-1"> <view class="tui-button" @click="hidePopup()">了解</view> </view>
+            </view>
+        </view>
+    </tui-bottom-popup>
 </template>
 
 <script>
-	import { mapState,mapMutations } from 'vuex'
-	export default{
-		name:'cm-price',
-		props:{
-			product:{
-				type:Object,
-			},
-			popupShow:{
-				type:Boolean,
-				default:false
-			}
-		},
-		data() {
-			return{
-				isIphoneX:this.$store.state.isIphoneX,
-			}
-		},
-		filters: {
-			NumFormat:function(text) {//处理金额
-				return Number(text).toFixed(2);
-			},
-		},
-		created() {
-			console.log(this.product)
-		},
-		computed: {
-			...mapState(['hasLogin','isWxAuthorize'])
-		},
-		methods:{
-			hidePopup(){
-				this.$parent.popupShow = false
-			},
-			goGoodActiveFn(id){
-				this.$parent.popupShow = false
-				this.$api.navigateTo('/pages/goods/goods-active?id='+id)
-			}
-		},
-		
-	}
+import { mapGetters } from 'vuex'
+export default {
+    name: 'cm-price',
+    props: {
+        product: {
+            type: Object
+        },
+        popupShow: {
+            type: Boolean,
+            default: false
+        }
+    },
+    filters: {
+        NumFormat: function(text) {
+            //处理金额
+            return Number(text).toFixed(2)
+        }
+    },
+    created() {
+        console.log(this.product)
+    },
+    computed: {
+        ...mapGetters(['hasLogin', 'isWxAuthorize', 'isIphoneX'])
+    },
+    methods: {
+        hidePopup() {
+            this.$parent.popupShow = false
+        },
+        goGoodActiveFn(id) {
+            this.$parent.popupShow = false
+            this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
+        }
+    }
+}
 </script>
 
-<style lang="scss">	
-	.tui-flex-1 {
-		flex: 1;
-	}
-	.tui-popup-box {
-		position: relative;
-		box-sizing: border-box;
-		min-height: 220rpx;
-		padding:24rpx 24rpx 0 24rpx;
-		z-index: 9999;
-	}
-	.tui-scrollview-box{
-		width: 100%;
-		height: auto;
-		float: left;
-		box-sizing: border-box;
-		.ladder-main{
-			width: 100%;
-			border: 1px solid $color-system;
-			border-radius: 10rpx;
-			.ladder-item{
-				width: 100%;
-				height: 80rpx;
-				float: left;
-				border-bottom: 1px solid $color-system;
-				&:nth-child(1){
-					.ladder-item-td{
-						color: #333333;
-					}
-				}
-				&:last-child{
-					border-bottom: none;
-				}
-				.ladder-item-td{
-					width:50%;
-					text-align: center;
-					line-height: 80rpx;
-					font-size: $font-size-24;
-					color: $color-system;
-					box-sizing: border-box;
-					float: left;
-					&:nth-child(1){
-						border-right: 1px solid $color-system;
-					}
-				}
-			}
-		}
-		.box-title{
-			font-size: $font-size-26;
-			color: $text-color;
-			text-align: left;
-			line-height: 56rpx;
-			.txt{
-				color: $color-system;
-				margin: 0 8rpx;
-			}
-		}
-		.box-text{
-			font-size: $font-size-26;
-			color: $text-color;
-			text-align: left;
-			line-height: 56rpx;
-			.txt{
-				color: #ff2a2a;
-			}
-		}
-		.box-product{
-			width: 100%;
-			height: auto;
-			margin-top: 20rpx;
-			.title{
-				font-size: $font-size-24;
-				color: $text-color;
-				text-align: left;
-				line-height: 54rpx;
-			}
-			.box-product-main{
-				width: 100%;
-				height: 136rpx;
-				float: left;
-				margin: 10rpx 0;
-				.image{
-					width: 134rpx;
-					height: 134rpx;
-					border: 1px solid #EBEBEB;
-					float: left;
-					image{
-						width: 100%;
-						height: 100%;
-						display: block;
-					}
-				}
-				.info{
-					width: 540rpx;
-					height: 134rpx;
-					float: left;
-					margin-left: 16rpx;
-					position: relative;
-					.name{
-						width: 100%;
-						float: left;
-						line-height: 40rpx;
-						font-size: $font-size-28;
-						color: $text-color;
-						-o-text-overflow: ellipsis;
-						text-overflow: ellipsis;
-						display: -webkit-box;
-						word-break: break-all;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						overflow: hidden;
-					}
-					.num{
-						width: 100%;
-						height: 44rpx;
-						font-size: $font-size-24;
-						color: $text-color;
-						text-align: left;
-						line-height: 44rpx;
-						position: absolute;
-						bottom: 0;
-						left: 0;
-					}
-				}
-			}
-		}
-	}
-	
-	.tui-popup-btn {
-		width: 100%;
-		height: auto;
-		float: left;
-		margin-top: 24rpx;
-		.tui-button{
-			width: 100%;
-			height: 88rpx;
-			background: $btn-confirm;
-			line-height: 88rpx;
-			text-align: center;
-			color: #FFFFFF;
-			font-size: $font-size-28;
-			border-radius: 44rpx;
-		}
-	}
+<style lang="scss">
+.tui-flex-1 {
+    flex: 1;
+}
+.tui-popup-box {
+    position: relative;
+    box-sizing: border-box;
+    min-height: 220rpx;
+    padding: 24rpx 24rpx 0 24rpx;
+    z-index: 9999;
+}
+.tui-scrollview-box {
+    width: 100%;
+    height: auto;
+    float: left;
+    box-sizing: border-box;
+    .ladder-main {
+        width: 100%;
+        border: 1px solid $color-system;
+        border-radius: 10rpx;
+        .ladder-item {
+            width: 100%;
+            height: 80rpx;
+            float: left;
+            border-bottom: 1px solid $color-system;
+            &:nth-child(1) {
+                .ladder-item-td {
+                    color: #333333;
+                }
+            }
+            &:last-child {
+                border-bottom: none;
+            }
+            .ladder-item-td {
+                width: 50%;
+                text-align: center;
+                line-height: 80rpx;
+                font-size: $font-size-24;
+                color: $color-system;
+                box-sizing: border-box;
+                float: left;
+                &:nth-child(1) {
+                    border-right: 1px solid $color-system;
+                }
+            }
+        }
+    }
+    .box-title {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: $color-system;
+            margin: 0 8rpx;
+        }
+    }
+    .box-text {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: #ff457b;
+        }
+    }
+    .box-product {
+        width: 100%;
+        height: auto;
+        margin-top: 20rpx;
+        .title {
+            font-size: $font-size-24;
+            color: $text-color;
+            text-align: left;
+            line-height: 54rpx;
+        }
+        .box-product-main {
+            width: 100%;
+            height: 136rpx;
+            float: left;
+            margin: 10rpx 0;
+            .image {
+                width: 134rpx;
+                height: 134rpx;
+                border: 1px solid #ebebeb;
+                float: left;
+                image {
+                    width: 100%;
+                    height: 100%;
+                    display: block;
+                }
+            }
+            .info {
+                width: 540rpx;
+                height: 134rpx;
+                float: left;
+                margin-left: 16rpx;
+                position: relative;
+                .name {
+                    width: 100%;
+                    float: left;
+                    line-height: 40rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    -o-text-overflow: ellipsis;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+                }
+                .num {
+                    width: 100%;
+                    height: 44rpx;
+                    font-size: $font-size-24;
+                    color: $text-color;
+                    text-align: left;
+                    line-height: 44rpx;
+                    position: absolute;
+                    bottom: 0;
+                    left: 0;
+                }
+            }
+        }
+    }
+}
+
+.tui-popup-btn {
+    width: 100%;
+    height: auto;
+    float: left;
+    margin-top: 24rpx;
+    .tui-button {
+        width: 100%;
+        height: 88rpx;
+        background: $btn-confirm;
+        line-height: 88rpx;
+        text-align: center;
+        color: #ffffff;
+        font-size: $font-size-28;
+        border-radius: 44rpx;
+    }
+}
 </style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 316 - 338
components/cm-module/productDetails/cm-price-activity.vue

@@ -1,358 +1,336 @@
 <template name="cm-price">
-	<!-- 商品详情价格判断 -->
-	<view class="wrap-main">
-		<!-- 协销  -->
-		<view class="wrap-main-item">
-			<view class="p-price tui-skeleton-fillet">
-				<text class="txt sm">¥</text>
-				<text class="txt big">{{ showIndexOfMoney }} </text>
-				<text class="txt sm">{{ smallMoney }} </text>
-			</view>
-			<view class="floor-item-act" v-if="product.activeStatus == 1 && product.ladderList.length>0">
-				<text class="tag tag-01">促销</text>
-				<view class="tag tag-02" @click.stop="clickPopupShow()">活动价</view>
-			</view>
-		</view>
-		<!--促销活动弹窗提示-->
-		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-			<view class="tui-popup-box clearfix">
-				<template v-if="product.activeStatus == 1">
-					<view class="tui-scrollview-box">
-						<view class="ladder-main clearfix">
-							<view class="ladder-item">
-								<view class="ladder-item-td">购买数</view>
-								<view class="ladder-item-td">价格</view>
-							</view>
-							<view
-								class="ladder-item"
-								v-for="(ladd, index) in product.ladderList"
-								:key="index"
-							>
-								<view class="ladder-item-td">{{ ladd.buyNum }}</view>
-								<view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
-							</view>
-						</view>
-					</view>
-				</template>
-				<template v-else>
-					<view class="tui-scrollview-box">
-						<view class="box-text">
-							<text>促销时间:</text>
-							<text class="txt" v-if="product.promotion.status == 1">不限时</text>
-							<text class="txt" v-else
-								>{{ product.promotion.beginTime }}~{{ product.promotion.endTime }}</text
-							>
-						</view>
-						<view class="box-title" v-show="product.promotion.mode == 2">
-							<text>购买{{ product.promotion.name }}商品,满</text>
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.touchPrice | NumFormat
-								}}</text
-							>减
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.reducedPrice | NumFormat
-								}}</text
-							>
-						</view>
-						<view class="box-title" v-show="product.promotion.mode == 3">
-							<text>购买{{ product.promotion.name }}商品,满</text>
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.touchPrice | NumFormat
-								}}</text
-							>赠送商品
-						</view>
-						<view class="box-product" v-show="product.promotion.mode == 3">
-							<view
-								class="box-product-main"
-								v-for="(item, index) in product.promotion.productGifts"
-								:key="index"
-							>
-								<view class="image"
-									><image :src="item.mainImage" mode="widthFix"></image
-								></view>
-								<view class="info">
-									<view class="name">{{ item.productName }}</view>
-									<view class="num">X{{ item.productCount }}</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</template>
-				<view
-					class="tui-right-flex tui-popup-btn"
-					:style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }"
-				>
-					<view class="tui-flex-1">
-						<view
-							class="tui-button"
-							v-if="product.promotion.type == 2"
-							@click="goGoodActiveFn(product.promotion.id)"
-							>更多凑单商品</view
-						>
-						<view class="tui-button" v-else @click="hidePopup()">了解</view>
-					</view>
-				</view>
-			</view>
-		</tui-bottom-popup>
-		<!-- </template> -->
-	</view>
+    <!-- 商品详情价格判断 -->
+    <view class="wrap-main">
+        <!-- 协销  -->
+        <view class="wrap-main-item">
+            <view class="p-price tui-skeleton-fillet">
+                <text class="txt sm">¥</text> <text class="txt big">{{ showIndexOfMoney }} </text>
+                <text class="txt sm">{{ smallMoney }} </text>
+            </view>
+            <view class="floor-item-act" v-if="product.activeStatus == 1 && product.ladderList.length > 0">
+                <text class="tag tag-01">促销</text>
+                <view class="tag tag-02" @click.stop="clickPopupShow()">活动价</view>
+            </view>
+        </view>
+        <!--促销活动弹窗提示-->
+        <tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+            <view class="tui-popup-box clearfix">
+                <template v-if="product.activeStatus == 1">
+                    <view class="tui-scrollview-box">
+                        <view class="ladder-main clearfix">
+                            <view class="ladder-item">
+                                <view class="ladder-item-td">购买数</view> <view class="ladder-item-td">价格</view>
+                            </view>
+                            <view class="ladder-item" v-for="(ladd, index) in product.ladderList" :key="index">
+                                <view class="ladder-item-td">{{ ladd.buyNum }}</view>
+                                <view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
+                            </view>
+                        </view>
+                    </view>
+                </template>
+                <template v-else>
+                    <view class="tui-scrollview-box">
+                        <view class="box-text">
+                            <text>促销时间:</text>
+                            <text class="txt" v-if="product.promotion.status == 1">不限时</text>
+                            <text class="txt" v-else
+                                >{{ product.promotion.beginTime }}~{{ product.promotion.endTime }}</text
+                            >
+                        </view>
+                        <view class="box-title" v-show="product.promotion.mode == 2">
+                            <text>购买{{ product.promotion.name }}商品,满</text>
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.touchPrice | NumFormat
+                                }}</text
+                            >减
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.reducedPrice | NumFormat
+                                }}</text
+                            >
+                        </view>
+                        <view class="box-title" v-show="product.promotion.mode == 3">
+                            <text>购买{{ product.promotion.name }}商品,满</text>
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.touchPrice | NumFormat
+                                }}</text
+                            >赠送商品
+                        </view>
+                        <view class="box-product" v-show="product.promotion.mode == 3">
+                            <view
+                                class="box-product-main"
+                                v-for="(item, index) in product.promotion.productGifts"
+                                :key="index"
+                            >
+                                <view class="image"><image :src="item.mainImage" mode="widthFix"></image></view>
+                                <view class="info">
+                                    <view class="name">{{ item.productName }}</view>
+                                    <view class="num">X{{ item.productCount }}</view>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </template>
+                <view class="tui-right-flex tui-popup-btn">
+                    <view class="tui-flex-1">
+                        <view
+                            class="tui-button"
+                            v-if="product.promotion.type == 2"
+                            @click="goGoodActiveFn(product.promotion.id)"
+                            >更多凑单商品</view
+                        >
+                        <view class="tui-button" v-else @click="hidePopup()">了解</view>
+                    </view>
+                </view>
+            </view>
+        </tui-bottom-popup>
+        <!-- </template> -->
+    </view>
 </template>
 
 <script>
-import { mapState, mapMutations } from 'vuex'
-import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import { mapGetters } from 'vuex'
 export default {
-	name: 'cm-price',
-	components: {
-		uniGrader
-	},
-	props: {
-		product: {
-			type: Object
-		},
-		userIdentity: {
-			type: Number,
-			default: 2
-		},
-		ladderList: {
-			type: Array
-		},
-		promotion: {
-			type: Object
-		}
-	},
-	data() {
-		return {
-			productInfo:{},
-			popupShow: false,
-			promotionType: 0,
-			isIphoneX: this.$store.state.isIphoneX,
-			ableUserMoney:'',
-			showIndexOfMoney:'',
-			smallMoney:''
-		}
-	},
-	filters: {
-		NumFormat: function(text) {
-			//处理金额
-			return Number(text).toFixed(2)
-		}
-	},
-	created() {
-		
-		this.InfoData(this.product)			
-	},
-	computed: {
-		...mapState(['hasLogin', 'isWxAuthorize'])
-	},
-	methods: {
-		InfoData(data){
-			this.productInfo = data
-			if(this.productInfo.price == 0){
-				this.showIndexOfMoney ='0';
-				this.smallMoney=".00"
-			}else{
-				this.ableUserMoney = this.$api.FormatMoney(this.productInfo.price) ;
-				let i =  this.ableUserMoney.toString().lastIndexOf('.');
-				if(i==-1){
-					this.showIndexOfMoney=this.$api.FormatMoney(this.ableUserMoney)
-					this.smallMoney=".00"
-				}else{
-					this.smallMoney = this.ableUserMoney.toString().substring(i,i+3);
-					this.showIndexOfMoney= this.$api.FormatMoney(this.ableUserMoney.toString().substring(0,i))
-					if(this.smallMoney.length == 2) { //补0,实际上用不着
-						this.smallMoney = this.smallMoney + '0';
-					}
-				}
-			}
-			console.log('this.showIndexOfMoney',this.showIndexOfMoney)
-			console.log('this.smallMoney',this.smallMoney)
-		},
-		clickPopupShow(type) {
-			if(this.product.ladderList.length>0){
-				this.popupShow = true
-				this.promotionType = type
-			}
-		},
-		hidePopup() {
-			this.popupShow = false
-		},
-		promotionFormat(promo) {
-			//促销活动类型数据处理
-			if (promo != null) {
-				if (promo.type == 1 && promo.mode == 1) {
-					return true
-				} else {
-					return false
-				}
-			}
-			return false
-		},
-		goUpgradeApply() {
-			this.$api.navigateTo('/pages/login/apply')
-		},
-		loginClick() {
-			this.$api.navigateTo('/pages/login/login')
-		},
-		goGoodActiveFn(id) {
-			this.$parent.popupShow = false
-			this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
-		}
-	}
+    name: 'cm-price',
+    props: {
+        product: {
+            type: Object
+        },
+        userIdentity: {
+            type: Number,
+            default: 2
+        },
+        ladderList: {
+            type: Array
+        },
+        promotion: {
+            type: Object
+        }
+    },
+    data() {
+        return {
+            productInfo: {},
+            popupShow: false,
+            promotionType: 0,
+            ableUserMoney: '',
+            showIndexOfMoney: '',
+            smallMoney: ''
+        }
+    },
+    filters: {
+        NumFormat: function(text) {
+            //处理金额
+            return Number(text).toFixed(2)
+        }
+    },
+    created() {
+        this.InfoData(this.product)
+    },
+    computed: {
+        ...mapGetters(['hasLogin', 'isWxAuthorize', 'isIphoneX'])
+    },
+    methods: {
+        InfoData(data) {
+            this.productInfo = data
+            if (this.productInfo.price == 0) {
+                this.showIndexOfMoney = '0'
+                this.smallMoney = '.00'
+            } else {
+                this.ableUserMoney = this.$api.FormatMoney(this.productInfo.price)
+                let i = this.ableUserMoney.toString().lastIndexOf('.')
+                if (i == -1) {
+                    this.showIndexOfMoney = this.$api.FormatMoney(this.ableUserMoney)
+                    this.smallMoney = '.00'
+                } else {
+                    this.smallMoney = this.ableUserMoney.toString().substring(i, i + 3)
+                    this.showIndexOfMoney = this.$api.FormatMoney(this.ableUserMoney.toString().substring(0, i))
+                    if (this.smallMoney.length == 2) {
+                        //补0,实际上用不着
+                        this.smallMoney = this.smallMoney + '0'
+                    }
+                }
+            }
+            console.log('this.showIndexOfMoney', this.showIndexOfMoney)
+            console.log('this.smallMoney', this.smallMoney)
+        },
+        clickPopupShow(type) {
+            if (this.product.ladderList.length > 0) {
+                this.popupShow = true
+                this.promotionType = type
+            }
+        },
+        hidePopup() {
+            this.popupShow = false
+        },
+        promotionFormat(promo) {
+            //促销活动类型数据处理
+            if (promo != null) {
+                if (promo.type == 1 && promo.mode == 1) {
+                    return true
+                } else {
+                    return false
+                }
+            }
+            return false
+        },
+        goUpgradeApply() {
+            this.$api.navigateTo('/pages/login/apply')
+        },
+        loginClick() {
+            this.$api.navigateTo('/pages/login/login')
+        },
+        goGoodActiveFn(id) {
+            this.$parent.popupShow = false
+            this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
+        }
+    }
 }
 </script>
 
 <style lang="scss">
 .tui-flex-1 {
-	flex: 1;
+    flex: 1;
 }
 .tui-popup-box {
-	position: relative;
-	box-sizing: border-box;
-	min-height: 220rpx;
-	padding: 24rpx 24rpx 0 24rpx;
+    position: relative;
+    box-sizing: border-box;
+    min-height: 220rpx;
+    padding: 24rpx 24rpx 0 24rpx;
 }
 .tui-scrollview-box {
-	width: 100%;
-	height: auto;
-	float: left;
-	box-sizing: border-box;
-	.ladder-main {
-		width: 100%;
-		border: 1px solid rgba(225, 86, 22, 0.3);
-		border-radius: 10rpx;
-		.ladder-item {
-			width: 100%;
-			height: 80rpx;
-			float: left;
-			border-bottom: 1px solid rgba(225, 86, 22, 0.3);
-			&:nth-child(1) {
-				.ladder-item-td {
-					color: #333333;
-				}
-			}
-			&:last-child {
-				border-bottom: none;
-			}
-			.ladder-item-td {
-				width: 50%;
-				text-align: center;
-				line-height: 80rpx;
-				font-size: $font-size-24;
-				color: $color-system;
-				box-sizing: border-box;
-				float: left;
-				&:nth-child(1) {
-					border-right: 1px solid rgba(225, 86, 22, 0.3);
-				}
-			}
-		}
-	}
-	.box-title {
-		font-size: $font-size-26;
-		color: $text-color;
-		text-align: left;
-		line-height: 56rpx;
-		.txt {
-			color: $color-system;
-			margin: 0 8rpx;
-		}
-	}
-	.box-text{
-		font-size: $font-size-26;
-		color: $text-color;
-		text-align: left;
-		line-height: 56rpx;
-		.txt{
-			color: #ff2a2a;
-		}
-	}
-	.box-product {
-		width: 100%;
-		height: auto;
-		margin-top: 20rpx;
-		.title {
-			font-size: $font-size-24;
-			color: $text-color;
-			text-align: left;
-			line-height: 54rpx;
-		}
-		.box-product-main {
-			width: 100%;
-			height: 136rpx;
-			float: left;
-			margin: 10rpx 0;
-			.image {
-				width: 134rpx;
-				height: 134rpx;
-				border: 1px solid #ebebeb;
-				float: left;
-				image {
-					width: 100%;
-					height: 100%;
-					display: block;
-				}
-			}
-			.info {
-				width: 540rpx;
-				height: 134rpx;
-				float: left;
-				margin-left: 16rpx;
-				position: relative;
-				.name {
-					width: 100%;
-					float: left;
-					line-height: 40rpx;
-					font-size: $font-size-28;
-					color: $text-color;
-					-o-text-overflow: ellipsis;
-					text-overflow: ellipsis;
-					display: -webkit-box;
-					word-break: break-all;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					overflow: hidden;
-				}
-				.num {
-					width: 100%;
-					height: 44rpx;
-					font-size: $font-size-24;
-					color: $text-color;
-					text-align: left;
-					line-height: 44rpx;
-					position: absolute;
-					bottom: 0;
-					left: 0;
-				}
-			}
-		}
-	}
+    width: 100%;
+    height: auto;
+    float: left;
+    box-sizing: border-box;
+    .ladder-main {
+        width: 100%;
+        border: 1px solid rgba(225, 86, 22, 0.3);
+        border-radius: 10rpx;
+        .ladder-item {
+            width: 100%;
+            height: 80rpx;
+            float: left;
+            border-bottom: 1px solid rgba(225, 86, 22, 0.3);
+            &:nth-child(1) {
+                .ladder-item-td {
+                    color: #333333;
+                }
+            }
+            &:last-child {
+                border-bottom: none;
+            }
+            .ladder-item-td {
+                width: 50%;
+                text-align: center;
+                line-height: 80rpx;
+                font-size: $font-size-24;
+                color: $color-system;
+                box-sizing: border-box;
+                float: left;
+                &:nth-child(1) {
+                    border-right: 1px solid rgba(225, 86, 22, 0.3);
+                }
+            }
+        }
+    }
+    .box-title {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: $color-system;
+            margin: 0 8rpx;
+        }
+    }
+    .box-text {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: #ff457b;
+        }
+    }
+    .box-product {
+        width: 100%;
+        height: auto;
+        margin-top: 20rpx;
+        .title {
+            font-size: $font-size-24;
+            color: $text-color;
+            text-align: left;
+            line-height: 54rpx;
+        }
+        .box-product-main {
+            width: 100%;
+            height: 136rpx;
+            float: left;
+            margin: 10rpx 0;
+            .image {
+                width: 134rpx;
+                height: 134rpx;
+                border: 1px solid #ebebeb;
+                float: left;
+                image {
+                    width: 100%;
+                    height: 100%;
+                    display: block;
+                }
+            }
+            .info {
+                width: 540rpx;
+                height: 134rpx;
+                float: left;
+                margin-left: 16rpx;
+                position: relative;
+                .name {
+                    width: 100%;
+                    float: left;
+                    line-height: 40rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    -o-text-overflow: ellipsis;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+                }
+                .num {
+                    width: 100%;
+                    height: 44rpx;
+                    font-size: $font-size-24;
+                    color: $text-color;
+                    text-align: left;
+                    line-height: 44rpx;
+                    position: absolute;
+                    bottom: 0;
+                    left: 0;
+                }
+            }
+        }
+    }
 }
 
 .tui-popup-btn {
-	width: 100%;
-	height: auto;
-	float: left;
-	margin-top: 24rpx;
-	.tui-button {
-		width: 100%;
-		height: 88rpx;
-		background: $btn-confirm;
-		line-height: 88rpx;
-		text-align: center;
-		color: #ffffff;
-		font-size: $font-size-28;
-		border-radius: 44rpx;
-	}
+    width: 100%;
+    height: auto;
+    float: left;
+    margin-top: 24rpx;
+    .tui-button {
+        width: 100%;
+        height: 88rpx;
+        background: $btn-confirm;
+        line-height: 88rpx;
+        text-align: center;
+        color: #ffffff;
+        font-size: $font-size-28;
+        border-radius: 44rpx;
+    }
 }
 
 // .wrap-main{

+ 315 - 337
components/cm-module/productDetails/cm-price.vue

@@ -1,357 +1,335 @@
 <template name="cm-price">
-	<!-- 商品详情价格判断 -->
-	<view class="wrap-main">
-		<!-- 协销  -->
-		<view class="wrap-main-item">
-			<view class="p-price tui-skeleton-fillet">
-				<text class="txt sm">¥</text>
-				<text class="txt big">{{ showIndexOfMoney }} </text>
-				<text class="txt sm">{{ smallMoney }} </text>
-			</view>
-			<view class="floor-item-act" v-if="product.activeStatus == 1">
-				<view class="tag tag-02" @click.stop="clickPopupShow()">活动价</view>
-			</view>
-		</view>
-		<!--促销活动弹窗提示-->
-		<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-			<view class="tui-popup-box clearfix">
-				<template v-if="product.activeStatus == 1">
-					<view class="tui-scrollview-box">
-						<view class="ladder-main clearfix">
-							<view class="ladder-item">
-								<view class="ladder-item-td">购买数</view>
-								<view class="ladder-item-td">价格</view>
-							</view>
-							<view
-								class="ladder-item"
-								v-for="(ladd, index) in product.ladderList"
-								:key="index"
-							>
-								<view class="ladder-item-td">{{ ladd.buyNum }}</view>
-								<view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
-							</view>
-						</view>
-					</view>
-				</template>
-				<template v-else>
-					<view class="tui-scrollview-box">
-						<view class="box-text">
-							<text>促销时间:</text>
-							<text class="txt" v-if="product.promotion.status == 1">不限时</text>
-							<text class="txt" v-else
-								>{{ product.promotion.beginTime }}~{{ product.promotion.endTime }}</text
-							>
-						</view>
-						<view class="box-title" v-show="product.promotion.mode == 2">
-							<text>购买{{ product.promotion.name }}商品,满</text>
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.touchPrice | NumFormat
-								}}</text
-							>减
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.reducedPrice | NumFormat
-								}}</text
-							>
-						</view>
-						<view class="box-title" v-show="product.promotion.mode == 3">
-							<text>购买{{ product.promotion.name }}商品,满</text>
-							<text class="txt"
-								>¥{{
-									product.promotion == null
-										? '0.00'
-										: product.promotion.touchPrice | NumFormat
-								}}</text
-							>赠送商品
-						</view>
-						<view class="box-product" v-show="product.promotion.mode == 3">
-							<view
-								class="box-product-main"
-								v-for="(item, index) in product.promotion.productGifts"
-								:key="index"
-							>
-								<view class="image"
-									><image :src="item.mainImage" mode="widthFix"></image
-								></view>
-								<view class="info">
-									<view class="name">{{ item.productName }}</view>
-									<view class="num">X{{ item.productCount }}</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</template>
-				<view
-					class="tui-right-flex tui-popup-btn"
-					:style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }"
-				>
-					<view class="tui-flex-1">
-						<view
-							class="tui-button"
-							v-if="product.promotion.type == 2"
-							@click="goGoodActiveFn(product.promotion.id)"
-							>更多凑单商品</view
-						>
-						<view class="tui-button" v-else @click="hidePopup()">了解</view>
-					</view>
-				</view>
-			</view>
-		</tui-bottom-popup>
-		<!-- </template> -->
-	</view>
+    <!-- 商品详情价格判断 -->
+    <view class="wrap-main">
+        <!-- 协销  -->
+        <view class="wrap-main-item">
+            <view class="p-price tui-skeleton-fillet">
+                <text class="txt sm">¥</text> <text class="txt big">{{ showIndexOfMoney }} </text>
+                <text class="txt sm">{{ smallMoney }} </text>
+            </view>
+            <view class="floor-item-act" v-if="product.activeStatus == 1">
+                <view class="tag tag-02" @click.stop="clickPopupShow()">活动价</view>
+            </view>
+        </view>
+        <!--促销活动弹窗提示-->
+        <tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
+            <view class="tui-popup-box clearfix">
+                <template v-if="product.activeStatus == 1">
+                    <view class="tui-scrollview-box">
+                        <view class="ladder-main clearfix">
+                            <view class="ladder-item">
+                                <view class="ladder-item-td">购买数</view> <view class="ladder-item-td">价格</view>
+                            </view>
+                            <view class="ladder-item" v-for="(ladd, index) in product.ladderList" :key="index">
+                                <view class="ladder-item-td">{{ ladd.buyNum }}</view>
+                                <view class="ladder-item-td">{{ ladd.buyPrice | NumFormat }}</view>
+                            </view>
+                        </view>
+                    </view>
+                </template>
+                <template v-else>
+                    <view class="tui-scrollview-box">
+                        <view class="box-text">
+                            <text>促销时间:</text>
+                            <text class="txt" v-if="product.promotion.status == 1">不限时</text>
+                            <text class="txt" v-else
+                                >{{ product.promotion.beginTime }}~{{ product.promotion.endTime }}</text
+                            >
+                        </view>
+                        <view class="box-title" v-show="product.promotion.mode == 2">
+                            <text>购买{{ product.promotion.name }}商品,满</text>
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.touchPrice | NumFormat
+                                }}</text
+                            >减
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.reducedPrice | NumFormat
+                                }}</text
+                            >
+                        </view>
+                        <view class="box-title" v-show="product.promotion.mode == 3">
+                            <text>购买{{ product.promotion.name }}商品,满</text>
+                            <text class="txt"
+                                >¥{{
+                                    product.promotion == null ? '0.00' : product.promotion.touchPrice | NumFormat
+                                }}</text
+                            >赠送商品
+                        </view>
+                        <view class="box-product" v-show="product.promotion.mode == 3">
+                            <view
+                                class="box-product-main"
+                                v-for="(item, index) in product.promotion.productGifts"
+                                :key="index"
+                            >
+                                <view class="image"><image :src="item.mainImage" mode="widthFix"></image></view>
+                                <view class="info">
+                                    <view class="name">{{ item.productName }}</view>
+                                    <view class="num">X{{ item.productCount }}</view>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </template>
+                <view class="tui-right-flex tui-popup-btn">
+                    <view class="tui-flex-1">
+                        <view
+                            class="tui-button"
+                            v-if="product.promotion.type == 2"
+                            @click="goGoodActiveFn(product.promotion.id)"
+                            >更多凑单商品</view
+                        >
+                        <view class="tui-button" v-else @click="hidePopup()">了解</view>
+                    </view>
+                </view>
+            </view>
+        </tui-bottom-popup>
+        <!-- </template> -->
+    </view>
 </template>
 
 <script>
-import { mapState, mapMutations } from 'vuex'
-import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import { mapGetters } from 'vuex'
 export default {
-	name: 'cm-price',
-	components: {
-		uniGrader
-	},
-	props: {
-		product: {
-			type: Object
-		},
-		userIdentity: {
-			type: Number,
-			default: 2
-		},
-		ladderList: {
-			type: Array
-		},
-		promotion: {
-			type: Object
-		}
-	},
-	data() {
-		return {
-			productInfo:{},
-			popupShow: false,
-			promotionType: 0,
-			isIphoneX: this.$store.state.isIphoneX,
-			ableUserMoney:'',
-			showIndexOfMoney:'',
-			smallMoney:''
-		}
-	},
-	filters: {
-		NumFormat: function(text) {
-			//处理金额
-			return Number(text).toFixed(2)
-		}
-	},
-	created() {
-		
-		this.InfoData(this.product)			
-	},
-	computed: {
-		...mapState(['hasLogin', 'isWxAuthorize'])
-	},
-	methods: {
-		InfoData(data){
-			this.productInfo = data
-			if(this.productInfo.price == 0){
-				this.showIndexOfMoney ='0';
-				this.smallMoney=".00"
-			}else{
-				this.ableUserMoney = this.$api.FormatMoney(this.productInfo.price) ;
-				let i =  this.ableUserMoney.toString().lastIndexOf('.');
-				if(i==-1){
-					this.showIndexOfMoney=this.$api.FormatMoney(this.ableUserMoney)
-					this.smallMoney=".00"
-				}else{
-					this.smallMoney = this.ableUserMoney.toString().substring(i);
-					this.showIndexOfMoney= this.$api.FormatMoney(this.ableUserMoney.toString().substring(0,i))
-					if(this.smallMoney.length == 2) { //补0,实际上用不着
-						this.smallMoney = this.smallMoney + '0';
-					}
-				}
-			}
-			console.log('this.showIndexOfMoney',this.showIndexOfMoney)
-			console.log('this.smallMoney',this.smallMoney)
-		},
-		clickPopupShow(type) {
-			if(this.product.ladderList.length>0){
-				this.popupShow = true
-				this.promotionType = type
-			}
-		},
-		hidePopup() {
-			this.popupShow = false
-		},
-		promotionFormat(promo) {
-			//促销活动类型数据处理
-			if (promo != null) {
-				if (promo.type == 1 && promo.mode == 1) {
-					return true
-				} else {
-					return false
-				}
-			}
-			return false
-		},
-		goUpgradeApply() {
-			this.$api.navigateTo('/pages/login/apply')
-		},
-		loginClick() {
-			this.$api.navigateTo('/pages/login/login')
-		},
-		goGoodActiveFn(id) {
-			this.$parent.popupShow = false
-			this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
-		}
-	}
+    name: 'cm-price',
+    props: {
+        product: {
+            type: Object
+        },
+        userIdentity: {
+            type: Number,
+            default: 2
+        },
+        ladderList: {
+            type: Array
+        },
+        promotion: {
+            type: Object
+        }
+    },
+    data() {
+        return {
+            productInfo: {},
+            popupShow: false,
+            promotionType: 0,
+            ableUserMoney: '',
+            showIndexOfMoney: '',
+            smallMoney: ''
+        }
+    },
+    filters: {
+        NumFormat: function(text) {
+            //处理金额
+            return Number(text).toFixed(2)
+        }
+    },
+    created() {
+        this.InfoData(this.product)
+    },
+    computed: {
+        ...mapGetters(['hasLogin', 'isWxAuthorize', 'isIphoneX'])
+    },
+    methods: {
+        InfoData(data) {
+            this.productInfo = data
+            if (this.productInfo.price == 0) {
+                this.showIndexOfMoney = '0'
+                this.smallMoney = '.00'
+            } else {
+                this.ableUserMoney = this.$api.FormatMoney(this.productInfo.price)
+                let i = this.ableUserMoney.toString().lastIndexOf('.')
+                if (i == -1) {
+                    this.showIndexOfMoney = this.$api.FormatMoney(this.ableUserMoney)
+                    this.smallMoney = '.00'
+                } else {
+                    this.smallMoney = this.ableUserMoney.toString().substring(i)
+                    this.showIndexOfMoney = this.$api.FormatMoney(this.ableUserMoney.toString().substring(0, i))
+                    if (this.smallMoney.length == 2) {
+                        //补0,实际上用不着
+                        this.smallMoney = this.smallMoney + '0'
+                    }
+                }
+            }
+            console.log('this.showIndexOfMoney', this.showIndexOfMoney)
+            console.log('this.smallMoney', this.smallMoney)
+        },
+        clickPopupShow(type) {
+            if (this.product.ladderList.length > 0) {
+                this.popupShow = true
+                this.promotionType = type
+            }
+        },
+        hidePopup() {
+            this.popupShow = false
+        },
+        promotionFormat(promo) {
+            //促销活动类型数据处理
+            if (promo != null) {
+                if (promo.type == 1 && promo.mode == 1) {
+                    return true
+                } else {
+                    return false
+                }
+            }
+            return false
+        },
+        goUpgradeApply() {
+            this.$api.navigateTo('/pages/login/apply')
+        },
+        loginClick() {
+            this.$api.navigateTo('/pages/login/login')
+        },
+        goGoodActiveFn(id) {
+            this.$parent.popupShow = false
+            this.$api.navigateTo('/pages/goods/goods-active?id=' + id)
+        }
+    }
 }
 </script>
 
 <style lang="scss">
 .tui-flex-1 {
-	flex: 1;
+    flex: 1;
 }
 .tui-popup-box {
-	position: relative;
-	box-sizing: border-box;
-	min-height: 220rpx;
-	padding: 24rpx 24rpx 0 24rpx;
+    position: relative;
+    box-sizing: border-box;
+    min-height: 220rpx;
+    padding: 24rpx 24rpx 0 24rpx;
 }
 .tui-scrollview-box {
-	width: 100%;
-	height: auto;
-	float: left;
-	box-sizing: border-box;
-	.ladder-main {
-		width: 100%;
-		border: 1px solid rgba(225, 86, 22, 0.3);
-		border-radius: 10rpx;
-		.ladder-item {
-			width: 100%;
-			height: 80rpx;
-			float: left;
-			border-bottom: 1px solid rgba(225, 86, 22, 0.3);
-			&:nth-child(1) {
-				.ladder-item-td {
-					color: #333333;
-				}
-			}
-			&:last-child {
-				border-bottom: none;
-			}
-			.ladder-item-td {
-				width: 50%;
-				text-align: center;
-				line-height: 80rpx;
-				font-size: $font-size-24;
-				color: $color-system;
-				box-sizing: border-box;
-				float: left;
-				&:nth-child(1) {
-					border-right: 1px solid rgba(225, 86, 22, 0.3);
-				}
-			}
-		}
-	}
-	.box-title {
-		font-size: $font-size-26;
-		color: $text-color;
-		text-align: left;
-		line-height: 56rpx;
-		.txt {
-			color: $color-system;
-			margin: 0 8rpx;
-		}
-	}
-	.box-text{
-		font-size: $font-size-26;
-		color: $text-color;
-		text-align: left;
-		line-height: 56rpx;
-		.txt{
-			color: #ff2a2a;
-		}
-	}
-	.box-product {
-		width: 100%;
-		height: auto;
-		margin-top: 20rpx;
-		.title {
-			font-size: $font-size-24;
-			color: $text-color;
-			text-align: left;
-			line-height: 54rpx;
-		}
-		.box-product-main {
-			width: 100%;
-			height: 136rpx;
-			float: left;
-			margin: 10rpx 0;
-			.image {
-				width: 134rpx;
-				height: 134rpx;
-				border: 1px solid #ebebeb;
-				float: left;
-				image {
-					width: 100%;
-					height: 100%;
-					display: block;
-				}
-			}
-			.info {
-				width: 540rpx;
-				height: 134rpx;
-				float: left;
-				margin-left: 16rpx;
-				position: relative;
-				.name {
-					width: 100%;
-					float: left;
-					line-height: 40rpx;
-					font-size: $font-size-28;
-					color: $text-color;
-					-o-text-overflow: ellipsis;
-					text-overflow: ellipsis;
-					display: -webkit-box;
-					word-break: break-all;
-					-webkit-box-orient: vertical;
-					-webkit-line-clamp: 2;
-					overflow: hidden;
-				}
-				.num {
-					width: 100%;
-					height: 44rpx;
-					font-size: $font-size-24;
-					color: $text-color;
-					text-align: left;
-					line-height: 44rpx;
-					position: absolute;
-					bottom: 0;
-					left: 0;
-				}
-			}
-		}
-	}
+    width: 100%;
+    height: auto;
+    float: left;
+    box-sizing: border-box;
+    .ladder-main {
+        width: 100%;
+        border: 1px solid rgba(225, 86, 22, 0.3);
+        border-radius: 10rpx;
+        .ladder-item {
+            width: 100%;
+            height: 80rpx;
+            float: left;
+            border-bottom: 1px solid rgba(225, 86, 22, 0.3);
+            &:nth-child(1) {
+                .ladder-item-td {
+                    color: #333333;
+                }
+            }
+            &:last-child {
+                border-bottom: none;
+            }
+            .ladder-item-td {
+                width: 50%;
+                text-align: center;
+                line-height: 80rpx;
+                font-size: $font-size-24;
+                color: $color-system;
+                box-sizing: border-box;
+                float: left;
+                &:nth-child(1) {
+                    border-right: 1px solid rgba(225, 86, 22, 0.3);
+                }
+            }
+        }
+    }
+    .box-title {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: $color-system;
+            margin: 0 8rpx;
+        }
+    }
+    .box-text {
+        font-size: $font-size-26;
+        color: $text-color;
+        text-align: left;
+        line-height: 56rpx;
+        .txt {
+            color: #ff457b;
+        }
+    }
+    .box-product {
+        width: 100%;
+        height: auto;
+        margin-top: 20rpx;
+        .title {
+            font-size: $font-size-24;
+            color: $text-color;
+            text-align: left;
+            line-height: 54rpx;
+        }
+        .box-product-main {
+            width: 100%;
+            height: 136rpx;
+            float: left;
+            margin: 10rpx 0;
+            .image {
+                width: 134rpx;
+                height: 134rpx;
+                border: 1px solid #ebebeb;
+                float: left;
+                image {
+                    width: 100%;
+                    height: 100%;
+                    display: block;
+                }
+            }
+            .info {
+                width: 540rpx;
+                height: 134rpx;
+                float: left;
+                margin-left: 16rpx;
+                position: relative;
+                .name {
+                    width: 100%;
+                    float: left;
+                    line-height: 40rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    -o-text-overflow: ellipsis;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+                }
+                .num {
+                    width: 100%;
+                    height: 44rpx;
+                    font-size: $font-size-24;
+                    color: $text-color;
+                    text-align: left;
+                    line-height: 44rpx;
+                    position: absolute;
+                    bottom: 0;
+                    left: 0;
+                }
+            }
+        }
+    }
 }
 
 .tui-popup-btn {
-	width: 100%;
-	height: auto;
-	float: left;
-	margin-top: 24rpx;
-	.tui-button {
-		width: 100%;
-		height: 88rpx;
-		background: $btn-confirm;
-		line-height: 88rpx;
-		text-align: center;
-		color: #ffffff;
-		font-size: $font-size-28;
-		border-radius: 44rpx;
-	}
+    width: 100%;
+    height: auto;
+    float: left;
+    margin-top: 24rpx;
+    .tui-button {
+        width: 100%;
+        height: 88rpx;
+        background: $btn-confirm;
+        line-height: 88rpx;
+        text-align: center;
+        color: #ffffff;
+        font-size: $font-size-28;
+        border-radius: 44rpx;
+    }
 }
 
 // .wrap-main{

+ 1 - 9
components/cm-module/productDetails/evaluate.vue

@@ -29,10 +29,7 @@
 </template>
 
 <script>
-	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
+	import authorize from '@/common/authorize.js'
 	
 	export default{
 		name:'evaluate',
@@ -43,11 +40,6 @@
 				default: 0
 			}
 		},
-		components:{
-			tuiLoadmore,
-			tuiNomore,
-			uniStars
-		},
 		data() {
 			return{
 				evaluateList:[],

+ 1 - 7
components/cm-module/productDetails/instrument-recommend.vue

@@ -12,9 +12,7 @@
 </template>
 
 <script>
-	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
+	import authorize from '@/common/authorize.js'
 	
 	export default{
 		name:'recommend',
@@ -24,10 +22,6 @@
 				type: Array
 			}
 		},
-		components:{
-			tuiLoadmore,
-			tuiNomore,
-		},
 		data() {
 			return{
 				

+ 1 - 7
components/cm-module/productDetails/recommend.vue

@@ -13,9 +13,7 @@
 
 <script>
 	import { mapState,mapMutations} from 'vuex';
-	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
+	import authorize from '@/common/authorize.js'
 	
 	export default{
 		name:'recommend',
@@ -29,10 +27,6 @@
 				default: '0'
 			}
 		},
-		components:{
-			tuiLoadmore,
-			tuiNomore,
-		},
 		data() {
 			return{
 				current:0,

+ 2 - 2
components/cm-module/scrollTop/scrollTop.vue

@@ -11,7 +11,7 @@
 
 <script>
 	export default{
-		name:'scrollTop',
+		name:'ScrollTop',
 		props:{
 			bottom:{
 				type:Number,
@@ -41,7 +41,7 @@
 				uni.pageScrollTo({
 				    scrollTop: 0,
 				    duration: 600
-				});
+				})
 			},
 			handleContact(e){
 				console.log(e.detail.path)

+ 207 - 0
components/cm-module/share/share.vue

@@ -0,0 +1,207 @@
+<template>
+    <view
+        v-if="show"
+        class="mask"
+        @click="toggleMask"
+        @touchmove.stop.prevent="stopPrevent"
+        :style="{ backgroundColor: backgroundColor }"
+    >
+        <view
+            class="mask-content"
+            @click.stop.prevent="stopPrevent"
+            :style="[
+                {
+                    height: config.height,
+                    transform: transform
+                }
+            ]"
+        >
+            <scroll-view class="view-content" scroll-y>
+                <view class="share-header"> 分享到 </view>
+                <view class="share-list">
+                    <view
+                        v-for="(item, index) in shareList"
+                        :key="index"
+                        class="share-item"
+                        @click="shareToFriend(item.text)"
+                    >
+                        <image :src="item.icon" mode=""></image> <text>{{ item.text }}</text>
+                    </view>
+                </view>
+            </scroll-view>
+            <view class="bottom b-t" @click="toggleMask">取消</view>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            transform: 'translateY(50vh)',
+            timer: 0,
+            backgroundColor: 'rgba(0,0,0,0)',
+            show: false,
+            config: {}
+        }
+    },
+    props: {
+        contentHeight: {
+            type: Number,
+            default: 0
+        },
+        //是否是tabbar页面
+        hasTabbar: {
+            type: Boolean,
+            default: false
+        },
+        shareList: {
+            type: Array,
+            default: function() {
+                return []
+            }
+        }
+    },
+    created() {
+        const height = uni.upx2px(this.contentHeight) + 'px'
+        this.config = {
+            height: height,
+            transform: `translateY(${height})`,
+            backgroundColor: 'rgba(0,0,0,.4)'
+        }
+        this.transform = this.config.transform
+    },
+    methods: {
+        toggleMask() {
+            //防止高频点击
+            if (this.timer == 1) {
+                return
+            }
+            this.timer = 1
+            setTimeout(() => {
+                this.timer = 0
+            }, 500)
+
+            if (this.show) {
+                this.transform = this.config.transform
+                this.backgroundColor = 'rgba(0,0,0,0)'
+                setTimeout(() => {
+                    this.show = false
+                    this.hasTabbar && uni.showTabBar()
+                }, 200)
+                return
+            }
+
+            this.show = true
+            //等待mask重绘完成执行
+            if (this.hasTabbar) {
+                uni.hideTabBar({
+                    success: () => {
+                        setTimeout(() => {
+                            this.backgroundColor = this.config.backgroundColor
+                            this.transform = 'translateY(0px)'
+                        }, 10)
+                    }
+                })
+            } else {
+                setTimeout(() => {
+                    this.backgroundColor = this.config.backgroundColor
+                    this.transform = 'translateY(0px)'
+                }, 10)
+            }
+        },
+        //防止冒泡和滚动穿透
+        stopPrevent() {},
+        //分享操作
+        shareToFriend(type) {
+            this.$api.msg(`分享给${type}`)
+            this.toggleMask()
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+.mask {
+    position: fixed;
+    left: 0;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+    align-items: flex-end;
+    z-index: 998;
+    transition: 0.3s;
+    .bottom {
+        position: absolute;
+        left: 0;
+        bottom: 0;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        width: 100%;
+        height: 90upx;
+        background: #fff;
+        z-index: 9;
+        font-size: $font-base + 2upx;
+        color: $font-color-dark;
+    }
+}
+
+.mask-content {
+    width: 100%;
+    height: 580upx;
+    transition: 0.3s;
+    background: #fff;
+    &.has-bottom {
+        padding-bottom: 90upx;
+    }
+    .view-content {
+        height: 100%;
+    }
+}
+.share-header {
+    height: 110upx;
+    font-size: $font-base + 2upx;
+    color: font-color-dark;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding-top: 10upx;
+    &:before,
+    &:after {
+        content: '';
+        width: 240upx;
+        heighg: 0;
+        border-top: 1px solid $border-color-base;
+        transform: scaleY(0.5);
+        margin-right: 30upx;
+    }
+    &:after {
+        margin-left: 30upx;
+        margin-right: 0;
+    }
+}
+.share-list {
+    display: flex;
+    flex-wrap: wrap;
+}
+.share-item {
+    min-width: 33.33%;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    height: 180upx;
+    image {
+        width: 80upx;
+        height: 80upx;
+        margin-bottom: 16upx;
+    }
+    text {
+        font-size: $font-base;
+        color: $font-color-base;
+    }
+}
+</style>

+ 0 - 80
components/empty.vue

@@ -1,80 +0,0 @@
-<template>
-	<view class="empty-content">
-		<image class="empty-content-image" :src="setSrc" mode="aspectFit"></image>
-		<text class="error-text">{{EmptyText}}</text>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			src: {
-				type: String,
-				default: 'empty'
-			},
-			typeIndex:{
-				type:String,
-				default: 'empty'
-			},
-			navbarHeight:{
-				type:Number
-			}
-		},
-
-		data() {
-			return {
-				typeSrcall: {
-					empty: `${this.$Static}icon-empty-address.png`,				
-				},
-				typeSrc: {
-					empty:  `${this.$Static}icon-empty-address.png`,				
-				},
-				EmptyText:'',
-			}
-		},
-		created(){
-			if(this.typeIndex==0){
-				this.EmptyText = '您还没有任何的订单哟~'
-			}else{
-				this.EmptyText = '您还没有相关的订单哟~'
-			}
-		},
-		computed: {
-			setSrc() {
-				let url;
-				if(this.typeIndex==0){					
-					url = this.typeSrcall[this.src]
-				}else{
-					url = this.typeSrc[this.src]
-				}
-				return url;
-			},
-		},
-	}
-</script>
-
-<style lang="scss">
-	.empty-content {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		flex-direction: column;
-		position: fixed;
-		top: 0;
-		left: 0;
-		bottom: 0;
-		right: 0;
-		margin: auto;
-		background: $bg-color;
-		z-index: 999;
-		&-image {
-			width: 290rpx;
-			height: 230rpx;
-		}
-		.error-text{
-			font-size: $font-size-28;
-			color: $text-color;
-			line-height: 88rpx;
-		}
-	}
-</style>

+ 84 - 0
components/message-popup/message-popup.vue

@@ -0,0 +1,84 @@
+<template>
+    <view class="message-popup">
+        <view class="mask" v-if="mask && visible"></view>
+        <view class="content-popup">
+            <uni-transition mode-class="fade" :show="visible">
+                <view class="popup">
+                    <view class="title"> {{ title }}<slot name="title"></slot> </view>
+                    <view class="content">{{ content }} <slot name="content"></slot> </view>
+                    <text class="close iconfont icon-iconfontguanbi" @click="$emit('close')"></text>
+                </view>
+            </uni-transition>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'message-popup',
+    props: {
+        title: {
+            type: String,
+            default: ''
+        },
+        content: {
+            type: String,
+            default: ''
+        },
+        mask: {
+            type: Boolean,
+            default: true
+        },
+        visible: {
+            type: Boolean,
+            default: false
+        }
+    }
+}
+</script>
+
+<style lang="scss" scoped>
+.message-popup {
+    .mask {
+        position: fixed;
+        width: 100%;
+        height: 100%;
+        top: 0;
+        left: 0;
+        z-index: 9998;
+        background: rgba(0, 0, 0, 0.6);
+    }
+    .content-popup{
+        position: fixed;
+        z-index: 9999;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%,-70%);
+    }
+    .popup {
+        width: 580rpx;
+        // min-height: 540rpx;
+        box-sizing: border-box;
+        padding: 60rpx 26rpx;
+        background: #fff;
+        border-radius: 16rpx;
+        .close {
+            position: absolute;
+            right: 24rpx;
+            top: 24rpx;
+            font-size: 32rpx;
+            color: #d4dd4;
+        }
+        .title {
+            text-align: center;
+            font-size: 30rpx;
+            color: #333333;
+            margin-bottom: 54rpx;
+        }
+        .content {
+            font-size: 26rpx;
+            color: #666666;
+        }
+    }
+}
+</style>

+ 0 - 33
components/modal-layer.vue

@@ -1,33 +0,0 @@
-<template name="modal">
-	<view class="modal">
-		<view class="modal-content"></view>
-	</view>
-</template>
-<script>
-	export default {
-		name:'modal',
-		data() {
-			return {
-
-			}
-		},
-		created() {
-
-		},
-		computed: {
-
-		},
-	}
-</script>
-
-<style lang="scss">
-	.modal-content {
-		width: 100%;
-		height: 100%;
-		position: fixed;
-		left: 0;
-		top: 0;
-		background:rgba(255,255,255,0);
-		z-index: 7777;
-	}
-</style>

+ 1 - 1
components/mpvue-citypicker/mpvueCityPicker.vue

@@ -24,7 +24,7 @@
 </template>
 
 <script>	
-	import { provinceData,cityData,areaData } from '@/common/config/addressdata.js';
+	import { provinceData,cityData,areaData } from '@/common/addressdata.js';
 	export default {
 		data() {
 			return {

+ 0 - 202
components/share.vue

@@ -1,202 +0,0 @@
-<template>
-	<view v-if="show" class="mask" @click="toggleMask" @touchmove.stop.prevent="stopPrevent"
-		:style="{backgroundColor: backgroundColor}"
-	>
-		<view 
-			class="mask-content"
-			@click.stop.prevent="stopPrevent"
-			:style="[{
-				height: config.height, 
-				transform: transform
-			}]"
-		>
-			<scroll-view class="view-content" scroll-y>
-				<view class="share-header">
-					分享到
-				</view>
-				<view class="share-list">
-					<view 
-						v-for="(item, index) in shareList" :key="index"
-						class="share-item" 
-						@click="shareToFriend(item.text)"
-					>
-						<image :src="item.icon" mode=""></image>
-						<text>{{item.text}}</text>
-					</view>
-				</view>
-			</scroll-view>
-			<view class="bottom b-t" @click="toggleMask">取消</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				transform: 'translateY(50vh)',
-				timer: 0,
-				backgroundColor: 'rgba(0,0,0,0)',
-				show: false,
-				config: {},
-			};
-		},
-		props:{
-			contentHeight:{
-				type: Number,
-				default: 0
-			},
-			//是否是tabbar页面
-			hasTabbar:{
-				type: Boolean,
-				default: false
-			},
-			shareList:{
-				type: Array,
-				default: function(){
-					return [];
-				}
-			}
-		},
-		created() {
-			const height = uni.upx2px(this.contentHeight) + 'px';
-			this.config = {
-				height: height,
-				transform: `translateY(${height})`,
-				backgroundColor: 'rgba(0,0,0,.4)',
-			}
-			this.transform = this.config.transform;
-		},
-		methods:{
-			toggleMask(){
-				//防止高频点击
-				if(this.timer == 1){
-					return;
-				}
-				this.timer = 1;
-				setTimeout(()=>{
-					this.timer = 0;
-				}, 500)
-				
-				if(this.show){
-					this.transform = this.config.transform;
-					this.backgroundColor = 'rgba(0,0,0,0)';
-					setTimeout(()=>{
-						this.show = false;
-						this.hasTabbar && uni.showTabBar();
-					}, 200)
-					return;
-				}
-				
-				this.show = true;
-				//等待mask重绘完成执行
-				if(this.hasTabbar){
-					uni.hideTabBar({
-						success: () => {
-							setTimeout(()=>{
-								this.backgroundColor = this.config.backgroundColor;
-								this.transform = 'translateY(0px)';
-							}, 10)
-						}
-					});
-				}else{
-					setTimeout(()=>{
-						this.backgroundColor = this.config.backgroundColor;
-						this.transform = 'translateY(0px)';
-					}, 10)
-				}
-			},
-			//防止冒泡和滚动穿透
-			stopPrevent(){},
-			//分享操作
-			shareToFriend(type){
-				this.$api.msg(`分享给${type}`);
-				this.toggleMask();
-			},
-		}
-	}
-</script>
-
-<style lang='scss'>
-	.mask{
-		position:fixed;
-		left: 0;
-		top: 0;
-		right: 0;
-		bottom: 0;
-		display:flex;
-		justify-content: center;
-		align-items: flex-end;
-		z-index: 998;
-		transition: .3s;
-		.bottom{
-			position:absolute;
-			left: 0;
-			bottom: 0;
-			display:flex;
-			justify-content: center;
-			align-items: center;
-			width: 100%;
-			height: 90upx;
-			background: #fff;
-			z-index: 9;
-			font-size: $font-base + 2upx;
-			color: $font-color-dark;
-		}
-	}
-	
-	.mask-content{
-		width: 100%;
-		height: 580upx;
-		transition: .3s;
-		background: #fff;
-		&.has-bottom{
-			padding-bottom: 90upx;
-		}
-		.view-content{
-			height: 100%;
-		}
-	}
-	.share-header{
-		height: 110upx;
-		font-size: $font-base+2upx;
-		color: font-color-dark;
-		display:flex;
-		align-items:center;
-		justify-content: center;
-		padding-top: 10upx;
-		&:before, &:after{
-			content: '';
-			width: 240upx;
-			heighg: 0;
-			border-top: 1px solid $border-color-base;
-			transform: scaleY(.5);
-			margin-right: 30upx;
-		}
-		 &:after{
-			 margin-left: 30upx;
-			 margin-right: 0;
-		 }
-	}
-	.share-list{
-		display:flex;
-		flex-wrap: wrap;
-	}
-	.share-item{
-		min-width: 33.33%;
-		display:flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		height: 180upx;
-		image{
-			width: 80upx;
-			height: 80upx;
-			margin-bottom: 16upx;
-		}
-		text{
-			font-size: $font-base;
-			color: $font-color-base;
-		}
-	}
-</style>

+ 152 - 0
components/sui-search/sui-search.vue

@@ -0,0 +1,152 @@
+<template>
+    <!-- 搜索框 -->
+    <view class="search-input-box dis-flex" :style="{ background: bgColor }">
+        <view
+            class="search-input dis-flex flex-y-center"
+            @tap="gosearch"
+            :style="{ background: background, borderRadius: radius }"
+        >
+            <text class="iconfont icon-sousuo col-9"></text>
+            <input
+                :disabled="disabled"
+                v-model="keyword"
+                @blur="search"
+                @focus="$emit('onFocus')"
+                :focus="focus"
+                :placeholder="placeholder"
+                :placeholderStyle="placeStyle"
+                type="search"
+            />
+            <text class="iconfont icon-iconfontguanbi clear" v-if="showClose" @click="clearKeyword"></text>
+            <slot name="right"></slot>
+        </view>
+    </view>
+</template>
+
+<script>
+export default {
+    name: 'search',
+    props: {
+        // 是否禁止输入
+        disabled: {
+            type: Boolean,
+            default: false
+        },
+        // 是否自动聚焦
+        focus: {
+            type: Boolean,
+            default: false
+        },
+        // 输入框值
+        value: {
+            type: [Number, String],
+            default: ''
+        },
+        // 搜索栏Placeholder
+        placeholder: {
+            type: String,
+            default: ''
+        },
+        // 搜索栏Placeholder样式
+        placeStyle: {
+            type: String,
+            default: 'color:#999;font-size:24rpx;'
+        },
+        // 输入框背景颜色
+        background: {
+            type: String,
+            default: '#f7f7f7'
+        },
+        // 搜索栏圆角
+        radius: {
+            type: [Number, String]
+        },
+        bgColor: {
+            type: String,
+            default: '#fff'
+        },
+        clearable: {
+            type: Boolean,
+            default: true
+        }
+    },
+    watch: {
+        value: {
+            immediate: true,
+            handler(newVal) {
+                this.keyword = newVal
+            }
+        }
+    },
+    computed: {
+        showClose() {
+            return this.clearable && this.keyword
+        }
+    },
+    data() {
+        return {
+            keyword: ''
+        }
+    },
+    methods: {
+        // input是否禁止输入时触发事件
+        gosearch() {
+            this.$emit('gosearch', this.keyword)
+        },
+        // input失去焦点时触发事件
+        search() {
+            this.$emit('search', this.keyword)
+        },
+        clearKeyword() {
+            this.keyword = ''
+            this.$emit('clear')
+        }
+    }
+}
+</script>
+
+<style lang="scss">
+/* 搜索框 */
+$searchbar-height: 60rpx;
+.dis-flex {
+    display: flex;
+}
+.flex-y-center {
+    align-items: center;
+}
+.col-9 {
+    color: #999;
+    margin-right: 8px;
+}
+.search-input-box {
+    height: $searchbar-height;
+    padding: 32rpx 24rpx;
+    overflow: hidden;
+}
+.search-input {
+    width: 100%;
+    background: #f5f5f5;
+    border-radius: 30rpx;
+    padding: 0 26rpx;
+    text-align: left;
+    box-sizing: border-box;
+    overflow: hidden;
+    .icon {
+        margin-right: 24rpx;
+    }
+}
+.search-input input {
+    flex: 1;
+    font-size: 24rpx;
+    height: $searchbar-height;
+    line-height: $searchbar-height;
+}
+.clear {
+    width: 48rpx;
+    height: 48rpx;
+    color: #999;
+    font-size: 24rpx;
+    line-height: 48rpx;
+    text-align: center;
+}
+</style>

+ 1 - 1
components/thorui/tui-tabs/tui-tabs.vue

@@ -170,7 +170,7 @@
 		box-sizing: border-box;
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
+		justify-content: space-around;
 		z-index: 9999;
 	}
 

+ 1 - 1
components/thorui/tui-tag/tui-tag.vue

@@ -120,7 +120,7 @@ export default {
 }
 
 .tui-red {
-	background-color: #ff2a2a !important;
+	background-color: #ff457b !important;
 	color: #fff;
 }
 

+ 0 - 166
components/tui-components/loadmore/loadmore.vue

@@ -1,166 +0,0 @@
-<template>
-	<view class="tui-loadmore" v-if="visible">
-		<view :class="['tui-loading-'+index, (index==3 && type)?'tui-loading-'+type:'']"></view>
-		<view class="tui-loadmore-tips">{{text}}</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiLoadmore",
-		props: {
-			//显示文本
-			text: {
-				type: String,
-				default: "正在加载..."
-			},
-			//是否可见
-			visible: {
-				type: Boolean,
-				default: false
-			},
-			//loading 样式 :1,2,3
-			index: {
-				type: Number,
-				default: 1
-			},
-			//颜色设置,只有index=3时生效:primary,red,orange,green
-			type: {
-				type: String,
-				default: ""
-			}
-		}
-	}
-</script>
-
-<style>
-	.tui-loadmore {
-		width: 48%;
-		margin: 1.5em auto;
-		line-height: 1.5em;
-		font-size: 24upx;
-		text-align: center;
-	}
-
-	.tui-loading-1 {
-		margin: 0 5px;
-		width: 20px;
-		height: 20px;
-		display: inline-block;
-		vertical-align: middle;
-		-webkit-animation: a 1s steps(12) infinite;
-		animation: a 1s steps(12) infinite;
-		background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
-		background-size: 100%;
-	}
-
-	@-webkit-keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	@keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	.tui-loadmore-tips {
-		display: inline-block;
-		vertical-align: middle;
-	}
-
-	.tui-loading-2 {
-		width: 28upx;
-		height: 28upx;
-		border: 1px solid #8f8d8e;
-		border-radius: 50%;
-		margin: 0 6px;
-		display: inline-block;
-		vertical-align: middle;
-		clip-path: polygon(0% 0%,100% 0%,100% 30%,0% 30%);
-		animation: rotate 1s linear infinite;
-	}
-
-	@-webkit-keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	@keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	.tui-loading-3 {
-		display: inline-block;
-		margin: 0 6px;
-		vertical-align: middle;
-		width: 28upx;
-		height: 28upx;
-		background: 0 0;
-		border-radius: 50%;
-		border: 2px solid;
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;
-		animation: tui-rotate 0.7s linear infinite;
-	}
-
-	.tui-loading-3.tui-loading-primary {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #5677fc;
-	}
-
-	.tui-loading-3.tui-loading-green {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #19be6b;
-	}
-
-	.tui-loading-3.tui-loading-orange {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #ff7900;
-	}
-
-	.tui-loading-3.tui-loading-red {
-		border-color: #ededed #ededed #ededed #ed3f14;
-	}
-
-	@-webkit-keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	@keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-</style>

+ 0 - 119
components/tui-components/nomore/nomore.vue

@@ -1,119 +0,0 @@
-<template>
-	<view class="tui-nomore-class tui-loadmore-none" v-if="visible">
-		<view :class="[isDot?'tui-nomore-dot':'tui-nomore']">
-			<view :style="{background:bgcolor}" :class="[isDot?'tui-dot-text':'tui-nomore-text']">{{isDot?dotText:text}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiNomore",
-		props: {
-			//是否可见
-			visible: {
-				type: Boolean,
-				default: false
-			},
-			//当前页面背景颜色
-			bgcolor: {
-				type: String,
-				default: "#F7F7F7"
-			},
-			//是否以圆点代替 "没有更多了"
-			isDot: {
-				type: Boolean,
-				default: false
-			},
-			//isDot为false时生效
-			text: {
-				type: String,
-				default: "已至底部"
-			}
-		},
-		data() {
-			return {
-				dotText: "●"
-			};
-		}
-	}
-</script>
-
-<style>
-	.tui-loadmore-none {
-		width: 50%;
-		margin: 1em auto;
-		line-height: 1.5em;
-		font-size: 24rpx;
-		display: flex;
-		justify-content: center;
-	}
-
-	.tui-nomore {
-		width: 100%;
-		height: 100%;
-		position: relative;
-		display: flex;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore::before {
-		content: ' ';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		width: 100%;
-		top: 18rpx;
-		left: 0;
-	}
-
-	.tui-nomore-text {
-		color: #999;
-		font-size: 24rpx;
-		text-align: center;
-		padding: 0 18rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.tui-nomore-dot {
-		position: relative;
-		text-align: center;
-		-webkit-display: flex;
-		display: flex;
-		-webkit-justify-content: center;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore-dot::before {
-		content: '';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		width: 360rpx;
-		top: 18rpx;
-	}
-
-	.tui-dot-text {
-		position: relative;
-		color: #e5e5e5;
-		font-size: 10px;
-		text-align: center;
-		width: 50rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		-webkit-transform: scale(0.8);
-		transform: scale(0.8);
-		-webkit-transform-origin: center center;
-		transform-origin: center center;
-		z-index: 1;
-	}
-</style>

+ 0 - 233
components/tui-components/tui-tabs/tui-tabs.vue

@@ -1,233 +0,0 @@
-<template>
-	<view class="tui-tabs-view" :class="[isFixed?'tui-tabs-fixed':'tui-tabs-relative',unlined?'tui-unlined':'']" :style="{height:height+'rpx',padding:`0 ${padding}rpx`,background:bgColor,marginTop:marginTop+'px',top:isFixed?top+'px':'auto'}">
-		<view v-for="(item,index) in tabs" :key="index" class="tui-tabs-item" :style="{width:itemWidth}" @tap.stop="swichTabs(index)">
-			<view class="tui-tabs-title" :class="{'tui-tabs-active':currentTab==index,'tui-tabs-disabled':item.disabled}" :style="{color:currentTab==index?selectedColor:color,fontSize:size+'rpx',lineHeight:size+'rpx',fontWeight:bold && currentTab==index?'bold':'normal'}">{{item.name}}</view>
-		</view>
-		<view class="tui-tabs-slider" :style="{transform:'translateX('+scrollLeft+'px)',width:(sliderWidth+5)+'rpx',height:
-	sliderHeight+'rpx',borderRadius:sliderRadius,bottom:bottom,background:sliderBgColor,marginBottom:bottom=='50%'?('-'+sliderHeight/2+'rpx'):0}"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiTabs",
-		props: {
-			//标签页
-			tabs: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			//rpx
-			height: {
-				type: Number,
-				default: 80
-			},
-			//rpx 只对左右padding起作用,上下为0
-			padding: {
-				type: Number,
-				default: 22
-			},
-			marginTop:{
-				type:Number,
-				default:0
-			},
-			//背景色
-			bgColor: {
-				type: String,
-				default: "#FFFFFF"
-			},
-			//是否固定
-			isFixed: {
-				type: Boolean,
-				default: false
-			},
-			//px
-			top: {
-				type: Number
-					// #ifndef H5
-					,
-				default: 0
-					// #endif
-					// #ifdef H5
-					,
-				default: 44
-				// #endif
-			},
-			//是否去掉底部线条
-			unlined: {
-				type: Boolean,
-				default: false
-			},
-			//当前选项卡
-			currentTab: {
-				type: Number,
-				default: 0
-			},
-			//滑块宽度
-			sliderWidth: {
-				type: Number,
-				default: 88
-			},
-			//滑块高度
-			sliderHeight: {
-				type: Number,
-				default: 4
-			},
-			//滑块背景颜色
-			sliderBgColor: {
-				type: String,
-				default: "#5677fc"
-			},
-			sliderRadius:{
-				type: String,
-				default: "50rpx"
-			},
-			//滑块bottom
-			bottom: {
-				type: String,
-				default: "0"
-			},
-			//标签页宽度
-			itemWidth: {
-				type: String,
-				default: "25%"
-			},
-			//字体颜色
-			color: {
-				type: String,
-				default: "#666"
-			},
-			//选中后字体颜色
-			selectedColor: {
-				type: String,
-				default: "#5677fc"
-			},
-			//字体大小
-			size: {
-				type: Number,
-				default: 28
-			},
-			//选中后 是否加粗 ,未选中则无效
-			bold: {
-				type: Boolean,
-				default: false
-			}
-		},
-		watch: {
-			currentTab() {
-				this.checkCor();
-			}
-		},
-		created() {
-			setTimeout(() => {
-				// 高度自适应
-				uni.getSystemInfo({
-					success: (res) => {
-						this.winWidth = res.windowWidth;
-						this.checkCor()
-					}
-				});
-			}, 50);
-		},
-		data() {
-			return {
-				winWidth: 0,
-				scrollLeft: 0
-			};
-		},
-		methods: {
-			checkCor: function() {
-				let tabsNum = this.tabs.length
-				let padding = this.winWidth / 750 * this.padding
-				let width = this.winWidth - padding * 2
-				let left = (width / tabsNum - (this.winWidth / 750 * this.sliderWidth)) / 2 + padding
-				let scrollLeft = left
-				if (this.currentTab > 0) {
-					scrollLeft = scrollLeft + (width / tabsNum) * this.currentTab
-				}
-				this.scrollLeft = scrollLeft
-			},
-			// 点击标题切换当前页时改变样式
-			swichTabs: function(index) {
-				let item = this.tabs[index]
-				if (item && item.disabled) return;
-				if (this.currentTab == index) {
-					return false;
-				} else {
-					this.$emit("change", {
-						index: Number(index)
-					})
-				}
-			}
-		}
-	}
-</script>
-
-<style>
-	.tui-tabs-view {
-		width: 100%;
-		box-sizing: border-box;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		z-index: 1000;
-	}
-
-	.tui-tabs-relative {
-		position: relative;
-	}
-
-	.tui-tabs-fixed {
-		position: fixed;
-		left: 0;
-	}
-
-	.tui-tabs-fixed::before,
-	.tui-tabs-relative::before {
-		content: '';
-		position: absolute;
-		border-bottom: 1upx solid #eaeef1;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		bottom: 0;
-		right: 0;
-		left: 0;
-	}
-
-	.tui-unlined::before {
-		border-bottom: 0 !important
-	}
-
-	.tui-tabs-item {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		height: 100%;
-	}
-
-	.tui-tabs-disabled {
-		opacity: .6;
-	}
-
-	.tui-tabs-title {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		position: relative;
-		z-index: 2;
-	}
-
-	.tui-tabs-active {
-		transition: all 0.15s ease-in-out;
-	}
-
-	.tui-tabs-slider {
-		position: absolute;
-		left: 0;
-		transition: all 0.15s ease-in-out;
-		z-index: 0;
-		transform: translateZ(0);
-	}
-</style>

+ 0 - 161
components/tui-loadmore/tui-loadmore.vue

@@ -1,161 +0,0 @@
-<template>
-	<view class="tui-loadmore">
-		<view :class="['tui-loading-'+index, (index==3 && type)?'tui-loading-'+type:'']"></view>
-		<view class="tui-loadmore-tips">{{text}}</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiLoadmore",
-		props: {
-			//显示文本
-			text: {
-				type: String,
-				default: "正在加载..."
-			},
-			//loading 样式 :1,2,3
-			index: {
-				type: Number,
-				default: 1
-			},
-			//颜色设置,只有index=3时生效:primary,red,orange,green
-			type: {
-				type: String,
-				default: ""
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-loadmore {
-		width: 48%;
-		margin: 1.5em auto;
-		line-height: 1.5em;
-		font-size: 24rpx;
-		text-align: center;
-	}
-
-	.tui-loading-1 {
-		margin: 0 5px;
-		width: 20px;
-		height: 20px;
-		display: inline-block;
-		vertical-align: middle;
-		-webkit-animation: a 1s steps(12) infinite;
-		animation: a 1s steps(12) infinite;
-		background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
-		background-size: 100%;
-	}
-
-	@-webkit-keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	@keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	.tui-loadmore-tips {
-		display: inline-block;
-		vertical-align: middle;
-	}
-
-	.tui-loading-2 {
-		width: 28rpx;
-		height: 28rpx;
-		border: 1px solid #8f8d8e;
-		border-radius: 50%;
-		margin: 0 6px;
-		display: inline-block;
-		vertical-align: middle;
-		clip-path: polygon(0% 0%,100% 0%,100% 30%,0% 30%);
-		animation: rotate 1s linear infinite;
-	}
-
-	@-webkit-keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	@keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	.tui-loading-3 {
-		display: inline-block;
-		margin: 0 6px;
-		vertical-align: middle;
-		width: 28rpx;
-		height: 28rpx;
-		background: 0 0;
-		border-radius: 50%;
-		border: 2px solid;
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;
-		animation: tui-rotate 0.7s linear infinite;
-	}
-
-	.tui-loading-3.tui-loading-primary {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #5677fc;
-	}
-
-	.tui-loading-3.tui-loading-green {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #19be6b;
-	}
-
-	.tui-loading-3.tui-loading-orange {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #ff7900;
-	}
-
-	.tui-loading-3.tui-loading-red {
-		border-color: #ededed #ededed #ededed #ed3f14;
-	}
-
-	@-webkit-keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	@keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-</style>

+ 0 - 115
components/tui-nomore/tui-nomore.vue

@@ -1,115 +0,0 @@
-<template>
-	<view class="tui-nomore-class tui-loadmore-none">
-		<view :class="[isDot?'tui-nomore-dot':'tui-nomore']">
-			<view :style="{backgroundColor:backgroundColor}" :class="[isDot?'tui-dot-text':'tui-nomore-text']">{{isDot?dotText:text}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiNomore",
-		props: {
-			//当前页面背景颜色
-			backgroundColor: {
-				type: String,
-				default: "#fafafa"
-			},
-			//是否以圆点代替 "没有更多了"
-			isDot: {
-				type: Boolean,
-				default: false
-			},
-			//isDot为false时生效
-			text: {
-				type: String,
-				default: "没有更多了"
-			}
-		},
-		data() {
-			return {
-				dotText: "●"
-			};
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-loadmore-none {
-		width: 50%;
-		margin: 1.5em auto;
-		line-height: 1.5em;
-		font-size: 24rpx;
-		display: flex;
-		justify-content: center;
-	}
-
-	.tui-nomore {
-		width: 100%;
-		height: 100%;
-		position: relative;
-		display: flex;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore::before {
-		content: ' ';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		width: 100%;
-		top: 18rpx;
-		left: 0;
-	}
-
-	.tui-nomore-text {
-		color: #999;
-		font-size: 24rpx;
-		text-align: center;
-		padding: 0 18rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.tui-nomore-dot {
-		position: relative;
-		text-align: center;
-		-webkit-display: flex;
-		display: flex;
-		-webkit-justify-content: center;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore-dot::before {
-		content: '';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5)  translateX(-50%);
-		transform: scaleY(0.5)  translateX(-50%);
-		width: 360rpx;
-		top: 18rpx;
-		left: 50%;
-	}
-
-	.tui-dot-text {
-		position: relative;
-		color: #e5e5e5;
-		font-size: 10px;
-		text-align: center;
-		width: 50rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		-webkit-transform: scale(0.8);
-		transform: scale(0.8);
-		-webkit-transform-origin: center center;
-		transform-origin: center center;
-		z-index: 1;
-	}
-</style>

+ 0 - 246
components/tui-skeleton/tui-skeleton.vue

@@ -1,246 +0,0 @@
-<template>
-	<view class="tui-skeleton-cmomon tui-skeleton-box" :style="{width: winWidth+'px', height:winHeight+'px', backgroundColor:backgroundColor}">
-		<view class="tui-skeleton-cmomon" v-for="(item,index) in skeletonElements" :key="index" :style="{width: item.width+'px', height:item.height+'px', left: item.left+'px', top: item.top+'px',backgroundColor: skeletonBgColor,borderRadius:getRadius(item.skeletonType,borderRadius)}"></view>
-		<view class="tui-loading" :class="[getLoadingType(loadingType)]" v-if="isLoading"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiSkeleton",
-		props: {
-			//选择器(外层容器)
-			selector: {
-				type: String,
-				default: "tui-skeleton"
-			},
-			//外层容器背景颜色
-			backgroundColor: {
-				type: String,
-				default: "#fff"
-			},
-			//骨架元素背景颜色
-			skeletonBgColor: {
-				type: String,
-				default: "#e9e9e9"
-			},
-			//骨架元素类型:矩形,圆形,带圆角矩形["rect","circular","fillet"]
-			//默认所有,根据页面情况进行传值
-			//页面对应元素class为:tui-skeleton-rect,tui-skeleton-circular,tui-skeleton-fillet
-			//如果传入的值不在下列数组中,则为自定义class值,默认按矩形渲染
-			skeletonType: {
-				type: Array,
-				default () {
-					return ["rect", "circular", "fillet"]
-				}
-			},
-			//圆角值,skeletonType=fillet时生效
-			borderRadius: {
-				type: String,
-				default: "16rpx"
-			},
-			//骨架屏预生成数据:提前生成好的数据,当传入该属性值时,则不会再次查找子节点信息
-			preloadData: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			//是否需要loading
-			isLoading: {
-				type: Boolean,
-				default: true
-			},
-			//loading类型[1-10]
-			loadingType: {
-				type: Number,
-				default: 1
-			}
-		},
-		created() {
-			const res = uni.getSystemInfoSync();
-			this.winWidth = res.windowWidth;
-			this.winHeight = res.windowHeight;
-			//如果有预生成数据,则直接使用
-			this.isPreload(true)
-		},
-		// #ifdef H5
-		mounted() {
-			this.$nextTick(() => {
-				this.nodesRef(`.${this.selector}`).then((res) => {
-					this.winHeight = res[0].height + Math.abs(res[0].top)
-				});
-				!this.isPreload() && this.selectorQuery()
-			})
-
-		},
-		// #endif
-		onReady() {
-			this.nodesRef(`.${this.selector}`).then((res) => {
-				if(res[0]){
-					this.winHeight = res[0].height + Math.abs(res[0].top)
-				}
-			});
-			!this.isPreload() && this.selectorQuery()
-		},
-		data() {
-			return {
-				winWidth: 375,
-				winHeight: 800,
-				skeletonElements: []
-			};
-		},
-		methods: {
-			getLoadingType: function(type) {
-				let value = 1
-				if (type && type > 0 && type < 11) {
-					value = type
-				}
-				return 'tui-loading-' + value
-			},
-			getRadius: function(type, val) {
-				let radius = "0"
-				if (type == "circular") {
-					radius = "50%"
-				} else if (type == "fillet") {
-					radius = val
-				}
-				return radius;
-			},
-			isPreload(init) {
-				let preloadData = this.preloadData || []
-				if (preloadData.length) {
-					init && (this.skeletonElements = preloadData)
-					return true
-				}
-				return false
-			},
-			async selectorQuery() {
-				let skeletonType = this.skeletonType || []
-				let nodes = []
-				for (let item of skeletonType) {
-					let className = `.${this.selector} >>> .${item}`
-					// #ifdef H5
-					className = `.${item}`
-					// #endif
-					if (~"rect_circular_fillet".indexOf(item)) {
-						// #ifndef H5
-						className = `.${this.selector} >>> .${this.selector}-${item}`
-						// #endif
-						// #ifdef H5
-						className = `.${this.selector}-${item}`
-						// #endif
-					}
-					await this.nodesRef(className).then((res) => {
-						res.map(d => {
-							d.skeletonType = item
-						})
-						nodes = nodes.concat(res)
-					})
-				}
-				this.skeletonElements = nodes
-			},
-			async nodesRef(className) {
-				return await new Promise((resolve, reject) => {
-					uni.createSelectorQuery().selectAll(className).boundingClientRect((res) => {
-						if (res) {
-							resolve(res);
-						} else {
-							reject(res)
-						}
-					}).exec();
-				})
-			}
-		}
-	}
-</script>
-
-<style>
-	.tui-skeleton-cmomon {
-		position: absolute;
-		z-index: 99999;
-		overflow: hidden;
-	}
-
-	.tui-skeleton-box {
-		left: 0;
-		top: 0;
-	}
-
-	.tui-loading {
-		display: inline-block;
-		vertical-align: middle;
-		width: 40rpx;
-		height: 40rpx;
-		background: 0 0;
-		border-radius: 50%;
-		border: 2px solid;
-		animation: tui-rotate 0.7s linear infinite;
-		position: fixed;
-		z-index: 999999;
-		left: 50%;
-		top: 50%;
-		margin-left: -20rpx;
-		margin-top: -20rpx;
-	}
-
-	.tui-loading-1 {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #5677fc;
-	}
-
-	.tui-loading-2 {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;
-	}
-
-	.tui-loading-3 {
-		border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) #fff;
-	}
-
-	.tui-loading-4 {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #35b06a;
-	}
-
-	.tui-loading-5 {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #fc872d;
-	}
-
-	.tui-loading-6 {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #eb0909;
-	}
-
-	.tui-loading-7 {
-		border-color: #5677fc transparent #5677fc transparent;
-	}
-
-	.tui-loading-8 {
-		border-color: #35b06a transparent #35b06a transparent;
-	}
-
-	.tui-loading-9 {
-		border-color: #fc872d transparent #fc872d transparent;
-	}
-
-	.tui-loading-10 {
-		border-color: #eb0909 transparent #eb0909 transparent;
-	}
-
-	@-webkit-keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	@keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-</style>

+ 0 - 0
components/uni-badge/uni-badge.vue → components/uni-components/uni-badge/uni-badge.vue


+ 0 - 0
components/uni-calendar/calendar.js → components/uni-components/uni-calendar/calendar.js


+ 0 - 0
components/uni-calendar/uni-calendar-item.vue → components/uni-components/uni-calendar/uni-calendar-item.vue


+ 0 - 0
components/uni-calendar/uni-calendar.vue → components/uni-components/uni-calendar/uni-calendar.vue


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません