Selaa lähdekoodia

commit -m 优化分包

zhengjinyi 4 vuotta sitten
vanhempi
commit
b5046a3abc
71 muutettua tiedostoa jossa 1000 lisäystä ja 8016 poistoa
  1. 4 4
      common/config/caimeiApi.js
  2. 9 5
      common/css/iconfont.scss
  3. 0 6
      common/utils/module.js
  4. 0 131
      common/utils/ys-validate.js
  5. 1 1
      components/cm-custom/custom-floor.vue
  6. 1 1
      components/cm-custom/custom-p.vue
  7. 0 141
      components/cm-module/activity/activity_on_1.vue
  8. 114 67
      components/cm-module/cm-seller/category.vue
  9. 33 149
      components/cm-module/cm-seller/home.vue
  10. 1 1
      components/cm-module/headerNavbar/header-poduct.vue
  11. 1 1
      components/cm-module/home/cm-custom.vue
  12. 1 1
      components/cm-module/homeIndex/customer.vue
  13. 5 5
      components/cm-module/homeIndex/pageSpecial.vue
  14. 1 1
      components/cm-module/modelAlert/errorAlert.vue
  15. 0 86
      components/cm-module/noLogin/nologin.vue
  16. 39 27
      components/cm-module/pageFloorTemplate/templateA.vue
  17. 39 27
      components/cm-module/pageFloorTemplate/templateB.vue
  18. 39 27
      components/cm-module/pageFloorTemplate/templateC.vue
  19. 39 27
      components/cm-module/pageFloorTemplate/templateD.vue
  20. 39 27
      components/cm-module/pageFloorTemplate/templateE.vue
  21. 39 27
      components/cm-module/pageFloorTemplate/templateF.vue
  22. 42 30
      components/cm-module/pageTemplate/templateA.vue
  23. 39 27
      components/cm-module/pageTemplate/templateB.vue
  24. 39 27
      components/cm-module/pageTemplate/templateC.vue
  25. 39 27
      components/cm-module/pageTemplate/templateD.vue
  26. 39 27
      components/cm-module/pageTemplate/templateE.vue
  27. 39 27
      components/cm-module/pageTemplate/templateF.vue
  28. 39 27
      components/cm-module/pageTemplate/templateG.vue
  29. 39 27
      components/cm-module/pageTemplate/templateH.vue
  30. 2 2
      components/cm-module/productDetails/instrument-recommend.vue
  31. 114 67
      components/cm-module/supplier/category.vue
  32. 33 149
      components/cm-module/supplier/home.vue
  33. 0 515
      components/thorui/tui-cascade-selection/tui-cascade-selection.vue
  34. 0 251
      components/thorui/tui-circular-progress/tui-circular-progress.vue
  35. 0 255
      components/thorui/tui-fab/tui-fab.vue
  36. 0 118
      components/thorui/tui-footer/tui-footer.vue
  37. 0 1034
      components/thorui/tui-image-cropper/tui-image-cropper.vue
  38. 0 149
      components/thorui/tui-image-group/tui-image-group.vue
  39. 0 73
      components/thorui/tui-keyboard-input/tui-keyboard-input.vue
  40. 0 240
      components/thorui/tui-keyboard/tui-keyboard.vue
  41. 0 171
      components/thorui/tui-list-cell/tui-list-cell.vue
  42. 0 87
      components/thorui/tui-list-view/tui-list-view.vue
  43. 0 679
      components/thorui/tui-picture-cropper/tui-picture-cropper.vue
  44. 0 560
      components/thorui/tui-picture-cropper/tui-picture-cropper.wxs
  45. 0 307
      components/thorui/tui-round-progress/tui-round-progress.vue
  46. 0 124
      components/thorui/tui-sticky-wxs/tui-sticky-wxs.vue
  47. 0 44
      components/thorui/tui-sticky-wxs/tui-sticky.wxs
  48. 0 50
      components/thorui/tui-timeaxis-item/tui-timeaxis-item.vue
  49. 0 341
      components/thorui/tui-upload/tui-upload.vue
  50. 1 1
      components/uni-search/cat-search.vue
  51. 69 75
      h5/pages/activity/activity.vue
  52. 0 8
      json.js
  53. 2 4
      main.js
  54. 31 44
      pages.json
  55. 1 1
      pages/goods/good-floorMore.vue
  56. 16 34
      pages/goods/goods-instrument.vue
  57. 0 549
      pages/goods/goods-secondary.vue
  58. 0 235
      pages/tabBar/category/category.vue
  59. 0 5
      pages/tabBar/home/index.vue
  60. 0 208
      pages/user/invoice/invoice.vue
  61. 1 1
      pages/user/order/order-list.vue
  62. 1 1
      search/pages/search/search-instrument.vue
  63. 0 0
      search/pages/search/search-order.vue
  64. 0 0
      search/pages/search/search-second.vue
  65. 0 0
      search/pages/search/search-supplier.vue
  66. 3 3
      search/pages/search/search.vue
  67. 2 2
      second/pages/product/product-list.vue
  68. 2 2
      seller/pages/index/index.vue
  69. 0 632
      seller/pages/search/search.vue
  70. 0 12
      static/package.json
  71. 2 2
      supplier/pages/index/index.vue

+ 4 - 4
common/config/caimeiApi.js

@@ -233,13 +233,13 @@ const caimeiApi = {
 				 	9:`/second/pages/form/introduce`,
 				 	10:`/second/pages/product/product-list`,
 				 	11:`/second/pages/form/form`,
-				 	12:`/pages/search/search?keyWord=${pros.name}`,
+				 	12:`/search/pages/search/search?keyWord=${pros.name}`,
 				 	13:`/h5/pages/article/page?link=${pros.link}`,
 				 	14:`/h5/pages/article/page?link=${pros.link}`,
 				 	15:`/h5/pages/article/page?link=${pros.link}`,
 				 	17:`/pages/login/register-select`,
 				 	18:`/h5/pages/article/page?link=${pros.link}`,
-				 	19:`/pages/search/search-supplier?keyWord=${pros.name}`
+				 	19:`/search/pages//search-supplier?keyWord=${pros.name}`
 				}
 				const url = typeMap[pros.linkType];
 				uni.navigateTo({
@@ -260,13 +260,13 @@ const caimeiApi = {
 				9:`/second/pages/form/introduce`,
 				10:`/second/pages/product/product-list`,
 				11:`/second/pages/form/form`,
-				12:`/pages/search/search?keyWord=${keyword}`,
+				12:`/search/pages/search/search?keyWord=${keyword}`,
 				13:`/h5/pages/article/page?link=${linkHref}`,
 				14:`/h5/pages/article/page?link=${linkHref}`,
 				15:`/h5/pages/article/page?link=${linkHref}`,
 				17:`/pages/login/register-select`,
 				18:`/h5/pages/article/page?link=${linkHref}`,
-				19:`/pages/search/search-supplier?keyWord=${keyword}`
+				19:`/search/pages/search/search-supplier?keyWord=${keyword}`
 			}
 			const url = typeMap[linkType];
 			uni.navigateTo({

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 9 - 5
common/css/iconfont.scss


+ 0 - 6
common/utils/module.js

@@ -1,6 +0,0 @@
-import Vue from 'vue'
-import customD from '@/components/cm-custom/custom-d.vue'
-import customP from '@/components/cm-custom/custom-p.vue'
-
-Vue.component('custom-d',customD)
-Vue.component('custom-p',customP)

+ 0 - 131
common/utils/ys-validate.js

@@ -1,131 +0,0 @@
-
-const numberReg = /^-?[1-9][0-9]?.?[0-9]*$/
-const intReg = /^-?[1-9][0-9]*$/
-const phoneReg = /^1[0-9]{10,10}$/
-const emailReg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
-const pwdReg = /^.{6,16}$/
-const inviteCodeReg = /^[a-zA-Z0-9]{6,16}$/
-
-export default {
-	isNumber: function(val) {
-		return numberReg.test(val)
-	},
-	isInt: function(val) {
-		return intReg.test(val)
-	},
-	isPhone: function(val) {
-		return phoneReg.test(val)
-	},
-	isEmail: function(val) {
-		return emailReg.test(val)
-	},
-	isPwd: function(val) {
-		return pwdReg.test(val)
-	},
-	isInviteCode: function(val) {
-		return inviteCodeReg.test(val)
-	},
-	validate: function(data, rules) {
-		let res = { isOk: true, errmsg: '' }
-		if (!rules || !rules.length) {
-			return res
-		}
-		for (let rule of rules) {
-			// rule: {name:'', type:'', errmsg:'', min:1, max:2, eq:'', required:Boolean, regex:''}
-			if (!rule || !rule.name || !rule.type) {
-				continue
-			}
-			
-			// 如果值不存在
-			if (!data[rule.name]) {
-				// 如果是必填项就返回错误提示,required可以作为type是为了不同的type能给用户不同的提示
-				if (rule.type === 'required' || rule.required) {
-					res = { isOk: false, errmsg: rule.errmsg }
-					if (!res.errmsg) {
-						res.errmsg = '请正确输入所有数据' //默认提示
-					}
-					return res
-				}
-				// 如果不是必填项就跳过
-				continue
-			}
-			switch (rule.type) {
-				// required 上面已经判断过了
-				case 'equals':
-				case 'eq':
-					if (data[rule.name] !== data[rule.eqName]) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'number':
-					if (!numberReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'int':
-					if (!intReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'phone':
-					if (!phoneReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'email':
-					if (!emailReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'pwd':
-					if (!pwdReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'inviteCode':
-					if (!inviteCodeReg.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'range': // 数字类型的值取值范围
-					// {name: 'xxx', type: 'range', min: 6, max: 6, required: true, errmsg: 'xxx'}
-					let val = data[rule.name]
-					if (val) {
-						if (numberReg.test(val)) {
-							if (rule.min && val < rule.min) {
-								res = { isOk: false, errmsg: rule.errmsg }
-							} else if (rule.max && val > rule.max) {
-								res = { isOk: false, errmsg: rule.errmsg }
-							}
-						} else {
-							res = { isOk: false, errmsg: rule.errmsg }
-						}
-					}
-				break
-				case 'lengthRange': // 字符串长度取值范围
-					// {name: 'xxx', type: 'lengthRange', min: 6, max: 6, errmsg: 'xxx'}
-					let le = data[rule.name] ? data[rule.name].length : 0
-					if (rule.min && le < rule.min) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					} else if (rule.max && le > rule.max) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-				case 'regex': // 自定义正则表达式
-					// {name: 'xxx', type: 'regex', regex: /^1[0-9]{10,10}$/, errmsg: 'xxx'}
-					if (rule.regex && !rule.regex.test(data[rule.name])) {
-						res = { isOk: false, errmsg: rule.errmsg }
-					}
-				break
-			}
-			// 发现任何一个错误就立即返回,后面的不再判断
-			if (!res.isOk) {
-				if (!res.errmsg) {
-					res.errmsg = '请正确输入所有数据' //默认提示
-				}
-				return res
-			}
-		}
-		return res
-	}
-}

+ 1 - 1
components/cm-custom/custom-floor.vue

@@ -43,7 +43,7 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/pages/search/search', 
+				clickPath:'/search/pages/search/search', 
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
 			    statusBarHeight: 0, // 状态栏高度
 			    navbarHeight: 0, // 顶部导航栏高度,

+ 1 - 1
components/cm-custom/custom-p.vue

@@ -45,7 +45,7 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/pages/search/search', 
+				clickPath:'/search/pages/search/search', 
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
 			    statusBarHeight: 0, // 状态栏高度
 			    navbarHeight: 0, // 顶部导航栏高度,

+ 0 - 141
components/cm-module/activity/activity_on_1.vue

@@ -1,141 +0,0 @@
-<template>
-	<view>
-		<view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"  @touchmove.stop.prevent="discard">
-			<image src="https://admin-b.caimei365.com/userfiles/1/images/photo/2020/08/aa%402x.png" mode="" @click.stop="handleClick"></image>
-			<text class="iconfont icon-iconfontguanbi" @click.stop="handleClickCancel"></text>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name:"tuiAlert",
-		props: {
-			//控制显示
-			show: {
-				type: Boolean,
-				default: false
-			},
-			//提示信息字体大小
-			size: {
-				type: Number,
-				default: 30
-			},
-			//提示信息字体颜色
-			color: {
-				type: String,
-				default: "#333"
-			},
-			//按钮字体颜色
-			btnColor: {
-				type: String,
-				default: "#EB0909"
-			},
-			btnText:{
-				type: String,
-				default: ""
-			},
-			//点击遮罩 是否可关闭
-			maskClosable: {
-				type: Boolean,
-				default: false
-			}
-		},
-		methods: {
-			handleClick(e) {
-				console.log(e);
-				if (!this.show) return;
-				this.$emit('click',false);
-			},
-			handleClickCancel() {
-				this.$emit('cancel',false);
-			},
-			discard(){
-				//丢弃
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.tui-alert-box {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		flex-direction: column;
-		position: fixed;
-		left: 0;
-		top: 100%;
-		opacity: 0;
-		background: rgba(0,0,0,.5);
-		z-index: 99990;
-		image{
-			width: 560rpx;
-			height: 784rpx;
-			margin-top: 100rpx;
-		}
-	}
-	.tui-alert-show {
-		top: 0;
-		opacity: 1;
-		animation:rundtop 0.5s;
-	}
-	.tui-alert-hide{
-		top: 100%;
-		opacity: 0;
-		animation:rundbottom 0.5s;
-	}
-	.icon-iconfontguanbi{
-		display: block;
-		width: 100rpx;
-		height: 100rpx;
-		line-height: 100rpx;
-		text-align: center;
-		color: #FFFFFF;
-		position: absolute;
-		bottom: 10%;
-		left: 50%;
-		font-size: $font-size-48;
-		font-weight: bold;
-		margin-left: -50rpx;
-	}
-	.tui-alert-mask-show {
-		visibility: visible;
-		opacity: 1;
-	}
-	.tui-alert-btn {
-		width: 100%;
-		height: 90rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		background-color: #fff;
-		box-sizing: border-box;
-		position: relative;
-		font-size: 32rpx;
-		line-height: 32rpx;
-	}
-	.tui-alert-btn-hover {
-		background-color: #f7f7f7;
-	}
-	.tui-alert-btn::before {
-		width: 100%;
-		content: "";
-		position: absolute;
-		border-top: 1rpx solid #E0E0E0;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		left: 0;
-		top: 0;
-	}
-	@keyframes rundtop{
-		0%{top: 100%;opacity: 0;}
-		100%{top:0;opacity: 1;}
-	}
-	@keyframes rundbottom{
-		0%{top: 0;opacity: 1;}
-		100%{top:100%;opacity: 0;}
-	}
-</style>

+ 114 - 67
components/cm-module/cm-seller/category.vue

@@ -1,84 +1,100 @@
 <template>
-	<view class="category-container clearfix" :style="{paddingTop:CustomBar+'px'}">
-		<cm-custom :navbar-data='nvabarData'></cm-custom>
-		<!-- 头部轮播 -->
+	<view id="category" :style="{paddingTop:CustomBar+'px'}">
+		<!--顶部搜索导航栏-->
+		<view class="'search-input-fixed" :style="{top:CustomBar/2+'px'}">
+			<cat-search :systeminfo='systeminfo' :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" @click="hanldTabClick"></cat-search>
+		</view>
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="category-list tui-skeleton">
-			<!--顶部搜索导航栏-->
-<!-- 		<view class="'search-input-fixed">
-				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-			</view> -->
+		<view class="category-list" v-else>
 			<!-- 左侧分类导航 -->
-			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="row" v-if="m.smalltypeList.length > 0" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
-					<view class="text tui-skeleton-fillet">
-						{{m.name}}
-					</view>
+			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
+				<view class="row" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
+					<view class="text">{{m.name}}</view>
 					<view class="block"></view>
 				</view>
 			</scroll-view>
 			<!--右侧子导航-->
-			<scroll-view  scroll-y="true" class="right-aside" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="category" v-if="n.smalltypeList.length > 0" v-for="(n,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
-					<view class="category-box" v-for="(o,oIndex) in n.smalltypeList" :key="oIndex">
-						<view class="title tui-skeleton-fillet">{{o.name}}</view>
-						<view class="list" v-if="o.tinytypeList.length > 0">
-							<view class="box" v-for="(pro,proIndex) in o.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,proIndex)">
-								<image :src="pro.icon" class="tui-skeleton-fillet"></image>
-								<view class="text tui-skeleton-fillet">{{pro.name}}</view>
+			<scroll-view  scroll-y="true" class="right-aside" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
+				<view class="category" v-for="(first,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
+					<template v-if="first.smalltypeList">
+						<view class="category-box AAA" v-for="(small,oIndex) in first.smalltypeList" :key="oIndex">
+							<view class="title">{{small.name}}</view>
+							<view class="list" v-if="small.tinytypeList.length > 0">
+								<view class="box" v-for="(pro,proIndex) in small.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,3)">
+									<image :src="pro.crmIcon ? pro.crmIcon : 'https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
+									<view class="text">{{pro.name}}</view>
+								</view>
+							</view>
+							<view v-else class="no-data">
+								<view class="box" @click.stop="navToListPage(small,2)">
+									<image :src="small.crmIcon ? small.crmIcon : 'https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
+									<view class="text">全部商品</view>
+								</view>
 							</view>
 						</view>
-						<view v-else class="no-data">
-							该栏目暂无分类~
+					</template>
+					<template v-else>
+						<view class="category-box BBB">
+							<view class="title">{{first.name}}</view>
+							<view class="no-data">
+								<view class="box" @click.stop="navToListPage(first,1)">
+									<image src="https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg"></image>
+									<view class="text">全部商品</view>
+								</view>
+							</view>
 						</view>
-					</view>
+					</template>
 				</view>
 			</scroll-view>
 		</view>
 	</view>
 </template>
 <script>
-	import btSearch from '@/components/uni-search/bt-search.vue'
-
+	import catSearch from '@/components/uni-search/cat-search.vue'
 	export default {
 		components: {
-			btSearch,
+			catSearch
 		},
 		data() {
 			return {
-				nvabarData: {		//顶部自定义导航
-					title: '商品分类',  // 导航栏 中间的标题
-					haveBack:false,
-					textLeft:this.$store.state.isIphone,
-					textColor:'#333333',
-					bgColor:'#FFFFFF'
+				nvabarData: {							 //顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
+					title: ''		// 导航栏 中间的标题
 				},
-				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				skeletonShow: true,
+				headerBtnPosi:	this.setHeaderBtnPosi(), //获取设备顶部胶囊高度
+				systeminfo: this.setSysteminfo(),		 //获取设备信息
 				headerShow:true,
-				hotSearchText: '你想要的这里都有',
-				clickPath:'/pages/search/search',
 				showCategoryIndex: 0,
 				categoryList: [],//分类列表
 				search: '',
 				cateTop: {},
 				verticalNavTop: 0,
-				CustomBar:this.CustomBar,// 顶部导航栏高度
+				categoryTabIndex:1,
+				windowHeight:0,
+				scrollHeight:0,
+				skeletonShow:true
 			}
 		},
 		created() {
-			this.getProductCate();
+			this.initData();
 		},
 		methods: {
-			// 跳转至商品列表
-			navToList(id){
-				this.$api.navigateTo(`/pages/product/list?cate_id=${id}`)
+			// 数据初始化
+			initData() {
+				this.GetProductCate(this.categoryTabIndex);
+				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
+				this.windowHeight = windowHeight - 1;
+				this.scrollHeight = windowHeight - 1;
+			},
+			hanldTabClick(data){
+				this.categoryList = []
+				this.GetProductCate(data);
 			},
 			// 获取商品分类列表
-			getProductCate () {
-				this.ProductService.GetProductClassify().then(res =>{
-					this.categoryList = res.data
+			GetProductCate (index) {
+				this.CommonService.GetFirstClassly({typeSort:index,source :'crm'}).then(response =>{
+					this.categoryList = response.data
 					// 查询第一个拥有二级菜单的子菜单
 					for (let i = 0; i < this.categoryList.length; i++) {
 						if (this.categoryList[i].smalltypeList.length > 0) {
@@ -86,9 +102,9 @@
 							break;
 						}
 					}
-					this.skeletonShow = false;
-				}).catch(res =>{
-					this.$util.msg(res.msg,2000);
+					this.skeletonShow = false
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
 				})
 			},
 			showCategory(e,index){//分类切换显示
@@ -97,23 +113,40 @@
 			},
 			toSearch () {// 跳转至搜索详情页
 				uni.navigateTo({
-					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
+					url: `/search/pages/search/search?search=${JSON.stringify(this.search)}`
 				})
 			},
-			navToListPage(pro,index){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: pro.tinyTypeID,
-					success: function () {
-						self.$api.navToListPage({type:'4',value:pro.name,id:pro.tinyTypeID});
-					}
+			navToListPage(item,index){//分类导航跳转
+				switch(index){
+					case 1:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeID}&title=${item.name}`)
+						break;
+					case 2:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=2&id=${item.smallTypeID}&title=${item.name}`)
+						break;
+					case 3:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=3&id=${item.tinyTypeID}&title=${item.name}`)
+						break;
+				}
+			},
+			setHeaderBtnPosi(){
+				// 获得胶囊按钮位置信息
+				let headerBtnPosi = uni.getMenuButtonBoundingClientRect();
+				return headerBtnPosi
+			},
+			setSysteminfo(){
+				let systeminfo;
+				uni.getSystemInfo({ // 获取设备信息
+					success: (res) => {
+						systeminfo = res
+					},
 				})
-			}
+				return systeminfo
+			},
 		}
 	}
 </script>
-<style scoped lang="scss">
+<style lang="scss">
 	page {
 		background-color: #fff;
 	}
@@ -126,18 +159,14 @@
 		z-index: 1000;
 		background: #FFFFFF;
 		border-bottom: 1px solid #F7F7F7;
-	}	
-	.category-container{
-		height: 100%;
-	}
-	/*模块分类*/
+	}		
 	.category-list{
 		width: 100%;
 		background-color: #fff;
 		display: flex;
-		
 		.left-aside,.right-aside{
 			position: absolute;
+			top: 100rpx;
 			/*  #ifdef  APP-PLUS  */
 			top: calc(100rpx + var(--status-bar-height));
 			/*  #endif  */
@@ -194,7 +223,6 @@
 		.right-aside{
 			width: 550rpx;
 			left: 200rpx;
-			background: #FFFFFF;
 			.category{
 				width: calc(100%);
 				padding: 0 15rpx 20rpx 0;
@@ -240,9 +268,28 @@
 					.no-data {
 						text-align: center;
 						margin: 30rpx 0;
-						color: #999999;
+						color: #666666;
 						font-size: 24rpx;
 						line-height: 80rpx;
+						.box{
+							width: calc(71.44vw / 3);
+							margin-bottom: 40rpx;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+							flex-wrap: wrap;
+							image{
+								width: 140rpx;
+								height: 140rpx;
+							}
+							.text{
+								margin-top: 8rpx;
+								width: 100%;
+								display: flex;
+								justify-content: center;
+								font-size: $font-size-24;
+							}
+						}
 					}
 				}
 			}

+ 33 - 149
components/cm-module/cm-seller/home.vue

@@ -8,33 +8,16 @@
 			<banner :list="bannerImageList" v-if="isRequest"></banner>
 			<!-- 金刚区菜单 -->
 			<navbars :list="navBarsList" v-if="isRequest"></navbars>
+			<!-- 直播 -->
+			<page-special :templateData="templateData" v-if="isRequest"></page-special>
 		</view>	
+		<!-- 楼层 -->
 		<view class="container-section tui-skeleton">
-			<view v-for="(item,index) in flootData" :key="index">
-				<template v-if="item.type === 1">
-					<!-- 推荐专区 -->
-					<hot-product :list="RecommendList" :userIdentity="userIdentity" v-if="isRequest"></hot-product>
-				</template>
-				<template v-if="item.type === 3">
-					<!-- 供应商专题 -->
-					<supplier-list :list="item.floorData" v-if="isRequest"></supplier-list>
-				</template>
-				<template v-if="item.type === 4">
-					<!-- 商品专题 -->
-					<special-product :list="item.floorData" v-if="isRequest"></special-product>
-				</template>
-				<template v-if="item.type === 5">
-					<!-- 小专题 -->
-					<small-product :list="item.floorData" v-if="isRequest"></small-product>
-				</template>
-				<template v-if="item.type === 6">
-					<!-- 楼层 -->
-					<pages-product :list="item.subFloors" v-if="isRequest"></pages-product>
-				</template>
-			</view>
+			<page-floor :list="pageList" :userIdentity="userIdentity" :pageType='1' v-if="isRequest"></page-floor>
+			<supplier-list :supplierObj="supplierObj" v-if="isRequest"></supplier-list>
 		</view>
 		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="200"></scroll-top>
+		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
 	</view>
 </template>
 
@@ -44,10 +27,8 @@
 	import customer from '@/components/cm-module/homeIndex/customer.vue'
 	import banner from '@/components/cm-module/homeIndex/banner.vue'
 	import navbars from '@/components/cm-module/homeIndex/navbars.vue'
-	import hotProduct from '@/components/cm-module/homeIndex/hotProduct.vue'
-	import pagesProduct from '@/components/cm-module/homeIndex/pagesProduct.vue'
-	import specialProduct from '@/components/cm-module/homeIndex/specialProduct.vue'
-	import smallProduct from '@/components/cm-module/homeIndex/smallProduct.vue'
+	import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+	import pageSpecial from '@/components/cm-module/homeIndex/pageSpecial.vue'
 	import supplierList from '@/components/cm-module/homeIndex/supplierList.vue'
 	import { userInfoLogin } from "@/api/use.js"
 	import { mapState,mapMutations} from 'vuex';
@@ -55,21 +36,14 @@
 		components:{
 			tuiSkeleton,
 			customer,
-			hotProduct,
 			banner,
 			navbars,
-			pagesProduct,
-			specialProduct,
-			smallProduct,
+			pageFloor,
+			pageSpecial,
 			supplierList
 		},
 		data() {
 			return {
-				webviewStyles: {
-					progress: {
-						color: '#FF3333'
-					}
-				},
 				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
@@ -90,9 +64,11 @@
 				flootData:[],//楼层
 				bannerImageList:[],//轮播
 				navBarsList:[],//导航分类
-				RecommendList:[],//热门推荐
+				templateData:{},
+				pageList:[],//楼层
+				supplierObj:{},//供应商列表
 				isScrollTop:false,
-				isRequest:false
+				isRequest:false,
 			}
 		},
 		created() {
@@ -113,16 +89,29 @@
 		methods: {
 			...mapMutations(['login','logout']),
 			GetHomeInit(){//金刚区分类
-				this.CommonService.GetHomeInit({}).then(response =>{
+				this.CommonService.GetHomeInit({source:2}).then(response =>{
 					let data = response.data
 					this.navBarsList = data.topMenuList
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
+			GetHomeTopDataInfo(){//金刚区分类
+				this.CommonService.GetHomeTopDataInfo({source:2}).then(response =>{
+					this.templateData = response.data
+					console.log(this.templateData)
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
 			GetHomeFloorInfo(){//初始化首页楼层数据
-				this.CommonService.GetHomeFloorInfo({}).then(response =>{
-					this.flootData = response.data
+				this.CommonService.GetHomeDataInfo({userId:this.userID,soure:2}).then(response =>{
+					let data = response.data;
+					this.liveList = data.liveList;
+					this.pageList = data.homePageFloor;
+					this.supplierObj = data.supplierImage;
+					this.skeletonShow = false;
+					this.isRequest = true;
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
@@ -131,126 +120,21 @@
 				this.CommonService.GetHomeModulesDataInfo({ userId:this.userID }).then(res =>{
 					let data = res.data;
 					this.bannerImageList = data.bannerImageList
+					this.mallPageModules = data.mallPageModules
 					this.$store.commit('updateAllNum',data.shoppingCartCount)
-					this.GetHomeInit();
+					this.GetHomeInit()
 					this.GetHomeFloorInfo()
-					this.GetHomeRecommendInfo()
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetHomeRecommendInfo(){//首页热门推荐
-				this.CommonService.GetHomeRecommendInfo().then(response =>{
-					this.RecommendList = response.data
-					this.GetProductPrice()
-				})
-			},
-			GetProductPrice(){//获取商品或者活动价格
-				let productIdArr = [];
-				let productIds ='';
-				this.RecommendList.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.id)
-				})
-				productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:productIds}).then(response =>{
-					this.RecommendList = this.ReturnNewProducts(this.RecommendList,response.data);
-					this.skeletonShow = false;
-					this.isRequest = true
+					this.GetHomeTopDataInfo()
 				}).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.id == list[i].productId ){
-							NewArray.push(Object.assign(item,list[i])) 
-						}
-					}
-				});
-				return NewArray
-			},
-			PromotionsFormat(promo){//促销活动类型数据处理
-				if(promo!=null){
-					if(promo.type == 1 && promo.mode == 1){
-						return true
-					}else{
-						return false
-					}
-				}
-				return false
-			},
-			//轮播图切换修改背景色
-			swiperChange(e) {
-				const index = e.detail.current;
-				this.current = index;
-			},
-			formatMoney(num){
-				return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
-					return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-						return $1 + ",";
-					});
-				});
-			},
-			handleBannerActivity(item,index){
-				switch(index){
-					case 0:
-						this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
-						break;
-				}
-			},
 			handleClick(data){
 				this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
 				this.$store.commit('setActivity',data)
 			},
 			handleCancelClick(data){
 				this.$store.commit('setActivity',data)
-			},
-			navToListPage(nav){//三个分类模块跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navToListPage({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navigateToGoods(nav){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navigateToGoods({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navToDetailPage(id) {//跳转商品详情页
-				this.modallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-			},
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			navto(url){
-				this.$api.navigateTo(url)
-			},
-			swiperNavtopage(link){
-				this.$api.navigateTo(`/h5/pages/activity/activity?productID=4204&path=${link}`)
-			},
-			telPhoneTo(){
-				let self = this;
-				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
-					response => {
-						console.log(response.data.contactNumber)
-						uni.makePhoneCall({
-							phoneNumber:response.data.contactNumber //仅为示例
-						});
-					}
-				)	
 			}
 		},
 		onPageScroll(e){//实时获取到滚动的值

+ 1 - 1
components/cm-module/headerNavbar/header-poduct.vue

@@ -45,7 +45,7 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/pages/search/search',
+				clickPath:'/search/pages/search/search',
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
 			    statusBarHeight: 0, // 状态栏高度
 			    navbarHeight: 0, // 顶部导航栏高度,

+ 1 - 1
components/cm-module/home/cm-custom.vue

@@ -53,7 +53,7 @@
 		data() {
 			return{
 				show:false,
-				clickPath:'/pages/search/search',
+				clickPath:'/search/pages/search/search',
 				SearchText:'',
 				tabValue:'产品',
 				CustomBar:this.CustomBar,// 顶部导航栏高度

+ 1 - 1
components/cm-module/homeIndex/customer.vue

@@ -31,7 +31,7 @@
 		},
 		data() {
 			return{
-				clickPath:'/pages/search/search',
+				clickPath:'/search/pages/search/search',
 				hotSearchText:'搜索商品/供应商/项目仪器',
 				CustomBar:this.CustomBar,// 顶部导航栏高度
 				StatusBar: this.StatusBar,

+ 5 - 5
components/cm-module/homeIndex/pageSpecial.vue

@@ -3,7 +3,7 @@
 		<view class="container-pages clearfix">
 			<scroll-view scroll-x>
 				<view class="tui-goods__list">
-					<view class="tui-goods__item">
+					<view class="tui-goods__item" v-if="tempData.liveList">
 						<view class="tui-group-name" @click="LiveGoPath">
 							<view class="tui-group-title"><text>精彩直播</text></view>
 							<view class="iconfont icon-xiayibu"></view>
@@ -22,27 +22,27 @@
 							<view class="tui-goods__text" v-if="flIndex > 0">{{ live.liveTitle }}</view>
 						</view>
 					</view>
-					<view class="tui-goods__item">
+					<view class="tui-goods__item" v-if="tempData.cmImageList">
 						<view class="tui-group-name" @click="NewActivityList">
 							<view class="tui-group-title"><text>最新活动</text></view>
 							<view class="iconfont icon-xiayibu"></view>
 						</view>
 						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(cmImage, flIndex) in tempData.cmImageList" :key="flIndex" @click="NewActivityListPath(cmImage)">
 							<view class="tui-goods__imgbox" v-if="flIndex === 0">
-								<image :src="cmImage.image" mode="" class="tui-goods__img"></image>
+								<image :src="cmImage.homePageImage" mode="" class="tui-goods__img"></image>
 								<view class="tui-goods__name">{{ cmImage.title }}</view>
 							</view>
 							<view class="tui-goods__text" v-if="flIndex > 0">{{ cmImage.title }}</view>
 						</view>
 					</view>
-					<view class="tui-goods__item">
+					<view class="tui-goods__item" v-if="tempData.infoList">
 						<view class="tui-group-name" @click="NavArticlePath('https://www.caimei365.com/info/center-3-1.html')">
 							<view class="tui-group-title"><text>热门文章</text></view>
 							<view class="iconfont icon-xiayibu"></view>
 						</view>
 						<view class="tui-goods__main" :class="flIndex == 0 ? 'one' : ''" v-for="(info, flIndex) in tempData.infoList" :key="flIndex" @click="NavArticlePath(info.link)">
 							<view class="tui-goods__imgbox" v-if="flIndex === 0">
-								<image :src="info.guidanceImage" mode="" class="tui-goods__img"></image>
+								<image :src="info.homePageImage" mode="" class="tui-goods__img"></image>
 								<view class="tui-goods__name">{{ info.title }}</view>
 							</view>
 							<view class="tui-goods__text" v-if="flIndex > 0">{{ info.title }}</view>

+ 1 - 1
components/cm-module/modelAlert/errorAlert.vue

@@ -122,4 +122,4 @@
 		}
 	}
 	
-</style>
+</style>

+ 0 - 86
components/cm-module/noLogin/nologin.vue

@@ -1,86 +0,0 @@
-<template name="nologin">
-	<view class="model-warp">
-		<view class="model-alert">
-			<view class="alert-content">
-				<view class="t-h1">{{text}}</view>
-				<view class="t-p">请联系客服获取邀请码后再登录,联系电话:{{telPhones}}</view>
-			</view>
-			<view class="alert-btn">
-				<view class="btn btn-cancel" @click="hideModel">取消</view>
-				<view class="btn btn-confirm" @click="goLogin">去登录</view>
-			</view>
-		</view>
-	</view>
-</template>
-<script>
-	export default{
-		name:'nologin',
-		data(){
-			return{
-				text:'',
-				telPhones:this.telPhone,
-				productids:this.productid,
-				type:this.alertType,
-				tabPath:this.path
-			}
-		},
-		props:{
-			productid:Number,
-			telPhone:String,
-			alertType:String,
-			path:Boolean
-		},
-		created(){
-			this.getProductid()
-		},
-		methods:{
-			getProductid(){	
-				this.$parent.tel
-				switch(this.alertType){
-					case '1':
-						this.text ='需要登录之后才能加入购物车哟~'
-						break;
-					case '2':
-						this.text ='需要登录之后才能购买哟~'
-						break;
-					case '3':
-						this.text ='需要登录之后查看购物车哟~'
-						break;
-					case '4':
-						this.text ='需要登录才能查看个人中心哟~'
-						break;
-				}
-			},
-			hideModel(){
-				if(this.tabPath){
-					uni.switchTab({
-					    url: '/pages/tabBar/home/index'
-					});
-				}else{
-					this.$parent.isShowNoLogin=false;
-				}
-			},
-			goLogin(){
-				let self = this
-				let url;
-				if(self.alertType =='3'){
-					url =`/pages/login/login?type=1`
-					this.$parent.isShowNoLogin=false;
-				}else if(self.alertType =='4'){
-					url =`/pages/login/login?type=2`
-					this.$parent.isShowNoLogin=true;
-				}else{
-					url=`/pages/login/login?type=detilType&id=${self.productids}`
-					this.$parent.isShowNoLogin=false;
-				}
-				uni.navigateTo ({
-					url
-				})
-			},
-		}
-	}
-</script>
-
-<style>
-	
-</style>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateA.vue

@@ -44,44 +44,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateB.vue

@@ -51,44 +51,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateC.vue

@@ -51,44 +51,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateD.vue

@@ -58,44 +58,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateE.vue

@@ -44,44 +44,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageFloorTemplate/templateF.vue

@@ -37,44 +37,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 42 - 30
components/cm-module/pageTemplate/templateA.vue

@@ -17,7 +17,7 @@
 					<text class="mclap">{{item.name}}</text>
 				</view>
 				<view class="floor-item-price" v-if="item.listType == 1">
-					<view class="floor-item-act">
+					<view class="floor-item-act" >
 						<template v-if="userIdentity === 3">
 							<template v-if="item.product.actStatus===1">
 								<view class="floor-tags" v-if="PromotionsFormat(item.product.promotions)">
@@ -44,44 +44,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>
@@ -164,10 +176,10 @@
 				}
 				return false
 			},
-			navToDetailPage(pros) {//跳转商品详情页
+			navToDetailPage(pros) {//跳转
 				this.$api.FlooryNavigateTo(pros)
 			},
-			BannerNavigateTo(linkType,linkId,linkHref,keyword) {//跳转商品详情页
+			BannerNavigateTo(linkType,linkId,linkHref,keyword) {//跳转
 				this.$api.BannerNavigateTo(linkType,linkId,linkHref,keyword)
 			}
 		}

+ 39 - 27
components/cm-module/pageTemplate/templateB.vue

@@ -51,44 +51,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateC.vue

@@ -51,44 +51,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateD.vue

@@ -58,44 +58,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateE.vue

@@ -44,44 +44,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateF.vue

@@ -37,44 +37,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateG.vue

@@ -37,44 +37,56 @@
 						</template>
 					</view>	
 					<view v-if="hasLogin">
-						<template v-if="userIdentity == 3">
-							<template v-if="item.product.shopID == shopId">
+						<template v-if="item.product.productCategory == 1">
+							<template v-if="userIdentity == 3">
+								<template v-if="item.product.shopID == shopId">
+									<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+										<text class="p big">¥未公开价格</text>
+									</view>
+									<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<text class="p sm">¥</text>
+										<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+									</view>
+								</template>	
+								<template v-else>
+									<view class="no-price">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+										</view>
+									</view>	
+								</template>
+							</template>
+							<template v-else-if="userIdentity ===4">
 								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 									<text class="p big">¥未公开价格</text>
 								</view>
-								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+								<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+									<text class="p big">¥价格仅会员可见</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 									<text class="p sm">¥</text>
 									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 								</view>
-							</template>	
+							</template>
 							<template v-else>
-								<view class="no-price">
-									<view class="p-stars">
-										<text class="p-no">¥</text>
-										<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-									</view>
-								</view>	
+								<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+									<text class="p big">¥未公开价格</text>
+								</view>
+								<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+									<text class="p sm">¥</text>
+									<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								</view>
 							</template>
-						</template>
-						<template v-else-if="userIdentity ===4">
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
-							</view>
-							<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-								<text class="p big">¥价格仅会员可见</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-							</view>
-						</template>
+						</template>	
 						<template v-else>
-							<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-								<text class="p big">¥未公开价格</text>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text>
+								<text class="p big">价格详聊</text>
 							</view>
-							<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+							<view class="price tui-skeleton-rect" v-else>
 								<text class="p sm">¥</text>
-								<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+								<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 							</view>
 						</template>
 					</view>

+ 39 - 27
components/cm-module/pageTemplate/templateH.vue

@@ -40,44 +40,56 @@
 									</template>
 								</view>	
 								<view v-if="hasLogin">
-									<template v-if="userIdentity == 3">
-										<template v-if="item.product.shopID == shopId">
+									<template v-if="item.product.productCategory == 1">
+										<template v-if="userIdentity == 3">
+											<template v-if="item.product.shopID == shopId">
+												<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+													<text class="p big">¥未公开价格</text>
+												</view>
+												<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+													<text class="p sm">¥</text>
+													<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+												</view>
+											</template>	
+											<template v-else>
+												<view class="no-price">
+													<view class="p-stars">
+														<text class="p-no">¥</text>
+														<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
+													</view>
+												</view>	
+											</template>
+										</template>
+										<template v-else-if="userIdentity ===4">
 											<view class="title-none" v-if="item.product.price1TextFlag === '1'">
 												<text class="p big">¥未公开价格</text>
 											</view>
-											<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+											<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
+												<text class="p big">¥价格仅会员可见</text>
+											</view>
+											<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
 												<text class="p sm">¥</text>
 												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
 											</view>
-										</template>	
+										</template>
 										<template v-else>
-											<view class="no-price">
-												<view class="p-stars">
-													<text class="p-no">¥</text>
-													<uni-grader :grade="Number(item.product.price1Grade)" :margin="14"></uni-grader>
-												</view>
-											</view>	
+											<view class="title-none" v-if="item.product.price1TextFlag === '1'">
+												<text class="p big">¥未公开价格</text>
+											</view>
+											<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+												<text class="p sm">¥</text>
+												<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+											</view>
 										</template>
-									</template>
-									<template v-else-if="userIdentity ===4">
-										<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-											<text class="p big">¥未公开价格</text>
-										</view>
-										<view class="title-none"  v-if="item.product.price1TextFlag === '2'">
-											<text class="p big">¥价格仅会员可见</text>
-										</view>
-										<view class="price tui-skeleton-rect" v-if="item.product.price1TextFlag === '0'" :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
-											<text class="p sm">¥</text>
-											<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
-										</view>
-									</template>
+									</template>	
 									<template v-else>
-										<view class="title-none" v-if="item.product.price1TextFlag === '1'">
-											<text class="p big">¥未公开价格</text>
+										<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+											<text class="p sm">¥</text>
+											<text class="p big">价格详聊</text>
 										</view>
-										<view class="price tui-skeleton-rect" v-else :class="PromotionsFormat(item.product.promotions) ? 'none' : ''">
+										<view class="price tui-skeleton-rect" v-else>
 											<text class="p sm">¥</text>
-											<text class="p big">{{ (PromotionsFormat(item.product.promotions) ? item.product.price1 : item.product.retailPrice ) | NumFormat}}</text>
+											<text class="p big">{{ item.product.retailPrice | NumFormat }}</text>
 										</view>
 									</template>
 								</view>

+ 2 - 2
components/cm-module/productDetails/instrument-recommend.vue

@@ -54,13 +54,13 @@
 					 	9:`/second/pages/form/introduce`,
 					 	10:`/second/pages/product/product-list`,
 					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${value.title}`,
+					 	12:`/search/pages/search/search?keyWord=${value.title}`,
 					 	13:`/h5/pages/article/path?link=${value.link}`,
 					 	14:`/h5/pages/article/path?link=${value.link}`,
 					 	15:`/h5/pages/article/path?link=${value.link}`,
 					 	17:`/pages/login/register-select`,
 					 	18:`/h5/pages/article/path?link=${value.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${value.title}`
+					 	19:`/search/pages/search/search-supplier?keyWord=${value.title}`
 					 }
 					 const url = typeMap[value.linkType];
 					 this.$api.navigateTo(url)

+ 114 - 67
components/cm-module/supplier/category.vue

@@ -1,84 +1,100 @@
 <template>
-	<view class="category-container clearfix" :style="{paddingTop:CustomBar+'px'}">
-		<cm-custom :navbar-data='nvabarData'></cm-custom>
-		<!-- 头部轮播 -->
+	<view id="category" :style="{paddingTop:CustomBar+'px'}">
+		<!--顶部搜索导航栏-->
+		<view class="'search-input-fixed" :style="{top:CustomBar/2+'px'}">
+			<cat-search :systeminfo='systeminfo' :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" @click="hanldTabClick"></cat-search>
+		</view>
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
-		<view class="category-list tui-skeleton">
-			<!--顶部搜索导航栏-->
-<!-- 		<view class="'search-input-fixed">
-				<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-			</view> -->
+		<view class="category-list" v-else>
 			<!-- 左侧分类导航 -->
-			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="row" v-if="m.smalltypeList.length > 0" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
-					<view class="text tui-skeleton-fillet">
-						{{m.name}}
-					</view>
+			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
+				<view class="row" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
+					<view class="text">{{m.name}}</view>
 					<view class="block"></view>
 				</view>
 			</scroll-view>
 			<!--右侧子导航-->
-			<scroll-view  scroll-y="true" class="right-aside" style="height:calc(100vh - 202rpx)" :style="{top:CustomBar+'px'}">
-				<view class="category" v-if="n.smalltypeList.length > 0" v-for="(n,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
-					<view class="category-box" v-for="(o,oIndex) in n.smalltypeList" :key="oIndex">
-						<view class="title tui-skeleton-fillet">{{o.name}}</view>
-						<view class="list" v-if="o.tinytypeList.length > 0">
-							<view class="box" v-for="(pro,proIndex) in o.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,proIndex)">
-								<image :src="pro.icon" class="tui-skeleton-fillet"></image>
-								<view class="text tui-skeleton-fillet">{{pro.name}}</view>
+			<scroll-view  scroll-y="true" class="right-aside" :style="{top:(CustomBar+38)+'px',height:(windowHeight-CustomBar+38)+'px'}">
+				<view class="category" v-for="(first,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
+					<template v-if="first.smalltypeList">
+						<view class="category-box AAA" v-for="(small,oIndex) in first.smalltypeList" :key="oIndex">
+							<view class="title">{{small.name}}</view>
+							<view class="list" v-if="small.tinytypeList.length > 0">
+								<view class="box" v-for="(pro,proIndex) in small.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,3)">
+									<image :src="pro.crmIcon ? pro.crmIcon : 'https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
+									<view class="text">{{pro.name}}</view>
+								</view>
+							</view>
+							<view v-else class="no-data">
+								<view class="box" @click.stop="navToListPage(small,2)">
+									<image :src="small.crmIcon ? small.crmIcon : 'https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg'"></image>
+									<view class="text">全部商品</view>
+								</view>
 							</view>
 						</view>
-						<view v-else class="no-data">
-							该栏目暂无分类~
+					</template>
+					<template v-else>
+						<view class="category-box BBB">
+							<view class="title">{{first.name}}</view>
+							<view class="no-data">
+								<view class="box" @click.stop="navToListPage(first,1)">
+									<image src="https://static-b.caimei365.com/app/img/icon/icon-noneproduct.jpg"></image>
+									<view class="text">全部商品</view>
+								</view>
+							</view>
 						</view>
-					</view>
+					</template>
 				</view>
 			</scroll-view>
 		</view>
 	</view>
 </template>
 <script>
-	import btSearch from '@/components/uni-search/bt-search.vue'
-
+	import catSearch from '@/components/uni-search/cat-search.vue'
 	export default {
 		components: {
-			btSearch,
+			catSearch
 		},
 		data() {
 			return {
-				nvabarData: {		//顶部自定义导航
-					title: '商品分类',  // 导航栏 中间的标题
-					haveBack:false,
-					textLeft:this.$store.state.isIphone,
-					textColor:'#333333',
-					bgColor:'#FFFFFF'
+				nvabarData: {							 //顶部自定义导航
+					showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
+					title: ''		// 导航栏 中间的标题
 				},
-				isIphoneX:this.$store.state.isIphoneX,
 				CustomBar:this.CustomBar,// 顶部导航栏高度
-				skeletonShow: true,
+				headerBtnPosi:	this.setHeaderBtnPosi(), //获取设备顶部胶囊高度
+				systeminfo: this.setSysteminfo(),		 //获取设备信息
 				headerShow:true,
-				hotSearchText: '你想要的这里都有',
-				clickPath:'/pages/search/search',
 				showCategoryIndex: 0,
 				categoryList: [],//分类列表
 				search: '',
 				cateTop: {},
 				verticalNavTop: 0,
-				CustomBar:this.CustomBar,// 顶部导航栏高度
+				categoryTabIndex:1,
+				windowHeight:0,
+				scrollHeight:0,
+				skeletonShow:true
 			}
 		},
 		created() {
-			this.getProductCate();
+			this.initData();
 		},
 		methods: {
-			// 跳转至商品列表
-			navToList(id){
-				this.$api.navigateTo(`/pages/product/list?cate_id=${id}`)
+			// 数据初始化
+			initData() {
+				this.GetProductCate(this.categoryTabIndex);
+				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
+				this.windowHeight = windowHeight - 1;
+				this.scrollHeight = windowHeight - 1;
+			},
+			hanldTabClick(data){
+				this.categoryList = []
+				this.GetProductCate(data);
 			},
 			// 获取商品分类列表
-			getProductCate () {
-				this.ProductService.GetProductClassify().then(res =>{
-					this.categoryList = res.data
+			GetProductCate (index) {
+				this.CommonService.GetFirstClassly({typeSort:index,source :'crm'}).then(response =>{
+					this.categoryList = response.data
 					// 查询第一个拥有二级菜单的子菜单
 					for (let i = 0; i < this.categoryList.length; i++) {
 						if (this.categoryList[i].smalltypeList.length > 0) {
@@ -86,9 +102,9 @@
 							break;
 						}
 					}
-					this.skeletonShow = false;
-				}).catch(res =>{
-					this.$util.msg(res.msg,2000);
+					this.skeletonShow = false
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
 				})
 			},
 			showCategory(e,index){//分类切换显示
@@ -97,23 +113,40 @@
 			},
 			toSearch () {// 跳转至搜索详情页
 				uni.navigateTo({
-					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
+					url: `/search/pages/search/search?search=${JSON.stringify(this.search)}`
 				})
 			},
-			navToListPage(pro,index){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: pro.tinyTypeID,
-					success: function () {
-						self.$api.navToListPage({type:'4',value:pro.name,id:pro.tinyTypeID});
-					}
+			navToListPage(item,index){//分类导航跳转
+				switch(index){
+					case 1:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=1&id=${item.bigTypeID}&title=${item.name}`)
+						break;
+					case 2:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=2&id=${item.smallTypeID}&title=${item.name}`)
+						break;
+					case 3:
+						this.$api.navigateTo(`/pages/goods/goods-classify?classType=3&id=${item.tinyTypeID}&title=${item.name}`)
+						break;
+				}
+			},
+			setHeaderBtnPosi(){
+				// 获得胶囊按钮位置信息
+				let headerBtnPosi = uni.getMenuButtonBoundingClientRect();
+				return headerBtnPosi
+			},
+			setSysteminfo(){
+				let systeminfo;
+				uni.getSystemInfo({ // 获取设备信息
+					success: (res) => {
+						systeminfo = res
+					},
 				})
-			}
+				return systeminfo
+			},
 		}
 	}
 </script>
-<style scoped lang="scss">
+<style lang="scss">
 	page {
 		background-color: #fff;
 	}
@@ -126,18 +159,14 @@
 		z-index: 1000;
 		background: #FFFFFF;
 		border-bottom: 1px solid #F7F7F7;
-	}	
-	.category-container{
-		height: 100%;
-	}
-	/*模块分类*/
+	}		
 	.category-list{
 		width: 100%;
 		background-color: #fff;
 		display: flex;
-		
 		.left-aside,.right-aside{
 			position: absolute;
+			top: 100rpx;
 			/*  #ifdef  APP-PLUS  */
 			top: calc(100rpx + var(--status-bar-height));
 			/*  #endif  */
@@ -194,7 +223,6 @@
 		.right-aside{
 			width: 550rpx;
 			left: 200rpx;
-			background: #FFFFFF;
 			.category{
 				width: calc(100%);
 				padding: 0 15rpx 20rpx 0;
@@ -240,9 +268,28 @@
 					.no-data {
 						text-align: center;
 						margin: 30rpx 0;
-						color: #999999;
+						color: #666666;
 						font-size: 24rpx;
 						line-height: 80rpx;
+						.box{
+							width: calc(71.44vw / 3);
+							margin-bottom: 40rpx;
+							display: flex;
+							justify-content: center;
+							align-items: center;
+							flex-wrap: wrap;
+							image{
+								width: 140rpx;
+								height: 140rpx;
+							}
+							.text{
+								margin-top: 8rpx;
+								width: 100%;
+								display: flex;
+								justify-content: center;
+								font-size: $font-size-24;
+							}
+						}
 					}
 				}
 			}

+ 33 - 149
components/cm-module/supplier/home.vue

@@ -8,33 +8,16 @@
 			<banner :list="bannerImageList" v-if="isRequest"></banner>
 			<!-- 金刚区菜单 -->
 			<navbars :list="navBarsList" v-if="isRequest"></navbars>
+			<!-- 直播 -->
+			<page-special :templateData="templateData" v-if="isRequest"></page-special>
 		</view>	
+		<!-- 楼层 -->
 		<view class="container-section tui-skeleton">
-			<view v-for="(item,index) in flootData" :key="index">
-				<template v-if="item.type === 1">
-					<!-- 推荐专区 -->
-					<hot-product :list="RecommendList" :userIdentity="userIdentity" v-if="isRequest"></hot-product>
-				</template>
-				<template v-if="item.type === 3">
-					<!-- 供应商专题 -->
-					<supplier-list :list="item.floorData" v-if="isRequest"></supplier-list>
-				</template>
-				<template v-if="item.type === 4">
-					<!-- 商品专题 -->
-					<special-product :list="item.floorData" v-if="isRequest"></special-product>
-				</template>
-				<template v-if="item.type === 5">
-					<!-- 小专题 -->
-					<small-product :list="item.floorData" v-if="isRequest"></small-product>
-				</template>
-				<template v-if="item.type === 6">
-					<!-- 楼层 -->
-					<pages-product :list="item.subFloors" v-if="isRequest"></pages-product>
-				</template>
-			</view>
+			<page-floor :list="pageList" :userIdentity="userIdentity" :pageType='1' v-if="isRequest"></page-floor>
+			<supplier-list :supplierObj="supplierObj" v-if="isRequest"></supplier-list>
 		</view>
 		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="200"></scroll-top>
+		<scroll-top :isScrollTop="isScrollTop" :bottom="50"></scroll-top>
 	</view>
 </template>
 
@@ -44,10 +27,8 @@
 	import customer from '@/components/cm-module/homeIndex/customer.vue'
 	import banner from '@/components/cm-module/homeIndex/banner.vue'
 	import navbars from '@/components/cm-module/homeIndex/navbars.vue'
-	import hotProduct from '@/components/cm-module/homeIndex/hotProduct.vue'
-	import pagesProduct from '@/components/cm-module/homeIndex/pagesProduct.vue'
-	import specialProduct from '@/components/cm-module/homeIndex/specialProduct.vue'
-	import smallProduct from '@/components/cm-module/homeIndex/smallProduct.vue'
+	import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+	import pageSpecial from '@/components/cm-module/homeIndex/pageSpecial.vue'
 	import supplierList from '@/components/cm-module/homeIndex/supplierList.vue'
 	import { userInfoLogin } from "@/api/use.js"
 	import { mapState,mapMutations} from 'vuex';
@@ -55,21 +36,14 @@
 		components:{
 			tuiSkeleton,
 			customer,
-			hotProduct,
 			banner,
 			navbars,
-			pagesProduct,
-			specialProduct,
-			smallProduct,
+			pageFloor,
+			pageSpecial,
 			supplierList
 		},
 		data() {
 			return {
-				webviewStyles: {
-					progress: {
-						color: '#FF3333'
-					}
-				},
 				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,
@@ -90,9 +64,11 @@
 				flootData:[],//楼层
 				bannerImageList:[],//轮播
 				navBarsList:[],//导航分类
-				RecommendList:[],//热门推荐
+				templateData:{},
+				pageList:[],//楼层
+				supplierObj:{},//供应商列表
 				isScrollTop:false,
-				isRequest:false
+				isRequest:false,
 			}
 		},
 		created() {
@@ -113,16 +89,29 @@
 		methods: {
 			...mapMutations(['login','logout']),
 			GetHomeInit(){//金刚区分类
-				this.CommonService.GetHomeInit({}).then(response =>{
+				this.CommonService.GetHomeInit({source:2}).then(response =>{
 					let data = response.data
 					this.navBarsList = data.topMenuList
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
+			GetHomeTopDataInfo(){//金刚区分类
+				this.CommonService.GetHomeTopDataInfo({source:2}).then(response =>{
+					this.templateData = response.data
+					console.log(this.templateData)
+				}).catch(error =>{
+					this.$util.msg(error.msg,2000)
+				})
+			},
 			GetHomeFloorInfo(){//初始化首页楼层数据
-				this.CommonService.GetHomeFloorInfo({}).then(response =>{
-					this.flootData = response.data
+				this.CommonService.GetHomeDataInfo({userId:this.userID,soure:2}).then(response =>{
+					let data = response.data;
+					this.liveList = data.liveList;
+					this.pageList = data.homePageFloor;
+					this.supplierObj = data.supplierImage;
+					this.skeletonShow = false;
+					this.isRequest = true;
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
@@ -131,126 +120,21 @@
 				this.CommonService.GetHomeModulesDataInfo({ userId:this.userID }).then(res =>{
 					let data = res.data;
 					this.bannerImageList = data.bannerImageList
+					this.mallPageModules = data.mallPageModules
 					this.$store.commit('updateAllNum',data.shoppingCartCount)
-					this.GetHomeInit();
+					this.GetHomeInit()
 					this.GetHomeFloorInfo()
-					this.GetHomeRecommendInfo()
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetHomeRecommendInfo(){//首页热门推荐
-				this.CommonService.GetHomeRecommendInfo().then(response =>{
-					this.RecommendList = response.data
-					this.GetProductPrice()
-				})
-			},
-			GetProductPrice(){//获取商品或者活动价格
-				let productIdArr = [];
-				let productIds ='';
-				this.RecommendList.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.id)
-				})
-				productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:productIds}).then(response =>{
-					this.RecommendList = this.ReturnNewProducts(this.RecommendList,response.data);
-					this.skeletonShow = false;
-					this.isRequest = true
+					this.GetHomeTopDataInfo()
 				}).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.id == list[i].productId ){
-							NewArray.push(Object.assign(item,list[i])) 
-						}
-					}
-				});
-				return NewArray
-			},
-			PromotionsFormat(promo){//促销活动类型数据处理
-				if(promo!=null){
-					if(promo.type == 1 && promo.mode == 1){
-						return true
-					}else{
-						return false
-					}
-				}
-				return false
-			},
-			//轮播图切换修改背景色
-			swiperChange(e) {
-				const index = e.detail.current;
-				this.current = index;
-			},
-			formatMoney(num){
-				return num.toString().replace(/\d+/, function (n) { // 先提取整数部分
-					return n.replace(/(\d)(?=(\d{3})+$)/g, function ($1) { // 对整数部分添加分隔符
-						return $1 + ",";
-					});
-				});
-			},
-			handleBannerActivity(item,index){
-				switch(index){
-					case 0:
-						this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
-						break;
-				}
-			},
 			handleClick(data){
 				this.$api.navigateTo(`/h5/pages/activity/activity_mid`)
 				this.$store.commit('setActivity',data)
 			},
 			handleCancelClick(data){
 				this.$store.commit('setActivity',data)
-			},
-			navToListPage(nav){//三个分类模块跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navToListPage({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navigateToGoods(nav){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: nav.id,
-					success: function () {
-						self.$api.navigateToGoods({type:'0',value:nav.classifyName,id:nav.id});
-					}
-				})
-			},
-			navToDetailPage(id) {//跳转商品详情页
-				this.modallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`)
-			},
-			handleContact(e){
-				console.log(e.detail.path)
-				console.log(e.detail.query)
-			},
-			navto(url){
-				this.$api.navigateTo(url)
-			},
-			swiperNavtopage(link){
-				this.$api.navigateTo(`/h5/pages/activity/activity?productID=4204&path=${link}`)
-			},
-			telPhoneTo(){
-				let self = this;
-				this.$api.get('/home/afterSale',{organizeID:this.userOrganizeID}, 
-					response => {
-						console.log(response.data.contactNumber)
-						uni.makePhoneCall({
-							phoneNumber:response.data.contactNumber //仅为示例
-						});
-					}
-				)	
 			}
 		},
 		onPageScroll(e){//实时获取到滚动的值

+ 0 - 515
components/thorui/tui-cascade-selection/tui-cascade-selection.vue

@@ -1,515 +0,0 @@
-<template>
-	<view class="tui-cascade-selection">
-		<scroll-view
-			scroll-x
-			scroll-with-animation
-			:scroll-into-view="scrollViewId"
-			:style="{ backgroundColor: headerBgColor }"
-			class="tui-bottom-line"
-			:class="{ 'tui-btm-none': !headerLine }"
-		>
-			<view class="tui-selection-header" :style="{ height: tabsHeight, backgroundColor: backgroundColor }">
-				<view
-					class="tui-header-item"
-					:class="{ 'tui-font-bold': index === currentTab && bold }"
-					:style="{ color: index === currentTab ? activeColor : color, fontSize: size + 'rpx' }"
-					:id="`id_${index}`"
-					@tap.stop="swichNav"
-					:data-current="index"
-					v-for="(item, index) in selectedArr"
-					:key="index"
-				>
-					{{ item.text }}
-					<view class="tui-active-line" :style="{ backgroundColor: lineColor }" v-if="index === currentTab && showLine"></view>
-				</view>
-			</view>
-		</scroll-view>
-		<swiper class="tui-selection-list" :current="currentTab" duration="300" @change="switchTab" :style="{ height: height, backgroundColor: backgroundColor }">
-			<swiper-item v-for="(item, index) in selectedArr" :key="index">
-				<scroll-view scroll-y :scroll-into-view="item.scrollViewId" class="tui-selection-item" :style="{ height: height }">
-					<view class="tui-first-item" :style="{ height: firstItemTop }"></view>
-					<view
-						class="tui-selection-cell"
-						:style="{ padding: padding, backgroundColor: backgroundColor }"
-						:id="`id_${subIndex}`"
-						v-for="(subItem, subIndex) in item.list"
-						:key="subIndex"
-						@tap="change(index, subIndex, subItem)"
-					>
-						<icon type="success_no_circle" v-if="item.index === subIndex" :color="checkMarkColor" :size="checkMarkSize" class="tui-icon-success"></icon>
-						<image :src="subItem.src" v-if="subItem.src" class="tui-cell-img" :style="{ width: imgWidth, height: imgHeight, borderRadius: radius }"></image>
-						<view
-							class="tui-cell-title"
-							:class="{ 'tui-font-bold': item.index === subIndex && textBold, 'tui-flex-shrink': nowrap }"
-							:style="{ color: item.index === subIndex ? textActiveColor : textColor, fontSize: textSize + 'rpx' }"
-						>
-							{{ subItem.text }}
-						</view>
-						<view class="tui-cell-sub_title" :style="{ color: subTextColor, fontSize: subTextSize + 'rpx' }" v-if="subItem.subText">{{ subItem.subText }}</view>
-					</view>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-export default {
-	name: 'tuiCascadeSelection',
-	props: {
-		/**
-			 * 如果下一级是请求返回,则为第一级数据,否则所有数据
-			 * 数据格式
-			  [{
-				  src: "",
-				  text: "",
-				  subText: "",
-				  value: 0,
-				  children:[{
-					  text: "",
-					  subText: "",
-					  value: 0,
-					  children:[]
-			   }]
-			  }]
-			 * */
-		itemList: {
-			type: Array,
-			default: () => {
-				return [];
-			}
-		},
-		/*
-		   初始化默认选中数据
-		   [{
-			text: "",//选中text
-			subText: '',//选中subText
-			value: '',//选中value
-			src: '', //选中src,没有则传空或不传
-			index: 0, //选中数据在当前layer索引
-			list: [{src: "", text: "", subText: "", value: 101}] //所有layer数据集合
-		  }];
-		    
-		   */
-		defaultItemList: {
-			type: Array,
-			value: []
-		},
-		//是否显示header底部细线
-		headerLine: {
-			type: Boolean,
-			default: true
-		},
-		//header背景颜色
-		headerBgColor: {
-			type: String,
-			default: '#FFFFFF'
-		},
-		//顶部标签栏高度
-		tabsHeight: {
-			type: String,
-			default: '88rpx'
-		},
-		//默认显示文字
-		text: {
-			type: String,
-			default: '请选择'
-		},
-		//tabs 文字大小
-		size: {
-			type: Number,
-			default: 28
-		},
-		//tabs 文字颜色
-		color: {
-			type: String,
-			default: '#555'
-		},
-		//选中颜色
-		activeColor: {
-			type: String,
-			default: '#5677fc'
-		},
-		//选中后文字加粗
-		bold: {
-			type: Boolean,
-			default: true
-		},
-		//选中后是否显示底部线条
-		showLine: {
-			type: Boolean,
-			default: true
-		},
-		//线条颜色
-		lineColor: {
-			type: String,
-			default: '#5677fc'
-		},
-		//icon 大小
-		checkMarkSize: {
-			type: Number,
-			default: 15
-		},
-		//icon 颜色
-		checkMarkColor: {
-			type: String,
-			default: '#5677fc'
-		},
-		//item 图片宽度
-		imgWidth: {
-			type: String,
-			default: '40rpx'
-		},
-		//item 图片高度
-		imgHeight: {
-			type: String,
-			default: '40rpx'
-		},
-		//图片圆角
-		radius: {
-			type: String,
-			default: '50%'
-		},
-		//item text颜色
-		textColor: {
-			type: String,
-			default: '#333'
-		},
-		textActiveColor: {
-			type: String,
-			default: '#333'
-		},
-		//选中后字体是否加粗
-		textBold: {
-			type: Boolean,
-			default: true
-		},
-		//item text字体大小
-		textSize: {
-			type: Number,
-			default: 28
-		},
-		//text 是否不换行
-		nowrap: {
-			type: Boolean,
-			default: false
-		},
-		//item subText颜色
-		subTextColor: {
-			type: String,
-			default: '#999'
-		},
-		//item subText字体大小
-		subTextSize: {
-			type: Number,
-			default: 24
-		},
-		// item padding
-		padding: {
-			type: String,
-			default: '20rpx 30rpx'
-		},
-		//占位高度,第一条数据距离顶部距离
-		firstItemTop: {
-			type: String,
-			default: '20rpx'
-		},
-		//swiper 高度
-		height: {
-			type: String,
-			default: '300px'
-		},
-		//item  swiper 内容部分背景颜色
-		backgroundColor: {
-			type: String,
-			default: '#FFFFFF'
-		},
-		//子集数据是否请求返回(默认false,一次性返回所有数据)
-		request: {
-			type: Boolean,
-			default: false
-		},
-		//子级数据(当有改变时,默认当前选中项新增子级数据,request=true时生效)
-		receiveData: {
-			type: Array,
-			default: () => {
-				return [];
-			}
-		},
-		//改变值则重置数据
-		reset: {
-			type: [Number, String],
-			default: 0
-		}
-	},
-	watch: {
-		itemList(val) {
-			this.initData(val, -1);
-		},
-		receiveData(val) {
-			this.subLevelData(val, this.currentTab);
-		},
-		reset() {
-			this.initData(this.itemList, -1);
-		}
-	},
-	created() {
-		let defaultItemList = this.defaultItemList || [];
-		if (defaultItemList.length > 0) {
-			defaultItemList.map(item => {
-				item.scrollViewId = `id_${item.index}`;
-			});
-			this.selectedArr = defaultItemList;
-			this.currentTab = defaultItemList.length - 1;
-			this.$nextTick(() => {
-				this.checkCor();
-			});
-		} else {
-			this.initData(this.itemList, -1);
-		}
-	},
-	data() {
-		return {
-			currentTab: 0,
-			//tab栏scrollview滚动的位置
-			scrollViewId: 'id__1',
-			selectedArr: []
-		};
-	},
-	methods: {
-		initData(data, layer) {
-			if (!data || data.length === 0) return;
-			if (this.request) {
-				//第一级数据
-				this.subLevelData(data, layer);
-			} else {
-				let selectedValue = this.selectedValue || {};
-				if (selectedValue.type) {
-					this.setDefaultData(selectedValue);
-				} else {
-					this.subLevelData(this.getItemList(layer, -1), layer);
-				}
-			}
-		},
-		removeChildren(data) {
-			let list = data.map(item => {
-				delete item['children'];
-				return item;
-			});
-			return list;
-		},
-		getItemList(layer, index) {
-			let list = [];
-			let arr = JSON.parse(JSON.stringify(this.itemList));
-			if (layer == -1) {
-				list = this.removeChildren(arr);
-			} else {
-				let value = this.selectedArr[0].index;
-				value = value == -1 ? index : value;
-				list = arr[value].children || [];
-				if (layer > 0) {
-					for (let i = 1; i < layer + 1; i++) {
-						let val = layer === i ? index : this.selectedArr[i].index;
-						list = list[val].children || [];
-						if (list.length === 0) break;
-					}
-				}
-				list = this.removeChildren(list);
-			}
-			return list;
-		},
-		//滚动切换
-		switchTab: function(e) {
-			this.currentTab = e.detail.current;
-			this.checkCor();
-		},
-		//点击标题切换当
-		swichNav: function(e) {
-			let cur = e.currentTarget.dataset.current;
-			if (this.currentTab != cur) {
-				this.currentTab = cur;
-			}
-		},
-		checkCor: function() {
-			let item = this.selectedArr[this.currentTab];
-			item.scrollViewId = 'id__1';
-			this.$nextTick(() => {
-				setTimeout(() => {
-					let val = item.index < 2 ? 0 : Number(item.index - 2);
-					item.scrollViewId = `id_${val}`;
-				}, 2);
-			});
-			
-			if (this.currentTab > 1) {
-				this.scrollViewId = `id_${this.currentTab - 1}`;
-			} else {
-				this.scrollViewId = `id_0`;
-			}
-		},
-		change(index, subIndex, subItem) {
-			let item = this.selectedArr[index];
-			if (item.index == subIndex) return;
-			item.index = subIndex;
-			item.text = subItem.text;
-			item.value = subItem.value;
-			item.subText = subItem.subText || '';
-			item.src = subItem.src || '';
-
-			this.$emit('change', {
-				layer: index,
-				subIndex: subIndex, //layer=> Array index
-				...subItem
-			});
-
-			if (!this.request) {
-				let data = this.getItemList(index, subIndex);
-				this.subLevelData(data, index);
-			}
-		},
-		//新增子级数据时处理
-		subLevelData(data, layer) {
-			if (!data || data.length === 0) {
-				if (layer == -1) return;
-				//完成选择
-				let result = JSON.parse(JSON.stringify(this.selectedArr));
-				let lastItem = result[result.length - 1] || {};
-				let text = '';
-				result.map(item => {
-					text += item.text;
-					delete item['list'];
-					//delete item['index'];
-					delete item['scrollViewId'];
-					return item;
-				});
-				this.$emit('complete', {
-					result: result,
-					value: lastItem.value,
-					text: text,
-					subText: lastItem.subText,
-					src: lastItem.src
-				});
-			} else {
-				//重置数据( >layer层级)
-				let item = [
-					{
-						text: this.text,
-						subText: '',
-						value: '',
-						src: '',
-						index: -1,
-						scrollViewId: 'id__1',
-						list: data
-					}
-				];
-				if (layer == -1) {
-					this.selectedArr = item;
-				} else {
-					let retainArr = this.selectedArr.slice(0, layer + 1);
-					this.selectedArr = retainArr.concat(item);
-				}
-				this.$nextTick(() => {
-					this.currentTab = this.selectedArr.length - 1;
-				});
-			}
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-cascade-selection {
-	width: 100%;
-	box-sizing: border-box;
-}
-
-.tui-selection-header {
-	width: 100%;
-	display: flex;
-	align-items: center;
-	position: relative;
-	box-sizing: border-box;
-}
-
-.tui-bottom-line {
-	position: relative;
-}
-
-.tui-bottom-line::after {
-	width: 100%;
-	content: '';
-	position: absolute;
-	border-bottom: 1rpx solid #eaeef1;
-	-webkit-transform: scaleY(0.5) translateZ(0);
-	transform: scaleY(0.5) translateZ(0);
-	transform-origin: 0 100%;
-	bottom: 0;
-	right: 0;
-	left: 0;
-}
-
-.tui-btm-none::after {
-	border-bottom: 0 !important;
-}
-
-.tui-header-item {
-	max-width: 240rpx;
-	padding: 15rpx 30rpx;
-	box-sizing: border-box;
-	flex-shrink: 0;
-	overflow: hidden;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-	position: relative;
-}
-
-.tui-font-bold {
-	font-weight: bold;
-}
-
-.tui-active-line {
-	width: 60rpx;
-	height: 6rpx;
-	border-radius: 4rpx;
-	position: absolute;
-	bottom: 0;
-	right: 0;
-	left: 50%;
-	transform: translateX(-50%);
-}
-
-.tui-selection-cell {
-	width: 100%;
-	box-sizing: border-box;
-	display: flex;
-	align-items: center;
-}
-
-.tui-icon-success {
-	margin-right: 12rpx;
-}
-
-.tui-cell-img {
-	margin-right: 12rpx;
-	flex-shrink: 0;
-}
-
-.tui-cell-title {
-	word-break: break-all;
-}
-
-.tui-flex-shrink {
-	flex-shrink: 0;
-}
-
-.tui-font-bold {
-	font-weight: bold;
-}
-
-.tui-cell-sub_title {
-	margin-left: 20rpx;
-	word-break: break-all;
-}
-.tui-first-item {
-	width: 100%;
-}
-</style>

+ 0 - 251
components/thorui/tui-circular-progress/tui-circular-progress.vue

@@ -1,251 +0,0 @@
-<template>
-	<view class="tui-circular-container" :style="{ width: diam + 'px', height: (height || diam) + 'px' }">
-		<canvas class="tui-circular-default" :canvas-id="defaultCanvasId" :id="defaultCanvasId" :style="{ width: diam + 'px', height: (height || diam) + 'px' }"
-		 v-if="defaultShow"></canvas>
-		<canvas class="tui-circular-progress" :canvas-id="progressCanvasId" :id="progressCanvasId" :style="{ width: diam + 'px', height: (height || diam) + 'px' }"></canvas>
-		<slot />
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'tuiCircularProgress',
-		props: {
-			/*
-			  传值需使用rpx进行转换保证各终端兼容
-			  px = rpx / 750 * wx.getSystemInfoSync().windowWidth
-			  圆形进度条(画布)宽度,直径 [px]
-			*/
-			diam: {
-				type: Number,
-				default: 60
-			},
-			//圆形进度条(画布)高度,默认取diam值[当画半弧时传值,height有值时则取height]
-			height: {
-				type: Number,
-				default: 0
-			},
-			//进度条线条宽度[px]
-			lineWidth: {
-				type: Number,
-				default: 4
-			},
-			/*
-			 线条的端点样式
-			 butt:向线条的每个末端添加平直的边缘
-			 round	向线条的每个末端添加圆形线帽
-			 square	向线条的每个末端添加正方形线帽
-			*/
-			lineCap: {
-				type: String,
-				default: 'round'
-			},
-			//圆环进度字体大小 [px]
-			fontSize: {
-				type: Number,
-				default: 12
-			},
-			//圆环进度字体颜色
-			fontColor: {
-				type: String,
-				default: '#5677fc'
-			},
-			//是否显示进度文字
-			fontShow: {
-				type: Boolean,
-				default: true
-			},
-			/*
-			 自定义显示文字[默认为空,显示百分比,fontShow=true时生效]
-			 可以使用 slot自定义显示内容
-			*/
-			percentText: {
-				type: String,
-				default: ''
-			},
-			//是否显示默认(背景)进度条
-			defaultShow: {
-				type: Boolean,
-				default: true
-			},
-			//默认进度条颜色
-			defaultColor: {
-				type: String,
-				default: '#CCC'
-			},
-			//进度条颜色
-			progressColor: {
-				type: String,
-				default: '#5677fc'
-			},
-			//进度条渐变颜色[结合progressColor使用,默认为空]
-			gradualColor: {
-				type: String,
-				default: ''
-			},
-			//起始弧度,单位弧度
-			sAngle: {
-				type: Number,
-				default: -Math.PI / 2
-			},
-			//指定弧度的方向是逆时针还是顺时针。默认是false,即顺时针
-			counterclockwise: {
-				type: Boolean,
-				default: false
-			},
-			//进度百分比 [10% 传值 10]
-			percentage: {
-				type: Number,
-				default: 0
-			},
-			//进度百分比缩放倍数[使用半弧为100%时,则可传2]
-			multiple: {
-				type: Number,
-				default: 1
-			},
-			//动画执行时间[单位毫秒,低于50无动画]
-			duration: {
-				type: Number,
-				default: 800
-			},
-			//backwards: 动画从头播;forwards:动画从上次结束点接着播
-			activeMode: {
-				type: String,
-				default: 'backwards'
-			}
-		},
-		watch: {
-			percentage(val) {
-				this.initDraw()
-			}
-		},
-		data() {
-			return {
-				// #ifdef MP-WEIXIN
-				progressCanvasId:"progressCanvasId",
-				defaultCanvasId: "defaultCanvasId",
-				// #endif
-				// #ifndef MP-WEIXIN
-				progressCanvasId:this.getCanvasId(),
-				defaultCanvasId: this.getCanvasId(),
-				// #endif
-				progressContext: null,
-				linearGradient: null,
-				//起始百分比
-				startPercentage: 0
-				// dpi
-				//pixelRatio: uni.getSystemInfoSync().pixelRatio
-			};
-		},
-		mounted() {
-			this.initDraw(true)
-		},
-		methods: {
-			//初始化绘制
-			initDraw(init) {
-				let start = this.activeMode === 'backwards' ? 0 : this.startPercentage;
-				if (this.defaultShow && init) {
-					this.drawDefaultCircular();
-				}
-				this.drawProgressCircular(start);
-			},
-			//默认(背景)圆环
-			drawDefaultCircular() {
-				let ctx = uni.createCanvasContext(this.defaultCanvasId, this);
-				ctx.setLineWidth(this.lineWidth);
-				ctx.setStrokeStyle(this.defaultColor);
-				//终止弧度
-				let eAngle = Math.PI * (this.height ? 1 : 2) + this.sAngle;
-				this.drawArc(ctx, eAngle);
-			},
-			//进度圆环
-			drawProgressCircular(startPercentage) {
-				let ctx = this.progressContext;
-				let gradient = this.linearGradient;
-				if (!ctx) {
-					ctx = uni.createCanvasContext(this.progressCanvasId, this);
-					//创建一个线性的渐变颜色 CanvasGradient对象
-					gradient = ctx.createLinearGradient(0, 0, this.diam, 0);
-					gradient.addColorStop('0', this.progressColor);
-					if (this.gradualColor) {
-						gradient.addColorStop('1', this.gradualColor);
-					}
-					this.progressContext = ctx;
-					this.linearGradient = gradient;
-				}
-				ctx.setLineWidth(this.lineWidth);
-				ctx.setStrokeStyle(gradient);
-				let time = this.duration / this.percentage;
-				if (this.percentage > 0 || !this.fontShow) {
-					startPercentage = this.duration < 50 ? this.percentage - 1 : startPercentage;
-					startPercentage++;
-					if (startPercentage > this.percentage) {
-						this.$emit('end', {
-							canvasId: this.progressCanvasId
-						});
-						return;
-					}
-				}
-				if (this.fontShow) {
-					ctx.setFontSize(this.fontSize);
-					ctx.setFillStyle(this.fontColor);
-					ctx.setTextAlign('center');
-					ctx.setTextBaseline('middle');
-					let percentage = this.percentText;
-					if (!percentage) {
-						percentage = this.counterclockwise ? 100 - startPercentage * this.multiple : startPercentage * this.multiple;
-						percentage = `${percentage}%`;
-					}
-					let radius = this.diam / 2;
-					ctx.fillText(percentage, radius, radius);
-					if (this.percentage === 0 || (this.counterclockwise && startPercentage === 100)) {
-						ctx.draw();
-						return;
-					}
-				}
-				let eAngle = ((2 * Math.PI) / 100) * startPercentage + this.sAngle;
-				this.drawArc(ctx, eAngle);
-				setTimeout(() => {
-					this.startPercentage = startPercentage;
-					this.drawProgressCircular(startPercentage);
-					this.$emit('change', {
-						percentage: startPercentage
-					});
-				}, time);
-				// #ifdef H5
-				// requestAnimationFrame(()=>{})
-				// #endif
-			},
-			//创建弧线
-			drawArc(ctx, eAngle) {
-				ctx.setLineCap(this.lineCap);
-				ctx.beginPath();
-				let radius = this.diam / 2; //x=y
-				ctx.arc(radius, radius, radius - this.lineWidth, this.sAngle, eAngle, this.counterclockwise);
-				ctx.stroke();
-				ctx.draw();
-			},
-			//生成canvasId
-			getCanvasId() {
-				let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
-					return (c === 'x' ? (Math.random() * 16) | 0 : 'r&0x3' | '0x8').toString(16);
-				});
-				return uuid;
-			}
-		}
-	};
-</script>
-
-<style scoped>
-	.tui-circular-container,
-	.tui-circular-default {
-		position: relative;
-	}
-
-	.tui-circular-progress {
-		position: absolute;
-		left: 0;
-		top: 0;
-		z-index: 10;
-	}
-</style>

+ 0 - 255
components/thorui/tui-fab/tui-fab.vue

@@ -1,255 +0,0 @@
-<template>
-	<view @touchmove.stop.prevent>
-		<view class="tui-fab-box" :class="{'tui-fab-right':!left || (left && right)}" :style="{left:getLeft(),right:getRight(),bottom:bottom+'rpx'}">
-			<view class="tui-fab-btn" :class="{'tui-visible':isOpen,'tui-fab-hidden':hidden}">
-				<view class="tui-fab-item-box" :class="{'tui-fab-item-left':left && !right && item.imgUrl}" v-for="(item,index) in btnList"
-				 :key="index" @tap.stop="handleClick(index)">
-					<view :class="[left && !right?'tui-text-left':'tui-text-right']" v-if="item.imgUrl" :style="{fontSize:item.fontSize+'rpx',color:item.color}">{{item.text || ""}}</view>
-					<view class="tui-fab-item" :style="{width:width+'rpx',height:height+'rpx',background:item.bgColor || bgColor,borderRadius:radius}">
-						<view class="tui-fab-title" v-if="!item.imgUrl" :style="{fontSize:item.fontSize+'rpx',color:item.color}">{{item.text || ""}}</view>
-						<image :src="item.imgUrl" class="tui-fab-img" v-else :style="{width:item.imgWidth+'rpx',height:item.imgHeight+'rpx'}"></image>
-					</view>
-				</view>
-			</view>
-			<view class="tui-fab-item" :class="{'tui-active':isOpen}" :style="{width:width+'rpx',height:height+'rpx',borderRadius:radius,background:bgColor,color:color}"
-			 @tap.stop="handleClick(-1)">
-				<view class="tui-fab-icon tui-icon-plus"></view>
-			</view>
-		</view>
-		<view class="tui-fab-mask" :class="{'tui-visible':isOpen}" @tap="handleClickCancel"></view>
-	</view>
-</template>
-
-<script>
-	//拓展出来的按钮不应多于6个,否则违反了作为悬浮按钮的快速、高效的原则
-	export default {
-		name: "tuiFab",
-		props: {
-			//rpx 为0时值为auto
-			left: {
-				type: Number,
-				default: 0
-			},
-			//rpx 当为0时且left不为0,值为auto
-			right: {
-				type: Number,
-				default: 80
-			},
-			//rpx bottom值
-			bottom: {
-				type: Number,
-				default: 100
-			},
-			//默认按钮 宽度 rpx
-			width: {
-				type: Number,
-				default: 108
-			},
-			//默认按钮 高度 rpx
-			height: {
-				type: Number,
-				default: 108
-			},
-			//圆角值
-			radius: {
-				type: String,
-				default: "50%"
-			},
-			//默认按钮背景颜色
-			bgColor: {
-				type: String,
-				default: "#5677fc"
-			},
-			//字体颜色
-			color: {
-				type: String,
-				default: "#fff"
-			},
-			//拓展按钮
-			// bgColor: "#5677fc",
-			// //图标/图片地址
-			// imgUrl: "/static/images/fab/fab_reward.png",
-			// //图片高度 rpx
-			// imgHeight: 60,
-			// //图片宽度 rpx
-			// imgWidth: 60,
-			// //名称
-			// text: "名称",
-			// //字体大小
-			// fontSize: 30,
-			// //字体颜色
-			// color: "#fff"
-			btnList: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			//点击遮罩 是否可关闭
-			maskClosable: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				isOpen: false,
-				hidden: true,
-				timer: null
-			};
-		},
-		methods: {
-			getLeft() {
-				let val = "auto"
-				if (this.left && !this.right) {
-					val = this.left + 'rpx'
-				}
-				return val
-			},
-			getRight() {
-				let val = this.right + 'rpx'
-				if (this.left && !this.right) {
-					val = "auto"
-				}
-				return val
-			},
-			handleClick: function(index) {
-				this.hidden = false
-				clearTimeout(this.timer)
-				if (index == -1 && this.btnList.length) {
-					this.isOpen = !this.isOpen
-				} else {
-					this.$emit("click", {
-						index: index
-					})
-					this.isOpen = false
-				}
-				if (!this.isOpen) {
-					this.timer = setTimeout(() => {
-						this.hidden = true
-					}, 200)
-				}
-			},
-			handleClickCancel: function() {
-				if (!this.maskClosable) return;
-				this.isOpen = false
-			}
-		},
-		beforeDestroy() {
-			clearTimeout(this.timer)
-			this.timer = null
-		}
-	}
-</script>
-
-<style scoped>
-	@font-face {
-		font-family: 'tuifab';
-		src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAREAA0AAAAABnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEKAAAABoAAAAciPExJUdERUYAAAQIAAAAHgAAAB4AKQAKT1MvMgAAAaAAAABCAAAAVjyBSAVjbWFwAAAB9AAAAD4AAAFCAA/pvmdhc3AAAAQAAAAACAAAAAj//wADZ2x5ZgAAAkAAAABRAAAAYFkYQQNoZWFkAAABMAAAADAAAAA2Fm5OF2hoZWEAAAFgAAAAHQAAACQH3QOFaG10eAAAAeQAAAAPAAAAEAwAAANsb2NhAAACNAAAAAoAAAAKADAAAG1heHAAAAGAAAAAHwAAACABDwAobmFtZQAAApQAAAFJAAACiCnmEVVwb3N0AAAD4AAAAB8AAAAx2XRuznjaY2BkYGAAYtGolt54fpuvDNwsDCBwc1krH5xm/t/I/J+5FsjlYGACiQIAGAEKZHjaY2BkYGBu+N/AEMPCAALM/xkYGVABCwBZ4wNrAAAAeNpjYGRgYGBhkGEA0QwMTEDMBYQMDP/BfAYAC4kBOAB42mNgZGFgnMDAysDA1Ml0hoGBoR9CM75mMGLkAIoysDIzYAUBaa4pDA7PhJ8JMzf8b2CIYW5gaAAKM4LkAN21DAEAAHjaY2GAABYIZgYAAIMAEAB42mNgYGBmgGAZBkYGELAB8hjBfBYGBSDNAoRA/jPh//8hpOQHqEoGRjYGGJOBkQlIMDGgAkaGYQ8AUSIHswAAAAAAAAAAAAAAMAAAeNpjYGRg/t/I/J+5lkGagYFRUVCPUYmNXVCRj1FETFxRUI7RyMxcUNGO0USN+fS/HEY5XTnGfznicnLijFPAHMYpYnJyjFvBlBgWBQBNJxKpAAAAeNp9kD1OAzEQhZ/zByQSQiCoXVEA2vyUKRMp9Ailo0g23pBo1155nUg5AS0VB6DlGByAGyDRcgpelkmTImvt6PObmeexAZzjGwr/3yXuhBWO8ShcwREy4Sr1F+Ea+V24jhY+hRvUf4SbuFUD4RYu1BsdVO2Eu5vSbcsKZxgIV3CKJ+Eq9ZVwjfwqXMcVPoQb1L+EmxjjV7iFa2WpDOFhMEFgnEFjig3jAjEcLJIyBtahOfRmEsxMTzd6ETubOBso71dilwMeaDnngCntPbdmvkon/mDLgdSYbh4FS7YpjS4idCgbXyyc1d2oc7D9nu22tNi/a4E1x+xRDWzU/D3bM9JIbAyvkJI18jK3pBJTj2hrrPG7ZynW814IiU68y/SIx5o0dTr3bmniwOLn8owcfbS5kj33qBw+Y1kIeb/dTsQgil2GP5PYcRkAAAB42mNgYoAALjDJyIAOWMCiTIxMbFmZiRmJ+QALXAKKAAAAAAH//wACAAEAAAAMAAAAFgAAAAIAAQADAAMAAQAEAAAAAgAAAAB42mNgYGBkAIKrS9Q5QPTNZa18MBoAPbcFzgAA) format('woff');
-		font-weight: normal;
-		font-style: normal;
-	}
-
-	.tui-fab-icon {
-		font-family: "tuifab" !important;
-		font-style: normal;
-		-webkit-font-smoothing: antialiased;
-		-moz-osx-font-smoothing: grayscale;
-		padding: 10rpx;
-	}
-
-	.tui-icon-plus:before {
-		content: "\e613";
-	}
-
-	.tui-fab-box {
-		display: flex;
-		justify-content: center;
-		flex-direction: column;
-		position: fixed;
-		z-index: 99997;
-	}
-
-	.tui-fab-right {
-		align-items: flex-end;
-	}
-
-	.tui-fab-btn {
-		transform: scale(0);
-		transition: all 0.2s ease-in-out;
-		opacity: 0;
-		visibility: hidden;
-	}
-
-	.tui-fab-hidden {
-		height: 0;
-		width: 0;
-	}
-
-
-	.tui-fab-item-box {
-		display: flex;
-		align-items: center;
-		justify-content: flex-end;
-		padding-bottom: 40rpx;
-	}
-
-	.tui-fab-item-left {
-		flex-flow: row-reverse;
-	}
-
-	.tui-fab-title {
-		width: 90%;
-		text-align: center;
-		white-space: nowrap;
-		overflow: hidden;
-		text-overflow: ellipsis;
-	}
-
-	.tui-text-left {
-		padding-left: 28rpx;
-	}
-
-	.tui-text-right {
-		padding-right: 28rpx;
-	}
-
-	.tui-fab-img {
-		display: block;
-	}
-
-	.tui-fab-item {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1);
-		transition: all 0.2s linear;
-	}
-
-	.tui-radius {
-		border-radius: 50%;
-	}
-
-	.tui-active {
-		transform: rotate(135deg);
-	}
-
-	.tui-fab-mask {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background: rgba(0, 0, 0, 0.75);
-		z-index: 99996;
-		transition: all 0.2s ease-in-out;
-		opacity: 0;
-		visibility: hidden;
-	}
-
-	.tui-visible {
-		visibility: visible;
-		opacity: 1;
-		transform: scale(1);
-	}
-</style>

+ 0 - 118
components/thorui/tui-footer/tui-footer.vue

@@ -1,118 +0,0 @@
-<template>
-	<view class="tui-footer-class tui-footer" :class="[fixed?'tui-fixed':'']" :style='{backgroundColor:backgroundColor}'>
-		<view class="tui-footer-link" v-if="navigate.length>0">
-			<block v-for="(item,index) in navigate" :key="index">
-				<navigator class="tui-link" hover-class="tui-link-hover" :hover-stop-propagation="true" :style="{color:(item.color || '#596d96'),fontSize:(item.size || 28)+'rpx'}"
-				 :open-type="item.type" :url="item.url" :target="item.target" :delta="item.delta" :app-id="item.appid"
-				 :path="item.path" :extra-data="item.extradata" :bindsuccess="item.bindsuccess" :bindfail="item.bindfail">{{item.text}}</navigator>
-			</block>
-		</view>
-		<view class="tui-footer-copyright" :style="{color:color,fontSize:size+'rpx'}">
-			{{copyright}}
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiFooter",
-		props: {
-			//type target url delta appid path extradata bindsuccess bindfail text color size
-			//链接设置  数据格式对应上面注释的属性值
-			navigate: {
-				type: Array,
-				default:function(){
-					return  []
-				}
-			},
-			//底部文本
-			copyright: {
-				type: String,
-				default: "All Rights Reserved."
-			},
-			//copyright 字体颜色
-			color: {
-				type: String,
-				default: "#A7A7A7"
-			},
-			//copyright 字体大小
-			size: {
-				type: Number,
-				default: 24
-			},
-			//footer背景颜色
-			backgroundColor: {
-				type: String,
-				default: "transparent"
-			},
-			//是否固定在底部
-			fixed: {
-				type: Boolean,
-				default: true
-			}
-		},
-		methods: {
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-footer {
-		width: 100%;
-		overflow: hidden;
-		padding: 30rpx 24rpx;
-		box-sizing: border-box;
-	}
-
-	.tui-fixed {
-		position: fixed;
-		z-index: 9999;
-		bottom: 0;
-		left: 0;
-	}
-
-	.tui-footer-link {
-		color: #596d96;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 28rpx;
-	}
-
-	.tui-link {
-		position: relative;
-		padding: 0 18rpx;
-		line-height: 1;
-	}
-
-	.tui-link::before {
-		content: " ";
-		position: absolute;
-		right: 0;
-		top: 0;
-		width: 1px;
-		bottom: 0;
-		border-right: 1px solid #d3d3d3;
-		-webkit-transform-origin: 100% 0;
-		transform-origin: 100% 0;
-		-webkit-transform: scaleX(0.5);
-		transform: scaleX(0.5);
-	}
-
-	.tui-link:last-child::before {
-		border-right: 0 !important
-	}
-
-	.tui-link-hover {
-		opacity: 0.5
-	}
-
-	.tui-footer-copyright {
-		font-size: 24rpx;
-		color: #A7A7A7;
-		line-height: 1;
-		text-align: center;
-		padding-top: 16rpx;
-		padding-bottom:env(safe-area-inset-bottom);
-	}
-</style>

+ 0 - 1034
components/thorui/tui-image-cropper/tui-image-cropper.vue

@@ -1,1034 +0,0 @@
-<template>
-	<view class="tui-container" @touchmove.stop.prevent="stop">
-		<view class="tui-image-cropper" @touchend="cutTouchEnd" @touchstart="cutTouchStart" @touchmove="cutTouchMove">
-			<view class="tui-content">
-				<view class="tui-content-top tui-bg-transparent" :style="{ height: cutY + 'px', transitionProperty: cutAnimation ? '' : 'background' }"></view>
-				<view class="tui-content-middle" :style="{ height: canvasHeight + 'px' }">
-					<view class="tui-bg-transparent" :style="{ width: cutX + 'px', transitionProperty: cutAnimation ? '' : 'background' }"></view>
-					<view
-						class="tui-cropper-box"
-						:style="{ width: canvasWidth + 'px', height: canvasHeight + 'px', borderColor: borderColor, transitionProperty: cutAnimation ? '' : 'background' }"
-					>
-						<view
-							v-for="(item, index) in 4"
-							:key="index"
-							class="tui-edge"
-							:class="[`tui-${index < 2 ? 'top' : 'bottom'}-${index === 0 || index === 2 ? 'left' : 'right'}`]"
-							:style="{
-								width: edgeWidth,
-								height: edgeWidth,
-								borderColor: edgeColor,
-								borderWidth: edgeBorderWidth,
-								left: index === 0 || index === 2 ? `-${edgeOffsets}` : 'auto',
-								right: index === 1 || index === 3 ? `-${edgeOffsets}` : 'auto',
-								top: index < 2 ? `-${edgeOffsets}` : 'auto',
-								bottom: index > 1 ? `-${edgeOffsets}` : 'auto'
-							}"
-						></view>
-					</view>
-					<view class="tui-flex-auto tui-bg-transparent" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-				</view>
-				<view class="tui-flex-auto tui-bg-transparent" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-			</view>
-			<image
-				@load="imageLoad"
-				@error="imageLoad"
-				@touchstart="start"
-				@touchmove="move"
-				@touchend="end"
-				:style="{
-					width: imgWidth ? imgWidth + 'px' : 'auto',
-					height: imgHeight ? imgHeight + 'px' : 'auto',
-					transform: imgTransform,
-					transitionDuration: (cutAnimation ? 0.35 : 0) + 's'
-				}"
-				class="tui-cropper-image"
-				:src="imageUrl"
-				v-if="imageUrl"
-				mode="widthFix"
-			></image>
-		</view>
-		<canvas
-			canvas-id="tui-image-cropper"
-			id="tui-image-cropper"
-			:disable-scroll="true"
-			:style="{ width: CROPPER_WIDTH * scaleRatio + 'px', height: CROPPER_HEIGHT * scaleRatio + 'px' }"
-			class="tui-cropper-canvas"
-		></canvas>
-		<view class="tui-cropper-tabbar" v-if="!custom">
-			<view class="tui-op-btn" @tap.stop="back">取消</view>
-			<image :src="rotateImg" class="tui-rotate-img" @tap="setAngle"></image>
-			<view class="tui-op-btn" @tap.stop="getImage">完成</view>
-		</view>
-	</view>
-</template>
-
-<script>
-/**
- * 注意:组件中使用的图片地址,将文件复制到自己项目中
- * 如果图片位置与组件同级,编译成小程序时图片会丢失
- * 拷贝static下整个components文件夹
- *也可直接转成base64(不建议)
- * */
-export default {
-	name: 'tuiImageCropper',
-	props: {
-		//图片路径
-		imageUrl: {
-			type: String,
-			default: ''
-		},
-		/*
-			 默认正方形,可修改大小控制比例
-			 裁剪框高度 px
-			*/
-		height: {
-			type: Number,
-			default: 280
-		},
-		//裁剪框宽度 px
-		width: {
-			type: Number,
-			default: 280
-		},
-		//裁剪框最小宽度 px
-		minWidth: {
-			type: Number,
-			default: 100
-		},
-		//裁剪框最小高度 px
-		minHeight: {
-			type: Number,
-			default: 100
-		},
-		//裁剪框最大宽度 px
-		maxWidth: {
-			type: Number,
-			default: 360
-		},
-		//裁剪框最大高度 px
-		maxHeight: {
-			type: Number,
-			default: 360
-		},
-		//裁剪框border颜色
-		borderColor: {
-			type: String,
-			default: 'rgba(255,255,255,0.1)'
-		},
-		//裁剪框边缘线颜色
-		edgeColor: {
-			type: String,
-			default: '#FFFFFF'
-		},
-		//裁剪框边缘线宽度 w=h
-		edgeWidth: {
-			type: String,
-			default: '34rpx'
-		},
-		//裁剪框边缘线border宽度
-		edgeBorderWidth: {
-			type: String,
-			default: '6rpx'
-		},
-		//偏移距离,根据edgeBorderWidth进行调整
-		edgeOffsets: {
-			type: String,
-			default: '6rpx'
-		},
-		/**
-		 * 如果宽度和高度都为true则裁剪框禁止拖动
-		 * 裁剪框宽度锁定
-		 */
-		lockWidth: {
-			type: Boolean,
-			default: false
-		},
-		//裁剪框高度锁定
-		lockHeight: {
-			type: Boolean,
-			default: false
-		},
-		//锁定裁剪框比例(放大或缩小)
-		lockRatio: {
-			type: Boolean,
-			default: false
-		},
-		//生成的图片尺寸相对剪裁框的比例
-		scaleRatio: {
-			type: Number,
-			default: 2
-		},
-		//图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理
-		quality: {
-			type: Number,
-			default: 0.8
-		},
-		//图片旋转角度
-		rotateAngle: {
-			type: Number,
-			default: 0
-		},
-		//图片最小缩放比
-		minScale: {
-			type: Number,
-			default: 0.5
-		},
-		//图片最大缩放比
-		maxScale: {
-			type: Number,
-			default: 2
-		},
-		//是否禁用触摸旋转(为false则可以触摸转动图片,limitMove为false生效)
-		disableRotate: {
-			type: Boolean,
-			default: true
-		},
-		//是否限制移动范围(剪裁框只能在图片内,为true不可触摸转动图片)
-		limitMove: {
-			type: Boolean,
-			default: true
-		},
-		//自定义操作栏(为true时隐藏底部操作栏)
-		custom: {
-			type: Boolean,
-			default: false
-		},
-		//值发生改变开始裁剪(custom为true时生效)
-		startCutting: {
-			type: [Number, Boolean],
-			default: 0
-		},
-		/**
-		 * 是否返回base64(H5端默认base64)
-		 * 支持平台:App,微信小程序,支付宝小程序,H5(默认url就是base64)
-		 **/
-		isBase64: {
-			type: Boolean,
-			default: false
-		},
-		//裁剪时是否显示loadding
-		loadding: {
-			type: Boolean,
-			default: true
-		},
-		//旋转icon
-		rotateImg: {
-			type: String,
-			default: '/static/components/cropper/img_rotate.png'
-		}
-	},
-	data() {
-		return {
-			MOVE_THROTTLE: null, //触摸移动节流setTimeout
-			MOVE_THROTTLE_FLAG: true, //节流标识
-			TIME_CUT_CENTER: null,
-			CROPPER_WIDTH: 200, //裁剪框宽
-			CROPPER_HEIGHT: 200, //裁剪框高
-			CUT_START: null,
-			cutX: 0, //画布x轴起点
-			cutY: 0, //画布y轴起点0
-			touchRelative: [
-				{
-					x: 0,
-					y: 0
-				}
-			], //手指或鼠标和图片中心的相对位置
-			flagCutTouch: false, //是否是拖动裁剪框
-			hypotenuseLength: 0, //双指触摸时斜边长度
-			flagEndTouch: false, //是否结束触摸
-			canvasWidth: 0,
-			canvasHeight: 0,
-			imgWidth: 0, //图片宽度
-			imgHeight: 0, //图片高度
-			scale: 1, //图片缩放比
-			angle: 0, //图片旋转角度
-			cutAnimation: false, //是否开启图片和裁剪框过渡
-			cutAnimationTime: null,
-			imgTop: 0, //图片上边距
-			imgLeft: 0, //图片左边距
-			ctx: null,
-			sysInfo: null
-		};
-	},
-	computed: {
-		imgTransform: function() {
-			return `translate3d(${this.imgLeft - this.imgWidth / 2}px,${this.imgTop - this.imgHeight / 2}px,0) scale(${this.scale}) rotate(${this.angle}deg)`;
-		}
-	},
-	watch: {
-		imageUrl(val, oldVal) {
-			this.imageReset();
-			this.showLoading();
-			uni.getImageInfo({
-				src: val,
-				success: res => {
-					//计算图片尺寸
-					this.imgComputeSize(res.width, res.height);
-					if (this.limitMove) {
-						//限制移动,不留空白处理
-						this.imgMarginDetectionScale();
-					}
-				},
-				fail: err => {
-					this.imgComputeSize();
-					if (this.limitMove) {
-						this.imgMarginDetectionScale();
-					}
-				}
-			});
-		},
-		//监听截取框宽高变化
-		canvasWidth(val) {
-			if (val < this.minWidth) {
-				this.canvasWidth = this.minWidth;
-			}
-			this.computeCutSize();
-		},
-		canvasHeight(val) {
-			if (val < this.minHeight) {
-				this.canvasHeight = this.minHeight;
-			}
-			this.computeCutSize();
-		},
-		rotateAngle(val) {
-			this.cutAnimation = true;
-			this.angle = val;
-		},
-		angle(val) {
-			this.moveStop();
-			if (this.limitMove && val % 90) {
-				this.angle = Math.round(val / 90) * 90;
-			}
-			this.imgMarginDetectionScale();
-		},
-		cutAnimation(val) {
-			//开启过渡260毫秒之后自动关闭
-			clearTimeout(this.cutAnimationTime);
-			if (val) {
-				this.cutAnimationTime = setTimeout(() => {
-					this.cutAnimation = false;
-				}, 260);
-			}
-		},
-		limitMove(val) {
-			if (val) {
-				if (this.angle % 90) {
-					this.angle = Math.round(this.angle / 90) * 90;
-				}
-				this.imgMarginDetectionScale();
-			}
-		},
-		cutY(value) {
-			this.cutDetectionPosition();
-		},
-		cutX(value) {
-			this.cutDetectionPosition();
-		},
-		startCutting(val) {
-			if (this.custom && val) {
-				this.getImage();
-			}
-		}
-	},
-	mounted() {
-		this.sysInfo = uni.getSystemInfoSync();
-		this.imgTop = this.sysInfo.windowHeight / 2;
-		this.imgLeft = this.sysInfo.windowWidth / 2;
-		this.CROPPER_WIDTH = this.width;
-		this.CROPPER_HEIGHT = this.height;
-		this.canvasHeight = this.height;
-		this.canvasWidth = this.width;
-		this.ctx = uni.createCanvasContext('tui-image-cropper', this);
-		this.setCutCenter();
-		//设置裁剪框大小>设置图片尺寸>绘制canvas
-		this.computeCutSize();
-		//检查裁剪框是否在范围内
-		this.cutDetectionPosition();
-		setTimeout(() => {
-			this.$emit('ready', {});
-		}, 200);
-	},
-	methods: {
-		//返回裁剪后图片信息
-		getImage() {
-			if (!this.imageUrl) {
-				uni.showToast({
-					title: '请选择图片',
-					icon: 'none'
-				});
-				return;
-			}
-			this.loadding && this.showLoading();
-			let draw = () => {
-				//图片实际大小
-				let imgWidth = this.imgWidth * this.scale * this.scaleRatio;
-				let imgHeight = this.imgHeight * this.scale * this.scaleRatio;
-				//canvas和图片的相对距离
-				let xpos = this.imgLeft - this.cutX;
-				let ypos = this.imgTop - this.cutY;
-				//旋转画布
-				this.ctx.translate(xpos * this.scaleRatio, ypos * this.scaleRatio);
-				this.ctx.rotate((this.angle * Math.PI) / 180);
-				this.ctx.drawImage(this.imageUrl, -imgWidth / 2, -imgHeight / 2, imgWidth, imgHeight);
-				this.ctx.draw(false, () => {
-					let params = {
-						width: this.canvasWidth * this.scaleRatio,
-						height: Math.round(this.canvasHeight * this.scaleRatio),
-						destWidth: this.canvasWidth * this.scaleRatio,
-						destHeight: Math.round(this.canvasHeight) * this.scaleRatio,
-						fileType: 'png',
-						quality: this.quality
-					};
-					let data = {
-						url: '',
-						base64: '',
-						width: this.canvasWidth * this.scaleRatio,
-						height: this.canvasHeight * this.scaleRatio
-					};
-					// #ifdef MP-ALIPAY
-
-					if (this.isBase64) {
-						this.ctx.toDataURL(params).then(dataURL => {
-							data.base64 = dataURL;
-							this.loadding && uni.hideLoading();
-							this.$emit('cropper', data);
-						});
-					} else {
-						this.ctx.toTempFilePath({
-							...params,
-							success: res => {
-								data.url = res.tempFilePath;
-								this.loadding && uni.hideLoading();
-								this.$emit('cropper', data);
-							}
-						});
-					}
-					// #endif
-
-					// #ifndef MP-ALIPAY
-					// #ifdef MP-BAIDU || MP-TOUTIAO || H5
-					this.isBase64 = false;
-					// #endif
-					if (this.isBase64) {
-						uni.canvasGetImageData({
-							canvasId: 'tui-image-cropper',
-							x: 0,
-							y: 0,
-							width: this.canvasWidth * this.scaleRatio,
-							height: Math.round(this.canvasHeight * this.scaleRatio),
-							success: res => {
-								const arrayBuffer = new Uint8Array(res.data);
-								const base64 = uni.arrayBufferToBase64(arrayBuffer);
-								data.base64 = base64;
-								this.loadding && uni.hideLoading();
-								this.$emit('cropper', data);
-							}
-						});
-					} else {
-						uni.canvasToTempFilePath(
-							{
-								...params,
-								canvasId: 'tui-image-cropper',
-								success: res => {
-									data.url = res.tempFilePath;
-									// #ifdef H5
-									data.base64 = res.tempFilePath;
-									// #endif
-									this.loadding && uni.hideLoading();
-									this.$emit('cropper', data);
-								},
-								fail(res) {
-									console.log(res);
-								}
-							},
-							this
-						);
-					}
-					// #endif
-				});
-			};
-			if (this.CROPPER_WIDTH != this.canvasWidth || this.CROPPER_HEIGHT != this.canvasHeight) {
-				this.CROPPER_WIDTH = this.canvasWidth;
-				this.CROPPER_HEIGHT = this.canvasHeight;
-				this.ctx.draw();
-				this.$nextTick(() => {
-					setTimeout(() => {
-						draw();
-					}, 100);
-				});
-			} else {
-				draw();
-			}
-		},
-		/**
-		 * 设置剪裁框和图片居中
-		 */
-		setCutCenter() {
-			let sys = this.sysInfo || uni.getSystemInfoSync();
-			let cutY = (sys.windowHeight - this.canvasHeight) * 0.5;
-			let cutX = (sys.windowWidth - this.canvasWidth) * 0.5;
-			//顺序不能变
-			this.imgTop = this.imgTop - this.cutY + cutY;
-			this.cutY = cutY; //截取的框上边距
-			this.imgLeft = this.imgLeft - this.cutX + cutX;
-			this.cutX = cutX; //截取的框左边距
-		},
-		imageReset() {
-			// this.cutAnimation = true;
-			this.scale = 1;
-			this.angle = 0;
-			let sys = this.sysInfo || uni.getSystemInfoSync();
-			this.imgTop = sys.windowHeight / 2;
-			this.imgLeft = sys.windowWidth / 2;
-		},
-		imageLoad(e) {
-			this.imageReset();
-			uni.hideLoading();
-			this.$emit('imageLoad', {});
-		},
-		//检测剪裁框位置是否在允许的范围内(屏幕内)
-		cutDetectionPosition() {
-			let cutDetectionPositionTop = () => {
-					//检测上边距是否在范围内
-					if (this.cutY < 0) {
-						this.cutY = 0;
-					}
-					if (this.cutY > this.sysInfo.windowHeight - this.canvasHeight) {
-						this.cutY = this.sysInfo.windowHeight - this.canvasHeight;
-					}
-				},
-				cutDetectionPositionLeft = () => {
-					//检测左边距是否在范围内
-					if (this.cutX < 0) {
-						this.cutX = 0;
-					}
-					if (this.cutX > this.sysInfo.windowWidth - this.canvasWidth) {
-						this.cutX = this.sysInfo.windowWidth - this.canvasWidth;
-					}
-				};
-			//裁剪框坐标处理(如果只写一个参数则另一个默认为0,都不写默认居中)
-			if (this.cutY == null && this.cutX == null) {
-				let cutY = (this.sysInfo.windowHeight - this.canvasHeight) * 0.5;
-				let cutX = (this.sysInfo.windowWidth - this.canvasWidth) * 0.5;
-				this.cutY = cutY; //截取的框上边距
-				this.cutX = cutX; //截取的框左边距
-			} else if (this.cutY != null && this.cutX != null) {
-				cutDetectionPositionTop();
-				cutDetectionPositionLeft();
-			} else if (this.cutY != null && this.cutX == null) {
-				cutDetectionPositionTop();
-				this.cutX = (this.sysInfo.windowWidth - this.canvasWidth) / 2;
-			} else if (this.cutY == null && this.cutX != null) {
-				cutDetectionPositionLeft();
-				this.cutY = (this.sysInfo.windowHeight - this.canvasHeight) / 2;
-			}
-		},
-		/**
-		 * 图片边缘检测-位置
-		 */
-		imgMarginDetectionPosition(scale) {
-			if (!this.limitMove) return;
-			let left = this.imgLeft;
-			let top = this.imgTop;
-			scale = scale || this.scale;
-			let imgWidth = this.imgWidth;
-			let imgHeight = this.imgHeight;
-			if ((this.angle / 90) % 2) {
-				imgWidth = this.imgHeight;
-				imgHeight = this.imgWidth;
-			}
-			left = this.cutX + (imgWidth * scale) / 2 >= left ? left : this.cutX + (imgWidth * scale) / 2;
-			left = this.cutX + this.canvasWidth - (imgWidth * scale) / 2 <= left ? left : this.cutX + this.canvasWidth - (imgWidth * scale) / 2;
-			top = this.cutY + (imgHeight * scale) / 2 >= top ? top : this.cutY + (imgHeight * scale) / 2;
-			top = this.cutY + this.canvasHeight - (imgHeight * scale) / 2 <= top ? top : this.cutY + this.canvasHeight - (imgHeight * scale) / 2;
-			this.imgLeft = left;
-			this.imgTop = top;
-			this.scale = scale;
-		},
-		/**
-		 * 图片边缘检测-缩放
-		 */
-		imgMarginDetectionScale(scale) {
-			if (!this.limitMove) return;
-			scale = scale || this.scale;
-			let imgWidth = this.imgWidth;
-			let imgHeight = this.imgHeight;
-			if ((this.angle / 90) % 2) {
-				imgWidth = this.imgHeight;
-				imgHeight = this.imgWidth;
-			}
-			if (imgWidth * scale < this.canvasWidth) {
-				scale = this.canvasWidth / imgWidth;
-			}
-			if (imgHeight * scale < this.canvasHeight) {
-				scale = Math.max(scale, this.canvasHeight / imgHeight);
-			}
-			this.imgMarginDetectionPosition(scale);
-		},
-		/**
-		 * 计算图片尺寸
-		 */
-		imgComputeSize(width, height) {
-			//默认按图片最小边 = 对应裁剪框尺寸
-			let imgWidth = width,
-				imgHeight = height;
-			if (imgWidth && imgHeight) {
-				if (imgWidth / imgHeight > (this.canvasWidth || this.width) / (this.canvasHeight || this.height)) {
-					imgHeight = this.canvasHeight || this.height;
-					imgWidth = (width / height) * imgHeight;
-				} else {
-					imgWidth = this.canvasWidth || this.width;
-					imgHeight = (height / width) * imgWidth;
-				}
-			} else {
-				let sys = this.sysInfo || uni.getSystemInfoSync();
-				imgWidth = sys.windowWidth;
-				imgHeight = 0;
-			}
-			this.imgWidth = imgWidth;
-			this.imgHeight = imgHeight;
-		},
-		//改变截取框大小
-		computeCutSize() {
-			if (this.canvasWidth > this.sysInfo.windowWidth) {
-				this.canvasWidth = this.sysInfo.windowWidth;
-			} else if (this.canvasWidth + this.cutX > this.sysInfo.windowWidth) {
-				this.cutX = this.sysInfo.windowWidth - this.cutX;
-			}
-			if (this.canvasHeight > this.sysInfo.windowHeight) {
-				this.canvasHeight = this.sysInfo.windowHeight;
-			} else if (this.canvasHeight + this.cutY > this.sysInfo.windowHeight) {
-				this.cutY = this.sysInfo.windowHeight - this.cutY;
-			}
-		},
-		//开始触摸
-		start(e) {
-			this.flagEndTouch = false;
-			if (e.touches.length == 1) {
-				//单指拖动
-				this.touchRelative[0] = {
-					x: e.touches[0].clientX - this.imgLeft,
-					y: e.touches[0].clientY - this.imgTop
-				};
-			} else {
-				//双指放大
-				let width = Math.abs(e.touches[0].clientX - e.touches[1].clientX);
-				let height = Math.abs(e.touches[0].clientY - e.touches[1].clientY);
-				this.touchRelative = [
-					{
-						x: e.touches[0].clientX - this.imgLeft,
-						y: e.touches[0].clientY - this.imgTop
-					},
-					{
-						x: e.touches[1].clientX - this.imgLeft,
-						y: e.touches[1].clientY - this.imgTop
-					}
-				];
-				this.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
-			}
-		},
-		moveThrottle() {
-			if (this.sysInfo.platform == 'android') {
-				clearTimeout(this.MOVE_THROTTLE);
-				this.MOVE_THROTTLE = setTimeout(() => {
-					this.MOVE_THROTTLE_FLAG = true;
-				}, 800 / 40);
-				return this.MOVE_THROTTLE_FLAG;
-			} else {
-				this.MOVE_THROTTLE_FLAG = true;
-			}
-		},
-		move(e) {
-			if (this.flagEndTouch || !this.MOVE_THROTTLE_FLAG) return;
-			this.MOVE_THROTTLE_FLAG = false;
-			this.moveThrottle();
-			this.moveDuring();
-			if (e.touches.length == 1) {
-				//单指拖动
-				let left = e.touches[0].clientX - this.touchRelative[0].x,
-					top = e.touches[0].clientY - this.touchRelative[0].y;
-				//图像边缘检测,防止截取到空白
-				this.imgLeft = left;
-				this.imgTop = top;
-				this.imgMarginDetectionPosition();
-			} else {
-				//双指放大
-				let width = Math.abs(e.touches[0].clientX - e.touches[1].clientX),
-					height = Math.abs(e.touches[0].clientY - e.touches[1].clientY),
-					hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)),
-					scale = this.scale * (hypotenuse / this.hypotenuseLength),
-					current_deg = 0;
-				scale = scale <= this.minScale ? this.minScale : scale;
-				scale = scale >= this.maxScale ? this.maxScale : scale;
-				//图像边缘检测,防止截取到空白
-				// this.scale = scale;
-				this.imgMarginDetectionScale(scale);
-				//双指旋转(如果没禁用旋转)
-				let touchRelative = [
-					{
-						x: e.touches[0].clientX - this.imgLeft,
-						y: e.touches[0].clientY - this.imgTop
-					},
-					{
-						x: e.touches[1].clientX - this.imgLeft,
-						y: e.touches[1].clientY - this.imgTop
-					}
-				];
-				if (!this.disableRotate) {
-					let first_atan = (180 / Math.PI) * Math.atan2(touchRelative[0].y, touchRelative[0].x);
-					let first_atan_old = (180 / Math.PI) * Math.atan2(this.touchRelative[0].y, this.touchRelative[0].x);
-					let second_atan = (180 / Math.PI) * Math.atan2(touchRelative[1].y, touchRelative[1].x);
-					let second_atan_old = (180 / Math.PI) * Math.atan2(this.touchRelative[1].y, this.touchRelative[1].x);
-					//当前旋转的角度
-					let first_deg = first_atan - first_atan_old,
-						second_deg = second_atan - second_atan_old;
-					if (first_deg != 0) {
-						current_deg = first_deg;
-					} else if (second_deg != 0) {
-						current_deg = second_deg;
-					}
-				}
-				this.touchRelative = touchRelative;
-				this.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
-				//更新视图
-				this.angle = this.angle + current_deg;
-				this.scale = this.scale;
-			}
-		},
-		//结束操作
-		end(e) {
-			this.flagEndTouch = true;
-			this.moveStop();
-		},
-		//裁剪框处理
-		cutTouchMove(e) {
-			if (this.flagCutTouch && this.MOVE_THROTTLE_FLAG) {
-				if (this.lockRatio && (this.lockWidth || this.lockHeight)) return;
-				//节流
-				this.MOVE_THROTTLE_FLAG = false;
-				this.moveThrottle();
-				let width = this.canvasWidth,
-					height = this.canvasHeight,
-					cutY = this.cutY,
-					cutX = this.cutX,
-					size_correct = () => {
-						width = width <= this.maxWidth ? (width >= this.minWidth ? width : this.minWidth) : this.maxWidth;
-						height = height <= this.maxHeight ? (height >= this.minHeight ? height : this.minHeight) : this.maxHeight;
-					},
-					size_inspect = () => {
-						if ((width > this.maxWidth || width < this.minWidth || height > this.maxHeight || height < this.minHeight) && this.lockRatio) {
-							size_correct();
-							return false;
-						} else {
-							size_correct();
-							return true;
-						}
-					};
-				height = this.CUT_START.height + (this.CUT_START.corner > 1 && this.CUT_START.corner < 4 ? 1 : -1) * (this.CUT_START.y - e.touches[0].clientY);
-				switch (this.CUT_START.corner) {
-					case 1:
-						width = this.CUT_START.width - this.CUT_START.x + e.touches[0].clientX;
-						if (this.lockRatio) {
-							height = width / (this.canvasWidth / this.canvasHeight);
-						}
-						if (!size_inspect()) return;
-						break;
-					case 2:
-						width = this.CUT_START.width - this.CUT_START.x + e.touches[0].clientX;
-						if (this.lockRatio) {
-							height = width / (this.canvasWidth / this.canvasHeight);
-						}
-						if (!size_inspect()) return;
-						cutY = this.CUT_START.cutY - (height - this.CUT_START.height);
-						break;
-					case 3:
-						width = this.CUT_START.width + this.CUT_START.x - e.touches[0].clientX;
-						if (this.lockRatio) {
-							height = width / (this.canvasWidth / this.canvasHeight);
-						}
-						if (!size_inspect()) return;
-						cutY = this.CUT_START.cutY - (height - this.CUT_START.height);
-						cutX = this.CUT_START.cutX - (width - this.CUT_START.width);
-						break;
-					case 4:
-						width = this.CUT_START.width + this.CUT_START.x - e.touches[0].clientX;
-						if (this.lockRatio) {
-							height = width / (this.canvasWidth / this.canvasHeight);
-						}
-						if (!size_inspect()) return;
-						cutX = this.CUT_START.cutX - (width - this.CUT_START.width);
-						break;
-					default:
-						break;
-				}
-				if (!this.lockWidth && !this.lockHeight) {
-					this.canvasWidth = width;
-					this.cutX = cutX;
-					this.canvasHeight = height;
-					this.cutY = cutY;
-				} else if (!this.lockWidth) {
-					this.canvasWidth = width;
-					this.cutX = cutX;
-				} else if (!this.lockHeight) {
-					this.canvasHeight = height;
-					this.cutY = cutY;
-				}
-				this.imgMarginDetectionScale();
-			}
-		},
-		cutTouchStart(e) {
-			let currentX = e.touches[0].clientX;
-			let currentY = e.touches[0].clientY;
-
-			/*
-			 * (右下-1 右上-2 左上-3 左下-4)
-			 * left_x [3,4]
-			 * top_y [2,3]
-			 * right_x [1,2]
-			 * bottom_y [1,4]
-			 */
-			let left_x1 = this.cutX - 24;
-			let left_x2 = this.cutX + 24;
-
-			let top_y1 = this.cutY - 24;
-			let top_y2 = this.cutY + 24;
-
-			let right_x1 = this.cutX + this.canvasWidth - 24;
-			let right_x2 = this.cutX + this.canvasWidth + 24;
-
-			let bottom_y1 = this.cutY + this.canvasHeight - 24;
-			let bottom_y2 = this.cutY + this.canvasHeight + 24;
-
-			if (currentX > right_x1 && currentX < right_x2 && currentY > bottom_y1 && currentY < bottom_y2) {
-				this.moveDuring();
-				this.flagCutTouch = true;
-				this.flagEndTouch = true;
-				this.CUT_START = {
-					width: this.canvasWidth,
-					height: this.canvasHeight,
-					x: currentX,
-					y: currentY,
-					corner: 1
-				};
-			} else if (currentX > right_x1 && currentX < right_x2 && currentY > top_y1 && currentY < top_y2) {
-				this.moveDuring();
-				this.flagCutTouch = true;
-				this.flagEndTouch = true;
-				this.CUT_START = {
-					width: this.canvasWidth,
-					height: this.canvasHeight,
-					x: currentX,
-					y: currentY,
-					cutY: this.cutY,
-					cutX: this.cutX,
-					corner: 2
-				};
-			} else if (currentX > left_x1 && currentX < left_x2 && currentY > top_y1 && currentY < top_y2) {
-				this.moveDuring();
-				this.flagCutTouch = true;
-				this.flagEndTouch = true;
-				this.CUT_START = {
-					width: this.canvasWidth,
-					height: this.canvasHeight,
-					cutY: this.cutY,
-					cutX: this.cutX,
-					x: currentX,
-					y: currentY,
-					corner: 3
-				};
-			} else if (currentX > left_x1 && currentX < left_x2 && currentY > bottom_y1 && currentY < bottom_y2) {
-				this.moveDuring();
-				this.flagCutTouch = true;
-				this.flagEndTouch = true;
-				this.CUT_START = {
-					width: this.canvasWidth,
-					height: this.canvasHeight,
-					cutY: this.cutY,
-					cutX: this.cutX,
-					x: currentX,
-					y: currentY,
-					corner: 4
-				};
-			}
-		},
-		cutTouchEnd(e) {
-			this.moveStop();
-			this.flagCutTouch = false;
-		},
-		//停止移动时需要做的操作
-		moveStop() {
-			//清空之前的自动居中延迟函数并添加最新的
-			clearTimeout(this.TIME_CUT_CENTER);
-			this.TIME_CUT_CENTER = setTimeout(() => {
-				//动画启动
-				if (!this.cutAnimation) {
-					this.cutAnimation = true;
-				}
-				this.setCutCenter();
-			}, 800);
-		},
-		//移动中
-		moveDuring() {
-			//清空之前的自动居中延迟函数
-			clearTimeout(this.TIME_CUT_CENTER);
-		},
-		showLoading() {
-			uni.showLoading({
-				title: '请稍候...',
-				mask: true
-			});
-		},
-		stop() {},
-		back() {
-			uni.navigateBack();
-		},
-		setAngle() {
-			this.cutAnimation = true;
-			this.angle = this.angle + 90;
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-container {
-	width: 100vw;
-	height: 100vh;
-	background-color: rgba(0, 0, 0, 0.6);
-	position: fixed;
-	top: 0;
-	left: 0;
-	z-index: 1;
-}
-
-.tui-image-cropper {
-	width: 100vw;
-	height: 100vh;
-	position: absolute;
-}
-
-.tui-content {
-	width: 100vw;
-	height: 100vh;
-	position: absolute;
-	z-index: 9;
-	display: flex;
-	flex-direction: column;
-	pointer-events: none;
-}
-
-.tui-bg-transparent {
-	background-color: rgba(0, 0, 0, 0.6);
-	transition-duration: 0.35s;
-}
-
-.tui-content-top {
-	pointer-events: none;
-}
-
-.tui-content-middle {
-	width: 100%;
-	height: 200px;
-	display: flex;
-	box-sizing: border-box;
-}
-
-.tui-cropper-box {
-	position: relative;
-	/* transition-duration: 0.3s; */
-	border-style: solid;
-	border-width: 1rpx;
-	box-sizing: border-box;
-}
-
-.tui-flex-auto {
-	flex: auto;
-}
-
-.tui-cropper-image {
-	width: 100%;
-	border-style: none;
-	position: absolute;
-	top: 0;
-	left: 0;
-	z-index: 2;
-	-webkit-backface-visibility: hidden;
-	backface-visibility: hidden;
-	transform-origin: center;
-}
-
-.tui-cropper-canvas {
-	position: fixed;
-	z-index: 10;
-	left: -2000px;
-	top: -2000px;
-	pointer-events: none;
-}
-
-.tui-edge {
-	border-style: solid;
-	pointer-events: auto;
-	position: absolute;
-	box-sizing: border-box;
-}
-
-.tui-top-left {
-	border-bottom-width: 0 !important;
-	border-right-width: 0 !important;
-}
-
-.tui-top-right {
-	border-bottom-width: 0 !important;
-	border-left-width: 0 !important;
-}
-
-.tui-bottom-left {
-	border-top-width: 0 !important;
-	border-right-width: 0 !important;
-}
-
-.tui-bottom-right {
-	border-top-width: 0 !important;
-	border-left-width: 0 !important;
-}
-
-.tui-cropper-tabbar {
-	width: 100%;
-	height: 120rpx;
-	padding: 0 40rpx;
-	box-sizing: border-box;
-	position: fixed;
-	left: 0;
-	bottom: 0;
-	z-index: 99;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	color: #ffffff;
-	font-size: 32rpx;
-}
-
-.tui-cropper-tabbar::after {
-	content: ' ';
-	position: absolute;
-	top: 0;
-	right: 0;
-	left: 0;
-	border-top: 1rpx solid rgba(255, 255, 255, 0.2);
-	-webkit-transform: scaleY(0.5) translateZ(0);
-	transform: scaleY(0.5) translateZ(0);
-	transform-origin: 0 100%;
-}
-
-.tui-op-btn {
-	height: 80rpx;
-	display: flex;
-	align-items: center;
-}
-
-.tui-rotate-img {
-	width: 44rpx;
-	height: 44rpx;
-}
-</style>

+ 0 - 149
components/thorui/tui-image-group/tui-image-group.vue

@@ -1,149 +0,0 @@
-<template>
-	<view class="tui-image-container" :class="{ 'tui-image-direction': direction == 'column' }">
-		<view
-			v-for="(item, index) in imageList"
-			:key="index"
-			class="tui-image-item_box"
-			:style="{
-				width: width,
-				height: height,
-				borderRadius: radius,
-				marginLeft: direction == 'column' ? 0 : (index && distance) + 'rpx',
-				marginTop: direction == 'row' ? 0 : (index && distance) + 'rpx'
-			}"
-			@tap="bindClick(index, item.id)"
-		>
-			<image
-				class="tui-image-item"
-				:mode="mode"
-				:lazy-load="lazyLoad"
-				fade-show="fadeShow"
-				:webp="webp"
-				:show-menu-by-longpress="longpress"
-				@error="error"
-				@load="load"
-				:style="{ width: width, height: height, borderRadius: radius, borderWidth: borderWidth, borderColor: borderColor }"
-				:src="item.src"
-			></image>
-			<slot />
-		</view>
-	</view>
-</template>
-
-<script>
-export default {
-	name: 'tuiImageGroup',
-	props: {
-		//图片集合
-		/*
-		  [{id:1,src:"1.png"}]
-		*/
-		imageList: {
-			type: Array,
-			default: () => {
-				return [];
-			}
-		},
-		//图片宽度
-		width: {
-			type: String,
-			default: '120rpx'
-		},
-		//图片高度
-		height: {
-			type: String,
-			default: '120rpx'
-		},
-		//图片边框宽度 rpx
-		borderWidth: {
-			type: String,
-			default: '0'
-		},
-		//图片边框颜色 可传rgba
-		borderColor: {
-			type: String,
-			default: '#fff'
-		},
-		//图片圆角
-		radius: {
-			type: String,
-			default: '50%'
-		},
-		//图片裁剪、缩放的模式
-		mode: {
-			type: String,
-			default: 'scaleToFill'
-		},
-		//图片懒加载。只针对page与scroll-view下的image有效
-		lazyLoad: {
-			type: Boolean,
-			default: true
-		},
-		//图片显示动画效果 | 仅App-nvue 2.3.4+ Android有效
-		fadeShow: {
-			type: Boolean,
-			default: true
-		},
-		//默认不解析 webP 格式,只支持网络资源 | 微信小程序2.9.0
-		webp: {
-			type: Boolean,
-			default: false
-		},
-		//开启长按图片显示识别小程序码菜单 | 微信小程序2.7.0
-		longpress: {
-			type: Boolean,
-			default: false
-		},
-		//是否组合排列
-		isGroup: {
-			type: Boolean,
-			default: false
-		},
-		//排列方向 row ,column
-		direction: {
-			type: String,
-			default: 'row'
-		},
-		//偏移距离 rpx
-		distance: {
-			type: [Number, String],
-			default: -16
-		}
-	},
-	data() {
-		return {};
-	},
-	methods: {
-		error(e) {
-			this.$emit('errorEvent', e);
-		},
-		load(e) {
-			this.$emit('loaded', e);
-		},
-		bindClick(index, id) {
-			this.$emit('click', {
-				index: index,
-				id: id || ''
-			});
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-image-container {
-	display: inline-flex;
-	align-items: center;
-}
-.tui-image-direction {
-	flex-direction: column;
-}
-.tui-image-item_box {
-	position: relative;
-}
-.tui-image-item {
-	border-style: solid;
-	flex-shrink: 0;
-	display: block;
-}
-</style>

+ 0 - 73
components/thorui/tui-keyboard-input/tui-keyboard-input.vue

@@ -1,73 +0,0 @@
-<template>
-	<view class="tui-keyboard-input tui-pwd-box" :style="{backgroundColor:backgroundColor}">
-		<view class="tui-inner-box">
-			<view class="tui-input" :class="[inputvalue.length===4?'tui-margin-right':'']" :style="{fontSize:size+'rpx',color:color,width:(inputvalue.length===4?90:70)+'rpx' }"
-			 v-for="(item,index) in inputvalue" :key="index">{{item}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiKeyboardInput",
-		props: {
-			//背景颜色
-			backgroundColor: {
-				type: String,
-				default: "#fff"
-			},
-			size: {
-				type: Number,
-				default: 32
-			},
-			color: {
-				type: String,
-				default: "#333"
-			},
-			//输入框的值:数组格式,长度即为输入框个数
-			inputvalue: {
-				type: Array,
-				default: ["", "", "", "", "", ""] //密码圆点 ●
-			}
-		},
-		data() {
-			return {
-
-			};
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-pwd-box {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		box-sizing: border-box;
-		vertical-align: top;
-	}
-
-	.tui-inner-box {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.tui-input {
-		height: 80rpx;
-		position: relative;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		margin-right: 20rpx;
-		border-bottom: 2px solid #666;
-	}
-
-	.tui-margin-right {
-		margin-right: 30rpx;
-	}
-
-	.tui-input:last-child {
-		margin-right: 0 !important;
-	}
-</style>

+ 0 - 240
components/thorui/tui-keyboard/tui-keyboard.vue

@@ -1,240 +0,0 @@
-<template>
-	<view>
-		<view class="tui-keyboard-mask" :class="[show?'tui-mask-show':'']" v-if="mask" @tap="handleClose"></view>
-		<view class="tui-keyboard" :class="{'tui-keyboard-radius':radius,'tui-keyboard-action':action,'tui-keyboard-show':show}">
-			<slot></slot>
-			<view class="tui-keyboard-grids">
-				<!--{{(index==9 || index==10 || index==11)?'tui-grid-bottom':''}}-->
-				<view class="tui-keyboard-grid" :class="{'tui-bg-gray':index==9 || index==11}" v-for="(item,index) in itemList"
-				 :key="index" hover-class="tui-keyboard-hover" :hover-stay-time="150" @tap="handleClick" :data-index="index">
-					<view v-if="index<11" class="tui-keyboard-item" :class="{'tui-fontsize-32':index==9}">{{getKeyBoard(index,action)}}</view>
-					<view v-else class="tui-keyboard-item">
-						<view class="tui-icon tui-keyboard-delete"></view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiKeyboard",
-		props: {
-			//是否需要mask
-			mask: {
-				type: Boolean,
-				default: true
-			},
-			//控制键盘显示
-			show: {
-				type: Boolean,
-				default: false
-			},
-			//是否直接显示,不需要动画,一般使用在锁屏密码
-			action: {
-				type: Boolean,
-				default: true
-			},
-			//是否带圆角
-			radius: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				itemList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
-			};
-		},
-		methods: {
-			getKeyBoard: function(index, action) {
-				var content = index + 1;
-				if (index == 9) {
-					content = action ? "取消" : "清除";
-				} else if (index == 10) {
-					content = 0;
-				}
-				return content;
-			},
-			//关闭
-			handleClose() {
-				if (!this.show) {
-					return;
-				}
-				this.$emit('close', {});
-			},
-			handleClick(e) {
-				if (!this.show) {
-					return;
-				}
-				const dataset = e.currentTarget.dataset;
-				this.$emit('click', {
-					index: Number(dataset.index)
-				})
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	@font-face {
-		font-family: 'keyboardFont';
-		src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAASgAA0AAAAABugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEhAAAABoAAAAch/nJvUdERUYAAARkAAAAHgAAAB4AKQAKT1MvMgAAAZwAAABDAAAAVj4mSapjbWFwAAAB8AAAAD4AAAFCAA/rY2dhc3AAAARcAAAACAAAAAj//wADZ2x5ZgAAAjwAAACsAAAA0BLVU2FoZWFkAAABMAAAAC0AAAA2FXPmsWhoZWEAAAFgAAAAHAAAACQH3gOFaG10eAAAAeAAAAAOAAAAEAwAAABsb2NhAAACMAAAAAoAAAAKAGgAAG1heHAAAAF8AAAAHwAAACABEQBLbmFtZQAAAugAAAFJAAACiCnmEVVwb3N0AAAENAAAACgAAAA6nLlLs3jaY2BkYGAAYukqK754fpuvDNwsDCBwU+tiFBKtwMLA9ABIczAwgUQB4ccH+gAAAHjaY2BkYGBu+N/AEMPCAAJAkpEBFbAAAEcKAm142mNgZGBgYGGwZ2BmAAEmIOYCQgaG/2A+AwAPIgFdAHjaY2BkYWCcwMDKwMDUyXSGgYGhH0IzvmYwYuQAijKwMjNgBQFprikMDs93PN/B3PC/gSGGuYGhASjMCJIDAPenDU0AeNpjYYAAFigGAACAAA0AAHjaY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+8x3//0NICW+oSgZGNgYYk4GRCUgwMaACRoZhDwAItAhZAAAAAAAAAAAAAABoAAB42l3MTQqCUBSG4fNpqBxECS/+YFTXRGcFKteZjW0nuoqWVtOgPbgKZ1cqaBDN3snzkklE+xUZEwUkqSOCzGx4EGGEsJYd2vURgQdbomhayC0iu8h8lEVmiR1sS4TVGVFYqeaEVjXmVT8TsWjf83yYIjFq1QM9I0/1c9HMMI06zfHgmMeRY8HDwOKnjSlYZvdQ5u4yB+gVbqrX97cAOxsHn9GF/9G3iV4WbSWBeNp9kD1OAzEQhZ/zByQSQiCoXVEA2vyUKRMp9Ailo0g23pBo1155nUg5AS0VB6DlGByAGyDRcgpelkmTImvt6PObmeexAZzjGwr/3yXuhBWO8ShcwREy4Sr1F+Ea+V24jhY+hRvUf4SbuFUD4RYu1BsdVO2Eu5vSbcsKZxgIV3CKJ+Eq9ZVwjfwqXMcVPoQb1L+EmxjjV7iFa2WpDOFhMEFgnEFjig3jAjEcLJIyBtahOfRmEsxMTzd6ETubOBso71dilwMeaDnngCntPbdmvkon/mDLgdSYbh4FS7YpjS4idCgbXyyc1d2oc7D9nu22tNi/a4E1x+xRDWzU/D3bM9JIbAyvkJI18jK3pBJTj2hrrPG7ZynW814IiU68y/SIx5o0dTr3bmniwOLn8owcfbS5kj33qBw+Y1kIeb/dTsQgil2GP5PYcRkAAAB42mNgYoAALjDJyIAOWMCiTIxM/FmZiXkFiXnxxRmJeckZpQA1nQZRAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMAAwABAAQAAAACAAAAAHjaY2BgYGQAgqtL1DlA9E2ti1EwGgA9dwYGAAA=) format('woff');
-		font-weight: normal;
-		font-style: normal;
-	}
-
-	.tui-icon {
-		font-family: "keyboardFont" !important;
-		font-size: 22px;
-		font-style: normal;
-		-webkit-font-smoothing: antialiased;
-		-moz-osx-font-smoothing: grayscale;
-		line-height: 1;
-		color: #333;
-	}
-
-	.tui-keyboard-delete:before {
-		content: "\e7b8";
-	}
-
-	.tui-keyboard-mask {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-color: rgba(0, 0, 0, 0.6);
-		z-index: 998;
-		transition: all 0.3s ease-in-out;
-		opacity: 0;
-		visibility: hidden;
-	}
-
-	.tui-mask-show {
-		opacity: 1;
-		visibility: visible;
-	}
-
-	.tui-keyboard {
-		width: 100%;
-		position: fixed;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		z-index: 999;
-		padding-bottom: env(safe-area-inset-bottom);
-		background-color: #fff;
-	}
-
-	.tui-keyboard-radius {
-		border-top-left-radius: 16rpx;
-		border-top-right-radius: 16rpx;
-		overflow: hidden;
-	}
-
-	.tui-keyboard-action {
-		visibility: hidden;
-		transform: translate3d(0, 100%, 0);
-		transform-origin: center;
-		transition: all 0.3s ease-in-out;
-	}
-
-	.tui-keyboard-show {
-		transform: translate3d(0, 0, 0);
-		visibility: visible;
-	}
-
-	.tui-bg-gray {
-		background-color: #e7e6eb !important;
-	}
-
-	.tui-keyboard-grids {
-		width: 100%;
-		position: relative;
-		overflow: hidden;
-		display: flex;
-		display: -webkit-flex;
-		flex-direction: row;
-		flex-wrap: wrap;
-	}
-
-	.tui-keyboard-grids::after {
-		content: " ";
-		position: absolute;
-		left: 0;
-		top: 0;
-		width: 100%;
-		height: 1px;
-		border-top: 1px solid #eaeef1;
-		-webkit-transform-origin: 0 0;
-		transform-origin: 0 0;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-	}
-
-	.tui-keyboard-grid {
-		position: relative;
-		padding: 24rpx 20rpx;
-		box-sizing: border-box;
-		background-color: #fff;
-		width: 33.33333333%;
-	}
-
-	.tui-keyboard-grid:nth-of-type(3n)::before {
-		width: 0;
-		border-right: 0;
-	}
-
-	.tui-keyboard-grid::before {
-		content: " ";
-		position: absolute;
-		right: 0;
-		top: 0;
-		width: 1px;
-		bottom: 0;
-		border-right: 1px solid #eaeef1;
-		-webkit-transform-origin: 100% 0;
-		transform-origin: 100% 0;
-		-webkit-transform: scaleX(0.5);
-		transform: scaleX(0.5);
-	}
-
-	.tui-keyboard-grid::after {
-		content: " ";
-		position: absolute;
-		left: 0;
-		bottom: 0;
-		right: 0;
-		height: 1px;
-		border-bottom: 1px solid #eaeef1;
-		-webkit-transform-origin: 0 100%;
-		transform-origin: 0 100%;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-	}
-
-	.tui-grid-bottom::after {
-		height: 0 !important;
-		border-bottom: 0 !important;
-	}
-
-	.tui-keyboard-hover {
-		background-color: #f7f7f9 !important;
-	}
-
-	.tui-keyboard-item {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 48rpx;
-		height: 60rpx;
-		color: #000;
-	}
-
-	.tui-fontsize-32 {
-		font-size: 32rpx;
-		color: #333 !important;
-	}
-</style>

+ 0 - 171
components/thorui/tui-list-cell/tui-list-cell.vue

@@ -1,171 +0,0 @@
-<template>
-	<view
-		class="tui-list-class tui-list-cell"
-		:class="[
-			arrow ? 'tui-cell-arrow' : '',
-			arrow && arrowRight ? '' : 'tui-arrow-right',
-			unlined ? 'tui-cell-unlined' : '',
-			lineLeft ? 'tui-line-left' : '',
-			lineRight ? 'tui-line-right' : '',
-			arrow && arrowColor ? 'tui-arrow-' + arrowColor : '',
-			radius ? 'tui-radius' : ''
-		]"
-		:hover-class="hover ? 'tui-cell-hover' : ''"
-		:style="{ backgroundColor: backgroundColor, fontSize: size + 'rpx', color: color, padding: padding }"
-		:hover-stay-time="150"
-		@tap="handleClick"
-	>
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-export default {
-	name: 'tuiListCell',
-	props: {
-		//是否有箭头
-		arrow: {
-			type: Boolean,
-			default: false
-		},
-		//箭头颜色 传值: white,gray,warning,danger
-		arrowColor: {
-			type: String,
-			default: ''
-		},
-		//是否有点击效果
-		hover: {
-			type: Boolean,
-			default: true
-		},
-		//隐藏线条
-		unlined: {
-			type: Boolean,
-			default: false
-		},
-		//线条是否有左偏移距离
-		lineLeft: {
-			type: Boolean,
-			default: true
-		},
-		//线条是否有右偏移距离
-		lineRight: {
-			type: Boolean,
-			default: false
-		},
-		padding: {
-			type: String,
-			default: '26rpx 30rpx'
-		},
-		//背景颜色
-		backgroundColor: {
-			type: String,
-			default: '#fff'
-		},
-		//字体大小
-		size: {
-			type: Number,
-			default: 28
-		},
-		//字体颜色
-		color: {
-			type: String,
-			default: '#333'
-		},
-		//是否加圆角
-		radius: {
-			type: Boolean,
-			default: false
-		},
-		//箭头是否有偏移距离
-		arrowRight: {
-			type: Boolean,
-			default: true
-		},
-		index: {
-			type: Number,
-			default: 0
-		}
-	},
-	methods: {
-		handleClick() {
-			this.$emit('click', {
-				index: this.index
-			});
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-list-cell {
-	position: relative;
-	width: 100%;
-	box-sizing: border-box;
-}
-.tui-radius {
-	border-radius: 6rpx;
-	overflow: hidden;
-}
-
-.tui-cell-hover {
-	background-color: #f1f1f1 !important;
-}
-
-.tui-list-cell::after {
-	content: '';
-	position: absolute;
-	border-bottom: 1px solid #eaeef1;
-	-webkit-transform: scaleY(0.5) translateZ(0);
-	transform: scaleY(0.5) translateZ(0);
-	transform-origin: 0 100%;
-	bottom: 0;
-	right: 0;
-	left: 0;
-}
-
-.tui-line-left::after {
-	left: 30rpx !important;
-}
-
-.tui-line-right::after {
-	right: 30rpx !important;
-}
-
-.tui-cell-unlined::after {
-	border-bottom: 0 !important;
-}
-
-.tui-cell-arrow::before {
-	content: ' ';
-	height: 10px;
-	width: 10px;
-	border-width: 2px 2px 0 0;
-	border-color: #c0c0c0;
-	border-style: solid;
-	-webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
-	transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
-	position: absolute;
-	top: 50%;
-	margin-top: -6px;
-	right: 30rpx;
-}
-.tui-arrow-right::before {
-	right: 0 !important;
-}
-.tui-arrow-gray::before {
-	border-color: #666666 !important;
-}
-.tui-arrow-white::before {
-	border-color: #ffffff !important;
-}
-.tui-arrow-warning::before {
-	border-color: #ff7900 !important;
-}
-.tui-arrow-success::before {
-	border-color: #19be6b !important;
-}
-.tui-arrow-danger::before {
-	border-color: #eb0909 !important;
-}
-</style>

+ 0 - 87
components/thorui/tui-list-view/tui-list-view.vue

@@ -1,87 +0,0 @@
-<template>
-	<view class="tui-list-view tui-view-class" :style="{backgroundColor:backgroundColor}">
-		<view class="tui-list-title" v-if="title">{{title}}</view>
-		<view class="tui-list-content" :class="[unlined?'tui-border-'+unlined:'']">
-			<slot></slot>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiListView",
-		props: {
-			title: {
-				type: String,
-				default: ''
-			},
-			backgroundColor:{
-				type: String,
-				default: 'transparent'
-			},
-			unlined: {
-				type: String,
-				default: '' //top,bottom,all
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-list-title {
-		width: 100%;
-		padding: 30rpx;
-		box-sizing: border-box;
-		font-size: 30rpx;
-		line-height: 30rpx;
-		color: #666;
-	}
-
-	.tui-list-content {
-		width: 100%;
-		position: relative;
-	}
-
-	.tui-list-content::before {
-		content: " ";
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		border-top: 1rpx solid #eaeef1;
-		-webkit-transform: scaleY(0.5) translateZ(0);
-		transform: scaleY(0.5) translateZ(0);
-		transform-origin: 0 0;
-		z-index: 2;
-		pointer-events: none;
-	}
-
-	.tui-list-content::after {
-		content: '';
-		width: 100%;
-		position: absolute;
-		border-bottom: 1rpx solid #eaeef1;
-		-webkit-transform: scaleY(0.5) translateZ(0);
-		transform: scaleY(0.5) translateZ(0);
-		transform-origin: 0 100%;
-		bottom: 0;
-		right: 0;
-		left: 0;
-	}
-
-	.tui-border-top::before {
-		border-top: 0;
-	}
-
-	.tui-border-bottom::after {
-		border-bottom: 0;
-	}
-
-	.tui-border-all::after {
-		border-bottom: 0;
-	}
-
-	.tui-border-all::before {
-		border-top: 0;
-	}
-</style>

+ 0 - 679
components/thorui/tui-picture-cropper/tui-picture-cropper.vue

@@ -1,679 +0,0 @@
-<template>
-	<view class="tui-container" @touchmove.stop.prevent="stop">
-		<view
-			class="tui-image-cropper"
-			:change:prop="parse.propsChange"
-			:prop="props"
-			:data-lockRatio="lockRatio"
-			:data-lockWidth="lockWidth"
-			:data-lockHeight="lockHeight"
-			:data-maxWidth="maxWidth"
-			:data-minWidth="minWidth"
-			:data-maxHeight="maxHeight"
-			:data-minHeight="minHeight"
-			:data-width="width"
-			:data-height="height"
-			:data-limitMove="limitMove"
-			:data-windowHeight="sysInfo.windowHeight || 600"
-			:data-windowWidth="sysInfo.windowWidth || 400"
-			:data-imgTop="imgTop"
-			:data-imgLeft="imgLeft"
-			:data-imgWidth="imgWidth"
-			:data-imgHeight="imgHeight"
-			:data-angle="angle"
-			@touchend="parse.cutTouchEnd"
-			@touchstart="parse.cutTouchStart"
-			@touchmove="parse.cutTouchMove"
-		>
-			<view class="tui-content">
-				<view class="tui-content-top tui-bg-transparent" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-				<view class="tui-content-middle">
-					<view class="tui-bg-transparent tui-wxs-bg" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-					<view class="tui-cropper-box" :style="{ borderColor: borderColor, transitionProperty: cutAnimation ? '' : 'background' }">
-						<view
-							v-for="(item, index) in 4"
-							:key="index"
-							class="tui-edge"
-							:class="[`tui-${index < 2 ? 'top' : 'bottom'}-${index === 0 || index === 2 ? 'left' : 'right'}`]"
-							:style="{
-								width: edgeWidth,
-								height: edgeWidth,
-								borderColor: edgeColor,
-								borderWidth: edgeBorderWidth,
-								left: index === 0 || index === 2 ? `-${edgeOffsets}` : 'auto',
-								right: index === 1 || index === 3 ? `-${edgeOffsets}` : 'auto',
-								top: index < 2 ? `-${edgeOffsets}` : 'auto',
-								bottom: index > 1 ? `-${edgeOffsets}` : 'auto'
-							}"
-						></view>
-					</view>
-					<view class="tui-flex-auto tui-bg-transparent" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-				</view>
-				<view class="tui-flex-auto tui-bg-transparent" :style="{ transitionProperty: cutAnimation ? '' : 'background' }"></view>
-			</view>
-			<image
-				@load="imageLoad"
-				@error="imageLoad"
-				@touchstart="parse.touchstart"
-				@touchmove="parse.touchmove"
-				@touchend="parse.touchend"
-				:data-minScale="minScale"
-				:data-maxScale="maxScale"
-				:data-disableRotate="disableRotate"
-				:style="{
-					width: imgWidth ? imgWidth + 'px' : 'auto',
-					height: imgHeight ? imgHeight + 'px' : 'auto',
-					transitionDuration: (cutAnimation ? 0.3 : 0) + 's'
-				}"
-				class="tui-cropper-image"
-				:src="imageUrl"
-				v-if="imageUrl"
-				mode="widthFix"
-			></image>
-		</view>
-		<canvas
-			canvas-id="tui-image-cropper"
-			id="tui-image-cropper"
-			:disable-scroll="true"
-			:style="{ width: CROPPER_WIDTH * scaleRatio + 'px', height: CROPPER_HEIGHT * scaleRatio + 'px' }"
-			class="tui-cropper-canvas"
-		></canvas>
-		<view class="tui-cropper-tabbar" v-if="!custom">
-			<view class="tui-op-btn" @tap.stop="back">取消</view>
-			<image :src="rotateImg" class="tui-rotate-img" @tap="setAngle"></image>
-			<view class="tui-op-btn" @tap.stop="getImage">完成</view>
-		</view>
-	</view>
-</template>
-<script src="./tui-picture-cropper.wxs" module="parse" lang="wxs"></script>
-<script>
-/**
- * 注意:组件中使用的图片地址,将文件复制到自己项目中
- * 如果图片位置与组件同级,编译成小程序时图片会丢失
- * 拷贝static下整个components文件夹
- *也可直接转成base64(不建议)
- * */
-export default {
-	name: 'tuiPictureCropper',
-	props: {
-		//图片路径
-		imageUrl: {
-			type: String,
-			default: ''
-		},
-		/*
-					 默认正方形,可修改大小控制比例
-					 裁剪框高度 px
-					*/
-		height: {
-			type: Number,
-			default: 280
-		},
-		//裁剪框宽度 px
-		width: {
-			type: Number,
-			default: 280
-		},
-		//裁剪框最小宽度 px
-		minWidth: {
-			type: Number,
-			default: 100
-		},
-		//裁剪框最小高度 px
-		minHeight: {
-			type: Number,
-			default: 100
-		},
-		//裁剪框最大宽度 px
-		maxWidth: {
-			type: Number,
-			default: 360
-		},
-		//裁剪框最大高度 px
-		maxHeight: {
-			type: Number,
-			default: 360
-		},
-		//裁剪框border颜色
-		borderColor: {
-			type: String,
-			default: 'rgba(255,255,255,0.1)'
-		},
-		//裁剪框边缘线颜色
-		edgeColor: {
-			type: String,
-			default: '#FFFFFF'
-		},
-		//裁剪框边缘线宽度 w=h
-		edgeWidth: {
-			type: String,
-			default: '34rpx'
-		},
-		//裁剪框边缘线border宽度
-		edgeBorderWidth: {
-			type: String,
-			default: '6rpx'
-		},
-		//偏移距离,根据edgeBorderWidth进行调整
-		edgeOffsets: {
-			type: String,
-			default: '6rpx'
-		},
-		/**
-		 * 如果宽度和高度都为true则裁剪框禁止拖动
-		 * 裁剪框宽度锁定
-		 */
-		lockWidth: {
-			type: Boolean,
-			default: false
-		},
-		//裁剪框高度锁定
-		lockHeight: {
-			type: Boolean,
-			default: false
-		},
-		//锁定裁剪框比例(放大或缩小)
-		lockRatio: {
-			type: Boolean,
-			default: false
-		},
-		//生成的图片尺寸相对剪裁框的比例
-		scaleRatio: {
-			type: Number,
-			default: 2
-		},
-		//图片的质量,取值范围为 (0, 1],不在范围内时当作1.0处理
-		quality: {
-			type: Number,
-			default: 0.8
-		},
-		//图片旋转角度
-		rotateAngle: {
-			type: Number,
-			default: 0
-		},
-		//图片最小缩放比
-		minScale: {
-			type: Number,
-			default: 0.5
-		},
-		//图片最大缩放比
-		maxScale: {
-			type: Number,
-			default: 2
-		},
-		//是否禁用触摸旋转(为false则可以触摸转动图片,limitMove为false生效)
-		disableRotate: {
-			type: Boolean,
-			default: true
-		},
-		//是否限制移动范围(剪裁框只能在图片内,为true不可触摸转动图片)
-		limitMove: {
-			type: Boolean,
-			default: true
-		},
-		//自定义操作栏(为true时隐藏底部操作栏)
-		custom: {
-			type: Boolean,
-			default: false
-		},
-		//值发生改变开始裁剪(custom为true时生效)
-		startCutting: {
-			type: [Number, Boolean],
-			default: 0
-		},
-		/**
-		 * 是否返回base64(H5端默认base64)
-		 * 支持平台:App,微信小程序,支付宝小程序,H5(默认url就是base64)
-		 **/
-		isBase64: {
-			type: Boolean,
-			default: false
-		},
-		//裁剪时是否显示loadding
-		loadding: {
-			type: Boolean,
-			default: true
-		},
-		//旋转icon
-		rotateImg: {
-			type: String,
-			default: '/static/components/cropper/img_rotate.png'
-		}
-	},
-	data() {
-		return {
-			TIME_CUT_CENTER: null,
-			CROPPER_WIDTH: 200, //裁剪框宽
-			CROPPER_HEIGHT: 200, //裁剪框高
-			cutX: 0, //画布x轴起点
-			cutY: 0, //画布y轴起点0
-			canvasWidth: 0,
-			canvasHeight: 0,
-			imgWidth: 0, //图片宽度
-			imgHeight: 0, //图片高度
-			scale: 1, //图片缩放比
-			angle: 0, //图片旋转角度
-			cutAnimation: false, //是否开启图片和裁剪框过渡
-			cutAnimationTime: null,
-			imgTop: 0, //图片上边距
-			imgLeft: 0, //图片左边距
-			ctx: null,
-			sysInfo: {},
-			props: '',
-			sizeChange: 0, //2
-			angleChange: 0, //3
-			resetChange: 0, //4
-			centerChange: 0 //5
-		};
-	},
-	watch: {
-		//定义变量然后利用change触发
-		imageUrl(val, oldVal) {
-			this.imageReset();
-			this.showLoading();
-			uni.getImageInfo({
-				src: val,
-				success: res => {
-					//计算图片尺寸
-					this.imgComputeSize(res.width, res.height);
-					if (this.limitMove) {
-						this.angleChange++;
-						this.props = `3,${this.angleChange}`;
-					}
-				},
-				fail: err => {
-					this.imgComputeSize();
-					if (this.limitMove) {
-						this.angleChange++;
-						this.props = `3,${this.angleChange}`;
-					}
-				}
-			});
-		},
-		rotateAngle(val) {
-			this.cutAnimation = true;
-			this.angle = val;
-			this.angleChanged(val);
-		},
-		cutAnimation(val) {
-			//开启过渡260毫秒之后自动关闭
-			clearTimeout(this.cutAnimationTime);
-			if (val) {
-				this.cutAnimationTime = setTimeout(() => {
-					this.cutAnimation = false;
-				}, 260);
-			}
-		},
-		limitMove(val) {
-			if (val) {
-				this.angleChanged(this.angle);
-			}
-		},
-		startCutting(val) {
-			if (this.custom && val) {
-				this.getImage();
-			}
-		}
-	},
-	mounted() {
-		this.sysInfo = uni.getSystemInfoSync();
-		this.imgTop = this.sysInfo.windowHeight / 2;
-		this.imgLeft = this.sysInfo.windowWidth / 2;
-		this.CROPPER_WIDTH = this.width;
-		this.CROPPER_HEIGHT = this.height;
-		this.canvasHeight = this.height;
-		this.canvasWidth = this.width;
-		this.ctx = uni.createCanvasContext('tui-image-cropper', this);
-		//初始化
-		setTimeout(() => {
-			this.props = '1,1';
-		}, 0);
-		setTimeout(() => {
-			this.$emit('ready', {});
-		}, 200);
-	},
-	methods: {
-		//返回裁剪后图片信息
-		getImage() {
-			if (!this.imageUrl) {
-				uni.showToast({
-					title: '请选择图片',
-					icon: 'none'
-				});
-				return;
-			}
-			this.loadding && this.showLoading();
-			let draw = () => {
-				//图片实际大小
-				let imgWidth = this.imgWidth * this.scale * this.scaleRatio;
-				let imgHeight = this.imgHeight * this.scale * this.scaleRatio;
-				//canvas和图片的相对距离
-				let xpos = this.imgLeft - this.cutX;
-				let ypos = this.imgTop - this.cutY;
-				//旋转画布
-				this.ctx.translate(xpos * this.scaleRatio, ypos * this.scaleRatio);
-				this.ctx.rotate((this.angle * Math.PI) / 180);
-				this.ctx.drawImage(this.imageUrl, -imgWidth / 2, -imgHeight / 2, imgWidth, imgHeight);
-				this.ctx.draw(false, () => {
-					let params = {
-						width: this.canvasWidth * this.scaleRatio,
-						height: Math.round(this.canvasHeight * this.scaleRatio),
-						destWidth: this.canvasWidth * this.scaleRatio,
-						destHeight: Math.round(this.canvasHeight) * this.scaleRatio,
-						fileType: 'png',
-						quality: this.quality
-					};
-					let data = {
-						url: '',
-						base64: '',
-						width: this.canvasWidth * this.scaleRatio,
-						height: this.canvasHeight * this.scaleRatio
-					};
-					// #ifdef MP-ALIPAY
-
-					if (this.isBase64) {
-						this.ctx.toDataURL(params).then(dataURL => {
-							data.base64 = dataURL;
-							this.loadding && uni.hideLoading();
-							this.$emit('cropper', data);
-						});
-					} else {
-						this.ctx.toTempFilePath({
-							...params,
-							success: res => {
-								data.url = res.tempFilePath;
-								this.loadding && uni.hideLoading();
-								this.$emit('cropper', data);
-							}
-						});
-					}
-					// #endif
-
-					// #ifndef MP-ALIPAY
-					// #ifdef MP-BAIDU || MP-TOUTIAO || H5
-					this.isBase64 = false;
-					// #endif
-					if (this.isBase64) {
-						uni.canvasGetImageData({
-							canvasId: 'tui-image-cropper',
-							x: 0,
-							y: 0,
-							width: this.canvasWidth * this.scaleRatio,
-							height: Math.round(this.canvasHeight * this.scaleRatio),
-							success: res => {
-								const arrayBuffer = new Uint8Array(res.data);
-								const base64 = uni.arrayBufferToBase64(arrayBuffer);
-								data.base64 = base64;
-								this.loadding && uni.hideLoading();
-								this.$emit('cropper', data);
-							}
-						});
-					} else {
-						uni.canvasToTempFilePath(
-							{
-								...params,
-								canvasId: 'tui-image-cropper',
-								success: res => {
-									data.url = res.tempFilePath;
-									// #ifdef H5
-									data.base64 = res.tempFilePath;
-									// #endif
-									this.loadding && uni.hideLoading();
-									this.$emit('cropper', data);
-								},
-								fail(res) {
-									console.log(res);
-								}
-							},
-							this
-						);
-					}
-					// #endif
-				});
-			};
-			if (this.CROPPER_WIDTH != this.canvasWidth || this.CROPPER_HEIGHT != this.canvasHeight) {
-				this.CROPPER_WIDTH = this.canvasWidth;
-				this.CROPPER_HEIGHT = this.canvasHeight;
-				this.$nextTick(() => {
-					this.ctx.draw();
-					setTimeout(() => {
-						draw();
-					}, 100);
-				});
-			} else {
-				draw();
-			}
-		},
-		change(e) {
-			this.cutX = e.cutX || 0;
-			this.cutY = e.cutY || 0;
-			this.canvasWidth = e.canvasWidth || 100;
-			this.canvasHeight = e.canvasHeight || 100;
-			this.imgWidth = e.imgWidth || 100;
-			this.imgHeight = e.imgHeight || 100;
-			this.scale = e.scale || 1;
-			this.angle = e.angle || 0;
-			this.imgTop = e.imgTop || 0;
-			this.imgLeft = e.imgLeft || 0;
-		},
-		imageReset() {
-			this.scale = 1;
-			this.angle = 0;
-			let sys = this.sysInfo.windowHeight || uni.getSystemInfoSync();
-			this.imgTop = sys.windowHeight / 2;
-			this.imgLeft = sys.windowWidth / 2;
-			this.resetChange++;
-			this.props = `4,${this.resetChange}`;
-			//初始化旋转角度 0deg
-			this.$emit('initAngle', {});
-		},
-		imageLoad(e) {
-			this.imageReset();
-			uni.hideLoading();
-			this.$emit('imageLoad', {});
-		},
-
-		imgComputeSize(width, height) {
-			//默认按图片最小边 = 对应裁剪框尺寸
-			let imgWidth = width,
-				imgHeight = height;
-			if (imgWidth && imgHeight) {
-				if (imgWidth / imgHeight > this.width / this.height) {
-					imgHeight = this.height;
-					imgWidth = (width / height) * imgHeight;
-				} else {
-					imgWidth = this.width;
-					imgHeight = (height / width) * imgWidth;
-				}
-			} else {
-				let sys = this.sysInfo || uni.getSystemInfoSync();
-				imgWidth = sys.windowWidth;
-				imgHeight = 0;
-			}
-			this.imgWidth = imgWidth;
-			this.imgHeight = imgHeight;
-			this.sizeChange++;
-			this.props = `2,${this.sizeChange}`;
-		},
-		moveStop() {
-			clearTimeout(this.TIME_CUT_CENTER);
-			this.TIME_CUT_CENTER = setTimeout(() => {
-				if (!this.cutAnimation) {
-					this.cutAnimation = true;
-				}
-				this.centerChange++;
-				this.props = `5,${this.centerChange}`;
-			}, 666);
-		},
-		moveDuring() {
-			clearTimeout(this.TIME_CUT_CENTER);
-		},
-		showLoading() {
-			uni.showLoading({
-				title: '请稍候...',
-				mask: true
-			});
-		},
-		stop() {},
-		back() {
-			uni.navigateBack();
-		},
-		angleChanged(val) {
-			this.moveStop();
-			if (this.limitMove && val % 90) {
-				this.angle = Math.round(val / 90) * 90;
-			}
-			this.angleChange++;
-			this.props = `3,${this.angleChange}`;
-		},
-		setAngle() {
-			this.cutAnimation = true;
-			this.angle = this.angle + 90;
-			this.angleChanged(this.angle);
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-container {
-	width: 100vw;
-	height: 100vh;
-	background-color: rgba(0, 0, 0, 0.6);
-	position: fixed;
-	top: 0;
-	left: 0;
-	z-index: 1;
-}
-
-.tui-image-cropper {
-	width: 100vw;
-	height: 100vh;
-	position: absolute;
-}
-
-.tui-content {
-	width: 100vw;
-	height: 100vh;
-	position: absolute;
-	z-index: 9;
-	display: flex;
-	flex-direction: column;
-	pointer-events: none;
-}
-
-.tui-bg-transparent {
-	background-color: rgba(0, 0, 0, 0.6);
-	transition-duration: 0.3s;
-}
-
-.tui-content-top {
-	pointer-events: none;
-}
-
-.tui-content-middle {
-	width: 100%;
-	height: 200px;
-	display: flex;
-	box-sizing: border-box;
-}
-
-.tui-cropper-box {
-	position: relative;
-	/* transition-duration: 0.2s; */
-	border-style: solid;
-	border-width: 1rpx;
-	box-sizing: border-box;
-}
-
-.tui-flex-auto {
-	flex: auto;
-}
-
-.tui-cropper-image {
-	width: 100%;
-	border-style: none;
-	position: absolute;
-	top: 0;
-	left: 0;
-	z-index: 2;
-	-webkit-backface-visibility: hidden;
-	backface-visibility: hidden;
-	transform-origin: center;
-}
-
-.tui-cropper-canvas {
-	position: fixed;
-	z-index: 10;
-	left: -2000px;
-	top: -2000px;
-	pointer-events: none;
-}
-
-.tui-edge {
-	border-style: solid;
-	pointer-events: auto;
-	position: absolute;
-	box-sizing: border-box;
-}
-
-.tui-top-left {
-	border-bottom-width: 0 !important;
-	border-right-width: 0 !important;
-}
-
-.tui-top-right {
-	border-bottom-width: 0 !important;
-	border-left-width: 0 !important;
-}
-
-.tui-bottom-left {
-	border-top-width: 0 !important;
-	border-right-width: 0 !important;
-}
-
-.tui-bottom-right {
-	border-top-width: 0 !important;
-	border-left-width: 0 !important;
-}
-
-.tui-cropper-tabbar {
-	width: 100%;
-	height: 120rpx;
-	padding: 0 40rpx;
-	box-sizing: border-box;
-	position: fixed;
-	left: 0;
-	bottom: 0;
-	z-index: 99;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	color: #ffffff;
-	font-size: 32rpx;
-}
-
-.tui-cropper-tabbar::after {
-	content: ' ';
-	position: absolute;
-	top: 0;
-	right: 0;
-	left: 0;
-	border-top: 1rpx solid rgba(255, 255, 255, 0.2);
-	-webkit-transform: scaleY(0.5) translateZ(0);
-	transform: scaleY(0.5) translateZ(0);
-	transform-origin: 0 100%;
-}
-
-.tui-op-btn {
-	height: 80rpx;
-	display: flex;
-	align-items: center;
-}
-
-.tui-rotate-img {
-	width: 44rpx;
-	height: 44rpx;
-}
-</style>

+ 0 - 560
components/thorui/tui-picture-cropper/tui-picture-cropper.wxs

@@ -1,560 +0,0 @@
-var cropper = {
-	CUT_START: null,
-	cutX: 0, //画布x轴起点
-	cutY: 0, //画布y轴起点0
-	touchRelative: [{
-		x: 0,
-		y: 0
-	}], //手指或鼠标和图片中心的相对位置
-	flagCutTouch: false, //是否是拖动裁剪框
-	hypotenuseLength: 0, //双指触摸时斜边长度
-	flagEndTouch: false, //是否结束触摸
-	canvasWidth: 0,
-	canvasHeight: 0,
-	imgWidth: 0, //图片宽度
-	imgHeight: 0, //图片高度
-	scale: 1, //图片缩放比
-	angle: 0, //图片旋转角度
-	imgTop: 0, //图片上边距
-	imgLeft: 0, //图片左边距
-	//是否限制移动范围(剪裁框只能在图片内,为true不可触摸转动图片)
-	limitMove: true,
-	minHeight: 0,
-	maxHeight: 0,
-	minWidth: 0,
-	maxWidth: 0,
-	windowHeight: 0,
-	windowWidth: 0,
-	init: true
-}
-
-function bool(str) {
-	return str === 'true' || str == true ? true : false
-}
-
-function touchstart(e, ins) {
-	//var instance = e.instance;
-	// var state = instance.getState();
-	var touch = e.touches || e.changedTouches;
-	cropper.flagEndTouch = false;
-	if (touch.length == 1) {
-		cropper.touchRelative[0] = {
-			x: touch[0].pageX - cropper.imgLeft,
-			y: touch[0].pageY - cropper.imgTop
-		};
-	} else {
-		var width = Math.abs(touch[0].pageX - touch[1].pageX);
-		var height = Math.abs(touch[0].pageY - touch[1].pageY);
-		cropper.touchRelative = [{
-				x: touch[0].pageX - cropper.imgLeft,
-				y: touch[0].pageY - cropper.imgTop
-			},
-			{
-				x: touch[1].pageX - cropper.imgLeft,
-				y: touch[1].pageY - cropper.imgTop
-			}
-		];
-		cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
-	}
-
-}
-
-function moveDuring(ins) {
-	if (!ins) return;
-	ins.callMethod('moveDuring')
-}
-
-function moveStop(ins) {
-	if (!ins) return;
-	ins.callMethod('moveStop')
-};
-
-function setCutCenter(ins) {
-	var cutY = (cropper.windowHeight - cropper.canvasHeight) * 0.5;
-	var cutX = (cropper.windowWidth - cropper.canvasWidth) * 0.5;
-	//顺序不能变
-	cropper.imgTop = cropper.imgTop - cropper.cutY + cutY;
-	cropper.cutY = cutY; //截取的框上边距
-	cropper.imgLeft = cropper.imgLeft - cropper.cutX + cutX;
-	cropper.cutX = cutX; //截取的框左边距
-	styleUpdate(ins)
-	cutDetectionPosition(ins)
-	imgTransform(ins)
-	updateData(ins)
-}
-
-function touchmove(e, ins) {
-	var touch = e.touches || e.changedTouches;
-	if (cropper.flagEndTouch) return;
-	moveDuring(ins);
-	if (e.touches.length == 1) {
-		var left = touch[0].pageX - cropper.touchRelative[0].x,
-			top = touch[0].pageY - cropper.touchRelative[0].y;
-		cropper.imgLeft = left;
-		cropper.imgTop = top;
-		imgTransform(ins);
-		imgMarginDetectionPosition(ins);
-	} else {
-		var res = e.instance.getDataset();
-		var minScale = +res.minscale;
-		var maxScale = +res.maxscale;
-		var disableRotate = bool(res.disablerotate)
-		var width = Math.abs(touch[0].pageX - touch[1].pageX),
-			height = Math.abs(touch[0].pageY - touch[1].pageY),
-			hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)),
-			scale = cropper.scale * (hypotenuse / cropper.hypotenuseLength),
-			current_deg = 0;
-		scale = scale <= minScale ? minScale : scale;
-		scale = scale >= maxScale ? maxScale : scale;
-		cropper.scale = scale;
-		imgMarginDetectionScale(ins, true);
-		var touchRelative = [{
-				x: touch[0].pageX - cropper.imgLeft,
-				y: touch[0].pageY - cropper.imgTop
-			},
-			{
-				x: touch[1].pageX - cropper.imgLeft,
-				y: touch[1].pageY - cropper.imgTop
-			}
-		];
-		if (!disableRotate) {
-			var first_atan = (180 / Math.PI) * Math.atan2(touchRelative[0].y, touchRelative[0].x);
-			var first_atan_old = (180 / Math.PI) * Math.atan2(cropper.touchRelative[0].y, cropper.touchRelative[0].x);
-			var second_atan = (180 / Math.PI) * Math.atan2(touchRelative[1].y, touchRelative[1].x);
-			var second_atan_old = (180 / Math.PI) * Math.atan2(cropper.touchRelative[1].y, cropper.touchRelative[1].x);
-			var first_deg = first_atan - first_atan_old,
-				second_deg = second_atan - second_atan_old;
-			if (first_deg != 0) {
-				current_deg = first_deg;
-			} else if (second_deg != 0) {
-				current_deg = second_deg;
-			}
-		}
-		cropper.touchRelative = touchRelative;
-		cropper.hypotenuseLength = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
-		//更新视图
-		cropper.angle = cropper.angle + current_deg;
-		imgTransform(ins);
-	}
-}
-
-function touchend(e, ins) {
-	cropper.flagEndTouch = true;
-	moveStop(ins);
-	updateData(ins)
-}
-
-
-function cutTouchStart(e, ins) {
-	var touch = e.touches || e.changedTouches;
-	var currentX = touch[0].pageX;
-	var currentY = touch[0].pageY;
-
-	/*
-	 * (右下-1 右上-2 左上-3 左下-4)
-	 * left_x [3,4]
-	 * top_y [2,3]
-	 * right_x [1,2]
-	 * bottom_y [1,4]
-	 */
-	var left_x1 = cropper.cutX - 30;
-	var left_x2 = cropper.cutX + 30;
-
-	var top_y1 = cropper.cutY - 30;
-	var top_y2 = cropper.cutY + 30;
-
-	var right_x1 = cropper.cutX + cropper.canvasWidth - 30;
-	var right_x2 = cropper.cutX + cropper.canvasWidth + 30;
-
-	var bottom_y1 = cropper.cutY + cropper.canvasHeight - 30;
-	var bottom_y2 = cropper.cutY + cropper.canvasHeight + 30;
-
-	if (currentX > right_x1 && currentX < right_x2 && currentY > bottom_y1 && currentY < bottom_y2) {
-		moveDuring();
-		cropper.flagCutTouch = true;
-		cropper.flagEndTouch = true;
-		cropper.CUT_START = {
-			width: cropper.canvasWidth,
-			height: cropper.canvasHeight,
-			x: currentX,
-			y: currentY,
-			corner: 1
-		};
-	} else if (currentX > right_x1 && currentX < right_x2 && currentY > top_y1 && currentY < top_y2) {
-		moveDuring();
-		cropper.flagCutTouch = true;
-		cropper.flagEndTouch = true;
-		cropper.CUT_START = {
-			width: cropper.canvasWidth,
-			height: cropper.canvasHeight,
-			x: currentX,
-			y: currentY,
-			cutY: cropper.cutY,
-			cutX: cropper.cutX,
-			corner: 2
-		};
-	} else if (currentX > left_x1 && currentX < left_x2 && currentY > top_y1 && currentY < top_y2) {
-		moveDuring();
-		cropper.flagCutTouch = true;
-		cropper.flagEndTouch = true;
-		cropper.CUT_START = {
-			width: cropper.canvasWidth,
-			height: cropper.canvasHeight,
-			cutY: cropper.cutY,
-			cutX: cropper.cutX,
-			x: currentX,
-			y: currentY,
-			corner: 3
-		};
-	} else if (currentX > left_x1 && currentX < left_x2 && currentY > bottom_y1 && currentY < bottom_y2) {
-		moveDuring();
-		cropper.flagCutTouch = true;
-		cropper.flagEndTouch = true;
-		cropper.CUT_START = {
-			width: cropper.canvasWidth,
-			height: cropper.canvasHeight,
-			cutY: cropper.cutY,
-			cutX: cropper.cutX,
-			x: currentX,
-			y: currentY,
-			corner: 4
-		};
-	}
-}
-
-function cutTouchMove(e, ins) {
-	if (!cropper.CUT_START || cropper.CUT_START === 'null') return;
-	if (cropper.flagCutTouch) {
-		var touch = e.touches || e.changedTouches;
-		var res = e.instance.getDataset();
-		var lockRatio = bool(res.lockratio);
-		var lockWidth = bool(res.lockwidth);
-		var lockHeight = bool(res.lockheight);
-		if (lockRatio && (lockWidth || lockHeight)) return;
-		var width = cropper.canvasWidth,
-			height = cropper.canvasHeight,
-			cutY = cropper.cutY,
-			cutX = cropper.cutX;
-
-		function size_correct() {
-			width = width <= cropper.maxWidth ? (width >= cropper.minWidth ? width : cropper.minWidth) : cropper.maxWidth;
-			height = height <= cropper.maxHeight ? (height >= cropper.minHeight ? height : cropper.minHeight) : cropper.maxHeight;
-		}
-
-		function size_inspect() {
-			if ((width > cropper.maxWidth || width < cropper.minWidth || height > cropper.maxHeight || height < cropper.minHeight) &&
-				lockRatio) {
-				size_correct();
-				return false;
-			} else {
-				size_correct();
-				return true;
-			}
-		};
-		height = cropper.CUT_START.height + (cropper.CUT_START.corner > 1 && cropper.CUT_START.corner < 4 ? 1 : -1) * (
-			cropper.CUT_START.y - touch[0].pageY);
-		switch (cropper.CUT_START.corner) {
-			case 1:
-				width = cropper.CUT_START.width - cropper.CUT_START.x + touch[0].pageX;
-				if (lockRatio) {
-					height = width / (cropper.canvasWidth / cropper.canvasHeight);
-				}
-				if (!size_inspect()) return;
-				break;
-			case 2:
-				width = cropper.CUT_START.width - cropper.CUT_START.x + touch[0].pageX;
-				if (lockRatio) {
-					height = width / (cropper.canvasWidth / cropper.canvasHeight);
-				}
-				if (!size_inspect()) return;
-				cutY = cropper.CUT_START.cutY - (height - cropper.CUT_START.height);
-				break;
-			case 3:
-				width = cropper.CUT_START.width + cropper.CUT_START.x - touch[0].pageX;
-				if (lockRatio) {
-					height = width / (cropper.canvasWidth / cropper.canvasHeight);
-				}
-				if (!size_inspect()) return;
-				cutY = cropper.CUT_START.cutY - (height - cropper.CUT_START.height);
-				cutX = cropper.CUT_START.cutX - (width - cropper.CUT_START.width);
-				break;
-			case 4:
-				width = cropper.CUT_START.width + cropper.CUT_START.x - touch[0].pageX;
-				if (lockRatio) {
-					height = width / (cropper.canvasWidth / cropper.canvasHeight);
-				}
-				if (!size_inspect()) return;
-				cutX = cropper.CUT_START.cutX - (width - cropper.CUT_START.width);
-				break;
-			default:
-				break;
-		}
-		if (!lockWidth && !lockHeight) {
-			cropper.canvasWidth = width;
-			cropper.cutX = cutX;
-			cropper.canvasHeight = height;
-			cropper.cutY = cutY;
-			canvasHeight(ins);
-			canvasWidth(ins);
-		} else if (!lockWidth) {
-			cropper.canvasWidth = width;
-			cropper.cutX = cutX;
-			canvasWidth(ins);
-		} else if (!lockHeight) {
-			cropper.canvasHeight = height;
-			cropper.cutY = cutY;
-			canvasHeight(ins);
-		}
-		styleUpdate(ins)
-		imgMarginDetectionScale(ins);
-	}
-}
-
-//检测剪裁框位置是否在允许的范围内(屏幕内)
-function cutDetectionPosition(ins) {
-	var windowHeight = cropper.windowHeight,
-		windowWidth = cropper.windowWidth;
-
-	function cutDetectionPositionTop() {
-		//检测上边距是否在范围内
-		if (cropper.cutY < 0) {
-			cropper.cutY = 0;
-		}
-		if (cropper.cutY > windowHeight - cropper.canvasHeight) {
-			cropper.cutY = windowHeight - cropper.canvasHeight;
-		}
-	}
-
-	function cutDetectionPositionLeft() {
-		//检测左边距是否在范围内
-		if (cropper.cutX < 0) {
-			cropper.cutX = 0;
-		}
-		if (cropper.cutX > windowWidth - cropper.canvasWidth) {
-			cropper.cutX = windowWidth - cropper.canvasWidth;
-		}
-	}
-	//裁剪框坐标处理(如果只写一个参数则另一个默认为0,都不写默认居中)
-	if (cropper.cutY == null && cropper.cutX == null) {
-		var cutY = (windowHeight - cropper.canvasHeight) * 0.5;
-		var cutX = (windowWidth - cropper.canvasWidth) * 0.5;
-		cropper.cutY = cutY; //截取的框上边距
-		cropper.cutX = cutX; //截取的框左边距
-	} else if (cropper.cutY != null && cropper.cutX != null) {
-		cutDetectionPositionTop();
-		cutDetectionPositionLeft();
-	} else if (cropper.cutY != null && cropper.cutX == null) {
-		cutDetectionPositionTop();
-		cropper.cutX = (windowWidth - cropper.canvasWidth) / 2;
-	} else if (cropper.cutY == null && cropper.cutX != null) {
-		cutDetectionPositionLeft();
-		cropper.cutY = (windowHeight - cropper.canvasHeight) / 2;
-	}
-
-	styleUpdate(ins)
-}
-
-/**
- * 图片边缘检测-缩放
- */
-function imgMarginDetectionScale(ins, delay) {
-	if (!cropper.limitMove) return;
-	var scale = cropper.scale;
-	var imgWidth = cropper.imgWidth;
-	var imgHeight = cropper.imgHeight;
-	if ((cropper.angle / 90) % 2) {
-		imgWidth = cropper.imgHeight;
-		imgHeight = cropper.imgWidth;
-	}
-	if (imgWidth * scale < cropper.canvasWidth) {
-		scale = cropper.canvasWidth / imgWidth;
-	}
-	if (imgHeight * scale < cropper.canvasHeight) {
-		scale = Math.max(scale, cropper.canvasHeight / imgHeight);
-	}
-	imgMarginDetectionPosition(ins, scale, delay);
-}
-/**
- * 图片边缘检测-位置
- */
-function imgMarginDetectionPosition(ins, scale, delay) {
-	if (!cropper.limitMove) return;
-	var left = cropper.imgLeft;
-	var top = cropper.imgTop;
-	scale = scale || cropper.scale;
-	var imgWidth = cropper.imgWidth;
-	var imgHeight = cropper.imgHeight;
-	if ((cropper.angle / 90) % 2) {
-		imgWidth = cropper.imgHeight;
-		imgHeight = cropper.imgWidth;
-	}
-	left = cropper.cutX + (imgWidth * scale) / 2 >= left ? left : cropper.cutX + (imgWidth * scale) / 2;
-	left = cropper.cutX + cropper.canvasWidth - (imgWidth * scale) / 2 <= left ? left : cropper.cutX + cropper.canvasWidth -
-		(imgWidth * scale) / 2;
-	top = cropper.cutY + (imgHeight * scale) / 2 >= top ? top : cropper.cutY + (imgHeight * scale) / 2;
-	top = cropper.cutY + cropper.canvasHeight - (imgHeight * scale) / 2 <= top ? top : cropper.cutY + cropper.canvasHeight -
-		(imgHeight * scale) / 2;
-
-	cropper.imgLeft = left;
-	cropper.imgTop = top;
-	cropper.scale = scale;
-	styleUpdate(ins)
-	if (!delay || delay === 'null') {
-		imgTransform(ins);
-	}
-}
-
-
-function cutTouchEnd(e, ins) {
-	moveStop(ins);
-	cropper.flagCutTouch = false;
-	updateData(ins)
-}
-
-
-//改变截取框大小
-function computeCutSize(ins) {
-	if (cropper.canvasWidth > cropper.windowWidth) {
-		cropper.canvasWidth = cropper.windowWidth;
-		// canvasWidth(ins)
-	} else if (cropper.canvasWidth + cropper.cutX > cropper.windowWidth) {
-		cropper.cutX = cropper.windowWidth - cropper.cutX;
-	}
-	if (cropper.canvasHeight > cropper.windowHeight) {
-		cropper.canvasHeight = cropper.windowHeight;
-		// canvasHeight(ins)
-	} else if (cropper.canvasHeight + cropper.cutY > cropper.windowHeight) {
-		cropper.cutY = cropper.windowHeight - cropper.cutY;
-	}
-	// styleUpdate(ins)
-}
-
-function styleUpdate(ins) {
-	if (!ins) return;
-	ins.selectComponent('.tui-cropper-box').setStyle({
-		'width': cropper.canvasWidth + 'px',
-		'height': cropper.canvasHeight + 'px'
-	})
-	ins.selectComponent('.tui-content-middle').setStyle({
-		'height': cropper.canvasHeight + 'px'
-	})
-	ins.selectComponent('.tui-content-top').setStyle({
-		'height': cropper.cutY + 'px'
-	})
-	ins.selectComponent('.tui-wxs-bg').setStyle({
-		'width': cropper.cutX + 'px'
-	})
-
-}
-
-function imgTransform(ins) {
-	var owner = ins.selectComponent('.tui-cropper-image')
-	if (!owner) return
-	var x = cropper.imgLeft - cropper.imgWidth / 2;
-	var y = cropper.imgTop - cropper.imgHeight / 2;
-	owner.setStyle({
-		'transform': 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + cropper.scale + ') rotate(' + cropper.angle + 'deg)'
-	})
-}
-
-function imageReset(ins) {
-	cropper.scale = 1;
-	cropper.angle = 0;
-	imgTransform(ins);
-}
-//监听截取框宽高变化
-function canvasWidth(ins) {
-	if (cropper.canvasWidth < cropper.minWidth) {
-		cropper.canvasWidth = cropper.minWidth;
-	}
-	if (!ins) return;
-	computeCutSize(ins);
-}
-
-function canvasHeight(ins) {
-	if (cropper.canvasHeight < cropper.minHeight) {
-		cropper.canvasHeight = cropper.minHeight;
-	}
-	if (!ins) return;
-	computeCutSize(ins);
-}
-
-function updateData(ins) {
-	if (!ins) return;
-	ins.callMethod('change', {
-		cutX: cropper.cutX,
-		cutY: cropper.cutY,
-		canvasWidth: cropper.canvasWidth,
-		canvasHeight: cropper.canvasHeight,
-		imgWidth: cropper.imgWidth,
-		imgHeight: cropper.imgHeight,
-		scale: cropper.scale,
-		angle: cropper.angle,
-		imgTop: cropper.imgTop,
-		imgLeft: cropper.imgLeft
-	})
-}
-
-function propsChange(prop, oldProp, ownerInstance, ins) {
-	if (prop && prop !== 'null') {
-		var params = prop.split(',')
-		var type = +params[0]
-		var dataset = ins.getDataset();
-		if (cropper.init || type == 4) {
-			cropper.maxHeight = +dataset.maxheight;
-			cropper.minHeight = +dataset.minheight;
-			cropper.maxWidth = +dataset.maxwidth;
-			cropper.minWidth = +dataset.minwidth;
-			cropper.canvasWidth = +dataset.width;
-			cropper.canvasHeight = +dataset.height;
-			cropper.imgTop = dataset.windowheight / 2;
-			cropper.imgLeft = dataset.windowwidth / 2;
-			cropper.imgWidth = +dataset.imgwidth;
-			cropper.imgHeight = +dataset.imgheight;
-			cropper.windowHeight = +dataset.windowheight;
-			cropper.windowWidth = +dataset.windowwidth;
-			cropper.init = false
-		} else if (type == 2) {
-			cropper.imgWidth = +dataset.imgwidth;
-			cropper.imgHeight = +dataset.imgheight;
-		}
-		cropper.limitMove = bool(dataset.limitmove);
-		cropper.angle = +dataset.angle;
-		if (type == 3) {
-			imgTransform(ownerInstance);
-		}
-		switch (type) {
-			case 1:
-				setCutCenter(ownerInstance);
-				//设置裁剪框大小>设置图片尺寸>绘制canvas
-				computeCutSize(ownerInstance);
-				//检查裁剪框是否在范围内
-				cutDetectionPosition(ownerInstance);
-				break;
-			case 2:
-				setCutCenter(ownerInstance);
-				break;
-			case 3:
-				imgMarginDetectionScale(ownerInstance)
-				break;
-			case 4:
-				imageReset(ownerInstance);
-				break;
-			case 5:
-				setCutCenter(ownerInstance);
-				break;
-			default:
-				break;
-		}
-	}
-}
-
-module.exports = {
-	touchstart: touchstart,
-	touchmove: touchmove,
-	touchend: touchend,
-	cutTouchStart: cutTouchStart,
-	cutTouchMove: cutTouchMove,
-	cutTouchEnd: cutTouchEnd,
-	propsChange: propsChange
-}

+ 0 - 307
components/thorui/tui-round-progress/tui-round-progress.vue

@@ -1,307 +0,0 @@
-<template>
-	<view class="tui-circular-container" :style="{ width: diam + 'px', height: (height || diam) + 'px' }">
-		<canvas
-			:start="percent"
-			:change:start="parse.initDraw"
-			:data-width="diam"
-			:data-height="height"
-			:data-lineWidth="lineWidth"
-			:data-lineCap="lineCap"
-			:data-fontSize="fontSize"
-			:data-fontColor="fontColor"
-			:data-fontShow="fontShow"
-			:data-percentText="percentText"
-			:data-defaultShow="defaultShow"
-			:data-defaultColor="defaultColor"
-			:data-progressColor="progressColor"
-			:data-gradualColor="gradualColor"
-			:data-sAngle="sAngle"
-			:data-counterclockwise="counterclockwise"
-			:data-multiple="multiple"
-			:data-speed="speed"
-			:data-activeMode="activeMode"
-			:data-cid="progressCanvasId"
-			:canvas-id="progressCanvasId"
-			:class="[progressCanvasId]"
-			:style="{ width: diam + 'px', height: (height || diam) + 'px' }"
-		></canvas>
-		<slot></slot>
-	</view>
-</template>
-<script module="parse" lang="renderjs">
- export default {
-	methods:{
-		format(str){
-			if(!str) return str;
-			return str.replace(/\"/g, "");
-		},
-		bool(str){
-			return str==='true' || str==true ? true:false
-		},
-		//初始化绘制
-		  initDraw(percentage, oldPercentage, owner, ins) {
-			 let state=ins.getState();
-			 let res=ins.getDataset();
-			 const activeMode=this.format(res.activemode);
-			 let start = activeMode === 'backwards' ? 0 : (state.startPercentage || 0);
-			 if(!state.progressContext || !state.canvas){
-				const width = res.width;
-				const height = res.height==0?res.width:res.height;
-				let ele=`.${res.cid}>canvas`
-				const canvas = document.querySelectorAll(this.format(ele))[0];
-				const ctx = canvas.getContext('2d');
-				// const dpr =uni.getSystemInfoSync().pixelRatio;
-				// canvas.style.width=width+'px';
-				// canvas.style.height=height+'px';
-				// canvas.width = width * dpr;
-				// canvas.height = height * dpr;
-				// ctx.scale(dpr, dpr);
-				state.progressContext=ctx;
-				state.canvas=canvas;
-				this.drawProgressCircular(start, ctx, canvas,percentage,res,state,owner);
-			 }else{
-		         this.drawProgressCircular(start, state.progressContext, state.canvas,percentage,res,state,owner);
-			 }
-		  },
-		  //默认(背景)圆环
-		  drawDefaultCircular(ctx, canvas,res) {
-		    //终止弧度
-			let sangle=Number(res.sangle) * Math.PI
-		    let eAngle = Math.PI * (res.height!=0 ? 1 : 2) + sangle;
-		    this.drawArc(ctx, eAngle,this.format(res.defaultcolor),res);
-		  },
-		  drawPercentage(ctx, percentage,res) {
-		    ctx.save(); //save和restore可以保证样式属性只运用于该段canvas元素
-		    ctx.beginPath();
-		    ctx.fillStyle = this.format(res.fontcolor);
-		    ctx.font = res.fontsize + "px Arial"; //设置字体大小和字体
-		    ctx.textAlign = "center";
-		    ctx.textBaseline = "middle";
-		    let radius = res.width / 2;
-			let percenttext=this.format(res.percenttext)
-		    if (!percenttext) {
-			  let multiple=Number(res.multiple)
-		      percentage = this.bool(res.counterclockwise) ? 100 - percentage * multiple : percentage * multiple;
-		      percentage = percentage.toFixed(0) + "%"
-		    } else {
-		      percentage = percenttext
-		    }
-		    ctx.fillText(percentage, radius, radius);
-		    ctx.stroke();
-		    ctx.restore();
-		  },
-		  //进度圆环
-		  drawProgressCircular(startPercentage, ctx, canvas,percentage,res,state,owner) {
-		    if (!ctx || !canvas) return;
-			let that=this
-		    let gradient = ctx.createLinearGradient(0, 0, Number(res.width), 0);
-		    gradient.addColorStop(0, this.format(res.progresscolor));
-			let gradualColor=this.format(res.gradualcolor)
-		    if (gradualColor) {
-		      gradient.addColorStop('1', gradualColor);
-		    }
-		    let requestId = null
-		    let renderLoop = () => {
-		      drawFrame((res) => {
-		        if (res) {
-		          requestId = requestAnimationFrame(renderLoop)
-		        } else {
-		          cancelAnimationFrame(requestId)
-		          requestId = null;
-		          renderLoop = null;
-		        }
-		      })
-		    }
-		    requestId = requestAnimationFrame(renderLoop)
-
-		    function drawFrame(callback) {
-		      ctx.clearRect(0, 0, canvas.width, canvas.height);
-		      if (that.bool(res.defaultshow)) {
-		        that.drawDefaultCircular(ctx, canvas,res)
-		      }
-		      if (that.bool(res.fontshow)) {
-		        that.drawPercentage(ctx, startPercentage,res);
-		      }
-		      if (percentage === 0 || (that.bool(res.counterclockwise) && startPercentage === 100)) return;
-		      let sangle=Number(res.sangle) * Math.PI
-			  let eAngle = ((2 * Math.PI) / 100) * startPercentage + sangle;
-			 that.drawArc(ctx, eAngle, gradient,res);
-			  owner.callMethod('change', {
-				percentage:startPercentage
-			 })
-		      if (startPercentage >= percentage) {
-				state.startPercentage=startPercentage;
-				owner.callMethod('end', {
-					canvasId: that.format(res.canvasid)
-				})
-		        cancelAnimationFrame(requestId)
-		        callback && callback(false)
-		        return;
-		      }
-		      let num = startPercentage + Number(res.speed)
-		      startPercentage = num > percentage ? percentage : num;
-		      callback && callback(true)
-		    }
-
-		  },
-		  //创建弧线
-		  drawArc(ctx, eAngle, strokeStyle,res) {
-		    ctx.save();
-		    ctx.beginPath();
-		    ctx.lineCap = this.format(res.linecap);
-		    ctx.lineWidth =Number(res.linewidth);
-		    ctx.strokeStyle = strokeStyle;
-		    let radius = res.width / 2; //x=y
-			let sangle=Number(res.sangle) * Math.PI
-		    ctx.arc(radius, radius, radius - res.linewidth, sangle, eAngle,this.bool(res.counterclockwise));
-		    ctx.stroke();
-		    ctx.closePath();
-		    ctx.restore();
-		  }
-	}
-}
-</script>
-<script>
-export default {
-	name: 'tuiRoundProgress',
-	props: {
-		/*
-		  传值需使用rpx进行转换保证各终端兼容
-		  px = rpx / 750 * wx.getSystemInfoSync().windowWidth
-		  圆形进度条(画布)宽度,直径 [px]
-		*/
-		diam: {
-			type: Number,
-			default: 60
-		},
-		//圆形进度条(画布)高度,默认取diam值[当画半弧时传值,height有值时则取height]
-		height: {
-			type: Number,
-			default: 0
-		},
-		//进度条线条宽度[px]
-		lineWidth: {
-			type: Number,
-			default: 4
-		},
-		/*
-			 线条的端点样式
-			 butt:向线条的每个末端添加平直的边缘
-			 round	向线条的每个末端添加圆形线帽
-			 square	向线条的每个末端添加正方形线帽
-			*/
-		lineCap: {
-			type: String,
-			default: 'round'
-		},
-		//圆环进度字体大小 [px]
-		fontSize: {
-			type: Number,
-			default: 12
-		},
-		//圆环进度字体颜色
-		fontColor: {
-			type: String,
-			default: '#5677fc'
-		},
-		//是否显示进度文字
-		fontShow: {
-			type: Boolean,
-			default: true
-		},
-		/*
-			 自定义显示文字[默认为空,显示百分比,fontShow=true时生效]
-			 可以使用 slot自定义显示内容
-			*/
-		percentText: {
-			type: String,
-			default: ''
-		},
-		//是否显示默认(背景)进度条
-		defaultShow: {
-			type: Boolean,
-			default: true
-		},
-		//默认进度条颜色
-		defaultColor: {
-			type: String,
-			default: '#CCC'
-		},
-		//进度条颜色
-		progressColor: {
-			type: String,
-			default: '#5677fc'
-		},
-		//进度条渐变颜色[结合progressColor使用,默认为空]
-		gradualColor: {
-			type: String,
-			default: ''
-		},
-		//起始弧度,单位弧度 实际  Math.PI * sAngle
-		sAngle: {
-			type: Number,
-			default: -0.5
-		},
-		//指定弧度的方向是逆时针还是顺时针。默认是false,即顺时针
-		counterclockwise: {
-			type: Boolean,
-			default: false
-		},
-		//进度百分比 [10% 传值 10]
-		percentage: {
-			type: Number,
-			default: 0
-		},
-		//进度百分比缩放倍数[使用半弧为100%时,则可传2]
-		multiple: {
-			type: Number,
-			default: 1
-		},
-		//动画执行速度,值越大动画越快(0.1~100)
-		speed: {
-			type: [Number, String],
-			default: 1
-		},
-		//backwards: 动画从头播;forwards:动画从上次结束点接着播
-		activeMode: {
-			type: String,
-			default: 'backwards'
-		}
-	},
-	watch: {
-		percentage(val) {
-			this.percent = val;
-		}
-	},
-	mounted() {
-		setTimeout(() => {
-			this.percent = this.percentage;
-		}, 50);
-	},
-	data() {
-		return {
-			percent: -1,
-			progressCanvasId: this.getCanvasId()
-		};
-	},
-	methods: {
-		getCanvasId() {
-			return 'tui' + new Date().getTime() + (Math.random() * 100000).toFixed(0);
-		},
-		change(e) {
-			//绘制进度
-			this.$emit('change', e);
-		},
-		end(e) {
-			//绘制完成
-			this.$emit('end', e);
-		}
-	}
-};
-</script>
-
-<style scoped>
-.tui-circular-container {
-	position: relative;
-}
-</style>

+ 0 - 124
components/thorui/tui-sticky-wxs/tui-sticky-wxs.vue

@@ -1,124 +0,0 @@
-<template>
-	<view class="tui-sticky-class" :change:prop="parse.stickyChange" :prop="scrollTop" :data-top="top" :data-height="height"
-	 :data-stickytop="stickyTop" :data-container="container" :data-isNativeHeader="isNativeHeader" :data-index="index">
-		<!--sticky 容器-->
-		<view class="tui-sticky-seat" :style="{ height: stickyHeight, backgroundColor: backgroundColor }"></view>
-		<view class="tui-sticky-bar">
-			<slot name="header"></slot>
-		</view>
-		<!--sticky 容器-->
-		<!--内容-->
-		<slot name="content"></slot>
-	</view>
-</template>
-<script src="./tui-sticky.wxs" module="parse" lang="wxs"></script>
-<script>
-	export default {
-		name: 'tuiStickyWxs',
-		props: {
-			scrollTop: {
-				type: [Number, String],
-				value: 0
-			},
-			//吸顶时与顶部的距离,单位px
-			stickyTop: {
-				type: [Number, String],
-				// #ifndef H5
-				default: 0,
-				// #endif
-				// #ifdef H5
-				default: 44
-				// #endif
-			},
-			//是否指定容器,即内容放置插槽content内
-			container: {
-				type: Boolean,
-				default: false
-			},
-			//是否是原生自带header
-			isNativeHeader: {
-				type: Boolean,
-				default: true
-			},
-			//吸顶容器 高度 rpx
-			stickyHeight: {
-				type: String,
-				default: 'auto'
-			},
-			//占位容器背景颜色
-			backgroundColor: {
-				type: String,
-				default: 'transparent'
-			},
-			//是否重新计算[有异步加载时使用,设置大于0的数]
-			recalc: {
-				type: Number,
-				default: 0
-			},
-			//列表中的索引值
-			index: {
-				type: [Number, String],
-				default: 0
-			}
-		},
-		watch: {
-			recalc(newValue, oldValue) {
-				this.updateScrollChange(() => {
-					//更新prop scrollTop值(+0.1即可),触发change事件
-					this.$emit("prop",{})
-				});
-			}
-		},
-		mounted() {
-			setTimeout(() => {
-				this.updateScrollChange();
-			}, 20);
-		},
-		data() {
-			return {
-				timer: null,
-				top: 0,
-				height: 0
-			};
-		},
-		methods: {
-			updateScrollChange(callback) {
-				if (this.timer) {
-					clearTimeout(this.timer);
-					this.timer = null;
-				}
-				this.timer = setTimeout(() => {
-					const className = '.tui-sticky-class';
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select(className)
-						.boundingClientRect(res => {
-							if (res) {
-								this.top = res.top + (this.scrollTop || 0);
-								this.height = res.height;
-								callback && callback();
-								this.$emit('change', {
-									index: Number(this.index),
-									top: this.top
-								});
-							}
-						})
-						.exec();
-				}, 0);
-			}
-		}
-	};
-</script>
-
-<style scoped>
-	.tui-sticky-fixed {
-		width: 100%;
-		position: fixed;
-		left: 0;
-		z-index: 998;
-	}
-
-	.tui-sticky-seat {
-		display: none;
-	}
-</style>

+ 0 - 44
components/thorui/tui-sticky-wxs/tui-sticky.wxs

@@ -1,44 +0,0 @@
-var stickyChange = function (scrollTop, oldScrollTop, ownerInstance, ins) {
-  if(!oldScrollTop) return false;
-  var dataset = ins.getDataset()
-  var top =+dataset.top;
-  var height = + dataset.height;
-  var stickyTop = +dataset.stickytop;
-  var isNativeHeader=dataset.isnativeheader;
-  var isFixed = false;
-  var distance=stickyTop
-  // #ifdef H5
-  if (isNativeHeader) {
-  	distance = distance - 44
-  	distance = distance < 0 ? 0 : distance
-  }
-  // #endif
-  if (dataset.container) {
-    isFixed = (scrollTop + distance >= top && scrollTop + distance < top + height) ? true : false
-  } else {
-    isFixed = scrollTop + distance >= top ? true : false
-  }
-  if (isFixed) {
-    ownerInstance.selectComponent('.tui-sticky-bar').setStyle({
-      "top": stickyTop + 'px'
-    }).addClass('tui-sticky-fixed')
-    ownerInstance.selectComponent('.tui-sticky-seat').setStyle({
-      "display": 'block'
-    })
-  } else {
-    ownerInstance.selectComponent('.tui-sticky-bar').setStyle({
-      "top": 'auto'
-    }).removeClass('tui-sticky-fixed')
-    ownerInstance.selectComponent('.tui-sticky-seat').setStyle({
-      "display": 'none'
-    })
-  }
-  ownerInstance.triggerEvent("sticky", {
-    isFixed: isFixed,
-    index: parseInt(dataset.index)
-  })
-}
-
-module.exports = {
-  stickyChange: stickyChange
-}

+ 0 - 50
components/thorui/tui-timeaxis-item/tui-timeaxis-item.vue

@@ -1,50 +0,0 @@
-<template>
-	<view class="tui-timeaxis-item">
-		<slot name="content"></slot>
-		<view class="tui-timeaxis-node" :style="{backgroundColor:backgroundColor}">
-			<slot name="node"></slot>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiTimeaxisItem",
-		props: {
-			//节点背景色
-			backgroundColor: {
-				type: String,
-				default: "#fafafa"
-			}
-		},
-		data() {
-			return {
-
-			};
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-timeaxis-item {
-		position: relative;
-		width: 100%;
-		display: flex;
-		flex-direction: column;
-		margin-bottom: 25px;
-	}
-
-	.tui-timeaxis-node {
-		position: absolute;
-		top: 0;
-		left: -20px;
-		transform-origin: 0;
-		transform: translateX(-50%);
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		z-index: 99;
-		background-color: #fafafa;
-		font-size: 24rpx;
-	}
-</style>

+ 0 - 341
components/thorui/tui-upload/tui-upload.vue

@@ -1,341 +0,0 @@
-<template>
-	<view class="tui-container">
-		<view class="tui-upload-box">
-			<view class="tui-image-item" v-for="(item,index) in imageList" :key="index">
-				<image :src="item" class="tui-item-img" @tap.stop="previewImage(index)" mode="aspectFill"></image>
-				<view v-if="!forbidDel" class="tui-img-del" @tap.stop="delImage(index)"></view>
-				<view v-if="statusArr[index]!=1" class="tui-upload-mask">
-					<view class="tui-upload-loading" v-if="statusArr[index]==2"></view>
-					<text class="tui-tips">{{statusArr[index]==2?'上传中...':'上传失败'}}</text>
-					<view class="tui-mask-btn" v-if="statusArr[index]==3" @tap.stop="reUpLoad(index)" hover-class="tui-btn-hover"
-					 :hover-stay-time="150">重新上传</view>
-				</view>
-			</view>
-			<view v-if="isShowAdd" class="tui-upload-add" @tap="chooseImage">
-				<view class="tui-upload-icon tui-icon-plus"></view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'tuiUpload',
-		props: {
-			//初始化图片路径
-			value: {
-				type: Array,
-				default () {
-					return []
-				}
-			},
-			//禁用删除
-			forbidDel: {
-				type: Boolean,
-				default: false
-			},
-			//禁用添加
-			forbidAdd: {
-				type: Boolean,
-				default: false
-			},
-			//服务器地址
-			serverUrl: {
-				type: String,
-				default: ""
-			},
-			//限制数
-			limit: {
-				type: Number,
-				default: 9
-			},
-			//项目名,默认为 file
-			fileKeyName: {
-				type: String,
-				default: "file"
-			}
-		},
-		data() {
-			return {
-				//图片地址
-				imageList: [],
-				//上传状态:1-上传成功 2-上传中 3-上传失败
-				statusArr: []
-			}
-		},
-		created() {
-			this.imageList = [...this.value];
-			for (let item of this.imageList) {
-				this.statusArr.push("1")
-			}
-		},
-		computed: {
-			isShowAdd() {
-				let isShow = true;
-				if (this.forbidAdd || (this.limit && this.imageList.length >= this.limit)) {
-					isShow = false;
-				}
-				return isShow
-			}
-		},
-		methods: {
-			// 重新上传
-			reUpLoad(index) {
-				this.$set(this.statusArr, index, "2")
-				this.change()
-				this.uploadImage(index, this.imageList[index]).then(() => {
-					this.change()
-				}).catch(() => {
-					this.change()
-				})
-			},
-			change() {
-				let status = ~this.statusArr.indexOf("2") ? 2 : 1
-				if (status != 2 && ~this.statusArr.indexOf("3")) {
-					// 上传失败
-					status = 3
-				}
-				this.$emit('complete', {
-					status: status,
-					imgArr: this.imageList
-				})
-			},
-			chooseImage: function() {
-				let _this = this;
-				uni.chooseImage({
-					count: _this.limit - _this.imageList.length,
-					success: function(e) {
-						let imageArr = [];
-						for (let i = 0; i < e.tempFilePaths.length; i++) {
-							let len = _this.imageList.length;
-							if (len >= _this.limit) {
-								uni.showToast({
-									title: `最多可上传${_this.limit}张图片`,
-									icon: "none"
-								});
-								break;
-							}
-							let path = e.tempFilePaths[i]
-							imageArr.push(path)
-							_this.imageList.push(path)
-							_this.statusArr.push("2")
-						}
-						_this.change()
-
-						let start = _this.imageList.length - imageArr.length
-						for (let j = 0; j < imageArr.length; j++) {
-							let index = start + j
-							//服务器地址
-							if (_this.serverUrl) {
-								_this.uploadImage(index, imageArr[j]).then(() => {
-									_this.change()
-								}).catch(() => {
-									_this.change()
-								})
-							} else {
-								//无服务器地址则直接返回成功
-								_this.$set(_this.statusArr, index, "1")
-								_this.change()
-							}
-						}
-					}
-				})
-			},
-			uploadImage: function(index, url) {
-				let _this = this;
-				return new Promise((resolve, reject) => {
-					uni.uploadFile({
-						url: this.serverUrl,
-						name: this.fileKeyName,
-						header: {
-							//设置请求头
-						},
-						formData: {},
-						filePath: url,
-						success: function(res) {
-							console.log(res)
-							if (res.statusCode == 200) {
-								//返回结果 此处需要按接口实际返回进行修改
-								let d = JSON.parse(res.data.replace(/\ufeff/g, "") || "{}")
-								//判断code,以实际接口规范判断
-								if (d.code % 100 === 0) {
-									// 上传成功 d.url 为上传后图片地址,以实际接口返回为准
-									d.url && (_this.imageList[index] = d.url)
-									_this.$set(_this.statusArr, index, d.url ? "1" : "3")
-								} else {
-									// 上传失败
-									_this.$set(_this.statusArr, index, "3")
-								}
-								resolve(index)
-							} else {
-								_this.$set(_this.statusArr, index, "3")
-								reject(index)
-							}
-						},
-						fail: function(res) {
-							_this.$set(_this.statusArr, index, "3")
-							reject(index)
-						}
-					})
-				})
-
-			},
-			delImage: function(index) {
-				this.imageList.splice(index, 1)
-				this.statusArr.splice(index, 1)
-				this.$emit("remove", {
-					index: index
-				})
-				this.change()
-			},
-			previewImage: function(index) {
-				if (!this.imageList.length) return;
-				uni.previewImage({
-					current: this.imageList[index],
-					loop: true,
-					urls: this.imageList
-				})
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	@font-face {
-		font-family: 'tuiUpload';
-		src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAATcAA0AAAAAByQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAEwAAAABoAAAAciR52BUdERUYAAASgAAAAHgAAAB4AKQALT1MvMgAAAaAAAABCAAAAVjxvR/tjbWFwAAAB+AAAAEUAAAFK5ibpuGdhc3AAAASYAAAACAAAAAj//wADZ2x5ZgAAAkwAAADXAAABAAmNjcZoZWFkAAABMAAAAC8AAAA2FpiS+WhoZWEAAAFgAAAAHQAAACQH3QOFaG10eAAAAeQAAAARAAAAEgwAACBsb2NhAAACQAAAAAwAAAAMAEoAgG1heHAAAAGAAAAAHwAAACABEgA2bmFtZQAAAyQAAAFJAAACiCnmEVVwb3N0AAAEcAAAACgAAAA6OMUs4HjaY2BkYGAAYo3boY/i+W2+MnCzMIDAzb3qdQj6fwPzf+YGIJeDgQkkCgA/KAtvAHjaY2BkYGBu+N/AEMPCAALM/xkYGVABCwBZ4wNrAAAAeNpjYGRgYGBl0GJgZgABJiDmAkIGhv9gPgMADTABSQB42mNgZGFgnMDAysDA1Ml0hoGBoR9CM75mMGLkAIoysDIzYAUBaa4pDA7PGJ9xMjf8b2CIYW5gaAAKM4LkANt9C+UAAHjaY2GAABYIVmBgAAAA+gAtAAAAeNpjYGBgZoBgGQZGBhBwAfIYwXwWBg0gzQakGRmYnjE+4/z/n4EBQksxSf6GqgcCRjYGOIeRCUgwMaACRoZhDwCiLwmoAAAAAAAAAAAAAAAASgCAeNpdjkFKw0AARf/vkIR0BkPayWRKQZtYY90ohJju2kOIbtz0KD1HVm50UfEmWXoAr9ADOHFARHHzeY//Fx8Ci+FJfIgdJFa4AhgiMshbrCuIsLxhFJZVs+Vl1bT1GddtbXTC3OhohN4dg4BJ3zMJAnccyfm468ZzHXddrH9ZKbHzdf9n/vkY/xv9sPQXgGEvBrHHwst5kTbXLE+YpYVPkxepPmW94W16UbdNJd6f3SAzo5W7m1jaKd+8ZZIvk5nlKw9SK6Wle7BLS3f/bTzQLmfAF2T1NsQAeNp9kD1OAzEQhZ/zByQSQiCoXVEA2vyUKRMp9Ailo0g23pBo1155nUg5AS0VB6DlGByAGyDRcgpelkmTImvt6PObmeexAZzjGwr/3yXuhBWO8ShcwREy4Sr1F+Ea+V24jhY+hRvUf4SbuFUD4RYu1BsdVO2Eu5vSbcsKZxgIV3CKJ+Eq9ZVwjfwqXMcVPoQb1L+EmxjjV7iFa2WpDOFhMEFgnEFjig3jAjEcLJIyBtahOfRmEsxMTzd6ETubOBso71dilwMeaDnngCntPbdmvkon/mDLgdSYbh4FS7YpjS4idCgbXyyc1d2oc7D9nu22tNi/a4E1x+xRDWzU/D3bM9JIbAyvkJI18jK3pBJTj2hrrPG7ZynW814IiU68y/SIx5o0dTr3bmniwOLn8owcfbS5kj33qBw+Y1kIeb/dTsQgil2GP5PYcRkAAAB42mNgYoAALjDJyIAOWMGiTIxMjMxsKak5qSWpbFmZiRmJ+QAmgAUIAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMABAABAAQAAAACAAAAAHjaY2BgYGQAgqtL1DlA9M296nUwGgA+8QYgAAA=) format('woff');
-		font-weight: normal;
-		font-style: normal;
-	}
-
-	.tui-upload-icon {
-		font-family: "tuiUpload" !important;
-		font-style: normal;
-		-webkit-font-smoothing: antialiased;
-		-moz-osx-font-smoothing: grayscale;
-		padding: 10rpx;
-	}
-
-	.tui-icon-delete:before {
-		content: "\e601";
-	}
-
-	.tui-icon-plus:before {
-		content: "\e609";
-	}
-
-	.tui-upload-box {
-		width: 100%;
-		display: flex;
-		flex-wrap: wrap;
-	}
-
-	.tui-upload-add {
-		width: 220rpx;
-		height: 220rpx;
-		font-size: 68rpx;
-		font-weight: 100;
-		color: #888;
-		background-color: #F7F7F7;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		padding: 0;
-	}
-
-	.tui-image-item {
-		width: 220rpx;
-		height: 220rpx;
-		position: relative;
-		margin-right: 20rpx;
-		margin-bottom: 20rpx;
-	}
-
-	.tui-image-item:nth-of-type(3n) {
-		margin-right: 0;
-	}
-
-	.tui-item-img {
-		width: 220rpx;
-		height: 220rpx;
-		display: block;
-	}
-
-	.tui-img-del {
-		width: 36rpx;
-		height: 36rpx;
-		position: absolute;
-		right: -12rpx;
-		top: -12rpx;
-		background-color: #EB0909;
-		border-radius: 50%;
-		color: white;
-		font-size: 34rpx;
-		z-index: 999;
-	}
-
-	.tui-img-del::before {
-		content: '';
-		width: 16rpx;
-		height: 1px;
-		position: absolute;
-		left: 10rpx;
-		top: 18rpx;
-		background-color: #fff;
-	}
-
-	.tui-upload-mask {
-		width: 100%;
-		height: 100%;
-		position: absolute;
-		left: 0;
-		top: 0;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: space-around;
-		padding: 40rpx 0;
-		box-sizing: border-box;
-		background-color: rgba(0, 0, 0, 0.6);
-	}
-
-	.tui-upload-loading {
-		width: 28rpx;
-		height: 28rpx;
-		border-radius: 50%;
-		border: 2px solid;
-		border-color: #B2B2B2 #B2B2B2 #B2B2B2 #fff;
-		animation: tui-rotate 0.7s linear infinite;
-	}
-
-	@keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	.tui-tips {
-		font-size: 26rpx;
-		color: #fff;
-	}
-
-	.tui-mask-btn {
-		padding: 4rpx 16rpx;
-		border-radius: 40rpx;
-		text-align: center;
-		font-size: 24rpx;
-		color: #fff;
-		border: 1rpx solid #fff;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
-
-	.tui-btn-hover {
-		opacity: 0.8;
-	}
-</style>

+ 1 - 1
components/uni-search/cat-search.vue

@@ -41,7 +41,7 @@
 		data() {
 			return{
 				headerType:'',
-				clickPath:'/pages/search/search',
+				clickPath:'/search/pages/search/search',
 				haveBack: true, // 是否有返回按钮,true 有 false 没有 若从分享页进入则为 false
 			    statusBarHeight: 0, // 状态栏高度
 			    navbarHeight: 0, // 顶部导航栏高度,

+ 69 - 75
h5/pages/activity/activity.vue

@@ -1,75 +1,69 @@
-<template>
-	<view class="activity">
-	   <web-view :webview-styles="webviewStyles" :src="activityPath"></web-view>
-	   <!-- 侧边 -->
-	   <scroll-top :isScrollTop="isScrollTop" :bottom="200"></scroll-top>
-	</view>
-</template>
-
-<script>
-	export default {
-	    data() {
-	        return {
-	            webviewStyles: {
-	                progress: {
-	                    color: '#FF3333'
-	                }
-	            },
-				productID:'',
-				activityPath:'',
-				isScrollTop:false
-	        }
-	    },
-		onLoad(option) {
-			console.log(option)
-			switch(option.id){
-				case '276':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_04.html'
-					uni.setNavigationBarTitle({title:'保信亚太全脂然,买二送一'});
-					break;
-				case '277':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_01.html'
-					uni.setNavigationBarTitle({title:'三昭国际优惠'});
-					break;
-				case '278':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_02.html'
-					uni.setNavigationBarTitle({title:'点斗优惠'});
-					break;
-				case '281':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_05.html'
-					uni.setNavigationBarTitle({title:'润月雅优惠'});
-					break;
-				case '282':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_06.html'
-					uni.setNavigationBarTitle({title:'中胚层专场'});
-					break;
-				case '223':
-					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_99.html'
-					uni.setNavigationBarTitle({title:'品牌OEM服务'});
-					break;
-			}
-			
-		},
-		methods:{
-			
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>600){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-	}
-</script>
-	
-<style lang="scss">
-	.activity{
-		width: 100%;
-		height: auto;
-		image{
-			width: 100%;
-			height: auto;
-		}
-	}
-</style>
+<template>
+	<view class="activity">
+	   <web-view :webview-styles="webviewStyles" :src="activityPath"></web-view>
+	   <!-- 侧边 -->
+	   <scroll-top :isScrollTop="isScrollTop" :bottom="200"></scroll-top>
+	</view>
+</template>
+
+<script>
+	export default {
+	    data() {
+	        return {
+	            webviewStyles: {
+	                progress: {
+	                    color: '#FF3333'
+	                }
+	            },
+				productID:'',
+				activityPath:'',
+				isScrollTop:false
+	        }
+	    },
+		onLoad(option) {
+			console.log(option)
+			switch(option.id){
+				case '276':
+					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_04.html'
+					uni.setNavigationBarTitle({title:'保信亚太全脂然,买二送一'});
+					break;
+				case '281':
+					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_05.html'
+					uni.setNavigationBarTitle({title:'润月雅优惠'});
+					break;
+				case '284':
					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_07.html'
					uni.setNavigationBarTitle({title:' 光疗术后修复专场'});
+					break;
+				case '285':
+					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_08.html'
+					uni.setNavigationBarTitle({title:'低价风暴'});
+					break;
+				case '223':
+					this.activityPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2020/caimeih5_99.html'
+					uni.setNavigationBarTitle({title:'品牌OEM服务'});
+					break;
+			}
+			
+		},
+		methods:{
+			
+		},
+		onPageScroll(e){//实时获取到滚动的值
+			if(e.scrollTop>600){
+				this.isScrollTop = true
+			}else{
+				this.isScrollTop = false
+			}	
+		},
+	}
+</script>
+	
+<style lang="scss">
+	.activity{
+		width: 100%;
+		height: auto;
+		image{
+			width: 100%;
+			height: auto;
+		}
+	}
+</style>

+ 0 - 8
json.js

@@ -1,8 +0,0 @@
-const beautyList = [{value:'1',name:'诊所'},{value:'2',name:'门诊'},{value:'3',name:'医院'}]
-const mentuzList = [{value:'1',name:'整形'},{value:'2',name:'轻医美'},{value:'3',name:'皮肤科'}]
-const medicaList = [{value:'1',name:'美容'},{value:'2',name:'美体'},{value:'3',name:'美发'},{value:'4',name:'皮肤管理'},{value:'5',name:'光电'},{value:'6',name:'综合类'},{value:'7',name:'中医养生'},{value:'8',name:'spa'}]
-export default{
-	beautyList,
-	mentuzList,
-	medicaList
-}

+ 2 - 4
main.js

@@ -4,9 +4,7 @@ import App from './App'
 import './services/index.js'
 import * as Api from '@/common/config/caimeiApi.js'
 import * as Regs from '@/common/config/common.js'
-import { msg, modal,json,prePage } from'./utils/util'
-// import '@/common/utils/module.js'
-import Json from './json' //本地数据
+import { msg, modal,prePage } from'./utils/util'
 import cuCustom from './components/cm-custom/cu-custom.vue'
 import auCustom from './components/cm-custom/au-custom.vue'
 import cmCustom from './components/cm-custom/cm-custom.vue'
@@ -50,7 +48,7 @@ uma.install = function (Vue) {
 Vue.config.productionTip = false
 Vue.prototype.$fire = new Vue();
 Vue.prototype.$store = store;
-Vue.prototype.$util = {msg, json, prePage,modal};
+Vue.prototype.$util = {msg,prePage,modal};
 Vue.prototype.$api = Api;
 Vue.prototype.$reg = Regs;
 Vue.use(uma);

+ 31 - 44
pages.json

@@ -19,21 +19,6 @@
 				"navigationBarTitleText": "分类",
 				"navigationStyle":"custom"
 			}
-		},{
-			"path": "pages/search/search",
-			"style": {
-				"navigationBarTitleText": "搜索"
-			}
-		},{
-			"path": "pages/search/search-supplier",
-			"style": {
-				"navigationBarTitleText": "搜索供应商"
-			}
-		},{ 
-			"path": "pages/search/search-instrument",
-			"style": {
-				"navigationBarTitleText": "搜索仪器"
-			}
 		},{
 			"path": "pages/tabBar/cart/cart",
 			"style": {
@@ -88,12 +73,6 @@
 				"enablePullDownRefresh":true,
 				"navigationStyle":"custom"
 			}
-		},{
-			"path": "pages/goods/goods-secondary",
-			"style": {
-				"navigationBarTitleText": "二级分类列表",
-				"enablePullDownRefresh":true
-			}
 		},{
 			"path": "pages/goods/good-floorMore",
 			"style": {
@@ -168,11 +147,6 @@
 				"navigationBarTitleText": "条款内容"
 			}
 		},{
-            "path" : "pages/user/invoice/invoice",
-            "style" : {
-				"navigationBarTitleText": "发票信息"
-			}
-        },{
             "path" : "pages/user/regularPurchase/regularPurchase",
             "style" : {
 				"navigationBarTitleText": "再次购买"
@@ -234,16 +208,6 @@
 			"style": {
 				"navigationBarTitleText": "物流信息"
 			}
-		},{
-			"path": "pages/search/search-order",
-			"style": {
-				"navigationBarTitleText": "订单搜索"
-			}
-		},{
-			"path": "pages/search/search-second",
-			"style": {
-				"navigationBarTitleText": "二手搜索"
-			}
 		},{
 			"path": "pages/login/register",
 			"style": {
@@ -456,14 +420,7 @@
 					"style": {
 						"navigationBarTitleText": "订单列表"
 					}
-				},
-				{
-					"path": "pages/search/search",
-					"style": {
-						"navigationBarTitleText": "商品搜索"
-					}
-				},
-				{
+				},{
 					"path": "pages/search/search-order",
 					"style": {
 						"navigationBarTitleText": "订单搜索"
@@ -547,6 +504,36 @@
 					}
 				}
 			]	
+		},{
+			"root": "search",
+			"pages": [
+				{
+					"path": "pages/search/search",
+					"style": {
+						"navigationBarTitleText": "搜索"
+					}
+				},{
+					"path": "pages/search/search-supplier",
+					"style": {
+						"navigationBarTitleText": "搜索供应商"
+					}
+				},{ 
+					"path": "pages/search/search-instrument",
+					"style": {
+						"navigationBarTitleText": "搜索仪器"
+					}
+				},{
+					"path": "pages/search/search-order",
+					"style": {
+						"navigationBarTitleText": "订单搜索"
+					}
+				},{
+					"path": "pages/search/search-second",
+					"style": {
+						"navigationBarTitleText": "二手搜索"
+					}
+				}
+			]	
 		},{
 			"root": "second",
 			"pages": [

+ 1 - 1
pages/goods/good-floorMore.vue

@@ -52,7 +52,7 @@
 		},
 		data(){
 			return{
-				clickPath:'/pages/search/search',
+				clickPath:'/search/pages/search/search',
 				hotSearchText:'搜索商品/供应商/项目仪器',	
 				userIdentity:0,
 				skeletonShow:true,

+ 16 - 34
pages/goods/goods-instrument.vue

@@ -2,8 +2,8 @@
 	<view class="container instrument clearfix">
 		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
 		<template v-else>
-			<view class="instrument-btn" v-if="linkId == 6" :style="{paddingBottom :isIphoneX ? '68rpx' : '34rpx'}">
-				<view class="btn" @click="NavToH5Page">超皮秒防伪查询</view>
+			<view class="instrument-btn" v-if="buttonName" :style="{paddingBottom :isIphoneX ? '68rpx' : '34rpx'}">
+				<view class="btn" @click="ButtonNavigateTo(buttonLinkType,buttonLinkParam.id,buttonLink,buttonLinkKeyword)">{{ buttonName }}</view>
 			</view>
 			<view class="banner clearfix">
 				<view class="banner-image">
@@ -54,7 +54,12 @@
 				isScrollTop:false,
 				linkTitle:'',
 				skeletonShow:true,
-				content:''
+				content:'',
+				buttonName:'',
+				buttonLink:'',
+				buttonLinkType:'',
+				buttonLinkParam:{},
+				buttonLinkKeyword:''
 			}
 		},		
 		onLoad(option) {
@@ -81,43 +86,20 @@
 					let data = response.data
 					this.banner = data.image
 					this.content = data.content
+					this.buttonLink = data.buttonLink
+					this.buttonName = data.buttonName
+					this.buttonLinkType = data.linkType
+					this.buttonLinkParam = data.linkParam
+					this.buttonLinkKeyword = data.keywords
 				}).catch(error =>{
 					this.$util.msg(error.msg,2000)
 				})
 			},
 			NavToDetailPage(floor) {//跳转
-				console.log(floor)
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 **/
-				 if(floor.linkType){
-					 const typeMap = {
-					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
-					 	2:`/pages/search/search-instrument?keyword=${floor.title}`,
-					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
-					 	6:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${floor.title}`,
-					 	13:`/h5/pages/article/path?link=${floor.link}`,
-					 	14:`/h5/pages/article/path?link=${floor.link}`,
-					 	15:`/h5/pages/article/path?link=${floor.link}`,
-					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/path?link=${floor.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
-					 }
-					 const url = typeMap[floor.linkType];
-					 this.$api.navigateTo(url)
-				 }
+				this.$api.FlooryNavigateTo(floor)
 			},
-			NavToH5Page() {//跳转H5超皮秒防伪查询
-				 this.$api.navigateTo(`/h5/pages/article/page?linkType=100`)
+			ButtonNavigateTo(linkType,linkId,linkHref,keyword) {//跳转
+				this.$api.BannerNavigateTo(linkType,linkId,linkHref,keyword)
 			}
 		},
 		onPageScroll(e){//实时获取到滚动的值

+ 0 - 549
pages/goods/goods-secondary.vue

@@ -1,549 +0,0 @@
-<template>
-	<view class="container instrument">
-		<!--选项卡-->
-		<view class="home-hotmaintab-fixed">
-			<view class="home-flex-tab show">
-				<view class="flex text-white">
-					<view class="basis-xxl">
-						<scroll-view scroll-x class="nav z" scroll-with-animation :scroll-left="headTab.scrollLeft">
-							<block v-for="(item,index) in headTab.list" :key="index">
-								<view class="cu-item" :class="index==headTab.TabCur?'select':''" @tap="tabSelect(index,item)" :data-id="index">
-									<view>{{item.name}}</view>
-									<view class="tab-dot bg-white"/>
-								</view>
-							</block>
-						</scroll-view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="container-main">
-			<!-- 商品专题 -->
-			<template v-if="isActivityFlag">
-				<view class="activity-container">
-					<scroll-view scroll-y="true" >
-						<view class="list" v-for="(item, index) in activityList" :key="index" @click="NavigateToActivity(item)">
-							<image class="list-image" :src="item.image" mode="scaleToFill"></image>
-							<view class="title">{{item.title}}</view>
-							<view class="time" v-if="item.status!=3">
-								<view class="text">{{item.detail }}</view>
-							</view>
-							<view class="mack" v-if="item.status == 3">
-								<view class="mack-text">活动已经结束</view>
-							</view>
-						</view>
-						<!--加载loadding-->
-						<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-						<tui-nomore :visible="!pullUpOn" bgcolor="#F7F7F7" :text='nomoreText'></tui-nomore>
-						<!--加载loadding-->
-					</scroll-view>
-				</view>
-			</template>
-			<!-- 列表 -->
-			<template v-else>
-				<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="9"></tui-skeleton>
-				<template v-else>
-					<view class="banner">
-						<view class="banner-image">
-							<image :src="banner" mode=""></image>
-						</view>
-					</view>
-					<view class="instrument-list">
-						<view class="list-item-cell" v-for="(item,index) in list" :key="index">
-							<view class="list-item-title">
-								<view class="title" :class="item.link ? 'float' : ''">
-									<text>{{ item.title }}</text>
-								</view>
-								<view class="more" v-if="item.link" @click="NavToDetailPage(item)">
-									<text>查看更多</text>
-									<text class="iconfont icon-xiangyou"></text>
-								</view>
-							</view>
-							<view class="list-item-pros">
-								<view class="item-pros" v-for="(pros,prosIndex) in item.floorData" :key="prosIndex" @click="NavToDetailPage(pros)">
-									<view class="item-pros-image">
-										<image :src="pros.image" mode=""></image>
-									</view>
-									<view class="item-pros-name">{{ pros.title }}</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</template>
-			</template>
-		</view>
-		<!-- 侧边 -->
-		<scroll-top :isScrollTop="isScrollTop" :bottom="200"></scroll-top>
-	</view>
-</template>
-<script>
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
-	export default{
-		components:{
-			tuiLoadmore,
-			tuiNomore,
-		},
-		data(){
-			return{
-				banner:'',
-				headTab: {
-					TabCur: 0, 
-					scrollLeft: 0, 
-					list: [],
-				},
-				headTabId:0,
-				list:[],
-				navMenuId:0,
-				isScrollTop:false,
-				listQuery:{
-					pageNum:1,
-					pageSize:10,
-				},
-				nomoreText: '上拉显示更多',
-				hasNextPage:false,
-				loadding: false,
-				pullUpOn: true,
-				pullFlag: true,
-				isActivityFlag:false,
-				skeletonShow:true,
-				activityList:[]
-			}
-		},		
-		onLoad(option) {
-			console.log(option)
-			this.navMenuId = option.linkId
-			this.GetHomeSubMenu()
-		},
-		methods:{
-			GetHomeSubMenu(){//获取数据
-				let _self = this
-				this.CommonService.GetHomeSubMenu({navMenuId:this.navMenuId}).then(response =>{
-					let data = response.data
-					this.headTab.list = data
-					uni.setNavigationBarTitle({title:_self.headTab.list[0].name});
-					if(this.headTab.list[0].linkType === 8){
-						this.isActivityFlag = true
-						this.GetPromotionsrList()
-					}else{
-						this.headTabId = this.headTab.list[0].linkParam.id
-						this.GetPageTopicInfo(this.headTabId)
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetPageTopicInfo(type){//获取数据
-				this.ProductService.GetPageTopic({type:type}).then(response =>{
-					let data = response.data
-					this.list = data
-					this.GetPageTopicBanner(type)
-					this.skeletonShow = false
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetPageTopicBanner(type){//获取banner
-				this.ProductService.GetPageTopicBanner({type:type}).then(response =>{
-					let data = response.data
-					this.banner = data.image
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetPromotionsrList(){//获取专题列表
-				this.ProductService.GetPromotionsrList(this.listQuery).then(response =>{
-					let responseData = response.data
-					if(responseData.list&&responseData.list.length > 0){
-						this.isEmpty = false
-						this.hasNextPage = responseData.hasNextPage
-						this.activityList = responseData.list
-						this.pullFlag = false;
-						setTimeout(()=>{this.pullFlag = true;},500)
-						if(this.hasNextPage){
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						}else{
-							this.pullUpOn = true
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					}else{
-						this.isEmpty = true
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			GetPromotionsrListBottomData(){
-				this.listQuery.pageNum+=1
-				this.ProductService.GetPromotionsrList(this.listQuery).then(response =>{
-					let responseData = response.data
-					if(responseData.list&&responseData.list.length > 0){
-						this.hasNextPage = response.data.hasNextPage
-						this.activityList = this.activityList.concat(responseData.list) 
-						this.pullFlag = false;// 防上拉暴滑
-						setTimeout(()=>{this.pullFlag = true;},500)
-						if(this.hasNextPage){
-							this.pullUpOn = false
-							this.nomoreText = '上拉显示更多'
-						}else{
-							this.pullUpOn = false
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			tabSelect(index,item) {//tab菜单被点击
-				this.headTab.TabCur = index;
-				this.headTab.scrollLeft = (index - 1) * 50;
-				this.headTabId = item.linkParam.id;
-				uni.setNavigationBarTitle({title:item.name});
-				if(item.linkType === 8){
-					this.isActivityFlag = true
-					this.GetPromotionsrList()
-				}else{
-					this.isActivityFlag = false
-					this.GetPageTopicInfo(this.headTabId)
-				}
-			},
-			NavigateToActivity(item){//跳转活动详情
-				if(item.status!=3){
-					this.$api.navigateTo(`/h5/pages/activity/activity?id=${item.linkParam.id}`)
-				}else{
-					this.$util.msg('活动已经结束',2000)
-				}
-			},
-			NavToDetailPage(floor) {//跳转
-				console.log(floor)
-				/**
-				 * 页面跳转类型
-				 * 1、二级页面,2、搜索项目仪器,3、直播页面,4、自由页面,5、商品详情,6、仪器项目详情,7、供应商主页
-				 * 8、专题活动页,9、二手市场介绍,10、二手商品列表,11、二手商品发布,12、商品搜索,13、信息详情
-				 * 14、品牌招商介绍页,15、维修保养介绍页,16、首页,17、注册页,18、信息中心,19、供应商列表
-				 **/
-				 if(floor.linkType){
-					 const typeMap = {
-					 	1:`/pages/goods/goods-instrument?linkId=${floor.linkParam.id}&title=${floor.title}`,
-					 	2:`/pages/goods/instrument-details?id=${floor.linkParam.id}`,
-					 	5:`/pages/goods/product?id=${floor.linkParam.id}`,
-					 	7:`/supplier/pages/user/my-shop?shopId=${floor.linkParam.id}`,
-					 	8:`/h5/pages/activity/activity-list`,
-					 	9:`/second/pages/form/introduce`,
-					 	10:`/second/pages/product/product-list`,
-					 	11:`/second/pages/form/form`,
-					 	12:`/pages/search/search?keyWord=${floor.title}`,
-					 	13:`/h5/pages/article/path?link=${floor.link}`,
-					 	14:`/h5/pages/article/path?link=${floor.link}`,
-					 	15:`/h5/pages/article/path?link=${floor.link}`,
-					 	17:`/pages/login/register-select`,
-					 	18:`/h5/pages/article/path?link=${floor.link}`,
-					 	19:`/pages/search/search-supplier?keyWord=${floor.title}`
-					 }
-					 const url = typeMap[floor.linkType];
-					 this.$api.navigateTo(url)
-				 }
-			}
-		},
-		onReachBottom() {
-			if(this.isActivityFlag){
-				if(this.hasNextPage){
-					this.loadding = true
-					this.pullUpOn = true
-					this.GetPromotionsrListBottomData()
-				}	
-			}
-		},
-		onPullDownRefresh() {//下拉刷新
-			if(this.isActivityFlag){
-				this.listQuery.pageNum =1
-				this.GetPromotionsrList()
-				uni.stopPullDownRefresh()
-			}else{
-				this.GetPageTopicInfo(this.headTabId)
-				uni.stopPullDownRefresh()
-			}
-		},
-		onPageScroll(e){//实时获取到滚动的值
-			if(e.scrollTop>600){
-				this.isScrollTop = true
-			}else{
-				this.isScrollTop = false
-			}	
-		},
-		onShow() {
-
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #F7F7F7;
-	}
-	.container-main{
-		padding-top: 100rpx;
-	}
-	// 活动专题列表
-	.activity-container{
-		width: 100%;
-		height: auto;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-	.list{
-		width: 100%;
-		height: 318rpx;
-		float: left;
-		margin-bottom:20rpx;
-		position: relative;
-		.list-image{
-			width: 100%;
-			height: 318rpx;
-			display: block;
-		}
-		.title{
-			width: 100%;
-			height: 72rpx;
-			line-height: 72rpx;
-			text-align: center;
-			background: rgba(254,246,243,0.8);
-			color: $color-system;
-			position: absolute;
-			bottom: 0;
-			left: 0;
-			font-size: $font-size-26;
-			text-overflow:ellipsis;
-			display: -webkit-box;
-			word-break: break-all;
-			-webkit-box-orient: vertical; 
-			-webkit-line-clamp: 1;
-			overflow: hidden;
-		}
-		.time{
-			width: 100%;
-			height: 48rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-			.text{
-				width: 475rpx;
-				height: 48rpx;
-				font-size: $font-size-24;
-				margin: 0 auto;
-				line-height: 48rpx;
-				background:  linear-gradient(315deg, #f94b4b 0%, #bc3cff 100%);
-				color: #FFFFFF;
-				text-align: center;
-			}
-		}
-		.mack{
-			width: 100%;
-			height: 100%;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 9999;
-			background: rgba(0,0,0,.1);
-			border-radius: 2rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-			.mack-text{
-				width: 220rpx;
-				height: 70rpx;
-				border-radius: 35rpx;
-				text-align: center;
-				background: rgba(0,0,0,.4);
-				color: #FFFFFF;
-				line-height: 70rpx;
-				font-size: $font-size-26;
-			}
-		}
-	}
-	//二级分类
-	.instrument{
-		width: 100%;
-		height: auto;
-		.banner{
-			box-sizing: border-box;
-			padding:24rpx;
-			background-color: #FFFFFF;
-			width: 100%;
-			.banner-image{
-				width: 100%;
-				height: 248rpx;
-				border-radius: 4rpx;
-			}
-			image{
-				width: 100%;
-				height: 248rpx;
-				border-radius: 4rpx;
-			}
-		}
-		.instrument-list{
-			width: 100%;
-			height: auto;
-			box-sizing: border-box;
-			padding: 0 24rpx;
-			.list-item-cell{
-				width: 100%;
-				height: auto;
-				float: left;
-				.list-item-title{
-					width: 100%;
-					height: 88rpx;
-					line-height: 88rpx;
-					float: left;
-					.title{
-						font-size: $font-size-28;
-						line-height: 80rpx;
-						color: $text-color;
-						font-weight: bold;
-						&.float{
-							float: left;
-						}
-					}
-					.more{
-						font-size: $font-size-26;
-						line-height: 80rpx;
-						color: #999999;
-						height: 80rpx;
-						float: right;
-						.icon-xiangyou{
-							font-size: $font-size-28;
-							margin-left: 10rpx;
-						}
-					}
-				}
-				.list-item-pros{
-					width: 100%;
-					height: auto;
-					float: left;
-					.item-pros{
-						width: 340rpx;
-						height: 414rpx;
-						float: left;
-						margin-right: 20rpx;
-						margin-bottom: 20rpx;
-						background-color: #FFFFFF;
-						border-radius: 4rpx;
-						&:nth-child(2n){
-							margin-right: 0;
-						}
-						.item-pros-image{
-							width: 340rpx;
-							height: 340rpx;
-							float: left;
-							image{
-								width: 340rpx;
-								height: 340rpx;
-								display: block;
-								border-radius: 4rpx 4rpx 0 0;
-							}
-						}
-						.item-pros-name{
-							width: 100%;
-							height: 74rpx;
-							line-height: 74rpx;
-							box-sizing: border-box;
-							padding: 0 24rpx;
-							white-space: normal;
-							word-break: break-all;
-							overflow: hidden;
-							text-overflow: ellipsis;
-							display: -webkit-box;
-							-webkit-box-orient: vertical;
-							-webkit-line-clamp: 1;
-							text-align: center;
-							font-size: $font-size-26;
-							line-height: 74rpx;
-							text-align: center;
-						}
-					}
-				}
-			}
-		}
-	}
-	.home-hotmaintab-fixed{
-		width: 100%;
-		height:auto;
-		overflow: hidden;
-		background: #FFFFFF;
-		padding-bottom: 20rpx;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 999;
-		.home-flex-tab {
-			width: 100%;
-			position: relative;
-			transition: opacity .25s;
-			.text-white{
-				color: #666666;
-			}
-			.flex {
-				.basis-xxl {
-					flex-basis: 100%;
-					width: 100%;
-					z-index: 1;
-				}
-				.basis-xxs {
-					flex-basis: 10%;
-					z-index: 1;
-					width: 10%;
-				}
-				.sort-icon {
-					font-size: 55rpx;
-					height: 64rpx;
-					line-height: 64rpx;
-					text-align: center;
-				}
-			}
-		}
-	}
-	.nav{
-		white-space:nowrap;
-	}
-	.nav .cu-item {
-		display: inline-block;
-		margin: 0 5rpx;
-		padding: 0 15rpx;
-	}
-	.nav.z .cu-item.select {
-		font-size: $font-size-28;
-		color: $color-system;
-	}
-	.nav.z .cu-item {
-		height: 80rpx;
-		font-size: $font-size-26;
-		line-height: 80rpx;
-		position: relative;
-
-	}
-	.nav.z .cu-item.select .tab-dot {
-		position: absolute;
-		height: 8rpx;
-		border-radius: 20rpx;
-		bottom: 0;
-		left: 0;
-		right: 0;
-		width: 40rpx;
-		margin: auto;
-	}
-	.bg-white{
-		background-color: $color-system;
-	}
-	::-webkit-scrollbar {
-		display: none;
-	}
-	.flex {
-		display: -webkit-box;
-		display: -webkit-flex;
-		display: flex;
-	}
-</style>

+ 0 - 235
pages/tabBar/category/category.vue

@@ -1,235 +0,0 @@
-<template>
-	<view id="category">
-		<!--顶部搜索导航栏-->
-		<view class="'search-input-fixed">
-			<bt-search :clickPath="clickPath" :toestText='hotSearchText'></bt-search>
-		</view>
-		<view class="category-list">
-			<!-- 左侧分类导航 -->
-			<scroll-view class="left-aside" scroll-y="true" scroll-with-animation :scroll-top="verticalNavTop" style="height:calc(100vh - 102rpx)">
-				<view class="row" v-if="m.smalltypeList.length > 0" v-for="(m, index) in categoryList" :key="index" :class="[index==showCategoryIndex?'on':'']" @tap="showCategory($event,index)" :data-id="index">
-					<view class="text">
-						{{m.name}}
-					</view>
-					<view class="block"></view>
-				</view>
-			</scroll-view>
-			<!--右侧子导航-->
-			<scroll-view  scroll-y="true" class="right-aside">
-				<view class="category" v-if="n.smalltypeList.length > 0" v-for="(n,index) in categoryList" :key="index" v-show="index==showCategoryIndex" >
-					<view class="category-box" v-for="(o,oIndex) in n.smalltypeList" :key="oIndex">
-						<view class="title">{{o.name}}</view>
-						<view class="list" v-if="o.tinytypeList.length > 0">
-							<view class="box" v-for="(pro,proIndex) in o.tinytypeList" :key="proIndex" @click.stop="navToListPage(pro,proIndex)">
-								<image :src="pro.icon"></image>
-								<view class="text">{{pro.name}}</view>
-							</view>
-						</view>
-						<view v-else class="no-data">
-							该栏目暂无分类~
-						</view>
-					</view>
-				</view>
-			</scroll-view>
-		</view>
-	</view>
-</template>
-<script>
-	import btSearch from '@/components/uni-search/bt-search.vue'
-	export default {
-		components: {
-			btSearch
-		},
-		data() {
-			return {
-				headerShow:true,
-				hotSearchText: '搜索商品/供应商/项目仪器',
-				clickPath:'/pages/search/search',
-				showCategoryIndex: 0,
-				//分类列表
-				categoryList: [],
-				search: '',
-				cateTop: {},
-				verticalNavTop: 0,
-			}
-		},
-		onLoad() {
-			this.initData();
-		},
-		methods: {
-			// 数据初始化
-			initData() {
-				this.getProductCate();
-			},
-			// 获取商品分类列表
-			getProductCate () {
-				this.ProductService.GetProductClassify().then(res =>{
-					this.categoryList = res.data
-					// 查询第一个拥有二级菜单的子菜单
-					for (let i = 0; i < this.categoryList.length; i++) {
-						if (this.categoryList[i].smalltypeList.length > 0) {
-							this.showCategoryIndex = i;
-							break;
-						}
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			showCategory(e,index){//分类切换显示
-				this.showCategoryIndex = index;
-				this.verticalNavTop = (e.currentTarget.dataset.id - 1) * 50
-			},
-			toSearch () {// 跳转至搜索详情页
-				uni.navigateTo({
-					url: `/pages/search/search?search=${JSON.stringify(this.search)}`
-				})
-			},
-			navToListPage(pro,index){//分类导航跳转
-				let self = this;
-				uni.setStorage({
-					key: 'commodity_id',
-					data: pro.tinyTypeID,
-					success: function () {
-						self.$api.navToListPage({type:'4',value:pro.name,id:pro.tinyTypeID});
-					}
-				})
-			}
-		}
-	}
-</script>
-<style scoped lang="scss">
-	page {
-		background-color: #fff;
-	}
-	.search-input-fixed{
-		width: 100%;
-		height:auto;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 1000;
-		background: #FFFFFF;
-		border-bottom: 1px solid #F7F7F7;
-	}		
-	#category {
-		/*模块分类*/
-		.category-list{
-			width: 100%;
-			background-color: #fff;
-			display: flex;
-			
-			.left-aside,.right-aside{
-				position: absolute;
-				top: 100rpx;
-				/*  #ifdef  APP-PLUS  */
-				top: calc(100rpx + var(--status-bar-height));
-				/*  #endif  */
-				bottom: 0rpx;
-			}
-			.left-aside{
-				width: 200rpx;
-				left: 0rpx;
-				background-color: #f2f2f2;
-				.row{
-					width: 100%;
-					height: 100rpx;
-					display: flex;
-					align-items: center;
-					position: relative;
-					.text{
-						width: 100%;
-						position: relative;
-						font-size: $font-size-28;
-						display: flex;
-						justify-content: center;
-						color: $text-color;
-						/* transition: transform 0.3s ease;*/
-						transition-property: transform;
-						transition-duration: 0.2s;
-						transition-timing-function: ease;
-					}
-					.block{
-						position: absolute;
-						width: 0rpx;
-						left: 0;
-						/* transition: transform 0.3s ease;*/
-						transition-property: transform;
-						transition-duration: 0.2s;
-						transition-timing-function: ease;
-					}
-					&.on{
-						height: 100rpx;
-						background-color: #fff;
-						.text{
-							font-size: $font-size-28;
-							color: $color-system;
-						}
-						.block{
-							width: 10rpx;
-							height: 60rpx;
-							top: 20rpx;
-							background-color: $color-system;
-							border-radius: 0 15rpx 15rpx 0;
-						}
-					}
-				}
-			}
-			.right-aside{
-				width: 550rpx;
-				left: 200rpx;
-				.category{
-					width: calc(100%);
-					padding: 0 15rpx 20rpx 0;
-					background: #F7F7F7;
-					.category-box{
-						background: #FFFFFF;
-						margin-bottom: 20rpx;
-						.title{
-							padding: 0 24rpx;
-							line-height: 80rpx;
-							height: 80rpx;
-							text-align: left;
-							color: $text-color;
-							font-size: $font-size-26;
-							border-bottom: 1px solid #F7F7F7;
-							font-weight: 600;
-						}
-						.list{
-							margin-top: 24rpx;
-							width: 100%;
-							display: flex;
-							flex-wrap: wrap;
-							.box{
-								width: calc(71.44vw / 3);
-								margin-bottom: 40rpx;
-								display: flex;
-								justify-content: center;
-								align-items: center;
-								flex-wrap: wrap;
-								image{
-									width: 140rpx;
-									height: 140rpx;
-								}
-								.text{
-									margin-top: 8rpx;
-									width: 100%;
-									display: flex;
-									justify-content: center;
-									font-size: $font-size-24;
-								}
-							}
-						}
-						.no-data {
-							text-align: center;
-							margin: 30rpx 0;
-							color: #999999;
-							font-size: 24rpx;
-							line-height: 80rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 5
pages/tabBar/home/index.vue

@@ -44,11 +44,6 @@
 		},
 		data() {
 			return {
-				webviewStyles: {
-					progress: {
-						color: '#FF3333'
-					}
-				},
 				nvabarData: {//顶部自定义导航
 					showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
 					showSearch: 0,

+ 0 - 208
pages/user/invoice/invoice.vue

@@ -1,208 +0,0 @@
-<template>
-	<view class="invoice-form-wrapper">
-		<image class="invoice-pic" :src="invoiceUrl" mode="widthFix"></image>
-		<view class="invoice-form">
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>单位名称:</view>
-				<input class="form-input" maxlength="30" v-model="invoiceData.companyName" name="input" placeholder="请输入单位名称..." placeholder-class="placeholder"/>
-			</view>
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>纳税人识别号:</view>
-				<input class="form-input" v-model="invoiceData.taxId" name="input" placeholder="请输入纳税人识别号..." placeholder-class="placeholder"/>
-			</view>
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>开户银行:</view>
-				<input class="form-input" v-model="invoiceData.bankName" name="input" placeholder="请输入开户银行..." placeholder-class="placeholder"/>
-			</view>
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>银行账号:</view>
-				<input class="form-input" maxlength="23" v-model="invoiceData.bankNum" @input="inputBankNum(invoiceData.bankNum)" name="input" placeholder="请输入银行账号..." placeholder-class="placeholder"/>
-			</view>
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>注册电话:</view>
-				<input class="form-input" maxlength="11" v-model="invoiceData.phoneNum" name="input" placeholder="请输入注册电话..." placeholder-class="placeholder"/>
-			</view>
-			<view class="form-item">
-				<view class="form-title"><text class="asterisk">*</text>注册地址:</view>
-				<textarea :class="{iostextarea: isIos}" cols="20" rows="4" class="form-input form-textarea" v-model="invoiceData.address" name="input" placeholder="请输入注册地址..." placeholder-class="placeholder"/>
-			</view>
-		</view>
-		<view class="submit-btn" @click="submitNow">确认</view>
-	</view>
-</template>
-<script>
-	export default {
-		data() {
-			return {
-				userId: '',
-				invoiceUrl: 'https://img.caimei365.com/group1/M00/03/81/Cmis214BwaCAPYJ3AAYlpcwPaVo973.png',
-				invoiceData:{
-					companyName:'',
-					taxId:'',
-					bankName: '',
-					bankNum:'',
-					address:'',
-					phoneNum: ''
-				},
-				isIos: false
-			}
-		},
-		onLoad() {
-			this.$api.getStorage().then((resolve) =>{
-				this.userId = resolve.userID
-				this.getInvoiceInfo()
-				let phone = wx.getSystemInfoSync()  //调用方法获取机型
-			    if (phone.platform == 'ios') {
-			        this.isIos = true
-			    } else if (phone.platform == 'android') {
-					this.isIos = false
-			    }
-			})
-		},
-		methods: {
-			inputBankNum(val) {
-				if (/\S{5}/.test(val)) {
-					this.invoiceData.bankNum = val.replace(/\s/g, '').replace(/(.{4})/g, "$1 ");
-				}
-			},
-			showMsg(text) {
-				this.$util.msg(text,1000);
-			},
-			checkTaxId(taxId) {
-			    var regArr = [/^[\da-z]{10,15}$/i, /^\d{6}[\da-z]{10,12}$/i, /^[a-z]\d{6}[\da-z]{9,11}$/i, /^[a-z]{2}\d{6}[\da-z]{8,10}$/i, /^\d{14}[\dx][\da-z]{4,5}$/i, /^\d{17}[\dx][\da-z]{1,2}$/i, /^[a-z]\d{14}[\dx][\da-z]{3,4}$/i, /^[a-z]\d{17}[\dx][\da-z]{0,1}$/i, /^[\d]{6}[\da-z]{13,14}$/i],
-			        i, j = regArr.length;
-			    for (let i = 0; i < j; i++) {
-			        if (regArr[i].test(taxId)) {
-			            return true;
-			        }
-			    }
-			    //纳税人识别号格式错误
-			    return false;
-			},
-			submitNow() {
-				let {companyName,taxId,
-					bankName,bankNum,phoneNum,address} = this.invoiceData,
-					commonRegex = this.$api.regexSets();
-				if(companyName.trim() == '') {
-					this.showMsg('请填写单位名称');
-					return false;
-				}
-				if(!commonRegex.companyName.test(companyName.trim())) {
-					this.showMsg('单位名称格式不正确');
-					return false;
-				}
-				if(taxId.trim() == '') {
-					this.showMsg('请填写纳税人识别号');
-					return false;
-				}
-				if(!this.checkTaxId(taxId)) {
-					this.showMsg('纳税人识别号格式不正确');
-					return false;
-				}
-				if(bankName.trim() == '') {
-					this.showMsg('请填写开户银行');
-					return false;
-				}
-				if(!commonRegex.invalidChar.test(bankName)) {
-					this.showMsg('开户银行格式不正确');
-					return false;
-				}
-				if(bankNum.trim() == '') {
-					this.showMsg('请填写银行账号');
-					return false;
-				}
-				if(!commonRegex.bankNum.test(bankNum.replace(/\s*/g,""))) {
-					this.showMsg('银行账号格式不正确');
-					return false;
-				}
-				if(phoneNum.trim() == '') {
-					this.showMsg('请填写注册电话');
-					return false;
-				}
-				if(!commonRegex.phoneAndTelephone.test(phoneNum)) {
-					this.showMsg('注册电话格式不正确');
-					return false;
-				}
-				if(address.trim() == '') {
-					this.showMsg('请填写注册地址');
-					return false;
-				}
-				this.saveInvoiceInfo();
-			},
-			getInvoiceInfo(){
-				this.$api.getStorage().then((resolve) =>{
-					this.ProductService.GetPersonalCenterFindInvoice({userId:resolve.userID}).then(response =>{
-						let resData = response.data
-						this.invoiceData.companyName = resData.invoiceTitle;
-						this.invoiceData.taxId = resData.corporationTaxNum;
-						this.invoiceData.bankName = resData.openBank;
-						this.invoiceData.phoneNum = resData.registeredPhone;
-						this.invoiceData.address = resData.registeredAddress;
-						this.inputBankNum(resData.bankAccountNo);
-					}).catch(error =>{
-						this.$util.msg(error.msg,2000);
-					})
-				})
-			},
-			saveInvoiceInfo() {
-				let invoiceData = this.invoiceData
-				const {companyName:invoiceTitle, taxId:corporationTaxNum, bankName: openBank,
-						bankNum: bankAccountNo, phoneNum:registeredPhone, address:registeredAddress} = invoiceData;
-				let params = {userId: this.userId, invoiceTitle, corporationTaxNum, openBank,
-							bankAccountNo: bankAccountNo.replace(/\s*/g,""), registeredPhone, registeredAddress};
-				this.ProductService.GetPersonalCenterInvoice(params).then(response =>{
-					this.$util.msg('保存成功',2000);
-					setTimeout(()=>{
-						uni.navigateBack({
-							delta: 1
-						})
-					},1100)
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})	
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		.invoice-form-wrapper {
-			display: flex;
-			flex-direction: column;
-		}
-		.invoice-pic {
-			width: 100%;
-		}
-		.form-item {
-			align-items: flex-start;
-		}
-		.form-item:first-child {
-			margin-top: 0rpx;
-		}
-		.invoice-form {
-			background: #fff;
-			padding: 50rpx 48rpx 38rpx 50rpx;
-		}
-		.form-input {
-			height: 45rpx;
-			line-height: 45rpx;
-			flex-grow: 1;
-		}
-		.form-title {
-			height: 45rpx;
-			line-height: 45rpx;
-			white-space: nowrap;
-		}
-		.form-textarea {
-			width: 100%;
-			height: 130rpx;
-		}
-		.place-holder {
-			color: #999;
-		}
-		.iostextarea {
-			margin-top: -10rpx;
-		}
-	}
-</style>

+ 1 - 1
pages/user/order/order-list.vue

@@ -472,7 +472,7 @@
 				})
 			},
 			handlSearchPath(){
-				this.$api.navigateTo('/pages/search/search-order')
+				this.$api.navigateTo('/search/pages/search/search-order')
 			},
 			onShareAppMessage (res){//分享转发
 				this.isShareModal = false

+ 1 - 1
pages/search/search-instrument.vue → search/pages/search/search-instrument.vue

@@ -170,7 +170,7 @@
 		    }
 			return {
 			  title: `做项目找仪器,上采美`,
-			  path: `pages/search/search-instrument?type=share&keyWord=${this.listQuery.keyword}`
+			  path: `search/pages/search-instrument?type=share&keyWord=${this.listQuery.keyword}`
 			}
 		},
 		onShow() {

+ 0 - 0
pages/search/search-order.vue → search/pages/search/search-order.vue


+ 0 - 0
pages/search/search-second.vue → search/pages/search/search-second.vue


+ 0 - 0
pages/search/search-supplier.vue → search/pages/search/search-supplier.vue


+ 3 - 3
pages/search/search.vue → search/pages/search/search.vue

@@ -273,11 +273,11 @@
 							break;
 						case 2:
 							this.setSearchHistoryAdd()
-							this.$api.navigateTo(`/pages/search/search-supplier?keyword=${this.listQuery.keyword}`);
+							this.$api.navigateTo(`/search/pages/search/search-supplier?keyword=${this.listQuery.keyword}`);
 							break;
 						case 3:
 							this.setSearchHistoryAdd()
-							this.$api.navigateTo(`/pages/search/search-instrument?keyword=${this.listQuery.keyword}`);
+							this.$api.navigateTo(`/search/pages/search/search-instrument?keyword=${this.listQuery.keyword}`);
 							break;
 					}
 				}
@@ -457,7 +457,7 @@
 		    }
 			return {
 			  title: `点击查看“${this.listQuery.keyword}”相关的商品`,
-			  path: `pages/search/search?type=share&keyWord=${this.listQuery.keyword}`
+			  path: `search/pages/search?type=share&keyWord=${this.listQuery.keyword}`
 			}
 		},
 		onShow() {

+ 2 - 2
second/pages/product/product-list.vue

@@ -98,7 +98,7 @@
 		},
 		data(){
 			return{
-				clickPath:'/pages/search/search-second',
+				clickPath:'/search/pages/search/search-second',
 				 isShowClose:false,
 				 isModallayer:false,
 				 currentId:1,
@@ -299,7 +299,7 @@
 		    }
 			return {
 			  title: `欢迎来到采美二手市场~`,
-			  path: `pages/search/search-instrument?keyWord=${this.listQuery.keyword}`
+			  path: `search/pages/search-instrument?keyWord=${this.listQuery.keyword}`
 			}
 		},	
 	}

+ 2 - 2
seller/pages/index/index.vue

@@ -27,12 +27,12 @@
 </template>
 
 <script>
-	// import sellerHome from '@/components/cm-module/cm-seller/home.vue'
+	import sellerHome from '@/components/cm-module/cm-seller/home.vue'
 	import sellerUser from '@/components/cm-module/cm-seller/user.vue'
 	import sellerCategory from '@/components/cm-module/cm-seller/category.vue'
 	export default {
 		components: {
-			// sellerHome,//采美采购商城 0
+			sellerHome,//采美采购商城 0
 			sellerUser,//账户中心     1
 			sellerCategory,//商品分类 2
 		},

+ 0 - 632
seller/pages/search/search.vue

@@ -1,632 +0,0 @@
-<template>
-	<view class="search-container">
-		<view class="search-main">
-			<view class="search-input">
-				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<input maxlength="20" :focus="isFocus" type="text" value="" confirm-type="search" @focus="onFocus" @input="onShowClose" @confirm="subMitSearch()" placeholder="请输入商品关键词" v-model.trim="searchInputVal"/>
-				<text class="iconfont icon-shanchu1" v-if="isShowClose" @click.stop="delInputText()"></text>
-			</view>
-			<view class="search-btn" @click="subMitSearch()">搜索</view>
-		</view>
-		<view class="search-container-history" v-if="!isShowWrapper">
-			<view :class="'s-' + themeClass" v-if="serachRecordList.length>0">
-				<view class="header">
-					搜索历史<text class="iconfont icon-shanchu" @click="confirmDetele"></text>
-				</view>
-				<view class="list">
-					<view v-for="(item,index) in serachRecordList" :key="index" @click="keywordsClick(item.searchWord)">{{item.searchWord}}</view>
-				</view>
-			</view>
-		</view>
-		<view v-else class="commodity-list-wrapper"  :style="{'overflow':'auto','height':(listData.length>4? windowHeight + 'px' : 'auto')}">
-			<scroll-view :style="{'height':(listData.length>4? scrollHeight+'px' : 'auto')}" @scrolltolower="scrolltolower" scroll-y v-if="!showEmpty">
-				<view v-for="(item,index) in listData" :key="index" :id="item.id" class="all-type-list-content commodity-list" @click.stop="navToDetailPage(item.p_id)">
-					<image mode='widthFix' :src="item.p_image"  class="list-img" alt="list-img"></image>
-					<view class="list-details-info">
-						<view class="list-details-title">{{isInterceptHtmlFn(item.p_name)}}</view>
-						<text class="list-details-specs">规格:{{item.p_unit}}</text>
-						<view class="list-details-specs" v-if="item.p_code!=''&&item.p_code!=null">
-							<view>商品编码:{{item.p_code}}</view>
-						</view>
-						<view class="list-details-price">
-							<view v-if="hasLogin"class="list-price">
-								<view v-if="userIdentity == 1">
-									<text v-if="priceLoading" class="price-larger small">正在获取价格...</text>
-									<text v-else>¥<text class="price-larger">{{item.price?item.price :'0.00'}}</text></text>
-								</view>	
-								<view v-if="userIdentity == 4">
-									<view class="price-larger" v-if="item.p_price_flag == '1'">
-										<text class="txt">未公开价格</text>
-									</view>
-									<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-									<view v-else>
-										<view class="price-larger" v-if="item.p_price_flag == '2'">
-											<text class="txt">价格仅会员可见</text>
-											<text class="btn" @click.stop="this.$api.navigateTo(`/pages/login/apply?clubStatus=${clubStatus}`)">去升级</text>
-										</view>
-										<text v-else>¥<text class="price-larger">{{item.price ?item.price :'0.00'}}</text></text>
-									</view>
-								</view>
-								<view v-if="userIdentity == 2">
-									<view class="price-larger" v-if="item.p_price_flag == '1'">
-										<text class="txt">未公开价格</text>
-									</view>
-									<text v-else-if="priceLoading" class="price-larger small">正在获取价格...</text>
-									<text v-else>¥<text class="price-larger">{{item.price ? item.price :'0.00'}}</text></text>
-								</view>
-							</view>	
-							<view  v-else class="list-login-now">
-								<text class="p-no">价格:</text>
-								<uni-stars :stars="parseInt(item.p_price_grade)" :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/8D/Cmis215XHXWAHCoqAAELHadZ9Xg365.png"></image>
-				<text class="error-text">抱歉,没有相关商品!</text>
-			</view>
-		</view>
-		<!-- 透明模态层 -->
-		<modal-layer v-if='isModallayer'></modal-layer>
-	</view>
-</template>
-
-<script>
-	import { mapState,mapMutations } from 'vuex'
-	import modalLayer from "@/components/modal-layer"
-	import uniStars from '@/components/uni-stars/uni-stars.vue'
-	import authorize from '@/common/config/authorize.js'
-	
-	export default {
-		components: {
-			modalLayer,
-			uniStars
-		},
-		data() {
-			return {
-				userID:'',
-				themeClass: 'block',
-				searchInputVal:'',	//搜索关键词
-				userIdentity:'',	
-				identity:2,
-				isShowClose:false,	//是否显示清空输入框图标
-				isSearchHistory:false,//是都显示搜索历史
-				serachRecordList:[],//历史搜索记录
-				isShowWrapper:false,
-				isModallayer:false,
-				isFocus:false,
-				priceLoading:true,
-				windowHeight: '',
-				showEmpty: false,
-				scrollHeight: '',
-				listData: [],
-				productIds:'',//查询价格的商品ID
-				showLoading: false,
-				loadingNow: true,
-				loadingText: '上拉加载更多',
-				pageSize: 20,
-				pageNum: 1,
-				hasNextPage: false,
-				totalPage: 1,
-				pullFlag: true,
-			}
-		},
-		onLoad() {
-			this.isFocus = true
-			this.initGetSerachRecord()			
-		},
-		computed: {
-			...mapState(['hasLogin','userInfo'])
-		},
-		methods:{
-			initGetSerachRecord(){
-				this.$api.getStorage().then((resolve) =>{
-					this.userID = resolve.userID ? resolve.userID : '';
-					this.userIdentity = resolve.userIdentity ? resolve.userIdentity : '';
-					if(this.userIdentity == 1){
-						this.identity = 1
-					}else{
-						this.identity = 2
-					}
-				    this.ProductService.GetProductSearchHistory({userId:this.userID}).then(response =>{
-						if(response.code == 0){
-							this.serachRecordList = response.data
-						}
-				    })
-				})	
-			},
-			subMitSearch() {
-				if (this.searchInputVal == '') {
-					this.$util.msg('请输入商品关键词',2000);
-				}else{
-					this.listData =[]
-					this.setSearchHistoryAdd()
-					this.getListFromServer()
-					this.isFocus = false
-				}
-			},
-			scrolltolower() {
-				if(this.totalPage>this.listData.length && this.pullFlag) {
-					this.getListFromServer(true);
-				}
-			},
-			getListFromServer(loadMore) {
-				this.showLoading = true;
-				this.loadingNow = true;
-				this.loadingText = '加载中';
-				this.showEmpty = 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;
-					// console.log(resData)
-					if(resList && resList.length > 0){
-						this.totalPage = resData.total;
-						this.showEmpty = false;
-						if(loadMore) {
-							this.listData = [...this.listData,...resList];
-							this.setProductPrice()
-						} else {
-							this.listData = [...resList];
-							this.setProductPrice()
-						}
-						// 防上拉暴滑
-						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.showEmpty = true;
-						}
-					}
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			setSearchHistoryAdd(){//添加搜索记录
-				if (!this.hasLogin) {return false;}
-				this.ProductService.GetAddProductSearchHistory({userId: this.userID,keyword:this.searchInputVal}).then(response =>{
-					//此为每次搜索同时添加用户的搜索记录
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000);
-				})
-			},
-			setProductPrice(){//获取价格
-				if (!this.hasLogin) {return false;}
-				let productIdArr = [];
-				this.listData.map(item=>{// 0公开价格 1不公开价格 2仅对会员机构公开
-					productIdArr.push(item.p_id)
-				})
-				this.productIds = productIdArr.join(",");
-				this.ProductService.querySearchProductPrice({userId: this.userID,productIds:this.productIds}).then(response =>{
-					if (response.data) {
-						let priceList = response.data
-						this.listData.map(item=>{
-							for (let i = 0; i < priceList.length; i++) {
-								let priceObj ={
-										actStatus:priceList[i].actStatus,
-										costCheckFlag:priceList[i].costCheckFlag,
-										costPrice:priceList[i].costPrice,
-										costProportional:priceList[i].costProportional,
-										ladderPriceFlag:priceList[i].ladderPriceFlag,
-										price:Number(priceList[i].price).toFixed(2),
-										minBuyNumber:priceList[i].minBuyNumber
-								}
-								if( item.p_id == priceList[i].productId ){
-									Object.assign(item,priceObj)
-								}
-							}
-						});
-					}
-					this.priceLoading = false;
-				}).catch(error =>{
-					this.$util.msg(error.msg,2000)
-				})
-			},
-			onShowClose () {//输入框输入时触发
-				this.inputEmpty(this.searchInputVal)
-			},
-			onFocus () { //输入框获取焦点时触发
-				this.inputEmpty(this.searchInputVal)
-				this.initGetSerachRecord()
-			},
-			delInputText () { //清除输入框内容
-				this.searchInputVal = ''
-				this.isShowClose = false
-				this.isShowWrapper = false
-				this.inputEmpty(this.searchInputVal)
-				this.initGetSerachRecord()
-			},
-			keywordsClick (item) {//关键词搜索与历史搜索
-				this.searchInputVal = item;
-				this.isShowClose = true;
-				this.subMitSearch();
-			},
-			confirmDetele() {//清空历史记录
-				this.$util.modal('提示','确定删除历史记录?','确定','取消',true,() =>{
-					this.ProductService.GetDeleteProductSearchHistory({userId:this.userID}).then(response =>{
-						this.$util.msg('删除成功',2000,true,'success')
-						this.serachRecordList=[];
-					}).catch(error =>{
-						this.$util.msg(error.msg,2000)
-					})
-				})
-			},
-			inputEmpty(val){
-				this.isShowWrapper = false
-				if(val != ''){
-					this.isShowClose = true
-					this.isFocus = true
-				}else{					
-					this.isShowClose = false
-					this.isFocus = true
-				}
-			},
-			isInterceptHtmlFn(text){
-				let name = this.$reg.interceptHtmlFn(text)
-				return name
-			},
-			navToDetailPage(id) {
-				this.isModallayer = true;
-				this.$api.navigateTo(`/pages/goods/product?id=${id}`);
-				this.isModallayer = false;
-			},
-			setScrollHeight() {
-				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-				this.windowHeight = windowHeight - 1;
-				this.scrollHeight = windowHeight - 1;
-			},
-			toLoginPage() {
-				let searchLoginType = 'search'
-				uni.navigateTo({
-					url:`/pages/login/login?type=${searchLoginType}`
-				})
-			}
-		},
-		onShow() {
-			this.setScrollHeight();
-		}
-	}
-</script>
-
-<style lang="scss">
-	@import "@/uni.scss";
-	page{
-		background-color: #F7F7F7 !important;
-	}
-	.search-main{
-		width: 702rpx;
-		height: 70rpx;
-		padding: 12rpx 24rpx;
-		border-bottom: 1px solid #F0F0F0;
-		position: fixed;
-		top: 0;
-		left: 0;
-		background: #FFFFFF;
-		z-index: 1001;
-		.search-input{
-			width: 448rpx;
-			height: 70rpx;
-			padding: 0 68rpx;
-			line-height: 70rpx;
-			border-radius: 40rpx;
-			position: relative;
-			background: #F0F0F0;
-			float: left;
-			.icon-iconfonticonfontsousuo1{
-				display: block;
-				width: 68rpx;
-				font-size: 36rpx;
-				color: #8A8A8A;
-				position: absolute;
-				left: 24rpx;
-				z-index: 10;
-			}
-			.icon-shanchu1{
-				display: block;
-				width: 68rpx;
-				font-size: 36rpx;
-				text-align: center;
-				color: #999;
-				position: absolute;
-				right: 0;
-				top: 0;
-				z-index: 60;
-			}
-			input{
-				width: 448rpx;
-				height: 70rpx;
-				background-color: #F0F0F0;
-				font-size: 26rpx;
-			}
-		}
-		.search-btn{
-			width: 118rpx;
-			height: 70rpx;
-			line-height: 70rpx;
-			color: $color-system;
-			font-size: 30rpx;
-			text-align: center;
-			float: left;
-		}
-		.voice-icon{
-			width: 36rpx;
-			height: 36rpx;
-			padding: 16rpx 20rpx 16rpx 0;
-			position: absolute;
-			left: 16rpx;
-			top: 4rpx;
-			z-index: 10;
-		}
-		
-	}
-	.search-container{
-		padding-top: 106rpx;
-	}
-	.s-block{
-		background: #FFFFFF;
-		.header{
-			font-size: 32rpx;
-			padding:40rpx 24rpx 22rpx 24rpx;
-			line-height: 42rpx;
-			font-size: 30rpx;
-			font-weight: bold;
-			position: relative;
-			.icon-shanchu{
-				font-size: 36rpx;
-				color: #333333;
-				float: right;
-				padding: 0 10rpx;
-				z-index: 10;
-				font-weight: normal;
-			}
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding-bottom: 40rpx;
-			view{
-				color: #8A8A8A;
-				font-size: 24rpx;
-				box-sizing: border-box;
-				text-align: center;
-				height: 48rpx;
-				line-height: 48rpx;
-				border-radius: 24rpx;
-				margin:12rpx;
-				padding:.0 30rpx;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
-				background-color: #F3F3F3;
-			}
-		}
-	}
-	.s-circle{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-			border-bottom: 2rpx solid #F9F9F9;
-			position: relative;
-			image{
-				width: 36rpx;
-				height: 36rpx;
-				padding: 10rpx;
-				position: absolute;
-				right: 40rpx;
-				top: 24rpx;
-			}
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding: 0 30rpx 20rpx;
-			view{
-				padding: 8rpx 30rpx;
-				margin: 20rpx 30rpx 0 0;
-				font-size: 28rpx;
-				color: #8A8A8A;
-				background-color: #F7F7F7;
-				box-sizing: border-box;
-				text-align: center;
-				border-radius: 20rpx;
-			}
-		}
-	}
-	.wanted-block{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			view{
-				width: 50%;
-				color: #8A8A8A;
-				font-size: 28rpx;
-				box-sizing: border-box;
-				text-align: center;
-				padding: 20rpx 0;
-				border-top: 2rpx solid #FFF;
-				border-left: 2rpx solid #FFF;
-				background-color: #F7F7F7;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
-			}
-		}
-	}
-	.wanted-circle{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding: 0 30rpx 20rpx;
-			view{
-				padding: 8rpx 30rpx;
-				margin: 20rpx 30rpx 0 0;
-				font-size: 28rpx;
-				color: #8A8A8A;
-				background-color: #F7F7F7;
-				box-sizing: border-box;
-				text-align: center;
-				border-radius: 20rpx;
-			}
-		}
-	}
-	.commodity-list-wrapper {
-		scroll-view {
-			height: 100%;
-			overflow: scroll;
-		}	
-		.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%;
-		flex-direction: row;
-		justify-content: space-between;
-		position: absolute;
-		bottom: 0;
-		right: 0;
-		.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;
-			position: absolute;
-			bottom: 0;
-			.p-no{
-				float: left;
-				font-size: $font-size-24;
-				color: $color-system;
-				margin-right: 10rpx;
-			}
-		}
-		.login-now {
-			padding: 10rpx 10rpx 10rpx 0;
-		}
-		.list-price {
-			color: #FF2A2A;
-			.price-larger {
-				width: 100%;
-				font-size: 32rpx;
-				&.small{
-					font-size: $font-size-24;
-				}
-				.txt{
-					font-size: $font-size-24;
-					display: inline-block;
-					line-height: 44rpx;
-					text-align: left;
-					float: left;
-				}
-				.btn{
-					width: 112rpx;
-					height: 44rpx;
-					display: inline-block;
-					float: right;
-					background: $btn-confirm;
-					line-height: 44rpx;
-					text-align: center;
-					color: #FFFFFF;
-					font-size: $font-size-24;
-					border-radius: 22rpx;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 12
static/package.json

@@ -1,12 +0,0 @@
-{
-  "name": "static",
-  "version": "1.0.0",
-  "description": "",
-  "main": "index.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
-  },
-  "keywords": [],
-  "author": "",
-  "license": "ISC"
-}

+ 2 - 2
supplier/pages/index/index.vue

@@ -27,12 +27,12 @@
 </template>
 
 <script>
-	// import supplierHome from '@/components/cm-module/supplier/home.vue'
+	import supplierHome from '@/components/cm-module/supplier/home.vue'
 	import supplierUser from '@/components/cm-module/supplier/user.vue'
 	import supplierCategory from '@/components/cm-module/supplier/category.vue'
 	export default {
 		components: {
-			// supplierHome,//采美采购商城 0
+			supplierHome,//采美采购商城 0
 			supplierUser,//账户中心     1
 			supplierCategory,//商品分类 2
 		},

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä